From 80808c2299e5979f116b49197ade52fb6f0e3809 Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:09:16 -0400 Subject: [PATCH 001/202] Add tests for the incorrect-shift detector --- .../0.4.25/shift_parameter_mixup.sol | 8 ++ ..._mixup.sol.0.4.25.ShiftParameterMixup.json | 3 + .../0.5.16/shift_parameter_mixup.sol | 8 ++ ..._mixup.sol.0.5.16.ShiftParameterMixup.json | 3 + .../0.6.11/shift_parameter_mixup.sol | 8 ++ ..._mixup.sol.0.6.11.ShiftParameterMixup.json | 135 ++++++++++++++++++ .../0.7.6/shift_parameter_mixup.sol | 8 ++ ...r_mixup.sol.0.7.6.ShiftParameterMixup.json | 135 ++++++++++++++++++ tests/test_detectors.py | 20 +++ 9 files changed, 328 insertions(+) create mode 100644 tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol create mode 100644 tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol.0.4.25.ShiftParameterMixup.json create mode 100644 tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol create mode 100644 tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol.0.5.16.ShiftParameterMixup.json create mode 100644 tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol create mode 100644 tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json create mode 100644 tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol create mode 100644 tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json diff --git a/tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol b/tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol new file mode 100644 index 000000000..89a9210ad --- /dev/null +++ b/tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol @@ -0,0 +1,8 @@ +contract C { + + function f() internal returns (uint a) { + assembly { + a := shr(a, 8) + } + } +} \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol.0.4.25.ShiftParameterMixup.json b/tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol.0.4.25.ShiftParameterMixup.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/incorrect-shift/0.4.25/shift_parameter_mixup.sol.0.4.25.ShiftParameterMixup.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol b/tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol new file mode 100644 index 000000000..89a9210ad --- /dev/null +++ b/tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol @@ -0,0 +1,8 @@ +contract C { + + function f() internal returns (uint a) { + assembly { + a := shr(a, 8) + } + } +} \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol.0.5.16.ShiftParameterMixup.json b/tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol.0.5.16.ShiftParameterMixup.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/incorrect-shift/0.5.16/shift_parameter_mixup.sol.0.5.16.ShiftParameterMixup.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol b/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol new file mode 100644 index 000000000..89a9210ad --- /dev/null +++ b/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol @@ -0,0 +1,8 @@ +contract C { + + function f() internal returns (uint a) { + assembly { + a := shr(a, 8) + } + } +} \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json b/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json new file mode 100644 index 000000000..e6a1c784f --- /dev/null +++ b/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json @@ -0,0 +1,135 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 19, + "length": 106, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 128, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "f()" + } + }, + { + "type": "node", + "name": "a = 8 >> a", + "source_mapping": { + "start": 93, + "length": 14, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 5 + ], + "starting_column": 13, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 19, + "length": 106, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 128, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "f()" + } + } + } + } + ], + "description": "C.f() (tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol#3-7) contains an incorrect shift operation: a = 8 >> a (tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol#5)\n", + "markdown": "[C.f()](tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol#L3-L7) contains an incorrect shift operation: [a = 8 >> a](tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol#L5)\n", + "first_markdown_element": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol#L3-L7", + "id": "eefda017d078fd6c0cdb19b471ac8d0a96b2b3dba9bac04ac194270820a77301", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol b/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol new file mode 100644 index 000000000..89a9210ad --- /dev/null +++ b/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol @@ -0,0 +1,8 @@ +contract C { + + function f() internal returns (uint a) { + assembly { + a := shr(a, 8) + } + } +} \ No newline at end of file diff --git a/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json b/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json new file mode 100644 index 000000000..5960eb824 --- /dev/null +++ b/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json @@ -0,0 +1,135 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 19, + "length": 106, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 128, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "f()" + } + }, + { + "type": "node", + "name": "a = 8 >> a", + "source_mapping": { + "start": 93, + "length": 14, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 5 + ], + "starting_column": 13, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 19, + "length": 106, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 128, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "f()" + } + } + } + } + ], + "description": "C.f() (tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol#3-7) contains an incorrect shift operation: a = 8 >> a (tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol#5)\n", + "markdown": "[C.f()](tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol#L3-L7) contains an incorrect shift operation: [a = 8 >> a](tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol#L5)\n", + "first_markdown_element": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol#L3-L7", + "id": "8aa2292fd8d53a23f05aed92384dde452ea1f879d2422c4726b75a79a5aa6f81", + "check": "incorrect-shift", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index d2822b80f..95ff2c797 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1144,6 +1144,26 @@ ALL_TESTS = [ "write-after-write.sol", "0.8.0", ), + Test( + all_detectors.ShiftParameterMixup, + "shift_parameter_mixup.sol", + "0.4.25", + ), + Test( + all_detectors.ShiftParameterMixup, + "shift_parameter_mixup.sol", + "0.5.16", + ), + Test( + all_detectors.ShiftParameterMixup, + "shift_parameter_mixup.sol", + "0.6.11", + ), + Test( + all_detectors.ShiftParameterMixup, + "shift_parameter_mixup.sol", + "0.7.6", + ), ] GENERIC_PATH = "/GENERIC_PATH" From f894f7979e1b1f39a66ef739efbea3865398812a Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:15:45 -0400 Subject: [PATCH 002/202] Add tests for the missing-inheritance detector --- .../0.4.25/unimplemented_interface.sol | 9 +++ ...terface.sol.0.4.25.MissingInheritance.json | 58 +++++++++++++++++++ .../0.5.16/unimplemented_interface.sol | 9 +++ ...terface.sol.0.5.16.MissingInheritance.json | 58 +++++++++++++++++++ .../0.6.11/unimplemented_interface.sol | 9 +++ ...terface.sol.0.6.11.MissingInheritance.json | 58 +++++++++++++++++++ .../0.7.6/unimplemented_interface.sol | 9 +++ ...nterface.sol.0.7.6.MissingInheritance.json | 58 +++++++++++++++++++ tests/test_detectors.py | 20 +++++++ 9 files changed, 288 insertions(+) create mode 100644 tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol create mode 100644 tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json create mode 100644 tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol create mode 100644 tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json create mode 100644 tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol create mode 100644 tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json create mode 100644 tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol create mode 100644 tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json diff --git a/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol b/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol new file mode 100644 index 000000000..58149d329 --- /dev/null +++ b/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol @@ -0,0 +1,9 @@ +interface ISomething { + function f1() external returns(uint); +} + +contract Something { + function f1() external returns(uint){ + return 42; + } +} \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json b/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json new file mode 100644 index 000000000..bb52cfa9b --- /dev/null +++ b/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json @@ -0,0 +1,58 @@ +[ + [ + { + "elements": [ + { + "type": "contract", + "name": "Something", + "source_mapping": { + "start": 68, + "length": 89, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + { + "type": "contract", + "name": "ISomething", + "source_mapping": { + "start": 0, + "length": 66, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Something (tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol#5-10) should inherit from ISomething (tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol#1-3)\n", + "markdown": "[Something](tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol#L5-L10) should inherit from [ISomething](tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol#L1-L3)\n", + "first_markdown_element": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol#L5-L10", + "id": "58962dc72a6c49524a027e8e1615ab92be30f1a0f5ef0eb4a029204687159649", + "check": "missing-inheritance", + "impact": "Informational", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol b/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol new file mode 100644 index 000000000..58149d329 --- /dev/null +++ b/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol @@ -0,0 +1,9 @@ +interface ISomething { + function f1() external returns(uint); +} + +contract Something { + function f1() external returns(uint){ + return 42; + } +} \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json b/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json new file mode 100644 index 000000000..4dc27f5b5 --- /dev/null +++ b/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json @@ -0,0 +1,58 @@ +[ + [ + { + "elements": [ + { + "type": "contract", + "name": "Something", + "source_mapping": { + "start": 68, + "length": 89, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + { + "type": "contract", + "name": "ISomething", + "source_mapping": { + "start": 0, + "length": 66, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Something (tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol#5-10) should inherit from ISomething (tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol#1-3)\n", + "markdown": "[Something](tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol#L5-L10) should inherit from [ISomething](tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol#L1-L3)\n", + "first_markdown_element": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol#L5-L10", + "id": "58962dc72a6c49524a027e8e1615ab92be30f1a0f5ef0eb4a029204687159649", + "check": "missing-inheritance", + "impact": "Informational", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol b/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol new file mode 100644 index 000000000..58149d329 --- /dev/null +++ b/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol @@ -0,0 +1,9 @@ +interface ISomething { + function f1() external returns(uint); +} + +contract Something { + function f1() external returns(uint){ + return 42; + } +} \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json b/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json new file mode 100644 index 000000000..800114e0c --- /dev/null +++ b/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json @@ -0,0 +1,58 @@ +[ + [ + { + "elements": [ + { + "type": "contract", + "name": "Something", + "source_mapping": { + "start": 68, + "length": 89, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + { + "type": "contract", + "name": "ISomething", + "source_mapping": { + "start": 0, + "length": 66, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Something (tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol#5-10) should inherit from ISomething (tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol#1-3)\n", + "markdown": "[Something](tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol#L5-L10) should inherit from [ISomething](tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol#L1-L3)\n", + "first_markdown_element": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol#L5-L10", + "id": "58962dc72a6c49524a027e8e1615ab92be30f1a0f5ef0eb4a029204687159649", + "check": "missing-inheritance", + "impact": "Informational", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol b/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol new file mode 100644 index 000000000..58149d329 --- /dev/null +++ b/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol @@ -0,0 +1,9 @@ +interface ISomething { + function f1() external returns(uint); +} + +contract Something { + function f1() external returns(uint){ + return 42; + } +} \ No newline at end of file diff --git a/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json b/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json new file mode 100644 index 000000000..7746c4a37 --- /dev/null +++ b/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json @@ -0,0 +1,58 @@ +[ + [ + { + "elements": [ + { + "type": "contract", + "name": "Something", + "source_mapping": { + "start": 68, + "length": 89, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + { + "type": "contract", + "name": "ISomething", + "source_mapping": { + "start": 0, + "length": 66, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3 + ], + "starting_column": 1, + "ending_column": 2 + } + } + ], + "description": "Something (tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol#5-10) should inherit from ISomething (tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol#1-3)\n", + "markdown": "[Something](tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol#L5-L10) should inherit from [ISomething](tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol#L1-L3)\n", + "first_markdown_element": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol#L5-L10", + "id": "58962dc72a6c49524a027e8e1615ab92be30f1a0f5ef0eb4a029204687159649", + "check": "missing-inheritance", + "impact": "Informational", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 95ff2c797..13f0885b8 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1164,6 +1164,26 @@ ALL_TESTS = [ "shift_parameter_mixup.sol", "0.7.6", ), + Test( + all_detectors.MissingInheritance, + "unimplemented_interface.sol", + "0.4.25", + ), + Test( + all_detectors.MissingInheritance, + "unimplemented_interface.sol", + "0.5.16", + ), + Test( + all_detectors.MissingInheritance, + "unimplemented_interface.sol", + "0.6.11", + ), + Test( + all_detectors.MissingInheritance, + "unimplemented_interface.sol", + "0.7.6", + ), ] GENERIC_PATH = "/GENERIC_PATH" From eb8f774ea55e7ae0fbad14b02035640d655f4b1c Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:16:43 -0400 Subject: [PATCH 003/202] Add test for the enum-conversion detector --- .../enum-conversion/0.4.2/enum_conversion.sol | 9 + ...m_conversion.sol.0.4.2.EnumConversion.json | 222 ++++++++++++++++++ tests/test_detectors.py | 5 + 3 files changed, 236 insertions(+) create mode 100644 tests/detectors/enum-conversion/0.4.2/enum_conversion.sol create mode 100644 tests/detectors/enum-conversion/0.4.2/enum_conversion.sol.0.4.2.EnumConversion.json diff --git a/tests/detectors/enum-conversion/0.4.2/enum_conversion.sol b/tests/detectors/enum-conversion/0.4.2/enum_conversion.sol new file mode 100644 index 000000000..7a72084eb --- /dev/null +++ b/tests/detectors/enum-conversion/0.4.2/enum_conversion.sol @@ -0,0 +1,9 @@ +pragma solidity 0.4.2; + contract Test{ + + enum E{a} + + function bug(uint a) public returns(E){ + return E(a); + } +} \ No newline at end of file diff --git a/tests/detectors/enum-conversion/0.4.2/enum_conversion.sol.0.4.2.EnumConversion.json b/tests/detectors/enum-conversion/0.4.2/enum_conversion.sol.0.4.2.EnumConversion.json new file mode 100644 index 000000000..8eab7b7df --- /dev/null +++ b/tests/detectors/enum-conversion/0.4.2/enum_conversion.sol.0.4.2.EnumConversion.json @@ -0,0 +1,222 @@ +[ + [ + { + "elements": [ + { + "type": "node", + "name": "Test.E(a)", + "source_mapping": { + "start": 118, + "length": 11, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 7 + ], + "starting_column": 9, + "ending_column": 20 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bug", + "source_mapping": { + "start": 70, + "length": 69, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 27, + "length": 114, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 5, + "ending_column": 0 + } + }, + "signature": "bug(uint256)" + } + } + } + }, + { + "type": "variable", + "name": "a", + "source_mapping": { + "start": 83, + "length": 6, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 6 + ], + "starting_column": 18, + "ending_column": 24 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bug", + "source_mapping": { + "start": 70, + "length": 69, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 27, + "length": 114, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 5, + "ending_column": 0 + } + }, + "signature": "bug(uint256)" + } + } + } + }, + { + "type": "node", + "name": "Test.E(a)", + "source_mapping": { + "start": 118, + "length": 11, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 7 + ], + "starting_column": 9, + "ending_column": 20 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bug", + "source_mapping": { + "start": 70, + "length": 69, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 27, + "length": 114, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "starting_column": 5, + "ending_column": 0 + } + }, + "signature": "bug(uint256)" + } + } + } + } + ], + "description": "Test.E(a) (tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#7) has a dangerous enum conversion\n\t- Variable: Test.bug(uint256).a (tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#6) of type: uint256\n\t- Enum conversion: Test.E(a) (tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#7)\n", + "markdown": "[Test.E(a)](tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#L7) has a dangerous enum conversion\n\t- Variable: [Test.bug(uint256).a](tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#L6) of type: uint256\n\t- Enum conversion: [Test.E(a)](tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#L7)\n", + "first_markdown_element": "tests/detectors/enum-conversion/0.4.2/enum_conversion.sol#L7", + "id": "f16bcdd6943fe3ff7ed6cc9b729ed5f95f61375509c7cce6646efa44c69860b7", + "check": "enum-conversion", + "impact": "Medium", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 13f0885b8..82461de98 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1184,6 +1184,11 @@ ALL_TESTS = [ "unimplemented_interface.sol", "0.7.6", ), + Test( + all_detectors.EnumConversion, + "enum_conversion.sol", + "0.4.2", + ), ] GENERIC_PATH = "/GENERIC_PATH" From c620f2871f24761ab04c5ac130de9a4c3d368553 Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:17:35 -0400 Subject: [PATCH 004/202] Add test for the multiple-constructors detector --- .../0.4.22/multiple_constructor_schemes.sol | 13 ++ ...sol.0.4.22.MultipleConstructorSchemes.json | 154 ++++++++++++++++++ tests/test_detectors.py | 5 + 3 files changed, 172 insertions(+) create mode 100644 tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol create mode 100644 tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json diff --git a/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol b/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol new file mode 100644 index 000000000..3703d71e5 --- /dev/null +++ b/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol @@ -0,0 +1,13 @@ +contract A { + uint x; + constructor() public { + x = 0; + } + function A() public { + x = 1; + } + + function test() public returns(uint) { + return x; + } +} \ No newline at end of file diff --git a/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json b/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json new file mode 100644 index 000000000..cf72d53fb --- /dev/null +++ b/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json @@ -0,0 +1,154 @@ +[ + [ + { + "elements": [ + { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 193, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + { + "type": "function", + "name": "constructor", + "source_mapping": { + "start": 29, + "length": 43, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 193, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "constructor()" + } + }, + { + "type": "function", + "name": "A", + "source_mapping": { + "start": 77, + "length": 42, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 193, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "A()" + } + } + ], + "description": "A (tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#1-14) contains multiple constructors in the same contract:\n\t- A.constructor() (tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#3-5)\n\t- A.A() (tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#6-8)\n", + "markdown": "[A](tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#L1-L14) contains multiple constructors in the same contract:\n\t- [A.constructor()](tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#L3-L5)\n\t- [A.A()](tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#L6-L8)\n", + "first_markdown_element": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol#L1-L14", + "id": "704cdb1c05e919913c22befaf077b9585bc75e31b5033fa46c930ad82dc6852e", + "check": "multiple-constructors", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 82461de98..8719a899c 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1189,6 +1189,11 @@ ALL_TESTS = [ "enum_conversion.sol", "0.4.2", ), + Test( + all_detectors.MultipleConstructorSchemes, + "multiple_constructor_schemes.sol", + "0.4.22", + ), ] GENERIC_PATH = "/GENERIC_PATH" From 327a95246c35b300c2e25d22817d52a9ce339357 Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:18:21 -0400 Subject: [PATCH 005/202] Add test for the deprecated-standards detector --- .../0.4.25/deprecated_calls.sol | 10 + ..._calls.sol.0.4.25.DeprecatedStandards.json | 176 ++++++++++++++++++ tests/test_detectors.py | 5 + 3 files changed, 191 insertions(+) create mode 100644 tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol create mode 100644 tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json diff --git a/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol b/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol new file mode 100644 index 000000000..57ed13641 --- /dev/null +++ b/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol @@ -0,0 +1,10 @@ +contract Test { + + function functionWithDeprecatedThrow() public constant { + // Deprecated: Change msg.gas -> gasleft() + if(msg.gas == msg.value) { + // Deprecated: Change throw -> revert() + throw; + } + } +} \ No newline at end of file diff --git a/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json b/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json new file mode 100644 index 000000000..ad121123d --- /dev/null +++ b/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json @@ -0,0 +1,176 @@ +[ + [ + { + "elements": [ + { + "type": "node", + "name": "msg.gas == msg.value", + "source_mapping": { + "start": 140, + "length": 20, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "is_dependency": false, + "lines": [ + 5 + ], + "starting_column": 12, + "ending_column": 32 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "functionWithDeprecatedThrow", + "source_mapping": { + "start": 21, + "length": 229, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 252, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "functionWithDeprecatedThrow()" + } + } + } + } + ], + "description": "Deprecated standard detected msg.gas == msg.value (tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#5):\n\t- Usage of \"msg.gas\" should be replaced with \"gasleft()\"\n", + "markdown": "Deprecated standard detected [msg.gas == msg.value](tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L5):\n\t- Usage of \"msg.gas\" should be replaced with \"gasleft()\"\n", + "first_markdown_element": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L5", + "id": "e779713eabc28919356310f06b9413a8a3b7e9e713026d6cfae2d9f6839c1e57", + "check": "deprecated-standards", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "node", + "name": "", + "source_mapping": { + "start": 228, + "length": 5, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "is_dependency": false, + "lines": [ + 7 + ], + "starting_column": 13, + "ending_column": 18 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "functionWithDeprecatedThrow", + "source_mapping": { + "start": 21, + "length": 229, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 252, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "functionWithDeprecatedThrow()" + } + } + } + } + ], + "description": "Deprecated standard detected THROW (tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#7):\n\t- Usage of \"throw\" should be replaced with \"revert()\"\n", + "markdown": "Deprecated standard detected [THROW](tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L7):\n\t- Usage of \"throw\" should be replaced with \"revert()\"\n", + "first_markdown_element": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L7", + "id": "5fbf4a42467953d0fd8d0661cbb4eeb81d4b40f69ae3820196bf10c4be53044e", + "check": "deprecated-standards", + "impact": "Informational", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 8719a899c..0f65bf137 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1194,6 +1194,11 @@ ALL_TESTS = [ "multiple_constructor_schemes.sol", "0.4.22", ), + Test( + all_detectors.DeprecatedStandards, + "deprecated_calls.sol", + "0.4.25", + ), ] GENERIC_PATH = "/GENERIC_PATH" From 7b94b576f1b6103d5ef1e5db1c43be903631182a Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:19:03 -0400 Subject: [PATCH 006/202] Add tests for the divide-before-multiply detector --- .../0.4.25/divide_before_multiply.sol | 5 + ...tiply.sol.0.4.25.DivideBeforeMultiply.json | 127 ++++++++++++++++++ .../0.5.16/divide_before_multiply.sol | 5 + ...tiply.sol.0.5.16.DivideBeforeMultiply.json | 127 ++++++++++++++++++ .../0.6.11/divide_before_multiply.sol | 5 + ...tiply.sol.0.6.11.DivideBeforeMultiply.json | 127 ++++++++++++++++++ .../0.7.6/divide_before_multiply.sol | 5 + ...ltiply.sol.0.7.6.DivideBeforeMultiply.json | 127 ++++++++++++++++++ tests/test_detectors.py | 20 +++ 9 files changed, 548 insertions(+) create mode 100644 tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol create mode 100644 tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json create mode 100644 tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol create mode 100644 tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json create mode 100644 tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol create mode 100644 tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json create mode 100644 tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol create mode 100644 tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json diff --git a/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol b/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol new file mode 100644 index 000000000..baf27a44e --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol @@ -0,0 +1,5 @@ +contract A { + function f(uint a, uint b, uint c) public returns (uint) { + return (a / b) * c; + } +} \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json new file mode 100644 index 000000000..529f9444b --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json @@ -0,0 +1,127 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + }, + { + "type": "node", + "name": "(a / b) * c", + "source_mapping": { + "start": 81, + "length": 18, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + } + } + } + ], + "description": "A.f(uint256,uint256,uint256) (tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol#2-4) performs a multiplication on the result of a division:\n\t-(a / b) * c (tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol#3)\n", + "markdown": "[A.f(uint256,uint256,uint256)](tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol#L2-L4) performs a multiplication on the result of a division:\n\t-[(a / b) * c](tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol#L3)\n", + "first_markdown_element": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol#L2-L4", + "id": "fe40e2f72824d1270402b09af057ec7364af1ad2f8c48ef4df72fc27012b3186", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol b/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol new file mode 100644 index 000000000..baf27a44e --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol @@ -0,0 +1,5 @@ +contract A { + function f(uint a, uint b, uint c) public returns (uint) { + return (a / b) * c; + } +} \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json new file mode 100644 index 000000000..4421fa0ef --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json @@ -0,0 +1,127 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + }, + { + "type": "node", + "name": "(a / b) * c", + "source_mapping": { + "start": 81, + "length": 18, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + } + } + } + ], + "description": "A.f(uint256,uint256,uint256) (tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol#2-4) performs a multiplication on the result of a division:\n\t-(a / b) * c (tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol#3)\n", + "markdown": "[A.f(uint256,uint256,uint256)](tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol#L2-L4) performs a multiplication on the result of a division:\n\t-[(a / b) * c](tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol#L3)\n", + "first_markdown_element": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol#L2-L4", + "id": "a484421df5c9ebf3dc3d8bcec6701ab3065e03b21e294c4972142c4503f2fccb", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol b/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol new file mode 100644 index 000000000..baf27a44e --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol @@ -0,0 +1,5 @@ +contract A { + function f(uint a, uint b, uint c) public returns (uint) { + return (a / b) * c; + } +} \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json new file mode 100644 index 000000000..564cac140 --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json @@ -0,0 +1,127 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + }, + { + "type": "node", + "name": "(a / b) * c", + "source_mapping": { + "start": 81, + "length": 18, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + } + } + } + ], + "description": "A.f(uint256,uint256,uint256) (tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol#2-4) performs a multiplication on the result of a division:\n\t-(a / b) * c (tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol#3)\n", + "markdown": "[A.f(uint256,uint256,uint256)](tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol#L2-L4) performs a multiplication on the result of a division:\n\t-[(a / b) * c](tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol#L3)\n", + "first_markdown_element": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol#L2-L4", + "id": "9010aa3fdf8f7689d4c4d4ea0bcd771668212100e5427e48644ed7337de03a6d", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol b/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol new file mode 100644 index 000000000..baf27a44e --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol @@ -0,0 +1,5 @@ +contract A { + function f(uint a, uint b, uint c) public returns (uint) { + return (a / b) * c; + } +} \ No newline at end of file diff --git a/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json new file mode 100644 index 000000000..23dd10c28 --- /dev/null +++ b/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json @@ -0,0 +1,127 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + }, + { + "type": "node", + "name": "(a / b) * c", + "source_mapping": { + "start": 81, + "length": 18, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 92, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4 + ], + "starting_column": 2, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 108, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256,uint256,uint256)" + } + } + } + } + ], + "description": "A.f(uint256,uint256,uint256) (tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol#2-4) performs a multiplication on the result of a division:\n\t-(a / b) * c (tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol#3)\n", + "markdown": "[A.f(uint256,uint256,uint256)](tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol#L2-L4) performs a multiplication on the result of a division:\n\t-[(a / b) * c](tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol#L3)\n", + "first_markdown_element": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol#L2-L4", + "id": "9bc6cb85ece6cd57fa946707784180957080ad5f9575abc17af218f0d2801f77", + "check": "divide-before-multiply", + "impact": "Medium", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 0f65bf137..678799cd6 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1199,6 +1199,26 @@ ALL_TESTS = [ "deprecated_calls.sol", "0.4.25", ), + Test( + all_detectors.DivideBeforeMultiply, + "divide_before_multiply.sol", + "0.4.25", + ), + Test( + all_detectors.DivideBeforeMultiply, + "divide_before_multiply.sol", + "0.5.16", + ), + Test( + all_detectors.DivideBeforeMultiply, + "divide_before_multiply.sol", + "0.6.11", + ), + Test( + all_detectors.DivideBeforeMultiply, + "divide_before_multiply.sol", + "0.7.6", + ), ] GENERIC_PATH = "/GENERIC_PATH" From ee8baf581a09040b885db0b06d96613947ce34a0 Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:19:47 -0400 Subject: [PATCH 007/202] Add tests for the tautology detector --- .../tautology/0.4.25/type_based_tautology.sol | 12 + ...utology.sol.0.4.25.TypeBasedTautology.json | 284 ++++++++++++++++++ .../tautology/0.5.16/type_based_tautology.sol | 12 + ...utology.sol.0.5.16.TypeBasedTautology.json | 284 ++++++++++++++++++ .../tautology/0.6.11/type_based_tautology.sol | 12 + ...utology.sol.0.6.11.TypeBasedTautology.json | 284 ++++++++++++++++++ .../tautology/0.7.6/type_based_tautology.sol | 12 + ...autology.sol.0.7.6.TypeBasedTautology.json | 284 ++++++++++++++++++ tests/test_detectors.py | 20 ++ 9 files changed, 1204 insertions(+) create mode 100644 tests/detectors/tautology/0.4.25/type_based_tautology.sol create mode 100644 tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json create mode 100644 tests/detectors/tautology/0.5.16/type_based_tautology.sol create mode 100644 tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json create mode 100644 tests/detectors/tautology/0.6.11/type_based_tautology.sol create mode 100644 tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json create mode 100644 tests/detectors/tautology/0.7.6/type_based_tautology.sol create mode 100644 tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json diff --git a/tests/detectors/tautology/0.4.25/type_based_tautology.sol b/tests/detectors/tautology/0.4.25/type_based_tautology.sol new file mode 100644 index 000000000..cfd3997c6 --- /dev/null +++ b/tests/detectors/tautology/0.4.25/type_based_tautology.sol @@ -0,0 +1,12 @@ +contract A { + function f(uint x) public returns (uint) { + if (x >= 0) { // bad -- always true + return 1; + } + return 7; + } + + function g(uint8 y) public returns (bool) { + return (y < 512); // bad! + } +} \ No newline at end of file diff --git a/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json b/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json new file mode 100644 index 000000000..1592c496c --- /dev/null +++ b/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json @@ -0,0 +1,284 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + }, + { + "type": "node", + "name": "x >= 0", + "source_mapping": { + "start": 69, + "length": 6, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 13, + "ending_column": 19 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + } + } + } + ], + "description": "A.f(uint256) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.4.25/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.4.25/type_based_tautology.sol#L2-L7", + "id": "c9b8085dbb7e6d0dfc2ee5711ac45a70e4c0f494ac4efcae42a6b947e3170ddb", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + }, + { + "type": "node", + "name": "(y < 512)", + "source_mapping": { + "start": 202, + "length": 16, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 25 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + } + } + } + ], + "description": "A.g(uint8) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.4.25/type_based_tautology.sol#L9-L11", + "id": "75dfe0b8776a8cf490a4e3f30366dec173fd0dc7418335f77c68ba5bca536382", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/tautology/0.5.16/type_based_tautology.sol b/tests/detectors/tautology/0.5.16/type_based_tautology.sol new file mode 100644 index 000000000..cfd3997c6 --- /dev/null +++ b/tests/detectors/tautology/0.5.16/type_based_tautology.sol @@ -0,0 +1,12 @@ +contract A { + function f(uint x) public returns (uint) { + if (x >= 0) { // bad -- always true + return 1; + } + return 7; + } + + function g(uint8 y) public returns (bool) { + return (y < 512); // bad! + } +} \ No newline at end of file diff --git a/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json b/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json new file mode 100644 index 000000000..2b347f0e8 --- /dev/null +++ b/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json @@ -0,0 +1,284 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + }, + { + "type": "node", + "name": "x >= 0", + "source_mapping": { + "start": 69, + "length": 6, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 13, + "ending_column": 19 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + } + } + } + ], + "description": "A.f(uint256) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.5.16/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.5.16/type_based_tautology.sol#L2-L7", + "id": "764eb2c7aa5cd1a30d16deb620e0dc3b8a9e9170978908bcc1f6fc1ac5a8daa1", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + }, + { + "type": "node", + "name": "(y < 512)", + "source_mapping": { + "start": 202, + "length": 16, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 25 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + } + } + } + ], + "description": "A.g(uint8) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.5.16/type_based_tautology.sol#L9-L11", + "id": "0c29aa92764cb30104a4c4ba02e307d5949143b4cbfa2d8a52d9473140907872", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/tautology/0.6.11/type_based_tautology.sol b/tests/detectors/tautology/0.6.11/type_based_tautology.sol new file mode 100644 index 000000000..cfd3997c6 --- /dev/null +++ b/tests/detectors/tautology/0.6.11/type_based_tautology.sol @@ -0,0 +1,12 @@ +contract A { + function f(uint x) public returns (uint) { + if (x >= 0) { // bad -- always true + return 1; + } + return 7; + } + + function g(uint8 y) public returns (bool) { + return (y < 512); // bad! + } +} \ No newline at end of file diff --git a/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json b/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json new file mode 100644 index 000000000..971033eae --- /dev/null +++ b/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json @@ -0,0 +1,284 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + }, + { + "type": "node", + "name": "x >= 0", + "source_mapping": { + "start": 69, + "length": 6, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 13, + "ending_column": 19 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + } + } + } + ], + "description": "A.f(uint256) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.6.11/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.6.11/type_based_tautology.sol#L2-L7", + "id": "fec3df769045cbe4984e50b2f651f60ffc36b116bc7273a64f761e8fbfc674b9", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + }, + { + "type": "node", + "name": "(y < 512)", + "source_mapping": { + "start": 202, + "length": 16, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 25 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + } + } + } + ], + "description": "A.g(uint8) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.6.11/type_based_tautology.sol#L9-L11", + "id": "51bc777574da16aab9aefb9d0294fdad9ef3a44136e9e7b1f7e05cfd9c1d4e54", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/tautology/0.7.6/type_based_tautology.sol b/tests/detectors/tautology/0.7.6/type_based_tautology.sol new file mode 100644 index 000000000..cfd3997c6 --- /dev/null +++ b/tests/detectors/tautology/0.7.6/type_based_tautology.sol @@ -0,0 +1,12 @@ +contract A { + function f(uint x) public returns (uint) { + if (x >= 0) { // bad -- always true + return 1; + } + return 7; + } + + function g(uint8 y) public returns (bool) { + return (y < 512); // bad! + } +} \ No newline at end of file diff --git a/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json b/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json new file mode 100644 index 000000000..633bbaa05 --- /dev/null +++ b/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json @@ -0,0 +1,284 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + }, + { + "type": "node", + "name": "x >= 0", + "source_mapping": { + "start": 69, + "length": 6, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 13, + "ending_column": 19 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 14, + "length": 133, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6, + 7 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f(uint256)" + } + } + } + } + ], + "description": "A.f(uint256) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.7.6/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.7.6/type_based_tautology.sol#L2-L7", + "id": "e444c1c7287bff97cae3505472d10d8ef5e01aa1f2e7660c81a3beb11eeaea0e", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + }, + { + "type": "node", + "name": "(y < 512)", + "source_mapping": { + "start": 202, + "length": 16, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 25 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "g", + "source_mapping": { + "start": 150, + "length": 80, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "A", + "source_mapping": { + "start": 0, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "g(uint8)" + } + } + } + } + ], + "description": "A.g(uint8) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.7.6/type_based_tautology.sol#L9-L11", + "id": "036b1ecab6ee0dcb07806dbd8ffb05abf29941bbbcbb161da0013b31be51b3de", + "check": "tautology", + "impact": "Medium", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 678799cd6..dbb097680 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1219,6 +1219,26 @@ ALL_TESTS = [ "divide_before_multiply.sol", "0.7.6", ), + Test( + all_detectors.TypeBasedTautology, + "type_based_tautology.sol", + "0.4.25", + ), + Test( + all_detectors.TypeBasedTautology, + "type_based_tautology.sol", + "0.5.16", + ), + Test( + all_detectors.TypeBasedTautology, + "type_based_tautology.sol", + "0.6.11", + ), + Test( + all_detectors.TypeBasedTautology, + "type_based_tautology.sol", + "0.7.6", + ), ] GENERIC_PATH = "/GENERIC_PATH" From 0faf335d29fc50f9e1caa28fe8af20a4b92a1274 Mon Sep 17 00:00:00 2001 From: Michael Colburn Date: Fri, 28 May 2021 21:21:56 -0400 Subject: [PATCH 008/202] Add tests for the similar-names detector --- .../0.4.25/similar_variables.sol | 7 + ...ables.sol.0.4.25.SimilarVarsDetection.json | 155 ++++++++++++++++++ .../0.5.16/similar_variables.sol | 7 + ...ables.sol.0.5.16.SimilarVarsDetection.json | 155 ++++++++++++++++++ .../0.6.11/similar_variables.sol | 7 + ...ables.sol.0.6.11.SimilarVarsDetection.json | 155 ++++++++++++++++++ .../similar-names/0.7.6/similar_variables.sol | 7 + ...iables.sol.0.7.6.SimilarVarsDetection.json | 155 ++++++++++++++++++ tests/test_detectors.py | 20 +++ 9 files changed, 668 insertions(+) create mode 100644 tests/detectors/similar-names/0.4.25/similar_variables.sol create mode 100644 tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json create mode 100644 tests/detectors/similar-names/0.5.16/similar_variables.sol create mode 100644 tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json create mode 100644 tests/detectors/similar-names/0.6.11/similar_variables.sol create mode 100644 tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json create mode 100644 tests/detectors/similar-names/0.7.6/similar_variables.sol create mode 100644 tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json diff --git a/tests/detectors/similar-names/0.4.25/similar_variables.sol b/tests/detectors/similar-names/0.4.25/similar_variables.sol new file mode 100644 index 000000000..57f969867 --- /dev/null +++ b/tests/detectors/similar-names/0.4.25/similar_variables.sol @@ -0,0 +1,7 @@ +contract Similar { + function f() public returns (uint) { + uint testVariable = 1; + uint textVariable = 2; + return testVariable + textVariable; + } +} \ No newline at end of file diff --git a/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json b/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json new file mode 100644 index 000000000..3393d1d06 --- /dev/null +++ b/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json @@ -0,0 +1,155 @@ +[ + [ + { + "elements": [ + { + "type": "variable", + "name": "testVariable", + "source_mapping": { + "start": 69, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + }, + { + "type": "variable", + "name": "textVariable", + "source_mapping": { + "start": 100, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "is_dependency": false, + "lines": [ + 4 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + } + ], + "description": "Variable Similar.f().testVariable (tests/detectors/similar-names/0.4.25/similar_variables.sol#3) is too similar to Similar.f().textVariable (tests/detectors/similar-names/0.4.25/similar_variables.sol#4)\n", + "markdown": "Variable [Similar.f().testVariable](tests/detectors/similar-names/0.4.25/similar_variables.sol#L3) is too similar to [Similar.f().textVariable](tests/detectors/similar-names/0.4.25/similar_variables.sol#L4)\n", + "first_markdown_element": "tests/detectors/similar-names/0.4.25/similar_variables.sol#L3", + "id": "2f767a2bb6f48a8435ce456e2d3ad859bdeccf66507735a14e20515e914038d5", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/similar-names/0.5.16/similar_variables.sol b/tests/detectors/similar-names/0.5.16/similar_variables.sol new file mode 100644 index 000000000..57f969867 --- /dev/null +++ b/tests/detectors/similar-names/0.5.16/similar_variables.sol @@ -0,0 +1,7 @@ +contract Similar { + function f() public returns (uint) { + uint testVariable = 1; + uint textVariable = 2; + return testVariable + textVariable; + } +} \ No newline at end of file diff --git a/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json b/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json new file mode 100644 index 000000000..543023e43 --- /dev/null +++ b/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json @@ -0,0 +1,155 @@ +[ + [ + { + "elements": [ + { + "type": "variable", + "name": "testVariable", + "source_mapping": { + "start": 69, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + }, + { + "type": "variable", + "name": "textVariable", + "source_mapping": { + "start": 100, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "is_dependency": false, + "lines": [ + 4 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + } + ], + "description": "Variable Similar.f().testVariable (tests/detectors/similar-names/0.5.16/similar_variables.sol#3) is too similar to Similar.f().textVariable (tests/detectors/similar-names/0.5.16/similar_variables.sol#4)\n", + "markdown": "Variable [Similar.f().testVariable](tests/detectors/similar-names/0.5.16/similar_variables.sol#L3) is too similar to [Similar.f().textVariable](tests/detectors/similar-names/0.5.16/similar_variables.sol#L4)\n", + "first_markdown_element": "tests/detectors/similar-names/0.5.16/similar_variables.sol#L3", + "id": "2f767a2bb6f48a8435ce456e2d3ad859bdeccf66507735a14e20515e914038d5", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/similar-names/0.6.11/similar_variables.sol b/tests/detectors/similar-names/0.6.11/similar_variables.sol new file mode 100644 index 000000000..57f969867 --- /dev/null +++ b/tests/detectors/similar-names/0.6.11/similar_variables.sol @@ -0,0 +1,7 @@ +contract Similar { + function f() public returns (uint) { + uint testVariable = 1; + uint textVariable = 2; + return testVariable + textVariable; + } +} \ No newline at end of file diff --git a/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json b/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json new file mode 100644 index 000000000..89aa1e5dc --- /dev/null +++ b/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json @@ -0,0 +1,155 @@ +[ + [ + { + "elements": [ + { + "type": "variable", + "name": "testVariable", + "source_mapping": { + "start": 69, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + }, + { + "type": "variable", + "name": "textVariable", + "source_mapping": { + "start": 100, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "is_dependency": false, + "lines": [ + 4 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + } + ], + "description": "Variable Similar.f().testVariable (tests/detectors/similar-names/0.6.11/similar_variables.sol#3) is too similar to Similar.f().textVariable (tests/detectors/similar-names/0.6.11/similar_variables.sol#4)\n", + "markdown": "Variable [Similar.f().testVariable](tests/detectors/similar-names/0.6.11/similar_variables.sol#L3) is too similar to [Similar.f().textVariable](tests/detectors/similar-names/0.6.11/similar_variables.sol#L4)\n", + "first_markdown_element": "tests/detectors/similar-names/0.6.11/similar_variables.sol#L3", + "id": "2f767a2bb6f48a8435ce456e2d3ad859bdeccf66507735a14e20515e914038d5", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/similar-names/0.7.6/similar_variables.sol b/tests/detectors/similar-names/0.7.6/similar_variables.sol new file mode 100644 index 000000000..57f969867 --- /dev/null +++ b/tests/detectors/similar-names/0.7.6/similar_variables.sol @@ -0,0 +1,7 @@ +contract Similar { + function f() public returns (uint) { + uint testVariable = 1; + uint textVariable = 2; + return testVariable + textVariable; + } +} \ No newline at end of file diff --git a/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json b/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json new file mode 100644 index 000000000..dd05b4133 --- /dev/null +++ b/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json @@ -0,0 +1,155 @@ +[ + [ + { + "elements": [ + { + "type": "variable", + "name": "testVariable", + "source_mapping": { + "start": 69, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "is_dependency": false, + "lines": [ + 3 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + }, + { + "type": "variable", + "name": "textVariable", + "source_mapping": { + "start": 100, + "length": 21, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "is_dependency": false, + "lines": [ + 4 + ], + "starting_column": 9, + "ending_column": 30 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "f", + "source_mapping": { + "start": 23, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "is_dependency": false, + "lines": [ + 2, + 3, + 4, + 5, + 6 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Similar", + "source_mapping": { + "start": 0, + "length": 174, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + } + } + } + ], + "description": "Variable Similar.f().testVariable (tests/detectors/similar-names/0.7.6/similar_variables.sol#3) is too similar to Similar.f().textVariable (tests/detectors/similar-names/0.7.6/similar_variables.sol#4)\n", + "markdown": "Variable [Similar.f().testVariable](tests/detectors/similar-names/0.7.6/similar_variables.sol#L3) is too similar to [Similar.f().textVariable](tests/detectors/similar-names/0.7.6/similar_variables.sol#L4)\n", + "first_markdown_element": "tests/detectors/similar-names/0.7.6/similar_variables.sol#L3", + "id": "2f767a2bb6f48a8435ce456e2d3ad859bdeccf66507735a14e20515e914038d5", + "check": "similar-names", + "impact": "Informational", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index dbb097680..a83084164 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1239,6 +1239,26 @@ ALL_TESTS = [ "type_based_tautology.sol", "0.7.6", ), + Test( + all_detectors.SimilarVarsDetection, + "similar_variables.sol", + "0.4.25", + ), + Test( + all_detectors.SimilarVarsDetection, + "similar_variables.sol", + "0.5.16", + ), + Test( + all_detectors.SimilarVarsDetection, + "similar_variables.sol", + "0.6.11", + ), + Test( + all_detectors.SimilarVarsDetection, + "similar_variables.sol", + "0.7.6", + ), ] GENERIC_PATH = "/GENERIC_PATH" From 8539c03e22e2dbbef95a6be14a384139c91d258a Mon Sep 17 00:00:00 2001 From: Josselin Date: Tue, 22 Jun 2021 11:34:28 +0200 Subject: [PATCH 009/202] Improve debug info in case of name reuse --- .../slither_compilation_unit_solc.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/slither/solc_parsing/slither_compilation_unit_solc.py b/slither/solc_parsing/slither_compilation_unit_solc.py index e7ff8d099..aafd3fe0d 100644 --- a/slither/solc_parsing/slither_compilation_unit_solc.py +++ b/slither/solc_parsing/slither_compilation_unit_solc.py @@ -311,7 +311,7 @@ Please rename it, this name is reserved for Slither's internals""" father_constructors = [] # try: # Resolve linearized base contracts. - missing_inheritance = False + missing_inheritance = None for i in contract_parser.linearized_base_contracts[1:]: if i in contract_parser.remapping: @@ -321,7 +321,7 @@ Please rename it, this name is reserved for Slither's internals""" elif i in self._contracts_by_id: ancestors.append(self._contracts_by_id[i]) else: - missing_inheritance = True + missing_inheritance = i # Resolve immediate base contracts for i in contract_parser.baseContracts: @@ -332,7 +332,7 @@ Please rename it, this name is reserved for Slither's internals""" elif i in self._contracts_by_id: fathers.append(self._contracts_by_id[i]) else: - missing_inheritance = True + missing_inheritance = i # Resolve immediate base constructor calls for i in contract_parser.baseConstructorContractsCalled: @@ -343,7 +343,7 @@ Please rename it, this name is reserved for Slither's internals""" elif i in self._contracts_by_id: father_constructors.append(self._contracts_by_id[i]) else: - missing_inheritance = True + missing_inheritance = i contract_parser.underlying_contract.set_inheritance( ancestors, fathers, father_constructors @@ -353,7 +353,14 @@ Please rename it, this name is reserved for Slither's internals""" self._compilation_unit.contracts_with_missing_inheritance.add( contract_parser.underlying_contract ) - contract_parser.log_incorrect_parsing(f"Missing inheritance {contract_parser}") + txt = f"Missing inheritance {contract_parser.underlying_contract} ({contract_parser.compilation_unit.crytic_compile_compilation_unit.unique_id})\n" + txt += f"Missing inheritance ID: {missing_inheritance}\n" + if contract_parser.underlying_contract.inheritance: + txt += f"Inheritance found:\n" + for contract_inherited in contract_parser.underlying_contract.inheritance: + txt += f"\t - {contract_inherited} (ID {contract_inherited.id})\n" + contract_parser.log_incorrect_parsing(txt) + contract_parser.set_is_analyzed(True) contract_parser.delete_content() From 288deec0b92542c78465edb0a7265183579b2e88 Mon Sep 17 00:00:00 2001 From: Josselin Date: Wed, 23 Jun 2021 17:13:34 +0200 Subject: [PATCH 010/202] Refactor source mapping + add new API - core.source_mapping.SourceMapping is now a class (fix #695) - Add slither.offset_to_objects to retrieve the object on a given offset (WIP) - Add slither.utils.source_mapping APIs to allow retrieving definition/implementations/references informations from an offset (WIP) Additionally this PR create a strict order for the detectors tests output to ease the comparison in case in small changes in the json output --- .github/workflows/pytest.yml | 42 + slither/analyses/evm/convert.py | 6 +- slither/core/declarations/contract.py | 7 +- slither/core/declarations/function.py | 4 +- .../core/declarations/function_contract.py | 3 +- .../core/declarations/function_top_level.py | 3 +- .../core/declarations/solidity_variables.py | 7 +- slither/core/slither_core.py | 115 +- slither/core/source_mapping/source_mapping.py | 283 +- slither/detectors/abstract_detector.py | 2 + .../formatters/attributes/const_functions.py | 6 +- .../formatters/functions/external_function.py | 4 +- .../naming_convention/naming_convention.py | 44 +- slither/printers/all_printers.py | 1 + slither/printers/summary/constructor_calls.py | 11 +- slither/printers/summary/evm.py | 16 +- slither/printers/summary/human_summary.py | 4 +- slither/slithir/convert.py | 17 + slither/solc_parsing/declarations/function.py | 3 +- .../expressions/expression_parsing.py | 57 +- .../solidity_types/type_parsing.py | 19 +- slither/tools/flattening/flattening.py | 16 +- slither/tools/mutator/mutators/MIA.py | 8 +- .../tools/mutator/utils/generic_patching.py | 8 +- .../solidity/generate_properties.py | 2 +- slither/utils/output.py | 20 +- slither/utils/source_mapping.py | 56 + slither/utils/standard_libraries.py | 10 +- slither/utils/tests_pattern.py | 4 +- ...V2_array.sol.0.4.25.ABIEncoderV2Array.json | 290 +- ...rV2_array.sol.0.5.9.ABIEncoderV2Array.json | 138 +- ...bitrary_send.sol.0.4.25.ArbitrarySend.json | 92 +- ...bitrary_send.sol.0.5.16.ArbitrarySend.json | 20 +- ...bitrary_send.sol.0.6.11.ArbitrarySend.json | 20 +- ...rbitrary_send.sol.0.7.6.ArbitrarySend.json | 92 +- ...reference.sol.0.4.25.ArrayByReference.json | 942 +- ...reference.sol.0.5.16.ArrayByReference.json | 1008 +- ...reference.sol.0.6.11.ArrayByReference.json | 942 +- ..._reference.sol.0.7.6.ArrayByReference.json | 1008 +- ..._assembly_library.sol.0.4.25.Assembly.json | 20 +- ...assembly_contract.sol.0.5.16.Assembly.json | 10 +- ..._assembly_library.sol.0.5.16.Assembly.json | 20 +- ..._assembly_library.sol.0.6.11.Assembly.json | 252 +- ..._assembly_contract.sol.0.7.6.Assembly.json | 10 +- ...e_assembly_library.sol.0.7.6.Assembly.json | 232 +- ...e_change.sol.0.4.25.AssertStateChange.json | 122 +- ...e_change.sol.0.5.16.AssertStateChange.json | 114 +- ...e_change.sol.0.6.11.AssertStateChange.json | 92 +- ...te_change.sol.0.7.6.AssertStateChange.json | 92 +- .../0.4.25/backdoor.sol.0.4.25.Backdoor.json | 4 +- .../0.7.6/backdoor.sol.0.7.6.Backdoor.json | 4 +- ...isuse.sol.0.7.6.BooleanConstantMisuse.json | 10 +- ...t-equality.sol.0.5.16.BooleanEquality.json | 10 +- ...t-equality.sol.0.6.11.BooleanEquality.json | 10 +- ...n_loop.sol.0.4.25.MultipleCallsInLoop.json | 10 +- ...n_loop.sol.0.6.11.MultipleCallsInLoop.json | 10 +- ...in_loop.sol.0.7.6.MultipleCallsInLoop.json | 10 +- ...es.sol.0.4.25.ConstCandidateStateVars.json | 112 +- ...es.sol.0.5.16.ConstCandidateStateVars.json | 112 +- ...es.sol.0.6.11.ConstCandidateStateVars.json | 136 +- ...les.sol.0.7.6.ConstCandidateStateVars.json | 136 +- ...stant.sol.0.4.25.ConstantFunctionsAsm.json | 4 +- ...ant.sol.0.4.25.ConstantFunctionsState.json | 60 +- ...ment.sol.0.4.25.ArrayLengthAssignment.json | 32 +- ...ment.sol.0.5.16.ArrayLengthAssignment.json | 32 +- ...all.sol.0.4.25.ControlledDelegateCall.json | 116 +- ...all.sol.0.6.11.ControlledDelegateCall.json | 116 +- ...call.sol.0.7.6.ControlledDelegateCall.json | 116 +- ...oop.sol.0.5.16.CostlyOperationsInLoop.json | 10 +- ...oop.sol.0.6.11.CostlyOperationsInLoop.json | 10 +- .../0.8.0/dead-code.sol.0.8.0.DeadCode.json | 112 +- ....0.4.25.UnindexedERC20EventParameters.json | 52 +- ....0.5.16.UnindexedERC20EventParameters.json | 68 +- ....0.6.11.UnindexedERC20EventParameters.json | 52 +- ...l.0.7.6.UnindexedERC20EventParameters.json | 52 +- ...4.25.IncorrectERC20InterfaceDetection.json | 108 +- ...5.16.IncorrectERC20InterfaceDetection.json | 108 +- ...6.11.IncorrectERC20InterfaceDetection.json | 144 +- ....7.6.IncorrectERC20InterfaceDetection.json | 108 +- ....25.IncorrectERC721InterfaceDetection.json | 226 +- ....16.IncorrectERC721InterfaceDetection.json | 226 +- ....11.IncorrectERC721InterfaceDetection.json | 222 +- ...7.6.IncorrectERC721InterfaceDetection.json | 162 +- ...sol.0.4.25.MissingEventsAccessControl.json | 84 +- ...sol.0.5.16.MissingEventsAccessControl.json | 136 +- ...sol.0.6.11.MissingEventsAccessControl.json | 92 +- ....sol.0.7.6.MissingEventsAccessControl.json | 84 +- ...tic.sol.0.7.6.MissingEventsArithmetic.json | 92 +- ..._function.sol.0.4.25.ExternalFunction.json | 116 +- ..._function.sol.0.5.16.ExternalFunction.json | 116 +- ..._function.sol.0.6.11.ExternalFunction.json | 136 +- ...l_function.sol.0.7.6.ExternalFunction.json | 136 +- ...s.sol.0.4.25.FunctionInitializedState.json | 92 +- ...s.sol.0.5.16.FunctionInitializedState.json | 92 +- ...s.sol.0.6.11.FunctionInitializedState.json | 72 +- ...es.sol.0.7.6.FunctionInitializedState.json | 92 +- ...ty.sol.0.4.25.IncorrectStrictEquality.json | 1838 ++-- ...ty.sol.0.5.16.IncorrectStrictEquality.json | 1986 ++-- ...ty.sol.0.6.11.IncorrectStrictEquality.json | 1592 +-- ...ity.sol.0.7.6.IncorrectStrictEquality.json | 2220 ++-- ...t.sol.0.4.25.ModifierDefaultDetection.json | 78 +- ...t.sol.0.5.16.ModifierDefaultDetection.json | 78 +- ...t.sol.0.6.11.ModifierDefaultDetection.json | 66 +- ...lt.sol.0.7.6.ModifierDefaultDetection.json | 78 +- ....25.IncorrectUnaryExpressionDetection.json | 126 +- .../locked_ether.sol.0.4.25.LockedEther.json | 6 +- .../locked_ether.sol.0.7.6.LockedEther.json | 6 +- ...n.sol.0.4.25.MappingDeletionDetection.json | 366 +- ...n.sol.0.5.16.MappingDeletionDetection.json | 380 +- ...n.sol.0.6.11.MappingDeletionDetection.json | 28 +- ...on.sol.0.7.6.MappingDeletionDetection.json | 380 +- ...l.0.4.25.MissingZeroAddressValidation.json | 392 +- ...l.0.5.16.MissingZeroAddressValidation.json | 376 +- ...l.0.6.11.MissingZeroAddressValidation.json | 310 +- ...ol.0.7.6.MissingZeroAddressValidation.json | 320 +- ...onvention.sol.0.4.25.NamingConvention.json | 938 +- ...onvention.sol.0.5.16.NamingConvention.json | 938 +- ...onvention.sol.0.6.11.NamingConvention.json | 938 +- ...convention.sol.0.7.6.NamingConvention.json | 938 +- ...agma.0.4.25.sol.0.4.25.ConstantPragma.json | 2 +- ...agma.0.5.16.sol.0.5.16.ConstantPragma.json | 2 +- ...agma.0.6.11.sol.0.6.11.ConstantPragma.json | 4 +- ...pragma.0.7.6.sol.0.7.6.ConstantPragma.json | 4 +- ...ements.sol.0.4.25.RedundantStatements.json | 210 +- ...ements.sol.0.5.16.RedundantStatements.json | 210 +- ...ements.sol.0.6.11.RedundantStatements.json | 222 +- ...tements.sol.0.7.6.RedundantStatements.json | 206 +- ...cy-benign.sol.0.4.25.ReentrancyBenign.json | 1276 +-- ...cy-benign.sol.0.5.16.ReentrancyBenign.json | 738 +- ...cy-benign.sol.0.6.11.ReentrancyBenign.json | 1968 ++-- ...ncy-benign.sol.0.7.6.ReentrancyBenign.json | 2300 ++-- .../0.4.25/DAO.sol.0.4.25.ReentrancyEth.json | 9656 ++++++++--------- .../reentrancy.sol.0.4.25.ReentrancyEth.json | 32 +- .../reentrancy.sol.0.7.6.ReentrancyEth.json | 32 +- ...ancy_indirect.sol.0.7.6.ReentrancyEth.json | 28 +- ...ncy-events.sol.0.6.11.ReentrancyEvent.json | 16 +- ...ol.0.4.25.ReentrancyReadBeforeWritten.json | 7794 ++++++------- ...ol.0.4.25.ReentrancyReadBeforeWritten.json | 384 +- ...ol.0.5.16.ReentrancyReadBeforeWritten.json | 336 +- ...ol.0.6.11.ReentrancyReadBeforeWritten.json | 382 +- ...ctor.sol.0.4.21.ReusedBaseConstructor.json | 468 +- ...ctor.sol.0.4.25.ReusedBaseConstructor.json | 654 +- ...erride.sol.0.4.25.RightToLeftOverride.json | 2 +- ...ols.sol.0.4.25.BuiltinSymbolShadowing.json | 716 +- ...ols.sol.0.5.16.BuiltinSymbolShadowing.json | 612 +- ...al_variable.sol.0.4.25.LocalShadowing.json | 114 +- ...al_variable.sol.0.5.16.LocalShadowing.json | 114 +- ...al_variable.sol.0.6.11.LocalShadowing.json | 206 +- ...cal_variable.sol.0.7.6.LocalShadowing.json | 256 +- .../static.sol.0.5.14.IncorrectSolc.json | 20 +- .../dynamic_1.sol.0.5.16.IncorrectSolc.json | 2 +- .../static.sol.0.6.10.IncorrectSolc.json | 20 +- .../0.7.4/static.sol.0.7.4.IncorrectSolc.json | 20 +- .../dynamic_1.sol.0.7.6.IncorrectSolc.json | 2 +- .../dynamic_2.sol.0.7.6.IncorrectSolc.json | 2 +- ....sol.0.5.10.StorageSignedIntegerArray.json | 24 +- .../0.4.25/suicidal.sol.0.4.25.Suicidal.json | 4 +- .../0.5.16/suicidal.sol.0.5.16.Suicidal.json | 4 +- .../timestamp.sol.0.4.25.Timestamp.json | 142 +- .../timestamp.sol.0.5.16.Timestamp.json | 96 +- .../timestamp.sol.0.6.11.Timestamp.json | 142 +- .../0.7.6/timestamp.sol.0.7.6.Timestamp.json | 172 +- ..._many_digits.sol.0.4.25.TooManyDigits.json | 160 +- ..._many_digits.sol.0.5.16.TooManyDigits.json | 198 +- ..._many_digits.sol.0.6.11.TooManyDigits.json | 164 +- ...o_many_digits.sol.0.7.6.TooManyDigits.json | 48 +- .../0.4.25/tx_origin.sol.0.4.25.TxOrigin.json | 124 +- .../0.5.16/tx_origin.sol.0.5.16.TxOrigin.json | 20 +- .../0.7.6/tx_origin.sol.0.7.6.TxOrigin.json | 104 +- ...lowlevel.sol.0.5.16.UncheckedLowLevel.json | 10 +- ...lowlevel.sol.0.6.11.UncheckedLowLevel.json | 10 +- ...checked_send.sol.0.4.25.UncheckedSend.json | 10 +- ...checked_send.sol.0.6.11.UncheckedSend.json | 10 +- ...transfers.sol.0.7.6.UncheckedTransfer.json | 20 +- ...0.4.25.UnimplementedFunctionDetection.json | 272 +- ...0.6.11.UnimplementedFunctionDetection.json | 168 +- ....0.7.6.UnimplementedFunctionDetection.json | 168 +- ....UninitializedFunctionPtrsConstructor.json | 314 +- ....UninitializedFunctionPtrsConstructor.json | 208 +- ...ble.sol.0.4.25.UninitializedLocalVars.json | 6 +- ...ble.sol.0.5.16.UninitializedLocalVars.json | 6 +- ...ble.sol.0.6.11.UninitializedLocalVars.json | 6 +- ....4.25.UninitializedStateVarsDetection.json | 226 +- ....5.16.UninitializedStateVarsDetection.json | 226 +- ....6.11.UninitializedStateVarsDetection.json | 226 +- ...0.7.6.UninitializedStateVarsDetection.json | 226 +- ...ggy.sol.0.5.16.UnprotectedUpgradeable.json | 10 +- ...ggy.sol.0.6.11.UnprotectedUpgradeable.json | 10 +- ..._return.sol.0.4.25.UnusedReturnValues.json | 32 +- ..._return.sol.0.5.16.UnusedReturnValues.json | 20 +- ...d_return.sol.0.7.6.UnusedReturnValues.json | 52 +- ...used_state.sol.0.4.25.UnusedStateVars.json | 42 +- ...used_state.sol.0.5.16.UnusedStateVars.json | 42 +- ...used_state.sol.0.6.11.UnusedStateVars.json | 42 +- ...nused_state.sol.0.7.6.UnusedStateVars.json | 66 +- ...l.sol.0.4.25.PredeclarationUsageLocal.json | 98 +- .../void-cst.sol.0.5.16.VoidConstructor.json | 10 +- .../void-cst.sol.0.7.6.VoidConstructor.json | 10 +- .../0.4.25/bad_prng.sol.0.4.25.BadPRNG.json | 224 +- .../0.5.16/bad_prng.sol.0.5.16.BadPRNG.json | 184 +- .../0.6.11/bad_prng.sol.0.6.11.BadPRNG.json | 132 +- .../0.7.6/bad_prng.sol.0.7.6.BadPRNG.json | 174 +- tests/src_mapping/inheritance.sol | 35 + tests/test_ast_parsing.py | 2 +- tests/test_source_mapping.py | 83 + 205 files changed, 29468 insertions(+), 29036 deletions(-) create mode 100644 .github/workflows/pytest.yml create mode 100644 slither/utils/source_mapping.py create mode 100644 tests/src_mapping/inheritance.sol create mode 100644 tests/test_source_mapping.py diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml new file mode 100644 index 000000000..d4a6ee2fe --- /dev/null +++ b/.github/workflows/pytest.yml @@ -0,0 +1,42 @@ +--- +name: Parser tests + +defaults: + run: + # To load bashrc + shell: bash -ieo pipefail {0} + +on: + pull_request: + branches: [master, dev] + schedule: + # run CI every day even if no PRs/merges occur + - cron: '0 12 * * *' + +jobs: + build: + name: Parser tests + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Set up Python 3.6 + uses: actions/setup-python@v2 + with: + python-version: 3.6 + + - name: Install dependencies + run: | + python setup.py inst + pip install pytest + pip install solc-select + solc-select install all + solc-select use 0.6.12 + + - name: Test with pytest + run: | + pytest tests/test_function.py + pytest tests/test_source_mapping.py + diff --git a/slither/analyses/evm/convert.py b/slither/analyses/evm/convert.py index 1acb59319..bff308cbc 100644 --- a/slither/analyses/evm/convert.py +++ b/slither/analyses/evm/convert.py @@ -128,17 +128,17 @@ def _get_evm_instructions_node(node_info): node_info["cfg"].instructions, node_info["srcmap"], node_info["slither"], - node_info["contract"].source_mapping["filename_absolute"], + node_info["contract"].source_mapping.filename.absolute, ) contract_file = ( node_info["slither"] - .source_code[node_info["contract"].source_mapping["filename_absolute"]] + .source_code[node_info["contract"].source_mapping.filename.absolute] .encode("utf-8") ) # Get evm instructions corresponding to node's source line number node_source_line = ( - contract_file[0 : node_info["node"].source_mapping["start"]].count("\n".encode("utf-8")) + 1 + contract_file[0 : node_info["node"].source_mapping.start].count("\n".encode("utf-8")) + 1 ) node_pcs = contract_pcs.get(node_source_line, []) node_ins = [] diff --git a/slither/core/declarations/contract.py b/slither/core/declarations/contract.py index 08279246a..ad646c574 100644 --- a/slither/core/declarations/contract.py +++ b/slither/core/declarations/contract.py @@ -8,10 +8,9 @@ from typing import Optional, List, Dict, Callable, Tuple, TYPE_CHECKING, Union from crytic_compile.platform import Type as PlatformType from slither.core.cfg.scope import Scope +from slither.core.declarations.function import Function, FunctionType from slither.core.solidity_types.type import Type from slither.core.source_mapping.source_mapping import SourceMapping - -from slither.core.declarations.function import Function, FunctionType from slither.utils.erc import ( ERC20_signatures, ERC165_signatures, @@ -999,7 +998,7 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods def is_from_dependency(self) -> bool: return self.compilation_unit.core.crytic_compile.is_dependency( - self.source_mapping["filename_absolute"] + self.source_mapping.filename.absolute ) # endregion @@ -1017,7 +1016,7 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods """ if self.compilation_unit.core.crytic_compile.platform == PlatformType.TRUFFLE: if self.name == "Migrations": - paths = Path(self.source_mapping["filename_absolute"]).parts + paths = Path(self.source_mapping.filename.absolute).parts if len(paths) >= 2: return paths[-2] == "contracts" and paths[-1] == "migrations.sol" return False diff --git a/slither/core/declarations/function.py b/slither/core/declarations/function.py index 6dfaf05c5..0dc06038d 100644 --- a/slither/core/declarations/function.py +++ b/slither/core/declarations/function.py @@ -2,7 +2,7 @@ Function module """ import logging -from abc import ABCMeta, abstractmethod +from abc import abstractmethod from collections import namedtuple from enum import Enum from itertools import groupby @@ -104,7 +104,7 @@ def _filter_state_variables_written(expressions: List["Expression"]): return ret -class Function(metaclass=ABCMeta): # pylint: disable=too-many-public-methods +class Function(SourceMapping): # pylint: disable=too-many-public-methods """ Function class """ diff --git a/slither/core/declarations/function_contract.py b/slither/core/declarations/function_contract.py index 66f387e32..18527d7a8 100644 --- a/slither/core/declarations/function_contract.py +++ b/slither/core/declarations/function_contract.py @@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, List, Tuple from slither.core.children.child_contract import ChildContract from slither.core.children.child_inheritance import ChildInheritance -from slither.core.source_mapping.source_mapping import SourceMapping from slither.core.declarations import Function # pylint: disable=import-outside-toplevel,too-many-instance-attributes,too-many-statements,too-many-lines @@ -14,7 +13,7 @@ if TYPE_CHECKING: from slither.core.declarations import Contract -class FunctionContract(Function, ChildContract, ChildInheritance, SourceMapping): +class FunctionContract(Function, ChildContract, ChildInheritance): @property def canonical_name(self) -> str: """ diff --git a/slither/core/declarations/function_top_level.py b/slither/core/declarations/function_top_level.py index f1239b54c..0cbffd500 100644 --- a/slither/core/declarations/function_top_level.py +++ b/slither/core/declarations/function_top_level.py @@ -5,10 +5,9 @@ from typing import List, Tuple from slither.core.declarations import Function from slither.core.declarations.top_level import TopLevel -from slither.core.source_mapping.source_mapping import SourceMapping -class FunctionTopLevel(Function, TopLevel, SourceMapping): +class FunctionTopLevel(Function, TopLevel): @property def canonical_name(self) -> str: """ diff --git a/slither/core/declarations/solidity_variables.py b/slither/core/declarations/solidity_variables.py index 4018e8d67..f5ad9fcbb 100644 --- a/slither/core/declarations/solidity_variables.py +++ b/slither/core/declarations/solidity_variables.py @@ -1,8 +1,8 @@ # https://solidity.readthedocs.io/en/v0.4.24/units-and-global-variables.html from typing import List, Dict, Union, TYPE_CHECKING -from slither.core.context.context import Context from slither.core.solidity_types import ElementaryType, TypeInformation +from slither.core.source_mapping.source_mapping import SourceMapping from slither.exceptions import SlitherException if TYPE_CHECKING: @@ -87,7 +87,7 @@ def solidity_function_signature(name): return name + " returns({})".format(",".join(SOLIDITY_FUNCTIONS[name])) -class SolidityVariable(Context): +class SolidityVariable(SourceMapping): def __init__(self, name: str): super().__init__() self._check_name(name) @@ -146,13 +146,14 @@ class SolidityVariableComposed(SolidityVariable): return hash(self.name) -class SolidityFunction: +class SolidityFunction(SourceMapping): # Non standard handling of type(address). This function returns an undefined object # The type is dynamic # https://solidity.readthedocs.io/en/latest/units-and-global-variables.html#type-information # As a result, we set return_type during the Ir conversion def __init__(self, name: str): + super().__init__() assert name in SOLIDITY_FUNCTIONS self._name = name # Can be TypeInformation if type(address) is used diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 5bbe467cb..646e7f83e 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -5,15 +5,21 @@ import json import logging import os import re +from collections import defaultdict from typing import Optional, Dict, List, Set, Union from crytic_compile import CryticCompile +from crytic_compile.utils.naming import Filename +from slither.core.children.child_contract import ChildContract from slither.core.compilation_unit import SlitherCompilationUnit from slither.core.context.context import Context -from slither.core.declarations import Contract +from slither.core.declarations import Contract, FunctionContract +from slither.core.declarations.top_level import TopLevel +from slither.core.source_mapping.source_mapping import SourceMapping, Source from slither.slithir.variables import Constant from slither.utils.colors import red +from slither.utils.source_mapping import get_definition, get_references, get_implementation logger = logging.getLogger("Slither") logging.basicConfig() @@ -68,6 +74,11 @@ class SlitherCore(Context): self._contracts: List[Contract] = [] self._contracts_derived: List[Contract] = [] + self._offset_to_objects: Optional[Dict[Filename, Dict[int, Set[SourceMapping]]]] = None + self._offset_to_references: Optional[Dict[Filename, Dict[int, Set[Source]]]] = None + self._offset_to_implementations: Optional[Dict[Filename, Dict[int, Set[Source]]]] = None + self._offset_to_definitions: Optional[Dict[Filename, Dict[int, Set[Source]]]] = None + @property def compilation_units(self) -> List[SlitherCompilationUnit]: return list(self._compilation_units) @@ -159,6 +170,108 @@ class SlitherCore(Context): for f in c.functions: f.cfg_to_dot(os.path.join(d, "{}.{}.dot".format(c.name, f.name))) + def offset_to_objects(self, filename_str: str, offset: int) -> Set[SourceMapping]: + if self._offset_to_objects is None: + self._compute_offsets_to_ref_impl_decl() + filename: Filename = self.crytic_compile.filename_lookup(filename_str) + return self._offset_to_objects[filename][offset] + + def _compute_offsets_from_thing(self, thing: SourceMapping): + definition = get_definition(thing, self.crytic_compile) + references = get_references(thing) + implementation = get_implementation(thing) + + for offset in range(definition.start, definition.end + 1): + + if ( + isinstance(thing, TopLevel) + or ( + isinstance(thing, FunctionContract) + and thing.contract_declarer == thing.contract + ) + or (isinstance(thing, ChildContract) and not isinstance(thing, FunctionContract)) + ): + self._offset_to_objects[definition.filename][offset].add(thing) + + self._offset_to_definitions[definition.filename][offset].add(definition) + self._offset_to_implementations[definition.filename][offset].add(implementation) + self._offset_to_references[definition.filename][offset] |= set(references) + + for ref in references: + for offset in range(ref.start, ref.end + 1): + + if ( + isinstance(thing, TopLevel) + or ( + isinstance(thing, FunctionContract) + and thing.contract_declarer == thing.contract + ) + or ( + isinstance(thing, ChildContract) and not isinstance(thing, FunctionContract) + ) + ): + self._offset_to_objects[definition.filename][offset].add(thing) + + self._offset_to_definitions[ref.filename][offset].add(definition) + self._offset_to_implementations[ref.filename][offset].add(implementation) + self._offset_to_references[ref.filename][offset] |= set(references) + + def _compute_offsets_to_ref_impl_decl(self): # pylint: disable=too-many-branches + self._offset_to_references = defaultdict(lambda: defaultdict(lambda: set())) + self._offset_to_definitions = defaultdict(lambda: defaultdict(lambda: set())) + self._offset_to_implementations = defaultdict(lambda: defaultdict(lambda: set())) + self._offset_to_objects = defaultdict(lambda: defaultdict(lambda: set())) + + for compilation_unit in self._compilation_units: + for contract in compilation_unit.contracts: + self._compute_offsets_from_thing(contract) + + for function in contract.functions: + self._compute_offsets_from_thing(function) + for variable in function.local_variables: + self._compute_offsets_from_thing(variable) + for modifier in contract.modifiers: + self._compute_offsets_from_thing(modifier) + for variable in modifier.local_variables: + self._compute_offsets_from_thing(variable) + + for st in contract.structures: + self._compute_offsets_from_thing(st) + + for enum in contract.enums: + self._compute_offsets_from_thing(enum) + + for event in contract.events: + self._compute_offsets_from_thing(event) + for enum in compilation_unit.enums_top_level: + self._compute_offsets_from_thing(enum) + for function in compilation_unit.functions_top_level: + self._compute_offsets_from_thing(function) + for st in compilation_unit.structures_top_level: + self._compute_offsets_from_thing(st) + for import_directive in compilation_unit.import_directives: + self._compute_offsets_from_thing(import_directive) + for pragma in compilation_unit.pragma_directives: + self._compute_offsets_from_thing(pragma) + + def offset_to_references(self, filename_str: str, offset: int) -> Set[Source]: + if self._offset_to_references is None: + self._compute_offsets_to_ref_impl_decl() + filename: Filename = self.crytic_compile.filename_lookup(filename_str) + return self._offset_to_references[filename][offset] + + def offset_to_implementations(self, filename_str: str, offset: int) -> Set[Source]: + if self._offset_to_implementations is None: + self._compute_offsets_to_ref_impl_decl() + filename: Filename = self.crytic_compile.filename_lookup(filename_str) + return self._offset_to_implementations[filename][offset] + + def offset_to_definitions(self, filename_str: str, offset: int) -> Set[Source]: + if self._offset_to_definitions is None: + self._compute_offsets_to_ref_impl_decl() + filename: Filename = self.crytic_compile.filename_lookup(filename_str) + return self._offset_to_definitions[filename][offset] + # endregion ################################################################################### ################################################################################### diff --git a/slither/core/source_mapping/source_mapping.py b/slither/core/source_mapping/source_mapping.py index 9d18dd50c..d23f4b28a 100644 --- a/slither/core/source_mapping/source_mapping.py +++ b/slither/core/source_mapping/source_mapping.py @@ -1,5 +1,8 @@ import re -from typing import Dict, Union, Optional, List, Tuple, TYPE_CHECKING +from abc import ABCMeta +from typing import Dict, Union, List, Tuple, TYPE_CHECKING + +from crytic_compile.utils.naming import Filename from slither.core.context.context import Context @@ -7,124 +10,168 @@ if TYPE_CHECKING: from slither.core.compilation_unit import SlitherCompilationUnit -class SourceMapping(Context): - def __init__(self): - super().__init__() - # TODO create a namedtuple for the source mapping rather than a dict - self._source_mapping: Optional[Dict] = None - # self._start: Optional[int] = None - # self._length: Optional[int] = None - # self._filename_used: Optional[str] = None - # self._filename_relative: Optional[str] = None - # self._filename_absolute: Optional[str] = None - # self._filename_short: Optional[str] = None - # self._is_dependency: Optional[bool] = None - # self._lines: Optional[List[int]] = None - # self._starting_column: Optional[int] = None - # self._ending_column: Optional[int] = None +# We split the source mapping into two objects +# The reasoning is to allow any object to just inherit from SourceMapping +# To have then everything accessible through obj.source_mapping._ +# All an object needs to do is to inherits from SourceMapping +# And call set_offset at some point - @property - def source_mapping(self) -> Optional[Dict]: - return self._source_mapping - - @staticmethod - def _compute_line( - compilation_unit: "SlitherCompilationUnit", filename, start: int, length: int - ) -> Tuple[List[int], int, int]: - """ - Compute line(s) numbers and starting/ending columns - from a start/end offset. All numbers start from 1. - - Not done in an efficient way - """ - start_line, starting_column = compilation_unit.core.crytic_compile.get_line_from_offset( - filename, start - ) - end_line, ending_column = compilation_unit.core.crytic_compile.get_line_from_offset( - filename, start + length - ) - return list(range(start_line, end_line + 1)), starting_column, ending_column +# pylint: disable=too-many-instance-attributes +class Source: + def __init__(self): + self.start: int = 0 + self.length: int = 0 + self.filename: Filename = Filename("", "", "", "") + self.is_dependency: bool = False + self.lines: List[int] = [] + self.starting_column: int = 0 + self.ending_column: int = 0 + self.end: int = 0 + + def to_json(self) -> Dict: + return { + "start": self.start, + "length": self.length, + "filename_used": self.filename.used, + "filename_relative": self.filename.relative, + "filename_absolute": self.filename.absolute, + "filename_short": self.filename.short, + "is_dependency": self.is_dependency, + "lines": self.lines, + "starting_column": self.starting_column, + "ending_column": self.ending_column, + } - def _convert_source_mapping( - self, offset: str, compilation_unit: "SlitherCompilationUnit" - ): # pylint: disable=too-many-locals - """ - Convert a text offset to a real offset - see https://solidity.readthedocs.io/en/develop/miscellaneous.html#source-mappings - Returns: - (dict): {'start':0, 'length':0, 'filename': 'file.sol'} - """ - sourceUnits = compilation_unit.source_units - - position = re.findall("([0-9]*):([0-9]*):([-]?[0-9]*)", offset) - if len(position) != 1: - return {} - - s, l, f = position[0] - s = int(s) - l = int(l) - f = int(f) - - if f not in sourceUnits: - return {"start": s, "length": l} - filename_used = sourceUnits[f] - filename_absolute = None - filename_relative = None - filename_short = None - - is_dependency = False - - # If possible, convert the filename to its absolute/relative version - if compilation_unit.core.crytic_compile: - filenames = compilation_unit.core.crytic_compile.filename_lookup(filename_used) - filename_absolute = filenames.absolute - filename_relative = filenames.relative - filename_short = filenames.short - - is_dependency = compilation_unit.core.crytic_compile.is_dependency(filename_absolute) - - if ( - filename_absolute in compilation_unit.core.source_code - or filename_absolute in compilation_unit.core.crytic_compile.src_content - ): - filename = filename_absolute - elif filename_relative in compilation_unit.core.source_code: - filename = filename_relative - elif filename_short in compilation_unit.core.source_code: - filename = filename_short - else: - filename = filename_used + def _get_lines_str(self, line_descr=""): + lines = self.lines + if not lines: + lines = "" + elif len(lines) == 1: + lines = "#{}{}".format(line_descr, lines[0]) else: - filename = filename_used + lines = f"#{line_descr}{lines[0]}-{line_descr}{lines[-1]}" + return lines - if compilation_unit.core.crytic_compile: - (lines, starting_column, ending_column) = self._compute_line( - compilation_unit, filename, s, l - ) - else: - (lines, starting_column, ending_column) = ([], None, None) + def source_mapping_to_markdown(self, markdown_root: str) -> str: + lines = self._get_lines_str(line_descr="L") + filename_relative: str = self.filename.relative if self.filename.relative else "" + return f"{markdown_root}{filename_relative}{lines}" + + def detailled_str(self) -> str: + lines = self._get_lines_str() + filename_short: str = self.filename.short if self.filename.short else "" + return f"{filename_short}{lines} ({self.starting_column} - {self.ending_column})" + + def __str__(self) -> str: + lines = self._get_lines_str() + filename_short: str = self.filename.short if self.filename.short else "" + return f"{filename_short}{lines}" + + def __hash__(self): + return hash(str(self)) + + def __eq__(self, other): + if not isinstance(other, type(self)): + return NotImplemented + return ( + self.start == other.start + and self.length == other.length + and self.filename == other.filename + and self.is_dependency == other.is_dependency + and self.lines == other.lines + and self.starting_column == other.starting_column + and self.ending_column == other.ending_column + and self.end == other.end + ) - return { - "start": s, - "length": l, - "filename_used": filename_used, - "filename_relative": filename_relative, - "filename_absolute": filename_absolute, - "filename_short": filename_short, - "is_dependency": is_dependency, - "lines": lines, - "starting_column": starting_column, - "ending_column": ending_column, - } - def set_offset(self, offset: Union[Dict, str], compilation_unit: "SlitherCompilationUnit"): - if isinstance(offset, dict): - self._source_mapping = offset +def _compute_line( + compilation_unit: "SlitherCompilationUnit", filename: Filename, start: int, length: int +) -> Tuple[List[int], int, int]: + """ + Compute line(s) numbers and starting/ending columns + from a start/end offset. All numbers start from 1. + + Not done in an efficient way + """ + start_line, starting_column = compilation_unit.core.crytic_compile.get_line_from_offset( + filename, start + ) + end_line, ending_column = compilation_unit.core.crytic_compile.get_line_from_offset( + filename, start + length + ) + return list(range(start_line, end_line + 1)), starting_column, ending_column + + +def _convert_source_mapping( + offset: str, compilation_unit: "SlitherCompilationUnit" +): # pylint: disable=too-many-locals + """ + Convert a text offset to a real offset + see https://solidity.readthedocs.io/en/develop/miscellaneous.html#source-mappings + Returns: + (dict): {'start':0, 'length':0, 'filename': 'file.sol'} + """ + sourceUnits = compilation_unit.source_units + + position = re.findall("([0-9]*):([0-9]*):([-]?[0-9]*)", offset) + if len(position) != 1: + return Source() + + s, l, f = position[0] + s = int(s) + l = int(l) + f = int(f) + + if f not in sourceUnits: + new_source = Source() + new_source.start = s + new_source.length = l + return new_source + filename_used = sourceUnits[f] + + # If possible, convert the filename to its absolute/relative version + assert compilation_unit.core.crytic_compile + + filename: Filename = compilation_unit.core.crytic_compile.filename_lookup(filename_used) + is_dependency = compilation_unit.core.crytic_compile.is_dependency(filename.absolute) + + (lines, starting_column, ending_column) = _compute_line(compilation_unit, filename, s, l) + + new_source = Source() + new_source.start = s + new_source.length = l + new_source.filename = filename + new_source.is_dependency = is_dependency + new_source.lines = lines + new_source.starting_column = starting_column + new_source.ending_column = ending_column + new_source.end = new_source.start + l + return new_source + + +class SourceMapping(Context, metaclass=ABCMeta): + def __init__(self): + super().__init__() + # self._source_mapping: Optional[Dict] = None + self.source_mapping: Source = Source() + self.references: List[Source] = [] + + def set_offset(self, offset: Union["Source", str], compilation_unit: "SlitherCompilationUnit"): + if isinstance(offset, Source): + self.source_mapping.start = offset.start + self.source_mapping.length = offset.length + self.source_mapping.filename = offset.filename + self.source_mapping.is_dependency = offset.is_dependency + self.source_mapping.lines = offset.lines + self.source_mapping.starting_column = offset.starting_column + self.source_mapping.ending_column = offset.ending_column + self.source_mapping.end = offset.end else: - self._source_mapping = self._convert_source_mapping(offset, compilation_unit) + self.source_mapping = _convert_source_mapping(offset, compilation_unit) def _get_lines_str(self, line_descr=""): - lines = self.source_mapping.get("lines", None) + lines = self.source_mapping.lines if not lines: lines = "" elif len(lines) == 1: @@ -135,9 +182,21 @@ class SourceMapping(Context): def source_mapping_to_markdown(self, markdown_root: str) -> str: lines = self._get_lines_str(line_descr="L") - return f'{markdown_root}{self.source_mapping.get("filename_relative", "")}{lines}' + filename_relative: str = ( + self.source_mapping.filename.relative if self.source_mapping.filename.relative else "" + ) + return f"{markdown_root}{filename_relative}{lines}" @property def source_mapping_str(self) -> str: lines = self._get_lines_str() - return f'{self.source_mapping.get("filename_short", "")}{lines}' + filename_short: str = ( + self.source_mapping.filename.short if self.source_mapping.filename.short else "" + ) + return f"{filename_short}{lines}" + + def add_reference_from_raw_source( + self, offset: str, compilation_unit: "SlitherCompilationUnit" + ): + s = _convert_source_mapping(offset, compilation_unit) + self.references.append(s) diff --git a/slither/detectors/abstract_detector.py b/slither/detectors/abstract_detector.py index 15f6f84dd..b1df87b2b 100644 --- a/slither/detectors/abstract_detector.py +++ b/slither/detectors/abstract_detector.py @@ -212,6 +212,8 @@ class AbstractDetector(metaclass=abc.ABCMeta): return [r for (idx, r) in enumerate(results) if idx not in indexes] except ValueError: self.logger.error(yellow("Malformed input. Example of valid input: 0,1,2,3")) + results = sorted(results, key=lambda x: x["id"]) + return results @property diff --git a/slither/formatters/attributes/const_functions.py b/slither/formatters/attributes/const_functions.py index 5aaeb0b17..3795385d4 100644 --- a/slither/formatters/attributes/const_functions.py +++ b/slither/formatters/attributes/const_functions.py @@ -24,10 +24,10 @@ def custom_format(comilation_unit: SlitherCompilationUnit, result): result, element["source_mapping"]["filename_absolute"], int( - function.parameters_src().source_mapping["start"] - + function.parameters_src().source_mapping["length"] + function.parameters_src().source_mapping.start + + function.parameters_src().source_mapping.length ), - int(function.returns_src().source_mapping["start"]), + int(function.returns_src().source_mapping.start), ) diff --git a/slither/formatters/functions/external_function.py b/slither/formatters/functions/external_function.py index 1959b7a40..6b645fa8c 100644 --- a/slither/formatters/functions/external_function.py +++ b/slither/formatters/functions/external_function.py @@ -19,8 +19,8 @@ def custom_format(comilation_unit: SlitherCompilationUnit, result): comilation_unit, result, element["source_mapping"]["filename_absolute"], - int(function.parameters_src().source_mapping["start"]), - int(function.returns_src().source_mapping["start"]), + int(function.parameters_src().source_mapping.start), + int(function.returns_src().source_mapping.start), ) diff --git a/slither/formatters/naming_convention/naming_convention.py b/slither/formatters/naming_convention/naming_convention.py index 49f675cce..bad8b4418 100644 --- a/slither/formatters/naming_convention/naming_convention.py +++ b/slither/formatters/naming_convention/naming_convention.py @@ -415,9 +415,9 @@ def _explore_variables_declaration( # pylint: disable=too-many-arguments,too-ma ): for variable in variables: # First explore the type of the variable - filename_source_code = variable.source_mapping["filename_absolute"] - full_txt_start = variable.source_mapping["start"] - full_txt_end = full_txt_start + variable.source_mapping["length"] + filename_source_code = variable.source_mapping.filename.absolute + full_txt_start = variable.source_mapping.start + full_txt_end = full_txt_start + variable.source_mapping.length full_txt = slither.source_code[filename_source_code].encode("utf8")[ full_txt_start:full_txt_end ] @@ -430,7 +430,7 @@ def _explore_variables_declaration( # pylint: disable=too-many-arguments,too-ma variable.type, filename_source_code, full_txt_start, - variable.source_mapping["start"] + variable.source_mapping["length"], + variable.source_mapping.start + variable.source_mapping.length, ) # If the variable is the target @@ -445,9 +445,9 @@ def _explore_variables_declaration( # pylint: disable=too-many-arguments,too-ma # Patch comment only makes sense for local variable declaration in the parameter list if patch_comment and isinstance(variable, LocalVariable): - if "lines" in variable.source_mapping and variable.source_mapping["lines"]: + if variable.source_mapping.lines: func = variable.function - end_line = func.source_mapping["lines"][0] + end_line = func.source_mapping.lines[0] if variable in func.parameters: idx = len(func.parameters) - func.parameters.index(variable) + 1 first_line = end_line - idx - 2 @@ -459,8 +459,8 @@ def _explore_variables_declaration( # pylint: disable=too-many-arguments,too-ma first_line : end_line - 1 ] - idx_beginning = func.source_mapping["start"] - idx_beginning += -func.source_mapping["starting_column"] + 1 + idx_beginning = func.source_mapping.start + idx_beginning += -func.source_mapping.starting_column + 1 idx_beginning += -sum([len(c) for c in potential_comments]) old_comment = f"@param {old_str}".encode("utf8") @@ -495,9 +495,9 @@ def _explore_structures_declaration(slither, structures, result, target, convert old_str = st.name new_str = convert(old_str, slither) - filename_source_code = st.source_mapping["filename_absolute"] - full_txt_start = st.source_mapping["start"] - full_txt_end = full_txt_start + st.source_mapping["length"] + filename_source_code = st.source_mapping.filename.absolute + full_txt_start = st.source_mapping.start + full_txt_end = full_txt_start + st.source_mapping.length full_txt = slither.source_code[filename_source_code].encode("utf8")[ full_txt_start:full_txt_end ] @@ -518,12 +518,12 @@ def _explore_events_declaration(slither, events, result, target, convert): # If the event is the target if event == target: - filename_source_code = event.source_mapping["filename_absolute"] + filename_source_code = event.source_mapping.filename.absolute old_str = event.name new_str = convert(old_str, slither) - loc_start = event.source_mapping["start"] + loc_start = event.source_mapping.start loc_end = loc_start + len(old_str) create_patch(result, filename_source_code, loc_start, loc_end, old_str, new_str) @@ -603,9 +603,9 @@ def _explore_functions(slither, functions, result, target, convert): old_str = function.name new_str = convert(old_str, slither) - filename_source_code = function.source_mapping["filename_absolute"] - full_txt_start = function.source_mapping["start"] - full_txt_end = full_txt_start + function.source_mapping["length"] + filename_source_code = function.source_mapping.filename.absolute + full_txt_start = function.source_mapping.start + full_txt_end = full_txt_start + function.source_mapping.length full_txt = slither.source_code[filename_source_code].encode("utf8")[ full_txt_start:full_txt_end ] @@ -628,9 +628,9 @@ def _explore_enums(slither, enums, result, target, convert): old_str = enum.name new_str = convert(old_str, slither) - filename_source_code = enum.source_mapping["filename_absolute"] - full_txt_start = enum.source_mapping["start"] - full_txt_end = full_txt_start + enum.source_mapping["length"] + filename_source_code = enum.source_mapping.filename.absolute + full_txt_start = enum.source_mapping.start + full_txt_end = full_txt_start + enum.source_mapping.length full_txt = slither.source_code[filename_source_code].encode("utf8")[ full_txt_start:full_txt_end ] @@ -651,9 +651,9 @@ def _explore_contract(slither, contract, result, target, convert): _explore_enums(slither, contract.enums, result, target, convert) if contract == target: - filename_source_code = contract.source_mapping["filename_absolute"] - full_txt_start = contract.source_mapping["start"] - full_txt_end = full_txt_start + contract.source_mapping["length"] + filename_source_code = contract.source_mapping.filename.absolute + full_txt_start = contract.source_mapping.start + full_txt_end = full_txt_start + contract.source_mapping.length full_txt = slither.source_code[filename_source_code].encode("utf8")[ full_txt_start:full_txt_end ] diff --git a/slither/printers/all_printers.py b/slither/printers/all_printers.py index 833ff6494..a4f9c5a7b 100644 --- a/slither/printers/all_printers.py +++ b/slither/printers/all_printers.py @@ -17,3 +17,4 @@ from .summary.require_calls import RequireOrAssert from .summary.constructor_calls import ConstructorPrinter from .guidance.echidna import Echidna from .summary.evm import PrinterEVM +from .summary.declaration import Declaration diff --git a/slither/printers/summary/constructor_calls.py b/slither/printers/summary/constructor_calls.py index c6205b02c..4593800b9 100644 --- a/slither/printers/summary/constructor_calls.py +++ b/slither/printers/summary/constructor_calls.py @@ -1,6 +1,7 @@ """ Module printing summary of the contract """ +from slither.core.source_mapping.source_mapping import Source from slither.printers.abstract_printer import AbstractPrinter from slither.utils import output @@ -11,11 +12,11 @@ class ConstructorPrinter(AbstractPrinter): HELP = "Print the constructors executed" def _get_soruce_code(self, cst): - src_mapping = cst.source_mapping - content = self.slither.source_code[src_mapping["filename_absolute"]] - start = src_mapping["start"] - end = src_mapping["start"] + src_mapping["length"] - initial_space = src_mapping["starting_column"] + src_mapping: Source = cst.source_mapping + content = self.slither.source_code[src_mapping.filename.absolute] + start = src_mapping.start + end = src_mapping.start + src_mapping.length + initial_space = src_mapping.starting_column return " " * initial_space + content[start:end] def output(self, _filename): diff --git a/slither/printers/summary/evm.py b/slither/printers/summary/evm.py index 6b600257a..98277f021 100644 --- a/slither/printers/summary/evm.py +++ b/slither/printers/summary/evm.py @@ -35,7 +35,7 @@ def _extract_evm_info(slither): cfg.instructions, contract_srcmap_runtime, slither, - contract.source_mapping["filename_absolute"], + contract.source_mapping.filename.absolute, ) contract_bytecode_init = ( @@ -51,7 +51,7 @@ def _extract_evm_info(slither): cfg_init.instructions, contract_srcmap_init, slither, - contract.source_mapping["filename_absolute"], + contract.source_mapping.filename.absolute, ) return evm_info @@ -82,11 +82,9 @@ class PrinterEVM(AbstractPrinter): txt += blue("Contract {}\n".format(contract.name)) contract_file = self.slither.source_code[ - contract.source_mapping["filename_absolute"] + contract.source_mapping.filename.absolute ].encode("utf-8") - contract_file_lines = open( - contract.source_mapping["filename_absolute"], "r" - ).readlines() + contract_file_lines = open(contract.source_mapping.filename.absolute, "r").readlines() contract_pcs = {} contract_cfg = {} @@ -105,8 +103,7 @@ class PrinterEVM(AbstractPrinter): for node in function.nodes: txt += green("\t\tNode: " + str(node) + "\n") node_source_line = ( - contract_file[0 : node.source_mapping["start"]].count("\n".encode("utf-8")) - + 1 + contract_file[0 : node.source_mapping.start].count("\n".encode("utf-8")) + 1 ) txt += green( "\t\tSource line {}: {}\n".format( @@ -128,8 +125,7 @@ class PrinterEVM(AbstractPrinter): for node in modifier.nodes: txt += green("\t\tNode: " + str(node) + "\n") node_source_line = ( - contract_file[0 : node.source_mapping["start"]].count("\n".encode("utf-8")) - + 1 + contract_file[0 : node.source_mapping.start].count("\n".encode("utf-8")) + 1 ) txt += green( "\t\tSource line {}: {}\n".format( diff --git a/slither/printers/summary/human_summary.py b/slither/printers/summary/human_summary.py index c3c94c9a1..018637f81 100644 --- a/slither/printers/summary/human_summary.py +++ b/slither/printers/summary/human_summary.py @@ -241,8 +241,8 @@ class PrinterHumanSummary(AbstractPrinter): for compilation_unit in self.slither.compilation_units: for pragma in compilation_unit.pragma_directives: if ( - pragma.source_mapping["filename_absolute"] - == contract.source_mapping["filename_absolute"] + pragma.source_mapping.filename.absolute + == contract.source_mapping.filename.absolute ): if pragma.is_abi_encoder_v2: use_abi_encoder = True diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 95354e269..33b8778b6 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -1617,6 +1617,21 @@ def convert_delete(irs): ir.lvalue = ir.lvalue.points_to +# endregion +################################################################################### +################################################################################### +# region Source Mapping +################################################################################### +################################################################################### + + +def _find_source_mapping_references(irs: List[Operation]): + for ir in irs: + + if isinstance(ir, NewContract): + ir.contract_created.references.append(ir.expression.source_mapping) + + # endregion ################################################################################### ################################################################################### @@ -1638,4 +1653,6 @@ def apply_ir_heuristics(irs, node): convert_constant_types(irs) convert_delete(irs) + _find_source_mapping_references(irs) + return irs diff --git a/slither/solc_parsing/declarations/function.py b/slither/solc_parsing/declarations/function.py index c3f7d8fd9..429972713 100644 --- a/slither/solc_parsing/declarations/function.py +++ b/slither/solc_parsing/declarations/function.py @@ -12,6 +12,7 @@ from slither.core.declarations.function import ( from slither.core.declarations.function_contract import FunctionContract from slither.core.expressions import AssignmentOperation +from slither.core.source_mapping.source_mapping import Source from slither.core.variables.local_variable import LocalVariable from slither.core.variables.local_variable_init_from_tuple import LocalVariableInitFromTuple @@ -330,7 +331,7 @@ class FunctionSolc: ################################################################################### def _new_node( - self, node_type: NodeType, src: Union[str, Dict], scope: Union[Scope, "Function"] + self, node_type: NodeType, src: Union[str, Source], scope: Union[Scope, "Function"] ) -> NodeSolc: node = self._function.new_node(node_type, src, scope) node_parser = NodeSolc(node) diff --git a/slither/solc_parsing/expressions/expression_parsing.py b/slither/solc_parsing/expressions/expression_parsing.py index 62adebe7c..df85ca93e 100644 --- a/slither/solc_parsing/expressions/expression_parsing.py +++ b/slither/solc_parsing/expressions/expression_parsing.py @@ -2,10 +2,7 @@ import logging import re from typing import Dict, TYPE_CHECKING, Optional, Union, List, Tuple -from slither.core.declarations import Event, Enum, Structure -from slither.core.declarations.contract import Contract -from slither.core.declarations.function import Function -from slither.core.declarations.function_contract import FunctionContract +from slither.core.declarations import Event, Enum, Structure, Contract, Function, FunctionContract from slither.core.declarations.solidity_variables import ( SOLIDITY_FUNCTIONS, SOLIDITY_VARIABLES, @@ -23,21 +20,24 @@ from slither.core.expressions.binary_operation import ( BinaryOperation, BinaryOperationType, ) -from slither.core.expressions.call_expression import CallExpression -from slither.core.expressions.conditional_expression import ConditionalExpression -from slither.core.expressions.elementary_type_name_expression import ElementaryTypeNameExpression -from slither.core.expressions.identifier import Identifier -from slither.core.expressions.index_access import IndexAccess -from slither.core.expressions.literal import Literal -from slither.core.expressions.member_access import MemberAccess -from slither.core.expressions.new_array import NewArray -from slither.core.expressions.new_contract import NewContract -from slither.core.expressions.new_elementary_type import NewElementaryType -from slither.core.expressions.super_call_expression import SuperCallExpression -from slither.core.expressions.super_identifier import SuperIdentifier -from slither.core.expressions.tuple_expression import TupleExpression -from slither.core.expressions.type_conversion import TypeConversion -from slither.core.expressions.unary_operation import UnaryOperation, UnaryOperationType +from slither.core.expressions import ( + CallExpression, + ConditionalExpression, + ElementaryTypeNameExpression, + Identifier, + IndexAccess, + Literal, + MemberAccess, + NewArray, + NewContract, + NewElementaryType, + SuperCallExpression, + SuperIdentifier, + TupleExpression, + TypeConversion, + UnaryOperation, + UnaryOperationType, +) from slither.core.solidity_types import ( ArrayType, ElementaryType, @@ -264,7 +264,6 @@ def _find_variable_init( raise SlitherError( f"{type(caller_context)} ({caller_context} is not valid for find_variable" ) - return direct_contracts, direct_functions_parser, sl, sl_parser @@ -378,7 +377,6 @@ def find_variable( # function _f() internal view returns(uint){ # return 2; # } - # # } # get's AST will say that the ref declaration for _f() is A._f(), but in the context of B, its not @@ -802,6 +800,10 @@ def parse_expression(expression: Dict, caller_context: CallerContext) -> "Expres identifier = Identifier(var) identifier.set_offset(src, caller_context.compilation_unit) + # for i in range(0, identifier.source_mapping.length+1): + # caller_context.compilation_unit.core.offset_to_objects[identifier.source_mapping.filename][identifier.source_mapping.start + i] = var + var.references.append(identifier.source_mapping) + return identifier if name == "IndexAccess": @@ -853,6 +855,12 @@ def parse_expression(expression: Dict, caller_context: CallerContext) -> "Expres raise VariableNotFound("Variable not found: {}".format(super_name)) sup = SuperIdentifier(var) sup.set_offset(src, caller_context.compilation_unit) + + # for i in range(0, sup.source_mapping.length + 1): + # caller_context.compilation_unit.core.offset_to_objects[sup.source_mapping.filename][ + # sup.source_mapping.start + i] = var + var.references.append(sup.source_mapping) + return sup member_access = MemberAccess(member_name, member_type, member_expression) member_access.set_offset(src, caller_context.compilation_unit) @@ -978,6 +986,13 @@ def parse_expression(expression: Dict, caller_context: CallerContext) -> "Expres identifier = Identifier(var) identifier.set_offset(src, caller_context.compilation_unit) + + # for i in range(0, identifier.source_mapping.length + 1): + # caller_context.compilation_unit.core.offset_to_objects[identifier.source_mapping.filename][ + # identifier.source_mapping.start + i] = var + + var.references.append(identifier.source_mapping) + return identifier raise ParsingError("IdentifierPath not currently supported for the legacy ast") diff --git a/slither/solc_parsing/solidity_types/type_parsing.py b/slither/solc_parsing/solidity_types/type_parsing.py index d1c4e83cd..02161ab22 100644 --- a/slither/solc_parsing/solidity_types/type_parsing.py +++ b/slither/solc_parsing/solidity_types/type_parsing.py @@ -190,6 +190,12 @@ def _find_from_type_name( # pylint: disable=too-many-locals,too-many-branches,t return UserDefinedType(var_type) +def _add_type_references(type_found: Type, src: str, sl: "SlitherCompilationUnit"): + + if isinstance(type_found, UserDefinedType): + type_found.type.add_reference_from_raw_source(src, sl) + + def parse_type(t: Union[Dict, UnknownType], caller_context): # local import to avoid circular dependency # pylint: disable=too-many-locals,too-many-branches,too-many-statements @@ -224,6 +230,7 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): contracts = sl.contracts functions = [] elif isinstance(caller_context, (ContractSolc, FunctionSolc)): + sl = caller_context.compilation_unit if isinstance(caller_context, FunctionSolc): underlying_func = caller_context.underlying_function # If contract_parser is set to None, then underlying_function is a functionContract @@ -274,7 +281,7 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): if t[key] == "UserDefinedTypeName": if is_compact_ast: - return _find_from_type_name( + type_found = _find_from_type_name( t["typeDescriptions"]["typeString"], functions, contracts, @@ -283,10 +290,12 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): enums_direct_access, all_enums, ) + _add_type_references(type_found, t["src"], sl) + return type_found # Determine if we have a type node (otherwise we use the name node, as some older solc did not have 'type'). type_name_key = "type" if "type" in t["attributes"] else key - return _find_from_type_name( + type_found = _find_from_type_name( t["attributes"][type_name_key], functions, contracts, @@ -295,11 +304,13 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): enums_direct_access, all_enums, ) + _add_type_references(type_found, t["src"], sl) + return type_found # Introduced with Solidity 0.8 if t[key] == "IdentifierPath": if is_compact_ast: - return _find_from_type_name( + type_found = _find_from_type_name( t["name"], functions, contracts, @@ -308,6 +319,8 @@ def parse_type(t: Union[Dict, UnknownType], caller_context): enums_direct_access, all_enums, ) + _add_type_references(type_found, t["src"], sl) + return type_found raise SlitherError("Solidity 0.8 not supported with the legacy AST") diff --git a/slither/tools/flattening/flattening.py b/slither/tools/flattening/flattening.py index f2c721fcd..b1492ec4e 100644 --- a/slither/tools/flattening/flattening.py +++ b/slither/tools/flattening/flattening.py @@ -101,10 +101,10 @@ class Flattening: continue if f.visibility == "external": attributes_start = ( - f.parameters_src().source_mapping["start"] - + f.parameters_src().source_mapping["length"] + f.parameters_src().source_mapping.start + + f.parameters_src().source_mapping.length ) - attributes_end = f.returns_src().source_mapping["start"] + attributes_end = f.returns_src().source_mapping.start attributes = content[attributes_start:attributes_end] regex = re.search(r"((\sexternal)\s+)|(\sexternal)$|(\)external)$", attributes) if regex: @@ -119,8 +119,8 @@ class Flattening: for var in f.parameters: if var.location == "calldata": - calldata_start = var.source_mapping["start"] - calldata_end = calldata_start + var.source_mapping["length"] + calldata_start = var.source_mapping.start + calldata_end = calldata_start + var.source_mapping.length calldata_idx = content[calldata_start:calldata_end].find(" calldata ") to_patch.append( Patch( @@ -133,8 +133,8 @@ class Flattening: for variable in contract.state_variables_declared: if variable.visibility == "private": print(variable.source_mapping) - attributes_start = variable.source_mapping["start"] - attributes_end = attributes_start + variable.source_mapping["length"] + attributes_start = variable.source_mapping.start + attributes_end = attributes_start + variable.source_mapping.length attributes = content[attributes_start:attributes_end] print(attributes) regex = re.search(r" private ", attributes) @@ -157,7 +157,7 @@ class Flattening: if isinstance(ir, SolidityCall) and ir.function == SolidityFunction( "assert(bool)" ): - to_patch.append(Patch(node.source_mapping["start"], "line_removal")) + to_patch.append(Patch(node.source_mapping.start, "line_removal")) logger.info( f"Code commented: {node.expression} ({node.source_mapping_str})" ) diff --git a/slither/tools/mutator/mutators/MIA.py b/slither/tools/mutator/mutators/MIA.py index b8a33cb95..ca835840b 100644 --- a/slither/tools/mutator/mutators/MIA.py +++ b/slither/tools/mutator/mutators/MIA.py @@ -20,13 +20,13 @@ class MIA(AbstractMutator): # pylint: disable=too-few-public-methods for node in function.nodes: if node.type == NodeType.IF: # Retrieve the file - in_file = contract.source_mapping["filename_absolute"] + in_file = contract.source_mapping.filename.absolute # Retrieve the source code - in_file_str = contract.slither.source_code[in_file] + in_file_str = contract.compilation_unit.core.source_code[in_file] # Get the string - start = node.source_mapping["start"] - stop = start + node.source_mapping["length"] + start = node.source_mapping.start + stop = start + node.source_mapping.length old_str = in_file_str[start:stop] # Replace the expression with true diff --git a/slither/tools/mutator/utils/generic_patching.py b/slither/tools/mutator/utils/generic_patching.py index d03bfaa4f..d773ea784 100644 --- a/slither/tools/mutator/utils/generic_patching.py +++ b/slither/tools/mutator/utils/generic_patching.py @@ -15,13 +15,13 @@ def remove_assignement(variable: Variable, contract: Contract, result: Dict): :return: """ # Retrieve the file - in_file = contract.source_mapping["filename_absolute"] + in_file = contract.source_mapping.filename.absolute # Retrieve the source code in_file_str = contract.compilation_unit.core.source_code[in_file] # Get the string - start = variable.source_mapping["start"] - stop = variable.expression.source_mapping["start"] + start = variable.source_mapping.start + stop = variable.expression.source_mapping.start old_str = in_file_str[start:stop] new_str = old_str[: old_str.find("=")] @@ -30,7 +30,7 @@ def remove_assignement(variable: Variable, contract: Contract, result: Dict): result, in_file, start, - stop + variable.expression.source_mapping["length"], + stop + variable.expression.source_mapping.length, old_str, new_str, ) diff --git a/slither/tools/properties/solidity/generate_properties.py b/slither/tools/properties/solidity/generate_properties.py index 32e923ec9..54f52c517 100644 --- a/slither/tools/properties/solidity/generate_properties.py +++ b/slither/tools/properties/solidity/generate_properties.py @@ -14,7 +14,7 @@ def generate_solidity_properties( ) -> Path: solidity_import = 'import "./interfaces.sol";\n' - solidity_import += f'import "../{contract.source_mapping["filename_short"]}";' + solidity_import += f'import "../{contract.source_mapping.filename.short}";' test_contract_name = f"Properties{contract.name}{type_property}" diff --git a/slither/utils/output.py b/slither/utils/output.py index 56bfe067d..a67db3349 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -176,7 +176,7 @@ def _convert_to_id(d): def _create_base_element( - custom_type, name, source_mapping, type_specific_fields=None, additional_fields=None + custom_type, name, source_mapping: Dict, type_specific_fields=None, additional_fields=None ): if additional_fields is None: additional_fields = {} @@ -300,7 +300,7 @@ class Output: element = _create_base_element( "variable", variable.name, - variable.source_mapping, + variable.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -321,7 +321,7 @@ class Output: if additional_fields is None: additional_fields = {} element = _create_base_element( - "contract", contract.name, contract.source_mapping, {}, additional_fields + "contract", contract.name, contract.source_mapping.to_json(), {}, additional_fields ) self._data["elements"].append(element) @@ -342,7 +342,7 @@ class Output: element = _create_base_element( "function", function.name, - function.source_mapping, + function.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -368,7 +368,7 @@ class Output: element = _create_base_element( "enum", enum.name, - enum.source_mapping, + enum.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -388,7 +388,7 @@ class Output: element = _create_base_element( "struct", struct.name, - struct.source_mapping, + struct.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -411,7 +411,7 @@ class Output: element = _create_base_element( "event", event.name, - event.source_mapping, + event.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -435,7 +435,7 @@ class Output: element = _create_base_element( "node", node_name, - node.source_mapping, + node.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -459,7 +459,7 @@ class Output: element = _create_base_element( "pragma", pragma.version, - pragma.source_mapping, + pragma.source_mapping.to_json(), type_specific_fields, additional_fields, ) @@ -543,7 +543,7 @@ class Output: # If this is a source mapping object, get the underlying source mapping dictionary if isinstance(source_mapping, SourceMapping): - source_mapping = source_mapping.source_mapping + source_mapping = source_mapping.source_mapping.to_json() # Create the underlying element and add it to our resulting json element = _create_base_element("other", name, source_mapping, {}, additional_fields) diff --git a/slither/utils/source_mapping.py b/slither/utils/source_mapping.py new file mode 100644 index 000000000..3e2beb764 --- /dev/null +++ b/slither/utils/source_mapping.py @@ -0,0 +1,56 @@ +from typing import List +from crytic_compile import CryticCompile +from slither.core.declarations import Contract, Function, Enum, Event, Import, Pragma, Structure +from slither.core.solidity_types.type import Type +from slither.core.source_mapping.source_mapping import Source, SourceMapping +from slither.core.variables.variable import Variable +from slither.exceptions import SlitherError + + +def get_definition(target: SourceMapping, crytic_compile: CryticCompile) -> Source: + if isinstance(target, (Contract, Function, Enum, Event, Structure, Variable)): + # Add " " to look after the first solidity keyword + pattern = " " + target.name + elif isinstance(target, Import): + pattern = "import" + elif isinstance(target, Pragma): + pattern = "pragma" # todo maybe return with the while pragma statement + elif isinstance(target, Type): + raise SlitherError("get_definition_generic not implemented for types") + else: + raise SlitherError(f"get_definition_generic not implemented for {type(target)}") + + file_content = crytic_compile.src_content_for_file(target.source_mapping.filename.absolute) + txt = file_content[ + target.source_mapping.start : target.source_mapping.start + target.source_mapping.length + ] + + start_offset = txt.find(pattern) + 1 # remove the space + + starting_line, starting_column = crytic_compile.get_line_from_offset( + target.source_mapping.filename, target.source_mapping.start + start_offset + ) + + ending_line, ending_column = crytic_compile.get_line_from_offset( + target.source_mapping.filename, target.source_mapping.start + start_offset + len(pattern) + ) + + s = Source() + s.start = target.source_mapping.start + start_offset + s.length = len(pattern) + s.filename = target.source_mapping.filename + s.is_dependency = target.source_mapping.is_dependency + s.lines = list(range(starting_line, ending_line + 1)) + s.starting_column = starting_column + s.ending_column = ending_column + s.end = s.start + s.length + + return s + + +def get_implementation(target: SourceMapping) -> Source: + return target.source_mapping + + +def get_references(target: SourceMapping) -> List[Source]: + return target.references diff --git a/slither/utils/standard_libraries.py b/slither/utils/standard_libraries.py index d4cbdbe5e..725ea2001 100644 --- a/slither/utils/standard_libraries.py +++ b/slither/utils/standard_libraries.py @@ -54,8 +54,8 @@ def is_standard_library(contract: "Contract") -> Optional[str]: def is_openzepellin(contract: "Contract") -> bool: if not contract.is_from_dependency(): return False - path = Path(contract.source_mapping["filename_absolute"]).parts - is_zep = "openzeppelin-solidity" in Path(contract.source_mapping["filename_absolute"]).parts + path = Path(contract.source_mapping.filename.absolute).parts + is_zep = "openzeppelin-solidity" in Path(contract.source_mapping.filename.absolute).parts try: is_zep |= path[path.index("@openzeppelin") + 1] == "contracts" except IndexError: @@ -68,13 +68,13 @@ def is_openzepellin(contract: "Contract") -> bool: def is_zos(contract: "Contract") -> bool: if not contract.is_from_dependency(): return False - return "zos-lib" in Path(contract.source_mapping["filename_absolute"]).parts + return "zos-lib" in Path(contract.source_mapping.filename.absolute).parts def is_aragonos(contract: "Contract") -> bool: if not contract.is_from_dependency(): return False - return "@aragon/os" in Path(contract.source_mapping["filename_absolute"]).parts + return "@aragon/os" in Path(contract.source_mapping.filename.absolute).parts # endregion @@ -204,7 +204,7 @@ def _is_ds(contract: "Contract", name: str) -> bool: def _is_dappdhub_ds(contract: "Contract", name: str) -> bool: if not contract.is_from_dependency(): return False - if not dapphubs[name] in Path(contract.source_mapping["filename_absolute"]).parts: + if not dapphubs[name] in Path(contract.source_mapping.filename.absolute).parts: return False return _is_ds(contract, name) diff --git a/slither/utils/tests_pattern.py b/slither/utils/tests_pattern.py index 52b2cc105..e537a665b 100644 --- a/slither/utils/tests_pattern.py +++ b/slither/utils/tests_pattern.py @@ -43,7 +43,7 @@ def is_test_contract(contract: "Contract") -> bool: _is_test_pattern(contract.name, "Test") or _is_test_pattern(contract.name, "Mock") or ( - contract.source_mapping["filename_absolute"] - and is_test_file(Path(contract.source_mapping["filename_absolute"])) + contract.source_mapping.filename.absolute + and is_test_file(Path(contract.source_mapping.filename.absolute)) ) ) diff --git a/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json b/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json index dde3da906..f85f42876 100644 --- a/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json +++ b/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 1076, "length": 154, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -145,7 +145,7 @@ "source_mapping": { "start": 1195, "length": 30, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -163,7 +163,7 @@ "source_mapping": { "start": 1076, "length": 154, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -183,7 +183,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -309,19 +309,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad4", "source_mapping": { - "start": 540, - "length": 61, - "filename_used": "/GENERIC_PATH", + "start": 1296, + "length": 148, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 44, + 45, + 46 ], "starting_column": 3, "ending_column": 4 @@ -333,7 +333,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -441,42 +441,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad4()" } }, { "type": "node", - "name": "this.bad0_external(bad_arr)", + "name": "event1_bad(bad_arr)", "source_mapping": { - "start": 569, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 1415, + "length": 24, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 22 + 45 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad4", "source_mapping": { - "start": 540, - "length": 61, - "filename_used": "/GENERIC_PATH", + "start": 1296, + "length": 148, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 44, + 45, + 46 ], "starting_column": 3, "ending_column": 4 @@ -488,7 +488,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -596,16 +596,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad4()" } } } } ], - "description": "Function A.bad0() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#21-23) trigger an abi encoding bug:\n\t- this.bad0_external(bad_arr) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#22)\n", - "markdown": "Function [A.bad0()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L21-L23) trigger an abi encoding bug:\n\t- [this.bad0_external(bad_arr)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L22)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L21-L23", - "id": "3752da45df0ba78cc9ac01a10b398e4ad74e6ddd572764cf2f361e523a43a998", + "description": "Function A.bad4() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#44-46) trigger an abi encoding bug:\n\t- event1_bad(bad_arr) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#45)\n", + "markdown": "Function [A.bad4()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L44-L46) trigger an abi encoding bug:\n\t- [event1_bad(bad_arr)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L45)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L44-L46", + "id": "144c77aebb4037fe38c2864892ecb888a4fb7d5e92e321e664b2d2226658a166", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" @@ -614,19 +614,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 726, - "length": 63, - "filename_used": "/GENERIC_PATH", + "start": 540, + "length": 61, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 29, - 30, - 31 + 21, + 22, + 23 ], "starting_column": 3, "ending_column": 4 @@ -638,7 +638,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -746,42 +746,42 @@ "ending_column": 2 } }, - "signature": "bad1(A.S[3])" + "signature": "bad0()" } }, { "type": "node", - "name": "this.bad1_external(s)", + "name": "this.bad0_external(bad_arr)", "source_mapping": { - "start": 763, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 569, + "length": 27, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 30 + 22 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 726, - "length": 63, - "filename_used": "/GENERIC_PATH", + "start": 540, + "length": 61, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 29, - 30, - 31 + 21, + 22, + 23 ], "starting_column": 3, "ending_column": 4 @@ -793,7 +793,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -901,16 +901,16 @@ "ending_column": 2 } }, - "signature": "bad1(A.S[3])" + "signature": "bad0()" } } } } ], - "description": "Function A.bad1(A.S[3]) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#29-31) trigger an abi encoding bug:\n\t- this.bad1_external(s) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#30)\n", - "markdown": "Function [A.bad1(A.S[3])](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L29-L31) trigger an abi encoding bug:\n\t- [this.bad1_external(s)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L30)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L29-L31", - "id": "3febdd98f71332c80290c9557c5ef89ea9dbea4f520a084b0307f21b00da5010", + "description": "Function A.bad0() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#21-23) trigger an abi encoding bug:\n\t- this.bad0_external(bad_arr) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#22)\n", + "markdown": "Function [A.bad0()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L21-L23) trigger an abi encoding bug:\n\t- [this.bad0_external(bad_arr)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L22)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L21-L23", + "id": "3752da45df0ba78cc9ac01a10b398e4ad74e6ddd572764cf2f361e523a43a998", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" @@ -919,19 +919,19 @@ "elements": [ { "type": "function", - "name": "bad5", + "name": "bad1", "source_mapping": { - "start": 1511, - "length": 142, - "filename_used": "/GENERIC_PATH", + "start": 726, + "length": 63, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 49, - 50, - 51 + 29, + 30, + 31 ], "starting_column": 3, "ending_column": 4 @@ -943,7 +943,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1051,42 +1051,42 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad1(A.S[3])" } }, { "type": "node", - "name": "event2_bad(s)", + "name": "this.bad1_external(s)", "source_mapping": { - "start": 1630, - "length": 18, - "filename_used": "/GENERIC_PATH", + "start": 763, + "length": 21, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 50 + 30 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad1", "source_mapping": { - "start": 1511, - "length": 142, - "filename_used": "/GENERIC_PATH", + "start": 726, + "length": 63, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 49, - 50, - 51 + 29, + 30, + 31 ], "starting_column": 3, "ending_column": 4 @@ -1098,7 +1098,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1206,16 +1206,16 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad1(A.S[3])" } } } } ], - "description": "Function A.bad5() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#49-51) trigger an abi encoding bug:\n\t- event2_bad(s) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#50)\n", - "markdown": "Function [A.bad5()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L49-L51) trigger an abi encoding bug:\n\t- [event2_bad(s)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L50)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L49-L51", - "id": "e77767c95f4548636027a859ca0c63402cfb50af242f116dd3cfc5b038a4128e", + "description": "Function A.bad1(A.S[3]) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#29-31) trigger an abi encoding bug:\n\t- this.bad1_external(s) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#30)\n", + "markdown": "Function [A.bad1(A.S[3])](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L29-L31) trigger an abi encoding bug:\n\t- [this.bad1_external(s)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L30)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L29-L31", + "id": "3febdd98f71332c80290c9557c5ef89ea9dbea4f520a084b0307f21b00da5010", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" @@ -1224,19 +1224,19 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 1296, - "length": 148, - "filename_used": "/GENERIC_PATH", + "start": 852, + "length": 160, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 44, - 45, - 46 + 34, + 35, + 36 ], "starting_column": 3, "ending_column": 4 @@ -1248,7 +1248,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1356,42 +1356,42 @@ "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad2()" } }, { "type": "node", - "name": "event1_bad(bad_arr)", + "name": "b = abi.encode(bad_arr)", "source_mapping": { - "start": 1415, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 971, + "length": 36, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 45 + 35 ], "starting_column": 5, - "ending_column": 29 + "ending_column": 41 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 1296, - "length": 148, - "filename_used": "/GENERIC_PATH", + "start": 852, + "length": 160, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 44, - 45, - 46 + 34, + 35, + 36 ], "starting_column": 3, "ending_column": 4 @@ -1403,7 +1403,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1511,16 +1511,16 @@ "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad2()" } } } } ], - "description": "Function A.bad4() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#44-46) trigger an abi encoding bug:\n\t- event1_bad(bad_arr) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#45)\n", - "markdown": "Function [A.bad4()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L44-L46) trigger an abi encoding bug:\n\t- [event1_bad(bad_arr)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L45)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L44-L46", - "id": "144c77aebb4037fe38c2864892ecb888a4fb7d5e92e321e664b2d2226658a166", + "description": "Function A.bad2() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#34-36) trigger an abi encoding bug:\n\t- b = abi.encode(bad_arr) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#35)\n", + "markdown": "Function [A.bad2()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L34-L36) trigger an abi encoding bug:\n\t- [b = abi.encode(bad_arr)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L35)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L34-L36", + "id": "d5860309d331920d1e3f44508fea706df75a4a7c2e93666ca96ca00ef32d7e01", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" @@ -1529,19 +1529,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 852, - "length": 160, - "filename_used": "/GENERIC_PATH", + "start": 1511, + "length": 142, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 34, - 35, - 36 + 49, + 50, + 51 ], "starting_column": 3, "ending_column": 4 @@ -1553,7 +1553,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1661,42 +1661,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad5()" } }, { "type": "node", - "name": "b = abi.encode(bad_arr)", + "name": "event2_bad(s)", "source_mapping": { - "start": 971, - "length": 36, - "filename_used": "/GENERIC_PATH", + "start": 1630, + "length": 18, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 35 + 50 ], "starting_column": 5, - "ending_column": 41 + "ending_column": 23 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 852, - "length": 160, - "filename_used": "/GENERIC_PATH", + "start": 1511, + "length": 142, + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 34, - 35, - 36 + 49, + 50, + 51 ], "starting_column": 3, "ending_column": 4 @@ -1708,7 +1708,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1816,16 +1816,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad5()" } } } } ], - "description": "Function A.bad2() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#34-36) trigger an abi encoding bug:\n\t- b = abi.encode(bad_arr) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#35)\n", - "markdown": "Function [A.bad2()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L34-L36) trigger an abi encoding bug:\n\t- [b = abi.encode(bad_arr)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L35)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L34-L36", - "id": "d5860309d331920d1e3f44508fea706df75a4a7c2e93666ca96ca00ef32d7e01", + "description": "Function A.bad5() (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#49-51) trigger an abi encoding bug:\n\t- event2_bad(s) (tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#50)\n", + "markdown": "Function [A.bad5()](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L49-L51) trigger an abi encoding bug:\n\t- [event2_bad(s)](tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L50)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol#L49-L51", + "id": "e77767c95f4548636027a859ca0c63402cfb50af242f116dd3cfc5b038a4128e", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" diff --git a/tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol.0.5.9.ABIEncoderV2Array.json b/tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol.0.5.9.ABIEncoderV2Array.json index 3b7f30c22..4313bb02a 100644 --- a/tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol.0.5.9.ABIEncoderV2Array.json +++ b/tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol.0.5.9.ABIEncoderV2Array.json @@ -309,19 +309,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 877, - "length": 160, + "start": 1101, + "length": 154, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 34, - 35, - 36 + 39, + 40, + 41 ], "starting_column": 3, "ending_column": 4 @@ -441,42 +441,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad3()" } }, { "type": "node", - "name": "b = abi.encode(bad_arr)", + "name": "b = abi.encode(s)", "source_mapping": { - "start": 996, - "length": 36, + "start": 1220, + "length": 30, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 35 + 40 ], "starting_column": 5, - "ending_column": 41 + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 877, - "length": 160, + "start": 1101, + "length": 154, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 34, - 35, - 36 + 39, + 40, + 41 ], "starting_column": 3, "ending_column": 4 @@ -596,16 +596,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad3()" } } } } ], - "description": "Function A.bad2() (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#34-36) trigger an abi encoding bug:\n\t- b = abi.encode(bad_arr) (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#35)\n", - "markdown": "Function [A.bad2()](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L34-L36) trigger an abi encoding bug:\n\t- [b = abi.encode(bad_arr)](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L35)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L34-L36", - "id": "e976cd11118a9f5aaacfe5715cef990140fd67c7a35682446aedc878b63b3b24", + "description": "Function A.bad3() (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#39-41) trigger an abi encoding bug:\n\t- b = abi.encode(s) (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#40)\n", + "markdown": "Function [A.bad3()](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L39-L41) trigger an abi encoding bug:\n\t- [b = abi.encode(s)](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L40)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L39-L41", + "id": "37e980d8d34fcffe10d2533052de986dd57c1d45700f02234332b275b532c71d", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" @@ -919,19 +919,19 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad4", "source_mapping": { - "start": 1101, - "length": 154, + "start": 1321, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 39, - 40, - 41 + 44, + 45, + 46 ], "starting_column": 3, "ending_column": 4 @@ -1051,42 +1051,42 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad4()" } }, { "type": "node", - "name": "b = abi.encode(s)", + "name": "event1_bad(bad_arr)", "source_mapping": { - "start": 1220, - "length": 30, + "start": 1440, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 40 + 45 ], "starting_column": 5, - "ending_column": 35 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad4", "source_mapping": { - "start": 1101, - "length": 154, + "start": 1321, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 39, - 40, - 41 + 44, + 45, + 46 ], "starting_column": 3, "ending_column": 4 @@ -1206,16 +1206,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad4()" } } } } ], - "description": "Function A.bad3() (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#39-41) trigger an abi encoding bug:\n\t- b = abi.encode(s) (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#40)\n", - "markdown": "Function [A.bad3()](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L39-L41) trigger an abi encoding bug:\n\t- [b = abi.encode(s)](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L40)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L39-L41", - "id": "37e980d8d34fcffe10d2533052de986dd57c1d45700f02234332b275b532c71d", + "description": "Function A.bad4() (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#44-46) trigger an abi encoding bug:\n\t- event1_bad(bad_arr) (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#45)\n", + "markdown": "Function [A.bad4()](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L44-L46) trigger an abi encoding bug:\n\t- [event1_bad(bad_arr)](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L45)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L44-L46", + "id": "6e9dfeb7f6ea7c989276fa8c5e27d71ab0f6b63ee878fb3f761dab9d07942246", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" @@ -1529,19 +1529,19 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 1321, - "length": 148, + "start": 877, + "length": 160, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 44, - 45, - 46 + 34, + 35, + 36 ], "starting_column": 3, "ending_column": 4 @@ -1661,42 +1661,42 @@ "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad2()" } }, { "type": "node", - "name": "event1_bad(bad_arr)", + "name": "b = abi.encode(bad_arr)", "source_mapping": { - "start": 1440, - "length": 24, + "start": 996, + "length": 36, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 45 + 35 ], "starting_column": 5, - "ending_column": 29 + "ending_column": 41 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 1321, - "length": 148, + "start": 877, + "length": 160, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol", "is_dependency": false, "lines": [ - 44, - 45, - 46 + 34, + 35, + 36 ], "starting_column": 3, "ending_column": 4 @@ -1816,16 +1816,16 @@ "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad2()" } } } } ], - "description": "Function A.bad4() (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#44-46) trigger an abi encoding bug:\n\t- event1_bad(bad_arr) (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#45)\n", - "markdown": "Function [A.bad4()](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L44-L46) trigger an abi encoding bug:\n\t- [event1_bad(bad_arr)](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L45)\n", - "first_markdown_element": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L44-L46", - "id": "6e9dfeb7f6ea7c989276fa8c5e27d71ab0f6b63ee878fb3f761dab9d07942246", + "description": "Function A.bad2() (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#34-36) trigger an abi encoding bug:\n\t- b = abi.encode(bad_arr) (tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#35)\n", + "markdown": "Function [A.bad2()](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L34-L36) trigger an abi encoding bug:\n\t- [b = abi.encode(bad_arr)](tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L35)\n", + "first_markdown_element": "tests/detectors/abiencoderv2-array/0.5.9/storage_ABIEncoderV2_array.sol#L34-L36", + "id": "e976cd11118a9f5aaacfe5715cef990140fd67c7a35682446aedc878b63b3b24", "check": "abiencoderv2-array", "impact": "High", "confidence": "High" diff --git a/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json index 54595becc..b215f0e96 100644 --- a/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "direct", + "name": "indirect", "source_mapping": { - "start": 147, - "length": 79, + "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": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -80,42 +80,42 @@ "ending_column": 2 } }, - "signature": "direct()" + "signature": "indirect()" } }, { "type": "node", - "name": "msg.sender.send(address(this).balance)", + "name": "destination.send(address(this).balance)", "source_mapping": { - "start": 181, - "length": 38, + "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": [ - 12 + 20 ], "starting_column": 9, - "ending_column": 47 + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", - "name": "direct", + "name": "indirect", "source_mapping": { - "start": 147, - "length": 79, + "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": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -179,16 +179,16 @@ "ending_column": 2 } }, - "signature": "direct()" + "signature": "indirect()" } } } } ], - "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", - "first_markdown_element": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L11-L13", - "id": "477cc1ab9fa3d2263400e47d09146eaed3e478f5eecf7856b59d49a2a5093a1c", + "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", + "first_markdown_element": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L19-L21", + "id": "4759805615df746a3d8a6c068ce885d2c18c46edf411f83ae004593958caafe7", "check": "arbitrary-send", "impact": "High", "confidence": "Medium" @@ -197,19 +197,19 @@ "elements": [ { "type": "function", - "name": "indirect", + "name": "direct", "source_mapping": { - "start": 301, - "length": 82, + "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": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -273,42 +273,42 @@ "ending_column": 2 } }, - "signature": "indirect()" + "signature": "direct()" } }, { "type": "node", - "name": "destination.send(address(this).balance)", + "name": "msg.sender.send(address(this).balance)", "source_mapping": { - "start": 337, - "length": 39, + "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": [ - 20 + 12 ], "starting_column": 9, - "ending_column": 48 + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "indirect", + "name": "direct", "source_mapping": { - "start": 301, - "length": 82, + "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": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -372,16 +372,16 @@ "ending_column": 2 } }, - "signature": "indirect()" + "signature": "direct()" } } } } ], - "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", - "first_markdown_element": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L19-L21", - "id": "4759805615df746a3d8a6c068ce885d2c18c46edf411f83ae004593958caafe7", + "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", + "first_markdown_element": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol#L11-L13", + "id": "477cc1ab9fa3d2263400e47d09146eaed3e478f5eecf7856b59d49a2a5093a1c", "check": "arbitrary-send", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json index cfb1bcc13..77f96c966 100644 --- a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -89,7 +89,7 @@ "source_mapping": { "start": 196, "length": 38, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -107,7 +107,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -127,7 +127,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -201,7 +201,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -221,7 +221,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -282,7 +282,7 @@ "source_mapping": { "start": 352, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -300,7 +300,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", @@ -320,7 +320,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", "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", diff --git a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json index cde2f95aa..b534ea0c3 100644 --- a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -89,7 +89,7 @@ "source_mapping": { "start": 196, "length": 38, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -107,7 +107,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -127,7 +127,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -201,7 +201,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -221,7 +221,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -282,7 +282,7 @@ "source_mapping": { "start": 352, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -300,7 +300,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", @@ -320,7 +320,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", "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", diff --git a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json index a87969ad5..0f0fe4d57 100644 --- a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "direct", + "name": "indirect", "source_mapping": { - "start": 162, - "length": 79, + "start": 316, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -80,42 +80,42 @@ "ending_column": 2 } }, - "signature": "direct()" + "signature": "indirect()" } }, { "type": "node", - "name": "msg.sender.send(address(this).balance)", + "name": "destination.send(address(this).balance)", "source_mapping": { - "start": 196, - "length": 38, + "start": 352, + "length": 39, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "is_dependency": false, "lines": [ - 12 + 20 ], "starting_column": 9, - "ending_column": 47 + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", - "name": "direct", + "name": "indirect", "source_mapping": { - "start": 162, - "length": 79, + "start": 316, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -179,16 +179,16 @@ "ending_column": 2 } }, - "signature": "direct()" + "signature": "indirect()" } } } } ], - "description": "Test.direct() (tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#12)\n", - "markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#L12)\n", - "first_markdown_element": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol#L11-L13", - "id": "90d9178119fb586af18c2298136d7f1af4d33a9b702b94d2ca0fcdbe6ee783c6", + "description": "Test.indirect() (tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#20)\n", + "markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#L20)\n", + "first_markdown_element": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol#L19-L21", + "id": "3bf41470de6f5fec21d1da5741e7d63ee1d3b63cfd2646d697274f4495e3f1a9", "check": "arbitrary-send", "impact": "High", "confidence": "Medium" @@ -197,19 +197,19 @@ "elements": [ { "type": "function", - "name": "indirect", + "name": "direct", "source_mapping": { - "start": 316, - "length": 82, + "start": 162, + "length": 79, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -273,42 +273,42 @@ "ending_column": 2 } }, - "signature": "indirect()" + "signature": "direct()" } }, { "type": "node", - "name": "destination.send(address(this).balance)", + "name": "msg.sender.send(address(this).balance)", "source_mapping": { - "start": 352, - "length": 39, + "start": 196, + "length": 38, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "is_dependency": false, "lines": [ - 20 + 12 ], "starting_column": 9, - "ending_column": 48 + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "indirect", + "name": "direct", "source_mapping": { - "start": 316, - "length": 82, + "start": 162, + "length": 79, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -372,16 +372,16 @@ "ending_column": 2 } }, - "signature": "indirect()" + "signature": "direct()" } } } } ], - "description": "Test.indirect() (tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#20)\n", - "markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#L20)\n", - "first_markdown_element": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol#L19-L21", - "id": "3bf41470de6f5fec21d1da5741e7d63ee1d3b63cfd2646d697274f4495e3f1a9", + "description": "Test.direct() (tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#12)\n", + "markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.7.6/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.7.6/arbitrary_send.sol#L12)\n", + "first_markdown_element": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol#L11-L13", + "id": "90d9178119fb586af18c2298136d7f1af4d33a9b702b94d2ca0fcdbe6ee783c6", "check": "arbitrary-send", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json b/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json index c6ed351f1..26dab9b12 100644 --- a/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json @@ -6,19 +6,21 @@ "type": "function", "name": "f", "source_mapping": { - "start": 40, - "length": 167, + "start": 855, + "length": 269, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6, - 7, - 8 + 42, + 43, + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -26,48 +28,41 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "C", + "name": "D", "source_mapping": { - "start": 0, - "length": 686, + "start": 688, + "length": 440, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.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 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, "signature": "f()" @@ -77,18 +72,80 @@ "type": "variable", "name": "x", "source_mapping": { - "start": 17, - "length": 16, + "start": 822, + "length": 9, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 2 + 39 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 688, + "length": 440, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + } + } + }, + { + "type": "function", + "name": "setByValueAndReturn", + "source_mapping": { + "start": 571, + "length": 113, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 25, + 26, + 27, + 28 + ], + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -136,6 +193,143 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "setByValueAndReturn(uint256[1])" + } + } + ], + "description": "D.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48", + "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "check": "array-by-reference", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 855, + "length": 269, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 688, + "length": 440, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + }, + { + "type": "variable", + "name": "x", + "source_mapping": { + "start": 822, + "length": 9, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 39 + ], + "starting_column": 5, + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 688, + "length": 440, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } } } }, @@ -209,10 +403,10 @@ } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8", - "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", + "description": "D.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48", + "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -358,20 +552,19 @@ }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 571, - "length": 113, + "start": 498, + "length": 67, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -423,14 +616,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "description": "C.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L21-L23)which only takes arrays by value\n", "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8", - "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", + "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -439,22 +632,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 213, - "length": 198, + "start": 40, + "length": 167, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15 + 4, + 5, + 6, + 7, + 8 ], "starting_column": 5, "ending_column": 6 @@ -506,116 +698,91 @@ "ending_column": 2 } }, - "signature": "g()" + "signature": "f()" } }, { "type": "variable", - "name": "y", + "name": "x", "source_mapping": { - "start": 243, - "length": 21, + "start": 17, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 11 + 2 ], - "starting_column": 9, - "ending_column": 30 + "starting_column": 5, + "ending_column": 21 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "g", + "type": "contract", + "name": "C", "source_mapping": { - "start": 213, - "length": 198, + "start": 0, + "length": 686, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, 10, 11, 12, 13, 14, - 15 + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 686, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" + "starting_column": 1, + "ending_column": 2 } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 67, + "start": 571, + "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -667,14 +834,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "C.g() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15", - "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", + "description": "C.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L4-L8", + "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -812,260 +979,55 @@ 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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" - } - } - } - }, - { - "type": "function", - "name": "setByValueAndReturn", - "source_mapping": { - "start": 571, - "length": 113, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27, - 28 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 686, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setByValueAndReturn(uint256[1])" - } - } - ], - "description": "C.g() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15", - "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", - "check": "array-by-reference", - "impact": "High", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "f", - "source_mapping": { - "start": 855, - "length": 269, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 688, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "f()" - } - }, - { - "type": "variable", - "name": "x", - "source_mapping": { - "start": 822, - "length": 9, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 39 - ], - "starting_column": 5, - "ending_column": 14 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 688, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 67, + "start": 571, + "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -1117,14 +1079,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48", - "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", + "description": "C.g() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15", + "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -1133,23 +1095,22 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 855, - "length": 269, + "start": 213, + "length": 198, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -1157,121 +1118,160 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "D", + "name": "C", "source_mapping": { - "start": 688, - "length": 440, + "start": 0, + "length": 686, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 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 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, - "signature": "f()" + "signature": "g()" } }, { "type": "variable", - "name": "x", + "name": "y", "source_mapping": { - "start": 822, - "length": 9, + "start": 243, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 39 + 11 ], - "starting_column": 5, - "ending_column": 14 + "starting_column": 9, + "ending_column": 30 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "D", + "type": "function", + "name": "g", "source_mapping": { - "start": 688, - "length": 440, + "start": 213, + "length": 198, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 10, + 11, + 12, + 13, + 14, + 15 ], - "starting_column": 1, - "ending_column": 0 + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 686, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 571, - "length": 113, + "start": 498, + "length": 67, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -1323,14 +1323,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L42-L48", - "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "description": "C.g() (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol#L10-L15", + "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", "check": "array-by-reference", "impact": "High", "confidence": "High" diff --git a/tests/detectors/array-by-reference/0.5.16/array_by_reference.sol.0.5.16.ArrayByReference.json b/tests/detectors/array-by-reference/0.5.16/array_by_reference.sol.0.5.16.ArrayByReference.json index 724e17bf2..fc6a5ffbe 100644 --- a/tests/detectors/array-by-reference/0.5.16/array_by_reference.sol.0.5.16.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.5.16/array_by_reference.sol.0.5.16.ArrayByReference.json @@ -6,19 +6,21 @@ "type": "function", "name": "f", "source_mapping": { - "start": 40, - "length": 167, - "filename_used": "/GENERIC_PATH", + "start": 869, + "length": 269, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6, - 7, - 8 + 42, + 43, + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -26,48 +28,41 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "C", + "name": "D", "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.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 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, "signature": "f()" @@ -77,18 +72,80 @@ "type": "variable", "name": "x", "source_mapping": { - "start": 17, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 836, + "length": 9, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 2 + 39 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + } + } + }, + { + "type": "function", + "name": "setByValueAndReturn", + "source_mapping": { + "start": 578, + "length": 120, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 25, + 26, + 27, + 28 + ], + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -97,7 +154,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -136,6 +193,143 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "setByValueAndReturn(uint256[1])" + } + } + ], + "description": "D.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48", + "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "check": "array-by-reference", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 869, + "length": 269, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + }, + { + "type": "variable", + "name": "x", + "source_mapping": { + "start": 836, + "length": 9, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 39 + ], + "starting_column": 5, + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } } } }, @@ -145,7 +339,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -165,7 +359,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -209,10 +403,10 @@ } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8", - "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", + "description": "D.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48", + "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -225,7 +419,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -247,7 +441,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -296,7 +490,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -314,7 +508,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -358,20 +552,19 @@ }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 498, + "length": 74, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -383,7 +576,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -423,14 +616,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "description": "C.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L21-L23)which only takes arrays by value\n", "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8", - "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", + "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -439,22 +632,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 213, - "length": 198, - "filename_used": "/GENERIC_PATH", + "start": 40, + "length": 167, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15 + 4, + 5, + 6, + 7, + 8 ], "starting_column": 5, "ending_column": 6 @@ -466,7 +658,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -506,116 +698,91 @@ "ending_column": 2 } }, - "signature": "g()" + "signature": "f()" } }, { "type": "variable", - "name": "y", + "name": "x", "source_mapping": { - "start": 243, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 17, + "length": 16, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 11 + 2 ], - "starting_column": 9, - "ending_column": 30 + "starting_column": 5, + "ending_column": 21 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "g", + "type": "contract", + "name": "C", "source_mapping": { - "start": 213, - "length": 198, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 700, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, 10, 11, 12, 13, 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 74, - "filename_used": "/GENERIC_PATH", + "start": 578, + "length": 120, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -627,7 +794,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -667,14 +834,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "C.g() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15", - "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", + "description": "C.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L4-L8", + "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -687,7 +854,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -710,7 +877,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -759,7 +926,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -777,7 +944,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -800,7 +967,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -811,261 +978,56 @@ 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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" - } - } - } - }, - { - "type": "function", - "name": "setByValueAndReturn", - "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27, - 28 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setByValueAndReturn(uint256[1])" - } - } - ], - "description": "C.g() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15", - "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", - "check": "array-by-reference", - "impact": "High", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "f", - "source_mapping": { - "start": 869, - "length": 269, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "f()" - } - }, - { - "type": "variable", - "name": "x", - "source_mapping": { - "start": 836, - "length": 9, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 39 - ], - "starting_column": 5, - "ending_column": 14 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 74, - "filename_used": "/GENERIC_PATH", + "start": 578, + "length": 120, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -1077,7 +1039,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -1117,14 +1079,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48", - "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", + "description": "C.g() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15", + "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -1133,23 +1095,22 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 869, - "length": 269, - "filename_used": "/GENERIC_PATH", + "start": 213, + "length": 198, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -1157,121 +1118,160 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "D", + "name": "C", "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 700, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 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 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, - "signature": "f()" + "signature": "g()" } }, { "type": "variable", - "name": "x", + "name": "y", "source_mapping": { - "start": 836, - "length": 9, - "filename_used": "/GENERIC_PATH", + "start": 243, + "length": 21, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 39 + 11 ], - "starting_column": 5, - "ending_column": 14 + "starting_column": 9, + "ending_column": 30 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "D", + "type": "function", + "name": "g", "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", + "start": 213, + "length": 198, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 10, + 11, + 12, + 13, + 14, + 15 ], - "starting_column": 1, - "ending_column": 0 + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 700, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 498, + "length": 74, + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -1283,7 +1283,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol", @@ -1323,14 +1323,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L42-L48", - "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "description": "C.g() (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.5.16/array_by_reference.sol#L10-L15", + "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", "check": "array-by-reference", "impact": "High", "confidence": "High" diff --git a/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json b/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json index c6dcc82f8..20fdaf675 100644 --- a/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json @@ -6,19 +6,21 @@ "type": "function", "name": "f", "source_mapping": { - "start": 40, - "length": 167, + "start": 869, + "length": 269, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6, - 7, - 8 + 42, + 43, + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -26,48 +28,41 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "C", + "name": "D", "source_mapping": { - "start": 0, - "length": 700, + "start": 702, + "length": 440, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.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 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, "signature": "f()" @@ -77,18 +72,80 @@ "type": "variable", "name": "x", "source_mapping": { - "start": 17, - "length": 16, + "start": 836, + "length": 9, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 2 + 39 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + } + } + }, + { + "type": "function", + "name": "setByValueAndReturn", + "source_mapping": { + "start": 578, + "length": 120, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 25, + 26, + 27, + 28 + ], + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -136,6 +193,143 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "setByValueAndReturn(uint256[1])" + } + } + ], + "description": "D.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48", + "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "check": "array-by-reference", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 869, + "length": 269, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + }, + { + "type": "variable", + "name": "x", + "source_mapping": { + "start": 836, + "length": 9, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 39 + ], + "starting_column": 5, + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } } } }, @@ -209,10 +403,10 @@ } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8", - "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", + "description": "D.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48", + "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -358,20 +552,19 @@ }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 578, - "length": 120, + "start": 498, + "length": 74, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -423,14 +616,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "description": "C.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L21-L23)which only takes arrays by value\n", "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8", - "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", + "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -439,22 +632,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 213, - "length": 198, + "start": 40, + "length": 167, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15 + 4, + 5, + 6, + 7, + 8 ], "starting_column": 5, "ending_column": 6 @@ -506,116 +698,91 @@ "ending_column": 2 } }, - "signature": "g()" + "signature": "f()" } }, { "type": "variable", - "name": "y", + "name": "x", "source_mapping": { - "start": 243, - "length": 21, + "start": 17, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 11 + 2 ], - "starting_column": 9, - "ending_column": 30 + "starting_column": 5, + "ending_column": 21 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "g", + "type": "contract", + "name": "C", "source_mapping": { - "start": 213, - "length": 198, + "start": 0, + "length": 700, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, 10, 11, 12, 13, 14, - 15 + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" + "starting_column": 1, + "ending_column": 2 } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 74, + "start": 578, + "length": 120, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -667,14 +834,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "C.g() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15", - "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", + "description": "C.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L4-L8", + "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -812,260 +979,55 @@ 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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" - } - } - } - }, - { - "type": "function", - "name": "setByValueAndReturn", - "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27, - 28 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setByValueAndReturn(uint256[1])" - } - } - ], - "description": "C.g() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15", - "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", - "check": "array-by-reference", - "impact": "High", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "f", - "source_mapping": { - "start": 869, - "length": 269, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "f()" - } - }, - { - "type": "variable", - "name": "x", - "source_mapping": { - "start": 836, - "length": 9, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 39 - ], - "starting_column": 5, - "ending_column": 14 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 74, + "start": 578, + "length": 120, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -1117,14 +1079,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48", - "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", + "description": "C.g() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15", + "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -1133,23 +1095,22 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 869, - "length": 269, + "start": 213, + "length": 198, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -1157,121 +1118,160 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "D", + "name": "C", "source_mapping": { - "start": 702, - "length": 440, + "start": 0, + "length": 700, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 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 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, - "signature": "f()" + "signature": "g()" } }, { "type": "variable", - "name": "x", + "name": "y", "source_mapping": { - "start": 836, - "length": 9, + "start": 243, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 39 + 11 ], - "starting_column": 5, - "ending_column": 14 + "starting_column": 9, + "ending_column": 30 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "D", + "type": "function", + "name": "g", "source_mapping": { - "start": 702, - "length": 440, + "start": 213, + "length": 198, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 10, + 11, + 12, + 13, + 14, + 15 ], - "starting_column": 1, - "ending_column": 0 + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 700, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 578, - "length": 120, + "start": 498, + "length": 74, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -1323,14 +1323,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L42-L48", - "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "description": "C.g() (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol#L10-L15", + "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", "check": "array-by-reference", "impact": "High", "confidence": "High" diff --git a/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json b/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json index 65bea0e79..72ad9e8cf 100644 --- a/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json @@ -6,19 +6,21 @@ "type": "function", "name": "f", "source_mapping": { - "start": 40, - "length": 167, - "filename_used": "/GENERIC_PATH", + "start": 869, + "length": 269, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6, - 7, - 8 + 42, + 43, + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -26,48 +28,41 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "C", + "name": "D", "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.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 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, "signature": "f()" @@ -77,18 +72,80 @@ "type": "variable", "name": "x", "source_mapping": { - "start": 17, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 836, + "length": 9, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 2 + 39 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + } + } + }, + { + "type": "function", + "name": "setByValueAndReturn", + "source_mapping": { + "start": 578, + "length": 120, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 25, + 26, + 27, + 28 + ], + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -97,7 +154,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -136,6 +193,143 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "setByValueAndReturn(uint256[1])" + } + } + ], + "description": "D.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48", + "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "check": "array-by-reference", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "f", + "source_mapping": { + "start": 869, + "length": 269, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "f()" + } + }, + { + "type": "variable", + "name": "x", + "source_mapping": { + "start": 836, + "length": 9, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 39 + ], + "starting_column": 5, + "ending_column": 14 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 702, + "length": 440, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "is_dependency": false, + "lines": [ + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 + ], + "starting_column": 1, + "ending_column": 0 + } } } }, @@ -145,7 +339,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -165,7 +359,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -209,10 +403,10 @@ } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8", - "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", + "description": "D.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[D.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48", + "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -225,7 +419,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -247,7 +441,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -296,7 +490,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -314,7 +508,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -358,20 +552,19 @@ }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 498, + "length": 74, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -383,7 +576,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -423,14 +616,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "C.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "description": "C.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#2)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L2)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L21-L23)which only takes arrays by value\n", "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8", - "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", + "id": "79a462bf06ae529ad099f2170100298da30766fcc06884e03436d2b53110d208", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -439,22 +632,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 213, - "length": 198, - "filename_used": "/GENERIC_PATH", + "start": 40, + "length": 167, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15 + 4, + 5, + 6, + 7, + 8 ], "starting_column": 5, "ending_column": 6 @@ -466,7 +658,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -506,116 +698,91 @@ "ending_column": 2 } }, - "signature": "g()" + "signature": "f()" } }, { "type": "variable", - "name": "y", + "name": "x", "source_mapping": { - "start": 243, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 17, + "length": 16, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 11 + 2 ], - "starting_column": 9, - "ending_column": 30 + "starting_column": 5, + "ending_column": 21 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "g", + "type": "contract", + "name": "C", "source_mapping": { - "start": 213, - "length": 198, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 700, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, 10, 11, 12, 13, 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 74, - "filename_used": "/GENERIC_PATH", + "start": 578, + "length": 120, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -627,7 +794,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -667,14 +834,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "C.g() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15", - "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", + "description": "C.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#4-8) passes array C.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#2)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8) passes array [C.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L2)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L4-L8", + "id": "7f1eda9be40002affd2e8e31d172d3ee3374f37b1106118c79f4add7a133bbd0", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -687,7 +854,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -710,7 +877,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -759,7 +926,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -777,7 +944,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -800,7 +967,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -811,261 +978,56 @@ 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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "g()" - } - } - } - }, - { - "type": "function", - "name": "setByValueAndReturn", - "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27, - 28 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 700, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setByValueAndReturn(uint256[1])" - } - } - ], - "description": "C.g() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[C.g()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15", - "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", - "check": "array-by-reference", - "impact": "High", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "f", - "source_mapping": { - "start": 869, - "length": 269, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "f()" - } - }, - { - "type": "variable", - "name": "x", - "source_mapping": { - "start": 836, - "length": 9, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 39 - ], - "starting_column": 5, - "ending_column": 14 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "D", - "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 - ], - "starting_column": 1, - "ending_column": 0 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValue", + "name": "setByValueAndReturn", "source_mapping": { - "start": 498, - "length": 74, - "filename_used": "/GENERIC_PATH", + "start": 578, + "length": 120, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 25, + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -1077,7 +1039,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1117,14 +1079,14 @@ "ending_column": 2 } }, - "signature": "setByValue(uint256[1])" + "signature": "setByValueAndReturn(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#39)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#21-23)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L39)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L21-L23)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48", - "id": "1520955a53c36e391abbaf648a91a5a12d432f0f4746b0a8187d0988a6a66846", + "description": "C.g() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#11)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#25-28)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L11)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L25-L28)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15", + "id": "8655e8acd84a6e8152acd2d9730ea0dfdda0723e09b2dcbfdbbeb8da8bd04fa5", "check": "array-by-reference", "impact": "High", "confidence": "High" @@ -1133,23 +1095,22 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 869, - "length": 269, - "filename_used": "/GENERIC_PATH", + "start": 213, + "length": 198, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48 + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -1157,121 +1118,160 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "D", + "name": "C", "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 700, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 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 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, - "signature": "f()" + "signature": "g()" } }, { "type": "variable", - "name": "x", + "name": "y", "source_mapping": { - "start": 836, - "length": 9, - "filename_used": "/GENERIC_PATH", + "start": 243, + "length": 21, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 39 + 11 ], - "starting_column": 5, - "ending_column": 14 + "starting_column": 9, + "ending_column": 30 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "D", + "type": "function", + "name": "g", "source_mapping": { - "start": 702, - "length": 440, - "filename_used": "/GENERIC_PATH", + "start": 213, + "length": 198, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 10, + 11, + 12, + 13, + 14, + 15 ], - "starting_column": 1, - "ending_column": 0 + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 700, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "g()" } } } }, { "type": "function", - "name": "setByValueAndReturn", + "name": "setByValue", "source_mapping": { - "start": 578, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 498, + "length": 74, + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -1283,7 +1283,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1323,14 +1323,14 @@ "ending_column": 2 } }, - "signature": "setByValueAndReturn(uint256[1])" + "signature": "setByValue(uint256[1])" } } ], - "description": "D.f() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#42-48) passes array D.x (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#39)by reference to C.setByValueAndReturn(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#25-28)which only takes arrays by value\n", - "markdown": "[D.f()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48) passes array [D.x](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L39)by reference to [C.setByValueAndReturn(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L25-L28)which only takes arrays by value\n", - "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L42-L48", - "id": "019912974eabe7e8b1e67ca05b342e5106de13fa93fa0adf599a4259c425bd54", + "description": "C.g() (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#10-15) passes array C.g().y (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#11)by reference to C.setByValue(uint256[1]) (tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#21-23)which only takes arrays by value\n", + "markdown": "[C.g()](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15) passes array [C.g().y](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L11)by reference to [C.setByValue(uint256[1])](tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L21-L23)which only takes arrays by value\n", + "first_markdown_element": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol#L10-L15", + "id": "d039169712808e785bf2e53f322c1c6fcd6b93a0a0c17f1a701addd09ed83996", "check": "array-by-reference", "impact": "High", "confidence": "High" diff --git a/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json b/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json index 60e9aa8e6..f52b31623 100644 --- a/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json +++ b/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 593, "length": 247, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 720, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -117,7 +117,7 @@ "source_mapping": { "start": 593, "length": 247, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -218,7 +218,7 @@ "source_mapping": { "start": 923, "length": 754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -258,7 +258,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 1000, "length": 677, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -361,7 +361,7 @@ "source_mapping": { "start": 923, "length": 754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -401,7 +401,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", diff --git a/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json b/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json index 6f8367251..fd074b2a2 100644 --- a/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json +++ b/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 119, "length": 707, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -40,7 +40,7 @@ "source_mapping": { "start": 97, "length": 731, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 198, "length": 622, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -107,7 +107,7 @@ "source_mapping": { "start": 119, "length": 707, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -139,7 +139,7 @@ "source_mapping": { "start": 97, "length": 731, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", diff --git a/tests/detectors/assembly/0.5.16/inline_assembly_library.sol.0.5.16.Assembly.json b/tests/detectors/assembly/0.5.16/inline_assembly_library.sol.0.5.16.Assembly.json index 66296b37f..992011afb 100644 --- a/tests/detectors/assembly/0.5.16/inline_assembly_library.sol.0.5.16.Assembly.json +++ b/tests/detectors/assembly/0.5.16/inline_assembly_library.sol.0.5.16.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 599, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 97, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 733, "length": 104, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -116,7 +116,7 @@ "source_mapping": { "start": 599, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -140,7 +140,7 @@ "source_mapping": { "start": 97, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -217,7 +217,7 @@ "source_mapping": { "start": 936, "length": 761, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -257,7 +257,7 @@ "source_mapping": { "start": 97, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -321,7 +321,7 @@ "source_mapping": { "start": 1020, "length": 671, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -359,7 +359,7 @@ "source_mapping": { "start": 936, "length": 761, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", @@ -399,7 +399,7 @@ "source_mapping": { "start": 97, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_library.sol", diff --git a/tests/detectors/assembly/0.6.11/inline_assembly_library.sol.0.6.11.Assembly.json b/tests/detectors/assembly/0.6.11/inline_assembly_library.sol.0.6.11.Assembly.json index 95e4a9ebc..10869080c 100644 --- a/tests/detectors/assembly/0.6.11/inline_assembly_library.sol.0.6.11.Assembly.json +++ b/tests/detectors/assembly/0.6.11/inline_assembly_library.sol.0.6.11.Assembly.json @@ -4,23 +4,39 @@ "elements": [ { "type": "function", - "name": "sumAsm", + "name": "sumPureAsm", "source_mapping": { - "start": 574, - "length": 254, - "filename_used": "/GENERIC_PATH", + "start": 911, + "length": 761, + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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 + 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 @@ -32,7 +48,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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", @@ -87,48 +103,82 @@ "ending_column": 2 } }, - "signature": "sumAsm(uint256[])" + "signature": "sumPureAsm(uint256[])" } }, { "type": "node", "name": "", "source_mapping": { - "start": 708, - "length": 104, - "filename_used": "/GENERIC_PATH", + "start": 995, + "length": 671, + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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 + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 ], - "starting_column": 13, - "ending_column": 14 + "starting_column": 9, + "ending_column": 10 }, "type_specific_fields": { "parent": { "type": "function", - "name": "sumAsm", + "name": "sumPureAsm", "source_mapping": { - "start": 574, - "length": 254, - "filename_used": "/GENERIC_PATH", + "start": 911, + "length": 761, + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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 + 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 @@ -140,7 +190,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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", @@ -195,16 +245,16 @@ "ending_column": 2 } }, - "signature": "sumAsm(uint256[])" + "signature": "sumPureAsm(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", - "first_markdown_element": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L14-L20", - "id": "a8d71513166310212c49c4edecbdf8fbc3040b1cb5b5756f0ad1971ae7d4cdb1", + "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", + "first_markdown_element": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L23-L45", + "id": "5964c7440a9efb78bf78544bcdc60c789e3d9dff73438108bcb07ac98d60876a", "check": "assembly", "impact": "Informational", "confidence": "High" @@ -213,39 +263,23 @@ "elements": [ { "type": "function", - "name": "sumPureAsm", + "name": "sumAsm", "source_mapping": { - "start": 911, - "length": 761, - "filename_used": "/GENERIC_PATH", + "start": 574, + "length": 254, + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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 + 14, + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -257,7 +291,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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", @@ -312,82 +346,48 @@ "ending_column": 2 } }, - "signature": "sumPureAsm(uint256[])" + "signature": "sumAsm(uint256[])" } }, { "type": "node", "name": "", "source_mapping": { - "start": 995, - "length": 671, - "filename_used": "/GENERIC_PATH", + "start": 708, + "length": 104, + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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 + 16, + 17, + 18 ], - "starting_column": 9, - "ending_column": 10 + "starting_column": 13, + "ending_column": 14 }, "type_specific_fields": { "parent": { "type": "function", - "name": "sumPureAsm", + "name": "sumAsm", "source_mapping": { - "start": 911, - "length": 761, - "filename_used": "/GENERIC_PATH", + "start": 574, + "length": 254, + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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 + 14, + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -399,7 +399,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol", "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", @@ -454,16 +454,16 @@ "ending_column": 2 } }, - "signature": "sumPureAsm(uint256[])" + "signature": "sumAsm(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", - "first_markdown_element": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L23-L45", - "id": "5964c7440a9efb78bf78544bcdc60c789e3d9dff73438108bcb07ac98d60876a", + "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", + "first_markdown_element": "tests/detectors/assembly/0.6.11/inline_assembly_library.sol#L14-L20", + "id": "a8d71513166310212c49c4edecbdf8fbc3040b1cb5b5756f0ad1971ae7d4cdb1", "check": "assembly", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json b/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json index fd697b12c..2fb0835f7 100644 --- a/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json +++ b/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 94, "length": 707, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", "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", @@ -40,7 +40,7 @@ "source_mapping": { "start": 72, "length": 731, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", "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", @@ -77,7 +77,7 @@ "source_mapping": { "start": 173, "length": 622, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", "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", @@ -107,7 +107,7 @@ "source_mapping": { "start": 94, "length": 707, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", "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", @@ -139,7 +139,7 @@ "source_mapping": { "start": 72, "length": 731, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", "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", diff --git a/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json b/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json index a0f88f577..be646d7e6 100644 --- a/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json +++ b/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json @@ -4,23 +4,39 @@ "elements": [ { "type": "function", - "name": "sumAsm", + "name": "sumPureAsm", "source_mapping": { - "start": 574, - "length": 254, + "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": [ - 14, - 15, - 16, - 17, - 18, - 19, - 20 + 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 @@ -87,48 +103,82 @@ "ending_column": 2 } }, - "signature": "sumAsm(uint256[])" + "signature": "sumPureAsm(uint256[])" } }, { "type": "node", "name": "", "source_mapping": { - "start": 708, - "length": 104, + "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": [ - 16, - 17, - 18 + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44 ], - "starting_column": 13, - "ending_column": 14 + "starting_column": 9, + "ending_column": 10 }, "type_specific_fields": { "parent": { "type": "function", - "name": "sumAsm", + "name": "sumPureAsm", "source_mapping": { - "start": 574, - "length": 254, + "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": [ - 14, - 15, - 16, - 17, - 18, - 19, - 20 + 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 @@ -195,16 +245,16 @@ "ending_column": 2 } }, - "signature": "sumAsm(uint256[])" + "signature": "sumPureAsm(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", - "first_markdown_element": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L14-L20", - "id": "a83582beb2c0460617fa82fbdfc38a050004e285749b17141b63e8051062248b", + "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", + "first_markdown_element": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L23-L45", + "id": "5cafb3e9d7d87c17203cf2c296eeec7de6b774b2a8d71908f8cfc9b8d916cb4b", "check": "assembly", "impact": "Informational", "confidence": "High" @@ -213,39 +263,23 @@ "elements": [ { "type": "function", - "name": "sumPureAsm", + "name": "sumAsm", "source_mapping": { - "start": 911, - "length": 761, + "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": [ - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45 + 14, + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -312,82 +346,48 @@ "ending_column": 2 } }, - "signature": "sumPureAsm(uint256[])" + "signature": "sumAsm(uint256[])" } }, { "type": "node", "name": "", "source_mapping": { - "start": 995, - "length": 671, + "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": [ - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44 + 16, + 17, + 18 ], - "starting_column": 9, - "ending_column": 10 + "starting_column": 13, + "ending_column": 14 }, "type_specific_fields": { "parent": { "type": "function", - "name": "sumPureAsm", + "name": "sumAsm", "source_mapping": { - "start": 911, - "length": 761, + "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": [ - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45 + 14, + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -454,16 +454,16 @@ "ending_column": 2 } }, - "signature": "sumPureAsm(uint256[])" + "signature": "sumAsm(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", - "first_markdown_element": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L23-L45", - "id": "5cafb3e9d7d87c17203cf2c296eeec7de6b774b2a8d71908f8cfc9b8d916cb4b", + "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", + "first_markdown_element": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol#L14-L20", + "id": "a83582beb2c0460617fa82fbdfc38a050004e285749b17141b63e8051062248b", "check": "assembly", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/assert-state-change/0.4.25/assert_state_change.sol.0.4.25.AssertStateChange.json b/tests/detectors/assert-state-change/0.4.25/assert_state_change.sol.0.4.25.AssertStateChange.json index c12612b52..ca32dbd82 100644 --- a/tests/detectors/assert-state-change/0.4.25/assert_state_change.sol.0.4.25.AssertStateChange.json +++ b/tests/detectors/assert-state-change/0.4.25/assert_state_change.sol.0.4.25.AssertStateChange.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 77, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 398, + "length": 55, + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -78,42 +78,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } }, { "type": "node", - "name": "assert(bool)((s_a += 1) > 10)", + "name": "assert(bool)(bad2_callee())", "source_mapping": { - "start": 106, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 427, + "length": 21, + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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 + 20 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 77, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 398, + "length": 55, + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -125,7 +125,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -175,16 +175,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } } } } ], - "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", - "first_markdown_element": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L6-L8", - "id": "a01104ede08ddc5107a2d63d851930d477642029aeef70d6cb44eb2a640b282a", + "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", + "first_markdown_element": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L19-L21", + "id": "47c8c39b084f8d339822d44f892cb049c1a3834f52fd48d2dcef80bac56996a3", "check": "assert-state-change", "impact": "Informational", "confidence": "High" @@ -197,7 +197,7 @@ "source_mapping": { "start": 186, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -217,7 +217,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -276,7 +276,7 @@ "source_mapping": { "start": 224, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -294,7 +294,7 @@ "source_mapping": { "start": 186, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -314,7 +314,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -382,19 +382,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 398, - "length": 55, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 57, + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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 + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -406,7 +406,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -456,42 +456,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } }, { "type": "node", - "name": "assert(bool)(bad2_callee())", + "name": "assert(bool)((s_a += 1) > 10)", "source_mapping": { - "start": 427, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 106, + "length": 23, + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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 + 7 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 398, - "length": 55, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 57, + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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 + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -503,7 +503,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol", "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", @@ -553,16 +553,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } } } } ], - "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", - "first_markdown_element": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L19-L21", - "id": "47c8c39b084f8d339822d44f892cb049c1a3834f52fd48d2dcef80bac56996a3", + "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", + "first_markdown_element": "tests/detectors/assert-state-change/0.4.25/assert_state_change.sol#L6-L8", + "id": "a01104ede08ddc5107a2d63d851930d477642029aeef70d6cb44eb2a640b282a", "check": "assert-state-change", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/assert-state-change/0.5.16/assert_state_change.sol.0.5.16.AssertStateChange.json b/tests/detectors/assert-state-change/0.5.16/assert_state_change.sol.0.5.16.AssertStateChange.json index 4a8bd498b..68b7bb630 100644 --- a/tests/detectors/assert-state-change/0.5.16/assert_state_change.sol.0.5.16.AssertStateChange.json +++ b/tests/detectors/assert-state-change/0.5.16/assert_state_change.sol.0.5.16.AssertStateChange.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 77, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 186, + "length": 66, + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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 + 11, + 12, + 13 ], "starting_column": 3, "ending_column": 4 @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -78,22 +78,22 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(uint256)" } }, { "type": "node", - "name": "assert(bool)((s_a += 1) > 10)", + "name": "assert(bool)((s_a += a) > 10)", "source_mapping": { - "start": 106, + "start": 224, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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 + 12 ], "starting_column": 5, "ending_column": 28 @@ -101,19 +101,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 77, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 186, + "length": 66, + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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 + 11, + 12, + 13 ], "starting_column": 3, "ending_column": 4 @@ -125,7 +125,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -175,16 +175,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(uint256)" } } } } ], - "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", - "first_markdown_element": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L6-L8", - "id": "ed7344e23d057576887c7e524b215bd0b52464ce035f686bab51b271460e43a0", + "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", + "first_markdown_element": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L11-L13", + "id": "ea912d34e8adabfd2ce93ecd5723df8d2e7ebec7e66de5fc56f3304c780488b3", "check": "assert-state-change", "impact": "Informational", "confidence": "High" @@ -193,19 +193,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 186, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 57, + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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 + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -217,7 +217,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -267,22 +267,22 @@ "ending_column": 2 } }, - "signature": "bad1(uint256)" + "signature": "bad0()" } }, { "type": "node", - "name": "assert(bool)((s_a += a) > 10)", + "name": "assert(bool)((s_a += 1) > 10)", "source_mapping": { - "start": 224, + "start": 106, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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 + 7 ], "starting_column": 5, "ending_column": 28 @@ -290,19 +290,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 186, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 57, + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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 + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -314,7 +314,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -364,16 +364,16 @@ "ending_column": 2 } }, - "signature": "bad1(uint256)" + "signature": "bad0()" } } } } ], - "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", - "first_markdown_element": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L11-L13", - "id": "ea912d34e8adabfd2ce93ecd5723df8d2e7ebec7e66de5fc56f3304c780488b3", + "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", + "first_markdown_element": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol#L6-L8", + "id": "ed7344e23d057576887c7e524b215bd0b52464ce035f686bab51b271460e43a0", "check": "assert-state-change", "impact": "Informational", "confidence": "High" @@ -386,7 +386,7 @@ "source_mapping": { "start": 398, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -406,7 +406,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -465,7 +465,7 @@ "source_mapping": { "start": 427, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -483,7 +483,7 @@ "source_mapping": { "start": 398, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", @@ -503,7 +503,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.5.16/assert_state_change.sol", "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", diff --git a/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json b/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json index 32198c56d..3c1e476b2 100644 --- a/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json +++ b/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json @@ -193,19 +193,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 186, - "length": 66, + "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": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -267,42 +267,42 @@ "ending_column": 2 } }, - "signature": "bad1(uint256)" + "signature": "bad2()" } }, { "type": "node", - "name": "assert(bool)((s_a += a) > 10)", + "name": "assert(bool)(bad2_callee())", "source_mapping": { - "start": 224, - "length": 23, + "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": [ - 12 + 20 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 186, - "length": 66, + "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": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -364,16 +364,16 @@ "ending_column": 2 } }, - "signature": "bad1(uint256)" + "signature": "bad2()" } } } } ], - "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", - "first_markdown_element": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L11-L13", - "id": "c27ede68d9d7c6159032f3aef6bf9fa491390317da33307fa783a93c1b675bd7", + "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", + "first_markdown_element": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L19-L21", + "id": "6f4b2360043bf3035cc152b583d3462d8cc98e91de8577091fe3a0af569d5285", "check": "assert-state-change", "impact": "Informational", "confidence": "High" @@ -382,19 +382,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 398, - "length": 55, + "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": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 3, "ending_column": 4 @@ -456,42 +456,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1(uint256)" } }, { "type": "node", - "name": "assert(bool)(bad2_callee())", + "name": "assert(bool)((s_a += a) > 10)", "source_mapping": { - "start": 427, - "length": 21, + "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": [ - 20 + 12 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 398, - "length": 55, + "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": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 3, "ending_column": 4 @@ -553,16 +553,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1(uint256)" } } } } ], - "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", - "first_markdown_element": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L19-L21", - "id": "6f4b2360043bf3035cc152b583d3462d8cc98e91de8577091fe3a0af569d5285", + "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", + "first_markdown_element": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol#L11-L13", + "id": "c27ede68d9d7c6159032f3aef6bf9fa491390317da33307fa783a93c1b675bd7", "check": "assert-state-change", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json b/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json index e54d92406..98f36c0cd 100644 --- a/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json +++ b/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 77, - "length": 57, + "start": 398, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -78,42 +78,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } }, { "type": "node", - "name": "assert(bool)((s_a += 1) > 10)", + "name": "assert(bool)(bad2_callee())", "source_mapping": { - "start": 106, - "length": 23, + "start": 427, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "is_dependency": false, "lines": [ - 7 + 20 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 77, - "length": 57, + "start": 398, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -175,16 +175,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } } } } ], - "description": "A.bad0() (tests/detectors/assert-state-change/0.7.6/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.7.6/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.7.6/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.7.6/assert_state_change.sol#L7)\nConsider using require() or change the invariant to not modify the state.\n", - "first_markdown_element": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol#L6-L8", - "id": "a710d11e5510f0eb3acb2c1ec524779253f25bf2931bce4cb9c5c048ec586b80", + "description": "A.bad2() (tests/detectors/assert-state-change/0.7.6/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.7.6/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.7.6/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.7.6/assert_state_change.sol#L20)\nConsider using require() or change the invariant to not modify the state.\n", + "first_markdown_element": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol#L19-L21", + "id": "4b31923b05dec7d68f1bf133b986b4ec06fcc82ff3b8f0414d3ee3d623b69265", "check": "assert-state-change", "impact": "Informational", "confidence": "High" @@ -382,19 +382,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 398, - "length": 55, + "start": 77, + "length": 57, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -456,42 +456,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } }, { "type": "node", - "name": "assert(bool)(bad2_callee())", + "name": "assert(bool)((s_a += 1) > 10)", "source_mapping": { - "start": 427, - "length": 21, + "start": 106, + "length": 23, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "is_dependency": false, "lines": [ - 20 + 7 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 398, - "length": 55, + "start": 77, + "length": 57, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -553,16 +553,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } } } } ], - "description": "A.bad2() (tests/detectors/assert-state-change/0.7.6/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.7.6/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.7.6/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.7.6/assert_state_change.sol#L20)\nConsider using require() or change the invariant to not modify the state.\n", - "first_markdown_element": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol#L19-L21", - "id": "4b31923b05dec7d68f1bf133b986b4ec06fcc82ff3b8f0414d3ee3d623b69265", + "description": "A.bad0() (tests/detectors/assert-state-change/0.7.6/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.7.6/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.7.6/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.7.6/assert_state_change.sol#L7)\nConsider using require() or change the invariant to not modify the state.\n", + "first_markdown_element": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol#L6-L8", + "id": "a710d11e5510f0eb3acb2c1ec524779253f25bf2931bce4cb9c5c048ec586b80", "check": "assert-state-change", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json b/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json index 95c5aed84..a3f46672d 100644 --- a/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json +++ b/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/backdoor/0.4.25/backdoor.sol", "filename_relative": "tests/detectors/backdoor/0.4.25/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.4.25/backdoor.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/backdoor/0.4.25/backdoor.sol", "filename_relative": "tests/detectors/backdoor/0.4.25/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.4.25/backdoor.sol", diff --git a/tests/detectors/backdoor/0.7.6/backdoor.sol.0.7.6.Backdoor.json b/tests/detectors/backdoor/0.7.6/backdoor.sol.0.7.6.Backdoor.json index 51c92134c..102ce6b59 100644 --- a/tests/detectors/backdoor/0.7.6/backdoor.sol.0.7.6.Backdoor.json +++ b/tests/detectors/backdoor/0.7.6/backdoor.sol.0.7.6.Backdoor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/backdoor/0.7.6/backdoor.sol", "filename_relative": "tests/detectors/backdoor/0.7.6/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.7.6/backdoor.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/backdoor/0.7.6/backdoor.sol", "filename_relative": "tests/detectors/backdoor/0.7.6/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.7.6/backdoor.sol", diff --git a/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json b/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json index 579486229..c6b6305b4 100644 --- a/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json +++ b/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 923, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 221, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 162, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 0, "length": 923, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", diff --git a/tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol.0.5.16.BooleanEquality.json b/tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol.0.5.16.BooleanEquality.json index 7d1a884aa..fb2a952ef 100644 --- a/tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol.0.5.16.BooleanEquality.json +++ b/tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol.0.5.16.BooleanEquality.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 198, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", @@ -94,7 +94,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", @@ -114,7 +114,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.5.16/boolean-constant-equality.sol", diff --git a/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json b/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json index 51d66946a..e74b3efd7 100644 --- a/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json +++ b/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 198, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -94,7 +94,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -114,7 +114,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", diff --git a/tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol.0.4.25.MultipleCallsInLoop.json b/tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol.0.4.25.MultipleCallsInLoop.json index 24d076b50..ae8f7c237 100644 --- a/tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol.0.4.25.MultipleCallsInLoop.json +++ b/tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol.0.4.25.MultipleCallsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 153, "length": 135, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_relative": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", @@ -30,7 +30,7 @@ "source_mapping": { "start": 0, "length": 291, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_relative": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", @@ -65,7 +65,7 @@ "source_mapping": { "start": 244, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_relative": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", @@ -83,7 +83,7 @@ "source_mapping": { "start": 153, "length": 135, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_relative": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", @@ -105,7 +105,7 @@ "source_mapping": { "start": 0, "length": 291, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_relative": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/calls-loop/0.4.25/multiple_calls_in_loop.sol", diff --git a/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json b/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json index 4e078cabd..d84cc743f 100644 --- a/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json +++ b/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 160, "length": 153, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", "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", @@ -30,7 +30,7 @@ "source_mapping": { "start": 0, "length": 316, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", "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", @@ -65,7 +65,7 @@ "source_mapping": { "start": 251, "length": 45, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", "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", @@ -83,7 +83,7 @@ "source_mapping": { "start": 160, "length": 153, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", "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", @@ -105,7 +105,7 @@ "source_mapping": { "start": 0, "length": 316, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", "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", diff --git a/tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol.0.7.6.MultipleCallsInLoop.json b/tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol.0.7.6.MultipleCallsInLoop.json index 67c6e36ac..1f3e23352 100644 --- a/tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol.0.7.6.MultipleCallsInLoop.json +++ b/tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol.0.7.6.MultipleCallsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 160, "length": 153, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", "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", @@ -30,7 +30,7 @@ "source_mapping": { "start": 0, "length": 316, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", "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", @@ -65,7 +65,7 @@ "source_mapping": { "start": 251, "length": 45, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", "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", @@ -83,7 +83,7 @@ "source_mapping": { "start": 160, "length": 153, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", "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", @@ -105,7 +105,7 @@ "source_mapping": { "start": 0, "length": 316, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/calls-loop/0.7.6/multiple_calls_in_loop.sol", "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", diff --git a/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json index eda067155..8f6ef570b 100644 --- a/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json @@ -136,52 +136,48 @@ "elements": [ { "type": "variable", - "name": "text2", + "name": "should_be_constant_2", "source_mapping": { - "start": 333, - "length": 20, + "start": 841, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "is_dependency": false, "lines": [ - 14 + 43 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "MyConc", "source_mapping": { - "start": 29, - "length": 441, + "start": 746, + "length": 342, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/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 + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, "ending_column": 2 @@ -190,10 +186,10 @@ } } ], - "description": "A.text2 (tests/detectors/constable-states/0.4.25/const_state_variables.sol#14) should be constant\n", - "markdown": "[A.text2](tests/detectors/constable-states/0.4.25/const_state_variables.sol#L14) should be constant\n", - "first_markdown_element": "tests/detectors/constable-states/0.4.25/const_state_variables.sol#L14", - "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", + "description": "MyConc.should_be_constant_2 (tests/detectors/constable-states/0.4.25/const_state_variables.sol#43) should be constant\n", + "markdown": "[MyConc.should_be_constant_2](tests/detectors/constable-states/0.4.25/const_state_variables.sol#L43) should be constant\n", + "first_markdown_element": "tests/detectors/constable-states/0.4.25/const_state_variables.sol#L43", + "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", "check": "constable-states", "impact": "Optimization", "confidence": "High" @@ -326,48 +322,52 @@ "elements": [ { "type": "variable", - "name": "should_be_constant_2", + "name": "text2", "source_mapping": { - "start": 841, - "length": 33, + "start": 333, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "is_dependency": false, "lines": [ - 43 + 14 ], "starting_column": 5, - "ending_column": 38 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "MyConc", + "name": "A", "source_mapping": { - "start": 746, - "length": 342, + "start": 29, + "length": 441, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "is_dependency": false, "lines": [ - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 ], "starting_column": 1, "ending_column": 2 @@ -376,10 +376,10 @@ } } ], - "description": "MyConc.should_be_constant_2 (tests/detectors/constable-states/0.4.25/const_state_variables.sol#43) should be constant\n", - "markdown": "[MyConc.should_be_constant_2](tests/detectors/constable-states/0.4.25/const_state_variables.sol#L43) should be constant\n", - "first_markdown_element": "tests/detectors/constable-states/0.4.25/const_state_variables.sol#L43", - "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", + "description": "A.text2 (tests/detectors/constable-states/0.4.25/const_state_variables.sol#14) should be constant\n", + "markdown": "[A.text2](tests/detectors/constable-states/0.4.25/const_state_variables.sol#L14) should be constant\n", + "first_markdown_element": "tests/detectors/constable-states/0.4.25/const_state_variables.sol#L14", + "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", "check": "constable-states", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/constable-states/0.5.16/const_state_variables.sol.0.5.16.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.5.16/const_state_variables.sol.0.5.16.ConstCandidateStateVars.json index 2850554d5..176391911 100644 --- a/tests/detectors/constable-states/0.5.16/const_state_variables.sol.0.5.16.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.5.16/const_state_variables.sol.0.5.16.ConstCandidateStateVars.json @@ -136,52 +136,48 @@ "elements": [ { "type": "variable", - "name": "text2", + "name": "should_be_constant_2", "source_mapping": { - "start": 333, - "length": 20, + "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": [ - 14 + 43 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "MyConc", "source_mapping": { - "start": 29, - "length": 441, + "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": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21 + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, "ending_column": 2 @@ -190,10 +186,10 @@ } } ], - "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", - "first_markdown_element": "tests/detectors/constable-states/0.5.16/const_state_variables.sol#L14", - "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", + "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", + "first_markdown_element": "tests/detectors/constable-states/0.5.16/const_state_variables.sol#L43", + "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", "check": "constable-states", "impact": "Optimization", "confidence": "High" @@ -326,48 +322,52 @@ "elements": [ { "type": "variable", - "name": "should_be_constant_2", + "name": "text2", "source_mapping": { - "start": 841, - "length": 33, + "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": [ - 43 + 14 ], "starting_column": 5, - "ending_column": 38 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "MyConc", + "name": "A", "source_mapping": { - "start": 746, - "length": 342, + "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": [ - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 ], "starting_column": 1, "ending_column": 2 @@ -376,10 +376,10 @@ } } ], - "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", - "first_markdown_element": "tests/detectors/constable-states/0.5.16/const_state_variables.sol#L43", - "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", + "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", + "first_markdown_element": "tests/detectors/constable-states/0.5.16/const_state_variables.sol#L14", + "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", "check": "constable-states", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json index f8abb572e..8caff3fd7 100644 --- a/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 132, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -74,7 +74,7 @@ "source_mapping": { "start": 237, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -92,7 +92,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -136,52 +136,48 @@ "elements": [ { "type": "variable", - "name": "text2", + "name": "should_be_constant_2", "source_mapping": { - "start": 333, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 841, + "length": 33, + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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 + 43 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "MyConc", "source_mapping": { - "start": 29, - "length": 441, - "filename_used": "/GENERIC_PATH", + "start": 746, + "length": 342, + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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 + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, "ending_column": 2 @@ -190,10 +186,10 @@ } } ], - "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", - "first_markdown_element": "tests/detectors/constable-states/0.6.11/const_state_variables.sol#L14", - "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", + "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", + "first_markdown_element": "tests/detectors/constable-states/0.6.11/const_state_variables.sol#L43", + "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", "check": "constable-states", "impact": "Optimization", "confidence": "High" @@ -206,7 +202,7 @@ "source_mapping": { "start": 496, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -224,7 +220,7 @@ "source_mapping": { "start": 473, "length": 271, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -268,7 +264,7 @@ "source_mapping": { "start": 793, "length": 42, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -286,7 +282,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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", @@ -326,48 +322,52 @@ "elements": [ { "type": "variable", - "name": "should_be_constant_2", + "name": "text2", "source_mapping": { - "start": 841, - "length": 33, - "filename_used": "/GENERIC_PATH", + "start": 333, + "length": 20, + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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 + 14 ], "starting_column": 5, - "ending_column": 38 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "MyConc", + "name": "A", "source_mapping": { - "start": 746, - "length": 342, - "filename_used": "/GENERIC_PATH", + "start": 29, + "length": 441, + "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", "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 + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 ], "starting_column": 1, "ending_column": 2 @@ -376,10 +376,10 @@ } } ], - "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", - "first_markdown_element": "tests/detectors/constable-states/0.6.11/const_state_variables.sol#L43", - "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", + "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", + "first_markdown_element": "tests/detectors/constable-states/0.6.11/const_state_variables.sol#L14", + "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", "check": "constable-states", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json index 06c372051..98f77ccbe 100644 --- a/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 132, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 237, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -136,52 +136,48 @@ "elements": [ { "type": "variable", - "name": "text2", + "name": "should_be_constant_2", "source_mapping": { - "start": 333, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 841, + "length": 33, + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "is_dependency": false, "lines": [ - 14 + 43 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "MyConc", "source_mapping": { - "start": 29, - "length": 441, - "filename_used": "/GENERIC_PATH", + "start": 746, + "length": 342, + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/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 + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52 ], "starting_column": 1, "ending_column": 2 @@ -190,10 +186,10 @@ } } ], - "description": "A.text2 (tests/detectors/constable-states/0.7.6/const_state_variables.sol#14) should be constant\n", - "markdown": "[A.text2](tests/detectors/constable-states/0.7.6/const_state_variables.sol#L14) should be constant\n", - "first_markdown_element": "tests/detectors/constable-states/0.7.6/const_state_variables.sol#L14", - "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", + "description": "MyConc.should_be_constant_2 (tests/detectors/constable-states/0.7.6/const_state_variables.sol#43) should be constant\n", + "markdown": "[MyConc.should_be_constant_2](tests/detectors/constable-states/0.7.6/const_state_variables.sol#L43) should be constant\n", + "first_markdown_element": "tests/detectors/constable-states/0.7.6/const_state_variables.sol#L43", + "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", "check": "constable-states", "impact": "Optimization", "confidence": "High" @@ -206,7 +202,7 @@ "source_mapping": { "start": 496, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -224,7 +220,7 @@ "source_mapping": { "start": 473, "length": 271, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -268,7 +264,7 @@ "source_mapping": { "start": 793, "length": 42, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -286,7 +282,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -326,48 +322,52 @@ "elements": [ { "type": "variable", - "name": "should_be_constant_2", + "name": "text2", "source_mapping": { - "start": 841, - "length": 33, - "filename_used": "/GENERIC_PATH", + "start": 333, + "length": 20, + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "is_dependency": false, "lines": [ - 43 + 14 ], "starting_column": 5, - "ending_column": 38 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "MyConc", + "name": "A", "source_mapping": { - "start": 746, - "length": 342, - "filename_used": "/GENERIC_PATH", + "start": 29, + "length": 441, + "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "is_dependency": false, "lines": [ - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52 + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 ], "starting_column": 1, "ending_column": 2 @@ -376,10 +376,10 @@ } } ], - "description": "MyConc.should_be_constant_2 (tests/detectors/constable-states/0.7.6/const_state_variables.sol#43) should be constant\n", - "markdown": "[MyConc.should_be_constant_2](tests/detectors/constable-states/0.7.6/const_state_variables.sol#L43) should be constant\n", - "first_markdown_element": "tests/detectors/constable-states/0.7.6/const_state_variables.sol#L43", - "id": "9a48a4122de1a6a4774a9f1e0d4917bd0fa08f17b4af41b86ba07689e51bf711", + "description": "A.text2 (tests/detectors/constable-states/0.7.6/const_state_variables.sol#14) should be constant\n", + "markdown": "[A.text2](tests/detectors/constable-states/0.7.6/const_state_variables.sol#L14) should be constant\n", + "first_markdown_element": "tests/detectors/constable-states/0.7.6/const_state_variables.sol#L14", + "id": "df11e6201c4558a8c5cd90b55b134b9ca8f07203b2264d3aa93bd7745e8cb4ba", "check": "constable-states", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json b/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json index d3073b6c2..310add2c9 100644 --- a/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json +++ b/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 324, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-asm/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-asm/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-asm/0.4.25/constant.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 392, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-asm/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-asm/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-asm/0.4.25/constant.sol", diff --git a/tests/detectors/constant-function-state/0.4.25/constant.sol.0.4.25.ConstantFunctionsState.json b/tests/detectors/constant-function-state/0.4.25/constant.sol.0.4.25.ConstantFunctionsState.json index 6c948ac12..1d8fd84e7 100644 --- a/tests/detectors/constant-function-state/0.4.25/constant.sol.0.4.25.ConstantFunctionsState.json +++ b/tests/detectors/constant-function-state/0.4.25/constant.sol.0.4.25.ConstantFunctionsState.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "test_view_bug", + "name": "test_constant_bug", "source_mapping": { - "start": 45, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 113, + "length": 66, + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 392, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", @@ -64,7 +64,7 @@ "ending_column": 2 } }, - "signature": "test_view_bug()" + "signature": "test_constant_bug()" } }, { @@ -73,7 +73,7 @@ "source_mapping": { "start": 28, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", @@ -91,7 +91,7 @@ "source_mapping": { "start": 0, "length": 392, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", @@ -130,10 +130,10 @@ } } ], - "description": "Constant.test_view_bug() (tests/detectors/constant-function-state/0.4.25/constant.sol#5-7) is declared view but changes state variables:\n\t- Constant.a (tests/detectors/constant-function-state/0.4.25/constant.sol#3)\n", - "markdown": "[Constant.test_view_bug()](tests/detectors/constant-function-state/0.4.25/constant.sol#L5-L7) is declared view but changes state variables:\n\t- [Constant.a](tests/detectors/constant-function-state/0.4.25/constant.sol#L3)\n", - "first_markdown_element": "tests/detectors/constant-function-state/0.4.25/constant.sol#L5-L7", - "id": "4dee61d8835d20c6f1f7c195d8bd1e9de5dbcc096396a5b8db391136f9f5fdf1", + "description": "Constant.test_constant_bug() (tests/detectors/constant-function-state/0.4.25/constant.sol#9-11) is declared view but changes state variables:\n\t- Constant.a (tests/detectors/constant-function-state/0.4.25/constant.sol#3)\n", + "markdown": "[Constant.test_constant_bug()](tests/detectors/constant-function-state/0.4.25/constant.sol#L9-L11) is declared view but changes state variables:\n\t- [Constant.a](tests/detectors/constant-function-state/0.4.25/constant.sol#L3)\n", + "first_markdown_element": "tests/detectors/constant-function-state/0.4.25/constant.sol#L9-L11", + "id": "145e2d34dfc5b932c8d67d480c0eaec9baa8c728e2a310529572c0c4a5c6046a", "additional_fields": { "contains_assembly": false }, @@ -145,19 +145,19 @@ "elements": [ { "type": "function", - "name": "test_constant_bug", + "name": "test_view_bug", "source_mapping": { - "start": 113, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 45, + "length": 58, + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 5, + 6, + 7 ], "starting_column": 5, "ending_column": 6 @@ -169,7 +169,7 @@ "source_mapping": { "start": 0, "length": 392, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", @@ -205,7 +205,7 @@ "ending_column": 2 } }, - "signature": "test_constant_bug()" + "signature": "test_view_bug()" } }, { @@ -214,7 +214,7 @@ "source_mapping": { "start": 28, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", @@ -232,7 +232,7 @@ "source_mapping": { "start": 0, "length": 392, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_relative": "tests/detectors/constant-function-state/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-state/0.4.25/constant.sol", @@ -271,10 +271,10 @@ } } ], - "description": "Constant.test_constant_bug() (tests/detectors/constant-function-state/0.4.25/constant.sol#9-11) is declared view but changes state variables:\n\t- Constant.a (tests/detectors/constant-function-state/0.4.25/constant.sol#3)\n", - "markdown": "[Constant.test_constant_bug()](tests/detectors/constant-function-state/0.4.25/constant.sol#L9-L11) is declared view but changes state variables:\n\t- [Constant.a](tests/detectors/constant-function-state/0.4.25/constant.sol#L3)\n", - "first_markdown_element": "tests/detectors/constant-function-state/0.4.25/constant.sol#L9-L11", - "id": "145e2d34dfc5b932c8d67d480c0eaec9baa8c728e2a310529572c0c4a5c6046a", + "description": "Constant.test_view_bug() (tests/detectors/constant-function-state/0.4.25/constant.sol#5-7) is declared view but changes state variables:\n\t- Constant.a (tests/detectors/constant-function-state/0.4.25/constant.sol#3)\n", + "markdown": "[Constant.test_view_bug()](tests/detectors/constant-function-state/0.4.25/constant.sol#L5-L7) is declared view but changes state variables:\n\t- [Constant.a](tests/detectors/constant-function-state/0.4.25/constant.sol#L3)\n", + "first_markdown_element": "tests/detectors/constant-function-state/0.4.25/constant.sol#L5-L7", + "id": "4dee61d8835d20c6f1f7c195d8bd1e9de5dbcc096396a5b8db391136f9f5fdf1", "additional_fields": { "contains_assembly": false }, diff --git a/tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol.0.4.25.ArrayLengthAssignment.json b/tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol.0.4.25.ArrayLengthAssignment.json index 94fc909e0..9b24da276 100644 --- a/tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol.0.4.25.ArrayLengthAssignment.json +++ b/tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol.0.4.25.ArrayLengthAssignment.json @@ -268,20 +268,20 @@ }, { "type": "node", - "name": "a.x.length = param", + "name": "b.subStruct.x.length = param + 1", "source_mapping": { - "start": 818, - "length": 18, + "start": 964, + "length": 32, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol", "is_dependency": false, "lines": [ - 36 + 41 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 41 }, "type_specific_fields": { "parent": { @@ -394,10 +394,10 @@ } } ], - "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- a.x.length = param (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#36)\n", - "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [a.x.length = param](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L36)\n", + "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- b.subStruct.x.length = param + 1 (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#41)\n", + "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [b.subStruct.x.length = param + 1](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L41)\n", "first_markdown_element": "tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L1-L46", - "id": "f455c672028771f21282b59fb58b5eac51185eae4ac44e65a2e1f4df6db0c6e4", + "id": "82175a5c24c40a1afe4c59f4271a2c12e577ad25e89e6e319e47b4f8f2a76943", "check": "controlled-array-length", "impact": "High", "confidence": "Medium" @@ -469,20 +469,20 @@ }, { "type": "node", - "name": "b.subStruct.x.length = param + 1", + "name": "a.x.length = param", "source_mapping": { - "start": 964, - "length": 32, + "start": 818, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol", "is_dependency": false, "lines": [ - 41 + 36 ], "starting_column": 9, - "ending_column": 41 + "ending_column": 27 }, "type_specific_fields": { "parent": { @@ -595,10 +595,10 @@ } } ], - "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- b.subStruct.x.length = param + 1 (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#41)\n", - "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [b.subStruct.x.length = param + 1](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L41)\n", + "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- a.x.length = param (tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#36)\n", + "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [a.x.length = param](tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L36)\n", "first_markdown_element": "tests/detectors/controlled-array-length/0.4.25/array_length_assignment.sol#L1-L46", - "id": "82175a5c24c40a1afe4c59f4271a2c12e577ad25e89e6e319e47b4f8f2a76943", + "id": "f455c672028771f21282b59fb58b5eac51185eae4ac44e65a2e1f4df6db0c6e4", "check": "controlled-array-length", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol.0.5.16.ArrayLengthAssignment.json b/tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol.0.5.16.ArrayLengthAssignment.json index 23ff3a166..58c382f8a 100644 --- a/tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol.0.5.16.ArrayLengthAssignment.json +++ b/tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol.0.5.16.ArrayLengthAssignment.json @@ -67,9 +67,9 @@ }, { "type": "node", - "name": "arr.length = param", + "name": "a.x.length = param", "source_mapping": { - "start": 527, + "start": 818, "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol", @@ -77,10 +77,10 @@ "filename_short": "tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol", "is_dependency": false, "lines": [ - 26 + 36 ], - "starting_column": 13, - "ending_column": 31 + "starting_column": 9, + "ending_column": 27 }, "type_specific_fields": { "parent": { @@ -193,10 +193,10 @@ } } ], - "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- arr.length = param (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#26)\n", - "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [arr.length = param](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L26)\n", + "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- a.x.length = param (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#36)\n", + "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [a.x.length = param](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L36)\n", "first_markdown_element": "tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L1-L46", - "id": "5120add82e5b674971638ddcd430301e4fd0ff0abc12b425d78bb09baa519dd0", + "id": "3ee7c4c1f07506f88bcd3b42a86641b32b24a3978768cbcb99301bd8a1fcb975", "check": "controlled-array-length", "impact": "High", "confidence": "Medium" @@ -268,9 +268,9 @@ }, { "type": "node", - "name": "a.x.length = param", + "name": "arr.length = param", "source_mapping": { - "start": 818, + "start": 527, "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol", @@ -278,10 +278,10 @@ "filename_short": "tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol", "is_dependency": false, "lines": [ - 36 + 26 ], - "starting_column": 9, - "ending_column": 27 + "starting_column": 13, + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -394,10 +394,10 @@ } } ], - "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- a.x.length = param (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#36)\n", - "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [a.x.length = param](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L36)\n", + "description": "ArrayLengthAssignment (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#1-46) contract sets array length with a user-controlled value:\n\t- arr.length = param (tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#26)\n", + "markdown": "[ArrayLengthAssignment](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L1-L46) contract sets array length with a user-controlled value:\n\t- [arr.length = param](tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L26)\n", "first_markdown_element": "tests/detectors/controlled-array-length/0.5.16/array_length_assignment.sol#L1-L46", - "id": "3ee7c4c1f07506f88bcd3b42a86641b32b24a3978768cbcb99301bd8a1fcb975", + "id": "5120add82e5b674971638ddcd430301e4fd0ff0abc12b425d78bb09baa519dd0", "check": "controlled-array-length", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json b/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json index 568e9e66f..e87a535ad 100644 --- a/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json +++ b/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json @@ -4,20 +4,19 @@ "elements": [ { "type": "function", - "name": "bad_delegate_call", + "name": "bad_delegate_call2", "source_mapping": { - "start": 101, - "length": 134, - "filename_used": "/GENERIC_PATH", + "start": 337, + "length": 118, + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -29,7 +28,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -65,43 +64,42 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call(bytes)" + "signature": "bad_delegate_call2(bytes)" } }, { "type": "node", - "name": "addr_bad.delegatecall(data)", + "name": "addr_bad.delegatecall(abi.encode(func_id,data))", "source_mapping": { - "start": 201, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 400, + "length": 48, + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 10 + 19 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 57 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad_delegate_call", + "name": "bad_delegate_call2", "source_mapping": { - "start": 101, - "length": 134, - "filename_used": "/GENERIC_PATH", + "start": 337, + "length": 118, + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -113,7 +111,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -149,16 +147,16 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call(bytes)" + "signature": "bad_delegate_call2(bytes)" } } } } ], - "description": "C.bad_delegate_call(bytes) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#8-11) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(data) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#10)\n", - "markdown": "[C.bad_delegate_call(bytes)](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L8-L11) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(data)](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L10)\n", - "first_markdown_element": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L8-L11", - "id": "90d4f387ca3c669975a3ed4d7a5b09665b786a1078e16ced61adf1c3f9f6efb8", + "description": "C.bad_delegate_call2(bytes) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#18-20) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(abi.encode(func_id,data)) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#19)\n", + "markdown": "[C.bad_delegate_call2(bytes)](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L18-L20) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(abi.encode(func_id,data))](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L19)\n", + "first_markdown_element": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L18-L20", + "id": "12d6ba2d0139326b442352b37028ff77dfbdc625870a5ae858e6107cfa89cfbb", "check": "controlled-delegatecall", "impact": "High", "confidence": "Medium" @@ -167,19 +165,20 @@ "elements": [ { "type": "function", - "name": "bad_delegate_call2", + "name": "bad_delegate_call", "source_mapping": { - "start": 337, - "length": 118, - "filename_used": "/GENERIC_PATH", + "start": 101, + "length": 134, + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -191,7 +190,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -227,42 +226,43 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call2(bytes)" + "signature": "bad_delegate_call(bytes)" } }, { "type": "node", - "name": "addr_bad.delegatecall(abi.encode(func_id,data))", + "name": "addr_bad.delegatecall(data)", "source_mapping": { - "start": 400, - "length": 48, - "filename_used": "/GENERIC_PATH", + "start": 201, + "length": 27, + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 19 + 10 ], "starting_column": 9, - "ending_column": 57 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad_delegate_call2", + "name": "bad_delegate_call", "source_mapping": { - "start": 337, - "length": 118, - "filename_used": "/GENERIC_PATH", + "start": 101, + "length": 134, + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -274,7 +274,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -310,16 +310,16 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call2(bytes)" + "signature": "bad_delegate_call(bytes)" } } } } ], - "description": "C.bad_delegate_call2(bytes) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#18-20) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(abi.encode(func_id,data)) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#19)\n", - "markdown": "[C.bad_delegate_call2(bytes)](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L18-L20) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(abi.encode(func_id,data))](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L19)\n", - "first_markdown_element": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L18-L20", - "id": "12d6ba2d0139326b442352b37028ff77dfbdc625870a5ae858e6107cfa89cfbb", + "description": "C.bad_delegate_call(bytes) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#8-11) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(data) (tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#10)\n", + "markdown": "[C.bad_delegate_call(bytes)](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L8-L11) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(data)](tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L10)\n", + "first_markdown_element": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol#L8-L11", + "id": "90d4f387ca3c669975a3ed4d7a5b09665b786a1078e16ced61adf1c3f9f6efb8", "check": "controlled-delegatecall", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json b/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json index b7aece8b0..edc0ffc58 100644 --- a/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json +++ b/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json @@ -4,20 +4,19 @@ "elements": [ { "type": "function", - "name": "bad_delegate_call", + "name": "bad_delegate_call2", "source_mapping": { - "start": 101, - "length": 134, - "filename_used": "/GENERIC_PATH", + "start": 337, + "length": 118, + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -29,7 +28,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -65,43 +64,42 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call(bytes)" + "signature": "bad_delegate_call2(bytes)" } }, { "type": "node", - "name": "addr_bad.delegatecall(data)", + "name": "addr_bad.delegatecall(abi.encode(func_id,data))", "source_mapping": { - "start": 201, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 400, + "length": 48, + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 10 + 19 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 57 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad_delegate_call", + "name": "bad_delegate_call2", "source_mapping": { - "start": 101, - "length": 134, - "filename_used": "/GENERIC_PATH", + "start": 337, + "length": 118, + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -113,7 +111,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -149,16 +147,16 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call(bytes)" + "signature": "bad_delegate_call2(bytes)" } } } } ], - "description": "C.bad_delegate_call(bytes) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#8-11) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(data) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#10)\n", - "markdown": "[C.bad_delegate_call(bytes)](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L8-L11) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(data)](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L10)\n", - "first_markdown_element": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L8-L11", - "id": "bed67f615a2f3a872e24eedf23fdedbdfbe5a540dc3f3ea4ca1430581997a8f6", + "description": "C.bad_delegate_call2(bytes) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#18-20) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(abi.encode(func_id,data)) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#19)\n", + "markdown": "[C.bad_delegate_call2(bytes)](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L18-L20) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(abi.encode(func_id,data))](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L19)\n", + "first_markdown_element": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L18-L20", + "id": "82fc8a33f6b16eff457087ec9961f2bce3c61289628dac8284009c8275cea790", "check": "controlled-delegatecall", "impact": "High", "confidence": "Medium" @@ -167,19 +165,20 @@ "elements": [ { "type": "function", - "name": "bad_delegate_call2", + "name": "bad_delegate_call", "source_mapping": { - "start": 337, - "length": 118, - "filename_used": "/GENERIC_PATH", + "start": 101, + "length": 134, + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -191,7 +190,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -227,42 +226,43 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call2(bytes)" + "signature": "bad_delegate_call(bytes)" } }, { "type": "node", - "name": "addr_bad.delegatecall(abi.encode(func_id,data))", + "name": "addr_bad.delegatecall(data)", "source_mapping": { - "start": 400, - "length": 48, - "filename_used": "/GENERIC_PATH", + "start": 201, + "length": 27, + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 19 + 10 ], "starting_column": 9, - "ending_column": 57 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad_delegate_call2", + "name": "bad_delegate_call", "source_mapping": { - "start": 337, - "length": 118, - "filename_used": "/GENERIC_PATH", + "start": 101, + "length": 134, + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -274,7 +274,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -310,16 +310,16 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call2(bytes)" + "signature": "bad_delegate_call(bytes)" } } } } ], - "description": "C.bad_delegate_call2(bytes) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#18-20) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(abi.encode(func_id,data)) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#19)\n", - "markdown": "[C.bad_delegate_call2(bytes)](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L18-L20) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(abi.encode(func_id,data))](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L19)\n", - "first_markdown_element": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L18-L20", - "id": "82fc8a33f6b16eff457087ec9961f2bce3c61289628dac8284009c8275cea790", + "description": "C.bad_delegate_call(bytes) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#8-11) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(data) (tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#10)\n", + "markdown": "[C.bad_delegate_call(bytes)](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L8-L11) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(data)](tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L10)\n", + "first_markdown_element": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol#L8-L11", + "id": "bed67f615a2f3a872e24eedf23fdedbdfbe5a540dc3f3ea4ca1430581997a8f6", "check": "controlled-delegatecall", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json b/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json index 9de54f65d..f916269e2 100644 --- a/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json +++ b/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json @@ -4,20 +4,19 @@ "elements": [ { "type": "function", - "name": "bad_delegate_call", + "name": "bad_delegate_call2", "source_mapping": { - "start": 101, - "length": 134, - "filename_used": "/GENERIC_PATH", + "start": 337, + "length": 118, + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -29,7 +28,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -65,43 +64,42 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call(bytes)" + "signature": "bad_delegate_call2(bytes)" } }, { "type": "node", - "name": "addr_bad.delegatecall(data)", + "name": "addr_bad.delegatecall(abi.encode(func_id,data))", "source_mapping": { - "start": 201, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 400, + "length": 48, + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 10 + 19 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 57 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad_delegate_call", + "name": "bad_delegate_call2", "source_mapping": { - "start": 101, - "length": 134, - "filename_used": "/GENERIC_PATH", + "start": 337, + "length": 118, + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -113,7 +111,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -149,16 +147,16 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call(bytes)" + "signature": "bad_delegate_call2(bytes)" } } } } ], - "description": "C.bad_delegate_call(bytes) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#8-11) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(data) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#10)\n", - "markdown": "[C.bad_delegate_call(bytes)](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L8-L11) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(data)](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L10)\n", - "first_markdown_element": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L8-L11", - "id": "59a70e53c14de214629ffde4abab9700cbb3bc66a99e281954e3b9f285a28c2d", + "description": "C.bad_delegate_call2(bytes) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#18-20) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(abi.encode(func_id,data)) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#19)\n", + "markdown": "[C.bad_delegate_call2(bytes)](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L18-L20) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(abi.encode(func_id,data))](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L19)\n", + "first_markdown_element": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L18-L20", + "id": "04a4aed45b4c803d9fa03d70198a8f6d7f4228d2fd5e06bd61c4c68431be2c90", "check": "controlled-delegatecall", "impact": "High", "confidence": "Medium" @@ -167,19 +165,20 @@ "elements": [ { "type": "function", - "name": "bad_delegate_call2", + "name": "bad_delegate_call", "source_mapping": { - "start": 337, - "length": 118, - "filename_used": "/GENERIC_PATH", + "start": 101, + "length": 134, + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -191,7 +190,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -227,42 +226,43 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call2(bytes)" + "signature": "bad_delegate_call(bytes)" } }, { "type": "node", - "name": "addr_bad.delegatecall(abi.encode(func_id,data))", + "name": "addr_bad.delegatecall(data)", "source_mapping": { - "start": 400, - "length": 48, - "filename_used": "/GENERIC_PATH", + "start": 201, + "length": 27, + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 19 + 10 ], "starting_column": 9, - "ending_column": 57 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad_delegate_call2", + "name": "bad_delegate_call", "source_mapping": { - "start": 337, - "length": 118, - "filename_used": "/GENERIC_PATH", + "start": 101, + "length": 134, + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -274,7 +274,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -310,16 +310,16 @@ "ending_column": 2 } }, - "signature": "bad_delegate_call2(bytes)" + "signature": "bad_delegate_call(bytes)" } } } } ], - "description": "C.bad_delegate_call2(bytes) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#18-20) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(abi.encode(func_id,data)) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#19)\n", - "markdown": "[C.bad_delegate_call2(bytes)](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L18-L20) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(abi.encode(func_id,data))](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L19)\n", - "first_markdown_element": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L18-L20", - "id": "04a4aed45b4c803d9fa03d70198a8f6d7f4228d2fd5e06bd61c4c68431be2c90", + "description": "C.bad_delegate_call(bytes) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#8-11) uses delegatecall to a input-controlled function id\n\t- addr_bad.delegatecall(data) (tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#10)\n", + "markdown": "[C.bad_delegate_call(bytes)](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L8-L11) uses delegatecall to a input-controlled function id\n\t- [addr_bad.delegatecall(data)](tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L10)\n", + "first_markdown_element": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol#L8-L11", + "id": "59a70e53c14de214629ffde4abab9700cbb3bc66a99e281954e3b9f285a28c2d", "check": "controlled-delegatecall", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol.0.5.16.CostlyOperationsInLoop.json b/tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol.0.5.16.CostlyOperationsInLoop.json index 952b023a4..0116c06f9 100644 --- a/tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol.0.5.16.CostlyOperationsInLoop.json +++ b/tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol.0.5.16.CostlyOperationsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 255, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", @@ -30,7 +30,7 @@ "source_mapping": { "start": 29, "length": 1081, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", @@ -83,7 +83,7 @@ "source_mapping": { "start": 413, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", @@ -101,7 +101,7 @@ "source_mapping": { "start": 255, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", @@ -123,7 +123,7 @@ "source_mapping": { "start": 29, "length": 1081, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.5.16/multiple_costly_operations_in_loop.sol", diff --git a/tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol.0.6.11.CostlyOperationsInLoop.json b/tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol.0.6.11.CostlyOperationsInLoop.json index 98c3f559a..499897d83 100644 --- a/tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol.0.6.11.CostlyOperationsInLoop.json +++ b/tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol.0.6.11.CostlyOperationsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 255, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", @@ -30,7 +30,7 @@ "source_mapping": { "start": 29, "length": 1081, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", @@ -83,7 +83,7 @@ "source_mapping": { "start": 413, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", @@ -101,7 +101,7 @@ "source_mapping": { "start": 255, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", @@ -123,7 +123,7 @@ "source_mapping": { "start": 29, "length": 1081, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.6.11/multiple_costly_operations_in_loop.sol", diff --git a/tests/detectors/dead-code/0.8.0/dead-code.sol.0.8.0.DeadCode.json b/tests/detectors/dead-code/0.8.0/dead-code.sol.0.8.0.DeadCode.json index 01574ed8f..13b453532 100644 --- a/tests/detectors/dead-code/0.8.0/dead-code.sol.0.8.0.DeadCode.json +++ b/tests/detectors/dead-code/0.8.0/dead-code.sol.0.8.0.DeadCode.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "unused", + "name": "unused_but_shadowed", "source_mapping": { - "start": 19, - "length": 34, + "start": 319, + "length": 56, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/dead-code/0.8.0/dead-code.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/dead-code/0.8.0/dead-code.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4 + 26, + 27, + 28 ], "starting_column": 5, "ending_column": 6 @@ -24,34 +24,34 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test", + "name": "Test4", "source_mapping": { - "start": 0, - "length": 55, + "start": 290, + "length": 87, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/dead-code/0.8.0/dead-code.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/dead-code/0.8.0/dead-code.sol", "is_dependency": false, "lines": [ - 1, - 2, - 3, - 4, - 5 + 25, + 26, + 27, + 28, + 29 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "unused()" + "signature": "unused_but_shadowed()" } } ], - "description": "Test.unused() (tests/detectors/dead-code/0.8.0/dead-code.sol#2-4) is never used and should be removed\n", - "markdown": "[Test.unused()](tests/detectors/dead-code/0.8.0/dead-code.sol#L2-L4) is never used and should be removed\n", - "first_markdown_element": "tests/detectors/dead-code/0.8.0/dead-code.sol#L2-L4", - "id": "a7c13823116566bbbbb68e8a7efa78fe64785fcb8582069373eda7f27c523cb3", + "description": "Test4.unused_but_shadowed() (tests/detectors/dead-code/0.8.0/dead-code.sol#26-28) is never used and should be removed\n", + "markdown": "[Test4.unused_but_shadowed()](tests/detectors/dead-code/0.8.0/dead-code.sol#L26-L28) is never used and should be removed\n", + "first_markdown_element": "tests/detectors/dead-code/0.8.0/dead-code.sol#L26-L28", + "id": "74ea8421cf7fa9e04d243014b61f3eee7a9c7648df98316c3881dd4f1f2ab3f7", "check": "dead-code", "impact": "Informational", "confidence": "Medium" @@ -60,19 +60,19 @@ "elements": [ { "type": "function", - "name": "unused_but_shadowed", + "name": "unused", "source_mapping": { - "start": 79, - "length": 55, + "start": 19, + "length": 34, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/dead-code/0.8.0/dead-code.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/dead-code/0.8.0/dead-code.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 2, + 3, + 4 ], "starting_column": 5, "ending_column": 6 @@ -80,35 +80,34 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Test", "source_mapping": { - "start": 58, - "length": 78, + "start": 0, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/dead-code/0.8.0/dead-code.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/dead-code/0.8.0/dead-code.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12, - 13 + 1, + 2, + 3, + 4, + 5 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "unused_but_shadowed()" + "signature": "unused()" } } ], - "description": "Test2.unused_but_shadowed() (tests/detectors/dead-code/0.8.0/dead-code.sol#10-12) is never used and should be removed\n", - "markdown": "[Test2.unused_but_shadowed()](tests/detectors/dead-code/0.8.0/dead-code.sol#L10-L12) is never used and should be removed\n", - "first_markdown_element": "tests/detectors/dead-code/0.8.0/dead-code.sol#L10-L12", - "id": "aaba496684b73955e90b555de174e1cd03f0fee337849c4d58c10ef76ff93582", + "description": "Test.unused() (tests/detectors/dead-code/0.8.0/dead-code.sol#2-4) is never used and should be removed\n", + "markdown": "[Test.unused()](tests/detectors/dead-code/0.8.0/dead-code.sol#L2-L4) is never used and should be removed\n", + "first_markdown_element": "tests/detectors/dead-code/0.8.0/dead-code.sol#L2-L4", + "id": "a7c13823116566bbbbb68e8a7efa78fe64785fcb8582069373eda7f27c523cb3", "check": "dead-code", "impact": "Informational", "confidence": "Medium" @@ -119,17 +118,17 @@ "type": "function", "name": "unused_but_shadowed", "source_mapping": { - "start": 319, - "length": 56, + "start": 79, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/dead-code/0.8.0/dead-code.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/dead-code/0.8.0/dead-code.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28 + 10, + 11, + 12 ], "starting_column": 5, "ending_column": 6 @@ -137,21 +136,22 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test4", + "name": "Test2", "source_mapping": { - "start": 290, - "length": 87, + "start": 58, + "length": 78, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/dead-code/0.8.0/dead-code.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/dead-code/0.8.0/dead-code.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28, - 29 + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 1, "ending_column": 2 @@ -161,10 +161,10 @@ } } ], - "description": "Test4.unused_but_shadowed() (tests/detectors/dead-code/0.8.0/dead-code.sol#26-28) is never used and should be removed\n", - "markdown": "[Test4.unused_but_shadowed()](tests/detectors/dead-code/0.8.0/dead-code.sol#L26-L28) is never used and should be removed\n", - "first_markdown_element": "tests/detectors/dead-code/0.8.0/dead-code.sol#L26-L28", - "id": "74ea8421cf7fa9e04d243014b61f3eee7a9c7648df98316c3881dd4f1f2ab3f7", + "description": "Test2.unused_but_shadowed() (tests/detectors/dead-code/0.8.0/dead-code.sol#10-12) is never used and should be removed\n", + "markdown": "[Test2.unused_but_shadowed()](tests/detectors/dead-code/0.8.0/dead-code.sol#L10-L12) is never used and should be removed\n", + "first_markdown_element": "tests/detectors/dead-code/0.8.0/dead-code.sol#L10-L12", + "id": "aaba496684b73955e90b555de174e1cd03f0fee337849c4d58c10ef76ff93582", "check": "dead-code", "impact": "Informational", "confidence": "Medium" diff --git a/tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol.0.4.25.UnindexedERC20EventParameters.json b/tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol.0.4.25.UnindexedERC20EventParameters.json index d15b49ba2..04072e38a 100644 --- a/tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol.0.4.25.UnindexedERC20EventParameters.json +++ b/tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol.0.4.25.UnindexedERC20EventParameters.json @@ -50,14 +50,14 @@ "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "from" + "parameter_name": "to" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#19)does not index parameter from\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19)does not index parameter from\n", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#19)does not index parameter to\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19)does not index parameter to\n", "first_markdown_element": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19", - "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", + "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -66,20 +66,20 @@ "elements": [ { "type": "event", - "name": "Transfer", + "name": "Approval", "source_mapping": { - "start": 1090, - "length": 53, + "start": 1148, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol", "is_dependency": false, "lines": [ - 19 + 20 ], "starting_column": 5, - "ending_column": 58 + "ending_column": 64 }, "type_specific_fields": { "parent": { @@ -109,17 +109,17 @@ "ending_column": 2 } }, - "signature": "Transfer(address,address,uint256)" + "signature": "Approval(address,address,uint256)" }, "additional_fields": { - "parameter_name": "to" + "parameter_name": "owner" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#19)does not index parameter to\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19)does not index parameter to\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19", - "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", + "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#20)does not index parameter owner\n", + "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L20)does not index parameter owner\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L20", + "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -128,20 +128,20 @@ "elements": [ { "type": "event", - "name": "Approval", + "name": "Transfer", "source_mapping": { - "start": 1148, - "length": 59, + "start": 1090, + "length": 53, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol", "is_dependency": false, "lines": [ - 20 + 19 ], "starting_column": 5, - "ending_column": 64 + "ending_column": 58 }, "type_specific_fields": { "parent": { @@ -171,17 +171,17 @@ "ending_column": 2 } }, - "signature": "Approval(address,address,uint256)" + "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "owner" + "parameter_name": "from" } } ], - "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#20)does not index parameter owner\n", - "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L20)does not index parameter owner\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L20", - "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#19)does not index parameter from\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19)does not index parameter from\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.4.25/erc20_indexed.sol#L19", + "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol.0.5.16.UnindexedERC20EventParameters.json b/tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol.0.5.16.UnindexedERC20EventParameters.json index 8229619e6..78a56a9d0 100644 --- a/tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol.0.5.16.UnindexedERC20EventParameters.json +++ b/tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol.0.5.16.UnindexedERC20EventParameters.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 1090, "length": 53, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 622, "length": 587, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", @@ -50,14 +50,14 @@ "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "from" + "parameter_name": "to" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#19)does not index parameter from\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19)does not index parameter from\n", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#19)does not index parameter to\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19)does not index parameter to\n", "first_markdown_element": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19", - "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", + "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -66,20 +66,20 @@ "elements": [ { "type": "event", - "name": "Transfer", + "name": "Approval", "source_mapping": { - "start": 1090, - "length": 53, - "filename_used": "/GENERIC_PATH", + "start": 1148, + "length": 59, + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "is_dependency": false, "lines": [ - 19 + 20 ], "starting_column": 5, - "ending_column": 58 + "ending_column": 64 }, "type_specific_fields": { "parent": { @@ -88,7 +88,7 @@ "source_mapping": { "start": 622, "length": 587, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", @@ -109,17 +109,17 @@ "ending_column": 2 } }, - "signature": "Transfer(address,address,uint256)" + "signature": "Approval(address,address,uint256)" }, "additional_fields": { - "parameter_name": "to" + "parameter_name": "owner" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#19)does not index parameter to\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19)does not index parameter to\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19", - "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", + "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#20)does not index parameter owner\n", + "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L20)does not index parameter owner\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L20", + "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -128,20 +128,20 @@ "elements": [ { "type": "event", - "name": "Approval", + "name": "Transfer", "source_mapping": { - "start": 1148, - "length": 59, - "filename_used": "/GENERIC_PATH", + "start": 1090, + "length": 53, + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "is_dependency": false, "lines": [ - 20 + 19 ], "starting_column": 5, - "ending_column": 64 + "ending_column": 58 }, "type_specific_fields": { "parent": { @@ -150,7 +150,7 @@ "source_mapping": { "start": 622, "length": 587, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", @@ -171,17 +171,17 @@ "ending_column": 2 } }, - "signature": "Approval(address,address,uint256)" + "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "owner" + "parameter_name": "from" } } ], - "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#20)does not index parameter owner\n", - "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L20)does not index parameter owner\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L20", - "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#19)does not index parameter from\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19)does not index parameter from\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol#L19", + "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -194,7 +194,7 @@ "source_mapping": { "start": 1148, "length": 59, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 622, "length": 587, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.5.16/erc20_indexed.sol", diff --git a/tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol.0.6.11.UnindexedERC20EventParameters.json b/tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol.0.6.11.UnindexedERC20EventParameters.json index 762efcbbb..ab323ee58 100644 --- a/tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol.0.6.11.UnindexedERC20EventParameters.json +++ b/tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol.0.6.11.UnindexedERC20EventParameters.json @@ -50,14 +50,14 @@ "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "from" + "parameter_name": "to" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#19)does not index parameter from\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19)does not index parameter from\n", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#19)does not index parameter to\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19)does not index parameter to\n", "first_markdown_element": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19", - "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", + "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -66,20 +66,20 @@ "elements": [ { "type": "event", - "name": "Transfer", + "name": "Approval", "source_mapping": { - "start": 1204, - "length": 53, + "start": 1262, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol", "is_dependency": false, "lines": [ - 19 + 20 ], "starting_column": 5, - "ending_column": 58 + "ending_column": 64 }, "type_specific_fields": { "parent": { @@ -109,17 +109,17 @@ "ending_column": 2 } }, - "signature": "Transfer(address,address,uint256)" + "signature": "Approval(address,address,uint256)" }, "additional_fields": { - "parameter_name": "to" + "parameter_name": "owner" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#19)does not index parameter to\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19)does not index parameter to\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19", - "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", + "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#20)does not index parameter owner\n", + "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L20)does not index parameter owner\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L20", + "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -128,20 +128,20 @@ "elements": [ { "type": "event", - "name": "Approval", + "name": "Transfer", "source_mapping": { - "start": 1262, - "length": 59, + "start": 1204, + "length": 53, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol", "is_dependency": false, "lines": [ - 20 + 19 ], "starting_column": 5, - "ending_column": 64 + "ending_column": 58 }, "type_specific_fields": { "parent": { @@ -171,17 +171,17 @@ "ending_column": 2 } }, - "signature": "Approval(address,address,uint256)" + "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "owner" + "parameter_name": "from" } } ], - "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#20)does not index parameter owner\n", - "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L20)does not index parameter owner\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L20", - "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#19)does not index parameter from\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19)does not index parameter from\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.6.11/erc20_indexed.sol#L19", + "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json b/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json index 37cae9bd2..b9930721b 100644 --- a/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json +++ b/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json @@ -50,14 +50,14 @@ "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "from" + "parameter_name": "to" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#19)does not index parameter from\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19)does not index parameter from\n", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#19)does not index parameter to\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19)does not index parameter to\n", "first_markdown_element": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19", - "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", + "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -66,20 +66,20 @@ "elements": [ { "type": "event", - "name": "Transfer", + "name": "Approval", "source_mapping": { - "start": 1204, - "length": 53, + "start": 1262, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "is_dependency": false, "lines": [ - 19 + 20 ], "starting_column": 5, - "ending_column": 58 + "ending_column": 64 }, "type_specific_fields": { "parent": { @@ -109,17 +109,17 @@ "ending_column": 2 } }, - "signature": "Transfer(address,address,uint256)" + "signature": "Approval(address,address,uint256)" }, "additional_fields": { - "parameter_name": "to" + "parameter_name": "owner" } } ], - "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#19)does not index parameter to\n", - "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19)does not index parameter to\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19", - "id": "29c46eb3a4695004959847ae09377729cdf3aa583de95560090b9bd49977c49b", + "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#20)does not index parameter owner\n", + "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L20)does not index parameter owner\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L20", + "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" @@ -128,20 +128,20 @@ "elements": [ { "type": "event", - "name": "Approval", + "name": "Transfer", "source_mapping": { - "start": 1262, - "length": 59, + "start": 1204, + "length": 53, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "is_dependency": false, "lines": [ - 20 + 19 ], "starting_column": 5, - "ending_column": 64 + "ending_column": 58 }, "type_specific_fields": { "parent": { @@ -171,17 +171,17 @@ "ending_column": 2 } }, - "signature": "Approval(address,address,uint256)" + "signature": "Transfer(address,address,uint256)" }, "additional_fields": { - "parameter_name": "owner" + "parameter_name": "from" } } ], - "description": "ERC20 event IERC20BadApproval(address,address,uint256) (tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#20)does not index parameter owner\n", - "markdown": "ERC20 event [IERC20BadApproval(address,address,uint256)](tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L20)does not index parameter owner\n", - "first_markdown_element": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L20", - "id": "7d72b56a71ca96db304878f25484c496af1d283a9b777dc788f1473974057025", + "description": "ERC20 event IERC20BadTransfer(address,address,uint256) (tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#19)does not index parameter from\n", + "markdown": "ERC20 event [IERC20BadTransfer(address,address,uint256)](tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19)does not index parameter from\n", + "first_markdown_element": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol#L19", + "id": "a86c7a54115f270548e82d71570dc4d2900b622b0f82c6fce137f3a35314af53", "check": "erc20-indexed", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json index 39425ad2e..de19c0391 100644 --- a/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json @@ -29,20 +29,20 @@ }, { "type": "function", - "name": "transfer", + "name": "approve", "source_mapping": { - "start": 46, - "length": 51, + "start": 102, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 4 + 5 ], "starting_column": 5, - "ending_column": 56 + "ending_column": 60 }, "type_specific_fields": { "parent": { @@ -70,14 +70,14 @@ "ending_column": 2 } }, - "signature": "transfer(address,uint256)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#5)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L5)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10", - "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", + "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -111,20 +111,20 @@ }, { "type": "function", - "name": "approve", + "name": "allowance", "source_mapping": { - "start": 102, - "length": 55, + "start": 319, + "length": 60, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 5 + 9 ], "starting_column": 5, - "ending_column": 60 + "ending_column": 65 }, "type_specific_fields": { "parent": { @@ -152,14 +152,14 @@ "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "allowance(address,address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#5)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L5)\n", + "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10", - "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", + "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -193,20 +193,20 @@ }, { "type": "function", - "name": "transferFrom", + "name": "balanceOf", "source_mapping": { - "start": 162, - "length": 69, + "start": 273, + "length": 41, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 6 + 8 ], "starting_column": 5, - "ending_column": 74 + "ending_column": 46 }, "type_specific_fields": { "parent": { @@ -234,14 +234,14 @@ "ending_column": 2 } }, - "signature": "transferFrom(address,address,uint256)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#6)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L6)\n", + "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10", - "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", + "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -275,20 +275,20 @@ }, { "type": "function", - "name": "totalSupply", + "name": "transferFrom", "source_mapping": { - "start": 236, - "length": 32, + "start": 162, + "length": 69, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, - "ending_column": 37 + "ending_column": 74 }, "type_specific_fields": { "parent": { @@ -316,14 +316,14 @@ "ending_column": 2 } }, - "signature": "totalSupply()" + "signature": "transferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#6)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L6)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10", - "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", + "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -357,20 +357,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "totalSupply", "source_mapping": { - "start": 273, - "length": 41, + "start": 236, + "length": 32, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 8 + 7 ], "starting_column": 5, - "ending_column": 46 + "ending_column": 37 }, "type_specific_fields": { "parent": { @@ -398,14 +398,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "totalSupply()" } } ], - "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10", - "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", + "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -439,20 +439,20 @@ }, { "type": "function", - "name": "allowance", + "name": "transfer", "source_mapping": { - "start": 319, - "length": 60, + "start": 46, + "length": 51, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 9 + 4 ], "starting_column": 5, - "ending_column": 65 + "ending_column": 56 }, "type_specific_fields": { "parent": { @@ -480,14 +480,14 @@ "ending_column": 2 } }, - "signature": "allowance(address,address)" + "signature": "transfer(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol#L3-L10", - "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", + "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol.0.5.16.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol.0.5.16.IncorrectERC20InterfaceDetection.json index c1495435c..aa29d1e15 100644 --- a/tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol.0.5.16.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol.0.5.16.IncorrectERC20InterfaceDetection.json @@ -29,20 +29,20 @@ }, { "type": "function", - "name": "transfer", + "name": "approve", "source_mapping": { - "start": 49, - "length": 51, + "start": 105, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 4 + 5 ], "starting_column": 5, - "ending_column": 56 + "ending_column": 60 }, "type_specific_fields": { "parent": { @@ -70,14 +70,14 @@ "ending_column": 2 } }, - "signature": "transfer(address,uint256)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#5)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L5)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10", - "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", + "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -111,20 +111,20 @@ }, { "type": "function", - "name": "approve", + "name": "allowance", "source_mapping": { - "start": 105, - "length": 55, + "start": 322, + "length": 60, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 5 + 9 ], "starting_column": 5, - "ending_column": 60 + "ending_column": 65 }, "type_specific_fields": { "parent": { @@ -152,14 +152,14 @@ "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "allowance(address,address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#5)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L5)\n", + "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10", - "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", + "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -193,20 +193,20 @@ }, { "type": "function", - "name": "transferFrom", + "name": "balanceOf", "source_mapping": { - "start": 165, - "length": 69, + "start": 276, + "length": 41, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 6 + 8 ], "starting_column": 5, - "ending_column": 74 + "ending_column": 46 }, "type_specific_fields": { "parent": { @@ -234,14 +234,14 @@ "ending_column": 2 } }, - "signature": "transferFrom(address,address,uint256)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#6)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L6)\n", + "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10", - "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", + "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -275,20 +275,20 @@ }, { "type": "function", - "name": "totalSupply", + "name": "transferFrom", "source_mapping": { - "start": 239, - "length": 32, + "start": 165, + "length": 69, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, - "ending_column": 37 + "ending_column": 74 }, "type_specific_fields": { "parent": { @@ -316,14 +316,14 @@ "ending_column": 2 } }, - "signature": "totalSupply()" + "signature": "transferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#6)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L6)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10", - "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", + "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -357,20 +357,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "totalSupply", "source_mapping": { - "start": 276, - "length": 41, + "start": 239, + "length": 32, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 8 + 7 ], "starting_column": 5, - "ending_column": 46 + "ending_column": 37 }, "type_specific_fields": { "parent": { @@ -398,14 +398,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "totalSupply()" } } ], - "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10", - "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", + "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -439,20 +439,20 @@ }, { "type": "function", - "name": "allowance", + "name": "transfer", "source_mapping": { - "start": 322, - "length": 60, + "start": 49, + "length": 51, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 9 + 4 ], "starting_column": 5, - "ending_column": 65 + "ending_column": 56 }, "type_specific_fields": { "parent": { @@ -480,14 +480,14 @@ "ending_column": 2 } }, - "signature": "allowance(address,address)" + "signature": "transfer(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.5.16/incorrect_erc20_interface.sol#L3-L10", - "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", + "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json index a8cdb0cf2..36af91bc5 100644 --- a/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -29,20 +29,20 @@ }, { "type": "function", - "name": "transfer", + "name": "approve", "source_mapping": { - "start": 58, - "length": 59, - "filename_used": "/GENERIC_PATH", + "start": 122, + "length": 63, + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 4 + 5 ], "starting_column": 5, - "ending_column": 64 + "ending_column": 68 }, "type_specific_fields": { "parent": { @@ -51,7 +51,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -70,14 +70,14 @@ "ending_column": 2 } }, - "signature": "transfer(address,uint256)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#5)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L5)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10", - "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", + "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -90,7 +90,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -111,20 +111,20 @@ }, { "type": "function", - "name": "approve", + "name": "allowance", "source_mapping": { - "start": 122, - "length": 63, - "filename_used": "/GENERIC_PATH", + "start": 371, + "length": 68, + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 5 + 9 ], "starting_column": 5, - "ending_column": 68 + "ending_column": 73 }, "type_specific_fields": { "parent": { @@ -133,7 +133,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -152,14 +152,14 @@ "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "allowance(address,address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#5)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L5)\n", + "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10", - "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", + "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -172,7 +172,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -193,20 +193,20 @@ }, { "type": "function", - "name": "transferFrom", + "name": "balanceOf", "source_mapping": { - "start": 190, - "length": 77, - "filename_used": "/GENERIC_PATH", + "start": 317, + "length": 49, + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 6 + 8 ], "starting_column": 5, - "ending_column": 82 + "ending_column": 54 }, "type_specific_fields": { "parent": { @@ -215,7 +215,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -234,14 +234,14 @@ "ending_column": 2 } }, - "signature": "transferFrom(address,address,uint256)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#6)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L6)\n", + "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10", - "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", + "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -254,7 +254,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -275,20 +275,20 @@ }, { "type": "function", - "name": "totalSupply", + "name": "transferFrom", "source_mapping": { - "start": 272, - "length": 40, - "filename_used": "/GENERIC_PATH", + "start": 190, + "length": 77, + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, - "ending_column": 45 + "ending_column": 82 }, "type_specific_fields": { "parent": { @@ -297,7 +297,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -316,14 +316,14 @@ "ending_column": 2 } }, - "signature": "totalSupply()" + "signature": "transferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#6)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L6)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10", - "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", + "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -336,7 +336,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -357,20 +357,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "totalSupply", "source_mapping": { - "start": 317, - "length": 49, - "filename_used": "/GENERIC_PATH", + "start": 272, + "length": 40, + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 8 + 7 ], "starting_column": 5, - "ending_column": 54 + "ending_column": 45 }, "type_specific_fields": { "parent": { @@ -379,7 +379,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -398,14 +398,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "totalSupply()" } } ], - "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10", - "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", + "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -418,7 +418,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -439,20 +439,20 @@ }, { "type": "function", - "name": "allowance", + "name": "transfer", "source_mapping": { - "start": 371, - "length": 68, - "filename_used": "/GENERIC_PATH", + "start": 58, + "length": 59, + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 9 + 4 ], "starting_column": 5, - "ending_column": 73 + "ending_column": 64 }, "type_specific_fields": { "parent": { @@ -461,7 +461,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -480,14 +480,14 @@ "ending_column": 2 } }, - "signature": "allowance(address,address)" + "signature": "transfer(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol#L3-L10", - "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", + "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json index 3817f3cbc..5bf734be6 100644 --- a/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json @@ -29,20 +29,20 @@ }, { "type": "function", - "name": "transfer", + "name": "approve", "source_mapping": { - "start": 58, - "length": 59, + "start": 122, + "length": 63, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 4 + 5 ], "starting_column": 5, - "ending_column": 64 + "ending_column": 68 }, "type_specific_fields": { "parent": { @@ -70,14 +70,14 @@ "ending_column": 2 } }, - "signature": "transfer(address,uint256)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#5)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L5)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10", - "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", + "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -111,20 +111,20 @@ }, { "type": "function", - "name": "approve", + "name": "allowance", "source_mapping": { - "start": 122, - "length": 63, + "start": 371, + "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 5 + 9 ], "starting_column": 5, - "ending_column": 68 + "ending_column": 73 }, "type_specific_fields": { "parent": { @@ -152,14 +152,14 @@ "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "allowance(address,address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.approve(address,uint256) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#5)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.approve(address,uint256)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L5)\n", + "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10", - "id": "0fced3029cf59cf348a6b79c58dbb032d837fdd5a5f355600edebda1878e9e2e", + "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -193,20 +193,20 @@ }, { "type": "function", - "name": "transferFrom", + "name": "balanceOf", "source_mapping": { - "start": 190, - "length": 77, + "start": 317, + "length": 49, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 6 + 8 ], "starting_column": 5, - "ending_column": 82 + "ending_column": 54 }, "type_specific_fields": { "parent": { @@ -234,14 +234,14 @@ "ending_column": 2 } }, - "signature": "transferFrom(address,address,uint256)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#6)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L6)\n", + "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10", - "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", + "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -275,20 +275,20 @@ }, { "type": "function", - "name": "totalSupply", + "name": "transferFrom", "source_mapping": { - "start": 272, - "length": 40, + "start": 190, + "length": 77, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, - "ending_column": 45 + "ending_column": 82 }, "type_specific_fields": { "parent": { @@ -316,14 +316,14 @@ "ending_column": 2 } }, - "signature": "totalSupply()" + "signature": "transferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transferFrom(address,address,uint256) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#6)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transferFrom(address,address,uint256)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L6)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10", - "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", + "id": "ba13a1588595032984a3fad39610a2414bb8fcb522d1e632d52fa947ff207d73", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -357,20 +357,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "totalSupply", "source_mapping": { - "start": 317, - "length": 49, + "start": 272, + "length": 40, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 8 + 7 ], "starting_column": 5, - "ending_column": 54 + "ending_column": 45 }, "type_specific_fields": { "parent": { @@ -398,14 +398,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "totalSupply()" } } ], - "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.balanceOf(address) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.balanceOf(address)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.totalSupply() (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.totalSupply()](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10", - "id": "758ca2456030a36dbd6115f2ccb1a43f53f1dabd66ed079806df0f6b7b4d21ef", + "id": "c951e429e546af28ac08e241d391e874c1c9c70b0732ccfb63f3bbfb3eaac16e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" @@ -439,20 +439,20 @@ }, { "type": "function", - "name": "allowance", + "name": "transfer", "source_mapping": { - "start": 371, - "length": 68, + "start": 58, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "is_dependency": false, "lines": [ - 9 + 4 ], "starting_column": 5, - "ending_column": 73 + "ending_column": 64 }, "type_specific_fields": { "parent": { @@ -480,14 +480,14 @@ "ending_column": 2 } }, - "signature": "allowance(address,address)" + "signature": "transfer(address,uint256)" } } ], - "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.allowance(address,address) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.allowance(address,address)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#3-10) has incorrect ERC20 function interface:Token.transfer(address,uint256) (tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10) has incorrect ERC20 function interface:[Token.transfer(address,uint256)](tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol#L3-L10", - "id": "1286abfe21b09e21e1cec8b991f73664e104fa39f7f4190690ece3af45bc0c7a", + "id": "d3df2e48ae6e8a1b05b275de574b480853a0839c272ce889e8a1664ae432698e", "check": "erc20-interface", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol.0.4.25.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol.0.4.25.IncorrectERC721InterfaceDetection.json index 59ceb015b..4ca6c29cf 100644 --- a/tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol.0.4.25.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol.0.4.25.IncorrectERC721InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -32,50 +32,58 @@ }, { "type": "function", - "name": "supportsInterface", + "name": "getApproved", "source_mapping": { - "start": 50, - "length": 56, - "filename_used": "/GENERIC_PATH", + "start": 723, + "length": 48, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 4 + 14 ], "starting_column": 5, - "ending_column": 61 + "ending_column": 53 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "IERC165", + "name": "Token", "source_mapping": { - "start": 26, - "length": 82, - "filename_used": "/GENERIC_PATH", + "start": 109, + "length": 739, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "supportsInterface(bytes4)" + "signature": "getApproved(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#14)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L14)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", + "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -88,7 +96,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -112,20 +120,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "approve", "source_mapping": { - "start": 140, - "length": 44, - "filename_used": "/GENERIC_PATH", + "start": 549, + "length": 78, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 7 + 12 ], "starting_column": 5, - "ending_column": 49 + "ending_column": 83 }, "type_specific_fields": { "parent": { @@ -134,7 +142,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -156,14 +164,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#12)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L12)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", + "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -176,7 +184,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -200,20 +208,20 @@ }, { "type": "function", - "name": "ownerOf", + "name": "safeTransferFrom", "source_mapping": { - "start": 189, - "length": 44, - "filename_used": "/GENERIC_PATH", + "start": 351, + "length": 96, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 8 + 10 ], "starting_column": 5, - "ending_column": 49 + "ending_column": 101 }, "type_specific_fields": { "parent": { @@ -222,7 +230,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -244,14 +252,14 @@ "ending_column": 2 } }, - "signature": "ownerOf(uint256)" + "signature": "safeTransferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#10)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L10)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", + "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -264,7 +272,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -288,20 +296,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "balanceOf", "source_mapping": { - "start": 238, - "length": 108, - "filename_used": "/GENERIC_PATH", + "start": 140, + "length": 44, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 113 + "ending_column": 49 }, "type_specific_fields": { "parent": { @@ -310,7 +318,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -332,14 +340,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256,bytes)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", + "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -352,7 +360,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -376,20 +384,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "ownerOf", "source_mapping": { - "start": 351, - "length": 96, - "filename_used": "/GENERIC_PATH", + "start": 189, + "length": 44, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 10 + 8 ], "starting_column": 5, - "ending_column": 101 + "ending_column": 49 }, "type_specific_fields": { "parent": { @@ -398,7 +406,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -420,14 +428,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256)" + "signature": "ownerOf(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#10)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L10)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", + "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -440,7 +448,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -468,7 +476,7 @@ "source_mapping": { "start": 452, "length": 92, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -486,7 +494,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -528,7 +536,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -552,58 +560,50 @@ }, { "type": "function", - "name": "approve", + "name": "supportsInterface", "source_mapping": { - "start": 549, - "length": 78, - "filename_used": "/GENERIC_PATH", + "start": 50, + "length": 56, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 12 + 4 ], "starting_column": 5, - "ending_column": 83 + "ending_column": 61 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Token", + "name": "IERC165", "source_mapping": { - "start": 109, - "length": 739, - "filename_used": "/GENERIC_PATH", + "start": 26, + "length": 82, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "supportsInterface(bytes4)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#12)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L12)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", + "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -616,7 +616,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -644,7 +644,7 @@ "source_mapping": { "start": 632, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -728,20 +728,20 @@ }, { "type": "function", - "name": "getApproved", + "name": "safeTransferFrom", "source_mapping": { - "start": 723, - "length": 48, - "filename_used": "/GENERIC_PATH", + "start": 238, + "length": 108, + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 14 + 9 ], "starting_column": 5, - "ending_column": 53 + "ending_column": 113 }, "type_specific_fields": { "parent": { @@ -750,7 +750,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -772,14 +772,14 @@ "ending_column": 2 } }, - "signature": "getApproved(uint256)" + "signature": "safeTransferFrom(address,address,uint256,bytes)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#14)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L14)\n", + "description": "Token (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol#L6-L16", - "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", + "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -792,7 +792,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -820,7 +820,7 @@ "source_mapping": { "start": 776, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", @@ -838,7 +838,7 @@ "source_mapping": { "start": 109, "length": 739, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.4.25/incorrect_erc721_interface.sol", diff --git a/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json index 6d2d85db1..b6304e255 100644 --- a/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -32,50 +32,58 @@ }, { "type": "function", - "name": "supportsInterface", + "name": "getApproved", "source_mapping": { - "start": 53, - "length": 56, - "filename_used": "/GENERIC_PATH", + "start": 735, + "length": 48, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 4 + 14 ], "starting_column": 5, - "ending_column": 61 + "ending_column": 53 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "IERC165", + "name": "Token", "source_mapping": { - "start": 29, - "length": 82, - "filename_used": "/GENERIC_PATH", + "start": 112, + "length": 748, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "supportsInterface(bytes4)" + "signature": "getApproved(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#14)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L14)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", + "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -88,7 +96,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -112,20 +120,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "approve", "source_mapping": { - "start": 143, - "length": 44, - "filename_used": "/GENERIC_PATH", + "start": 561, + "length": 78, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 7 + 12 ], "starting_column": 5, - "ending_column": 49 + "ending_column": 83 }, "type_specific_fields": { "parent": { @@ -134,7 +142,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -156,14 +164,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#12)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L12)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", + "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -176,7 +184,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -200,20 +208,20 @@ }, { "type": "function", - "name": "ownerOf", + "name": "safeTransferFrom", "source_mapping": { - "start": 192, - "length": 44, - "filename_used": "/GENERIC_PATH", + "start": 363, + "length": 96, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 8 + 10 ], "starting_column": 5, - "ending_column": 49 + "ending_column": 101 }, "type_specific_fields": { "parent": { @@ -222,7 +230,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -244,14 +252,14 @@ "ending_column": 2 } }, - "signature": "ownerOf(uint256)" + "signature": "safeTransferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#10)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L10)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", + "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -264,7 +272,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -288,20 +296,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "balanceOf", "source_mapping": { - "start": 241, - "length": 117, - "filename_used": "/GENERIC_PATH", + "start": 143, + "length": 44, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 122 + "ending_column": 49 }, "type_specific_fields": { "parent": { @@ -310,7 +318,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -332,14 +340,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256,bytes)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", + "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -352,7 +360,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -376,20 +384,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "ownerOf", "source_mapping": { - "start": 363, - "length": 96, - "filename_used": "/GENERIC_PATH", + "start": 192, + "length": 44, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 10 + 8 ], "starting_column": 5, - "ending_column": 101 + "ending_column": 49 }, "type_specific_fields": { "parent": { @@ -398,7 +406,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -420,14 +428,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256)" + "signature": "ownerOf(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#10)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L10)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", + "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -440,7 +448,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -468,7 +476,7 @@ "source_mapping": { "start": 464, "length": 92, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -486,7 +494,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -528,7 +536,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -552,58 +560,50 @@ }, { "type": "function", - "name": "approve", + "name": "supportsInterface", "source_mapping": { - "start": 561, - "length": 78, - "filename_used": "/GENERIC_PATH", + "start": 53, + "length": 56, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 12 + 4 ], "starting_column": 5, - "ending_column": 83 + "ending_column": 61 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Token", + "name": "IERC165", "source_mapping": { - "start": 112, - "length": 748, - "filename_used": "/GENERIC_PATH", + "start": 29, + "length": 82, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "supportsInterface(bytes4)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#12)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L12)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", + "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -616,7 +616,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -644,7 +644,7 @@ "source_mapping": { "start": 644, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -728,20 +728,20 @@ }, { "type": "function", - "name": "getApproved", + "name": "safeTransferFrom", "source_mapping": { - "start": 735, - "length": 48, - "filename_used": "/GENERIC_PATH", + "start": 241, + "length": 117, + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 14 + 9 ], "starting_column": 5, - "ending_column": 53 + "ending_column": 122 }, "type_specific_fields": { "parent": { @@ -750,7 +750,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -772,14 +772,14 @@ "ending_column": 2 } }, - "signature": "getApproved(uint256)" + "signature": "safeTransferFrom(address,address,uint256,bytes)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#14)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L14)\n", + "description": "Token (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol#L6-L16", - "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", + "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -792,7 +792,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -820,7 +820,7 @@ "source_mapping": { "start": 788, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -838,7 +838,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", diff --git a/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json index 114390883..94c8a39aa 100644 --- a/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -32,17 +32,17 @@ }, { "type": "function", - "name": "supportsInterface", + "name": "getApproved", "source_mapping": { - "start": 53, + "start": 800, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 4 + 14 ], "starting_column": 5, "ending_column": 61 @@ -50,32 +50,40 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "IERC165", + "name": "Token", "source_mapping": { - "start": 29, - "length": 82, - "filename_used": "/GENERIC_PATH", + "start": 112, + "length": 829, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "supportsInterface(bytes4)" + "signature": "getApproved(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#14)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L14)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", + "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -88,7 +96,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -112,20 +120,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "approve", "source_mapping": { - "start": 152, - "length": 52, - "filename_used": "/GENERIC_PATH", + "start": 610, + "length": 86, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 7 + 12 ], "starting_column": 5, - "ending_column": 57 + "ending_column": 91 }, "type_specific_fields": { "parent": { @@ -134,7 +142,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -156,14 +164,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#12)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L12)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", + "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -176,7 +184,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -200,20 +208,20 @@ }, { "type": "function", - "name": "ownerOf", + "name": "safeTransferFrom", "source_mapping": { - "start": 209, - "length": 52, - "filename_used": "/GENERIC_PATH", + "start": 396, + "length": 104, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 8 + 10 ], "starting_column": 5, - "ending_column": 57 + "ending_column": 109 }, "type_specific_fields": { "parent": { @@ -222,7 +230,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -244,14 +252,14 @@ "ending_column": 2 } }, - "signature": "ownerOf(uint256)" + "signature": "safeTransferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#10)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L10)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", + "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -264,7 +272,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -288,20 +296,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "balanceOf", "source_mapping": { - "start": 266, - "length": 125, - "filename_used": "/GENERIC_PATH", + "start": 152, + "length": 52, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 130 + "ending_column": 57 }, "type_specific_fields": { "parent": { @@ -310,7 +318,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -332,14 +340,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256,bytes)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", + "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -352,7 +360,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -376,20 +384,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "ownerOf", "source_mapping": { - "start": 396, - "length": 104, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 52, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 10 + 8 ], "starting_column": 5, - "ending_column": 109 + "ending_column": 57 }, "type_specific_fields": { "parent": { @@ -398,7 +406,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -420,14 +428,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256)" + "signature": "ownerOf(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#10)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L10)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", + "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -440,7 +448,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -468,7 +476,7 @@ "source_mapping": { "start": 505, "length": 100, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -486,7 +494,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -528,7 +536,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -552,58 +560,50 @@ }, { "type": "function", - "name": "approve", + "name": "supportsInterface", "source_mapping": { - "start": 610, - "length": 86, - "filename_used": "/GENERIC_PATH", + "start": 53, + "length": 56, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 12 + 4 ], "starting_column": 5, - "ending_column": 91 + "ending_column": 61 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Token", + "name": "IERC165", "source_mapping": { - "start": 112, - "length": 829, - "filename_used": "/GENERIC_PATH", + "start": 29, + "length": 82, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "supportsInterface(bytes4)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#12)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L12)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", + "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -616,7 +616,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -644,7 +644,7 @@ "source_mapping": { "start": 701, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -728,20 +728,20 @@ }, { "type": "function", - "name": "getApproved", + "name": "safeTransferFrom", "source_mapping": { - "start": 800, - "length": 56, - "filename_used": "/GENERIC_PATH", + "start": 266, + "length": 125, + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 14 + 9 ], "starting_column": 5, - "ending_column": 61 + "ending_column": 130 }, "type_specific_fields": { "parent": { @@ -750,7 +750,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -772,14 +772,14 @@ "ending_column": 2 } }, - "signature": "getApproved(uint256)" + "signature": "safeTransferFrom(address,address,uint256,bytes)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#14)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L14)\n", + "description": "Token (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol#L6-L16", - "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", + "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -792,7 +792,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -820,7 +820,7 @@ "source_mapping": { "start": 861, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -838,7 +838,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", diff --git a/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json index c39d35d66..3932e5fa2 100644 --- a/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json @@ -32,9 +32,9 @@ }, { "type": "function", - "name": "supportsInterface", + "name": "getApproved", "source_mapping": { - "start": 53, + "start": 800, "length": 56, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -42,7 +42,7 @@ "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 4 + 14 ], "starting_column": 5, "ending_column": 61 @@ -50,32 +50,40 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "IERC165", + "name": "Token", "source_mapping": { - "start": 29, - "length": 82, + "start": 112, + "length": 829, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "supportsInterface(bytes4)" + "signature": "getApproved(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#4)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L4)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#14)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L14)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", + "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -112,20 +120,20 @@ }, { "type": "function", - "name": "balanceOf", + "name": "approve", "source_mapping": { - "start": 152, - "length": 52, + "start": 610, + "length": 86, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 7 + 12 ], "starting_column": 5, - "ending_column": 57 + "ending_column": 91 }, "type_specific_fields": { "parent": { @@ -156,14 +164,14 @@ "ending_column": 2 } }, - "signature": "balanceOf(address)" + "signature": "approve(address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#7)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L7)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#12)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L12)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", + "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -200,20 +208,20 @@ }, { "type": "function", - "name": "ownerOf", + "name": "safeTransferFrom", "source_mapping": { - "start": 209, - "length": 52, + "start": 396, + "length": 104, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 8 + 10 ], "starting_column": 5, - "ending_column": 57 + "ending_column": 109 }, "type_specific_fields": { "parent": { @@ -244,14 +252,14 @@ "ending_column": 2 } }, - "signature": "ownerOf(uint256)" + "signature": "safeTransferFrom(address,address,uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#8)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L8)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#10)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L10)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", + "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -288,20 +296,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "balanceOf", "source_mapping": { - "start": 266, - "length": 125, + "start": 152, + "length": 52, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 130 + "ending_column": 57 }, "type_specific_fields": { "parent": { @@ -332,14 +340,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256,bytes)" + "signature": "balanceOf(address)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#9)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L9)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.balanceOf(address) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#7)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.balanceOf(address)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L7)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", + "id": "6fb9d0320e0b63e2c70f9844d5bea2be958e73beb6eaa4ccb2323ead0c7ef991", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -376,20 +384,20 @@ }, { "type": "function", - "name": "safeTransferFrom", + "name": "ownerOf", "source_mapping": { - "start": 396, - "length": 104, + "start": 209, + "length": 52, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 10 + 8 ], "starting_column": 5, - "ending_column": 109 + "ending_column": 57 }, "type_specific_fields": { "parent": { @@ -420,14 +428,14 @@ "ending_column": 2 } }, - "signature": "safeTransferFrom(address,address,uint256)" + "signature": "ownerOf(uint256)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#10)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L10)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.ownerOf(uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#8)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.ownerOf(uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L8)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "50ab7b0f39f327ac6deccf3c16b4e6fee1dc249072ac41a4bd485ccf0c12315b", + "id": "7d9235dd4ef8bc29a3b7700597cc1e4efb846377c928e5e50c5f49cb37f288d2", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -552,58 +560,50 @@ }, { "type": "function", - "name": "approve", + "name": "supportsInterface", "source_mapping": { - "start": 610, - "length": 86, + "start": 53, + "length": 56, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 12 + 4 ], "starting_column": 5, - "ending_column": 91 + "ending_column": 61 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Token", + "name": "IERC165", "source_mapping": { - "start": 112, - "length": 829, + "start": 29, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "approve(address,uint256)" + "signature": "supportsInterface(bytes4)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.approve(address,uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#12)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.approve(address,uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L12)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:IERC165.supportsInterface(bytes4) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#4)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[IERC165.supportsInterface(bytes4)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L4)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "439c95972d0e084aff057161164b13ab63f85bee31d80b568b7155e58eac4b5d", + "id": "a8593587ca70c51a9ab827843babec3b3eb7f9a08d76eea1e5528e668f7b291d", "check": "erc721-interface", "impact": "Medium", "confidence": "High" @@ -728,20 +728,20 @@ }, { "type": "function", - "name": "getApproved", + "name": "safeTransferFrom", "source_mapping": { - "start": 800, - "length": 56, + "start": 266, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "is_dependency": false, "lines": [ - 14 + 9 ], "starting_column": 5, - "ending_column": 61 + "ending_column": 130 }, "type_specific_fields": { "parent": { @@ -772,14 +772,14 @@ "ending_column": 2 } }, - "signature": "getApproved(uint256)" + "signature": "safeTransferFrom(address,address,uint256,bytes)" } } ], - "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.getApproved(uint256) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#14)\n", - "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.getApproved(uint256)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L14)\n", + "description": "Token (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#6-16) has incorrect ERC721 function interface:Token.safeTransferFrom(address,address,uint256,bytes) (tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#9)\n", + "markdown": "[Token](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16) has incorrect ERC721 function interface:[Token.safeTransferFrom(address,address,uint256,bytes)](tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L9)\n", "first_markdown_element": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol#L6-L16", - "id": "2dce4891c7abea0fa8a8a20a8b8482e7e1d46d54bfd750701c604d5dadd8b937", + "id": "ccec612c4b5db00ab59b766b5dde3f8d3a8c6408ef595ab08bff21628587e2a1", "check": "erc721-interface", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/events-access/0.4.25/missing_events_access_control.sol.0.4.25.MissingEventsAccessControl.json b/tests/detectors/events-access/0.4.25/missing_events_access_control.sol.0.4.25.MissingEventsAccessControl.json index 69ac9726d..59060a901 100644 --- a/tests/detectors/events-access/0.4.25/missing_events_access_control.sol.0.4.25.MissingEventsAccessControl.json +++ b/tests/detectors/events-access/0.4.25/missing_events_access_control.sol.0.4.25.MissingEventsAccessControl.json @@ -219,19 +219,20 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 364, - "length": 90, + "start": 458, + "length": 127, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -306,14 +307,14 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad2(address)" } }, { "type": "node", "name": "owner = newOwner", "source_mapping": { - "start": 421, + "start": 552, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", @@ -321,7 +322,7 @@ "filename_short": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 20 + 25 ], "starting_column": 5, "ending_column": 21 @@ -329,19 +330,20 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 364, - "length": 90, + "start": 458, + "length": 127, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -416,16 +418,16 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad2(address)" } } } } ], - "description": "Bug.bad1(address) (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#20) \n", - "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L20) \n", - "first_markdown_element": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L19-L21", - "id": "b2bf34ab3d02054c5f803cd517689d1e3d055b46ca612b2457d845d8d4b94731", + "description": "Bug.bad2(address) (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#23-26) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#25) \n", + "markdown": "[Bug.bad2(address)](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L23-L26) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L25) \n", + "first_markdown_element": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L23-L26", + "id": "9411f6b4b3e6f3833a72789f341adf88796bcb58b4a12a47a6f7117746d09c53", "check": "events-access", "impact": "Low", "confidence": "Medium" @@ -434,20 +436,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 458, - "length": 127, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -522,14 +523,14 @@ "ending_column": 2 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } }, { "type": "node", "name": "owner = newOwner", "source_mapping": { - "start": 552, + "start": 421, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", @@ -537,7 +538,7 @@ "filename_short": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 25 + 20 ], "starting_column": 5, "ending_column": 21 @@ -545,20 +546,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 458, - "length": 127, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -633,16 +633,16 @@ "ending_column": 2 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } } } } ], - "description": "Bug.bad2(address) (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#23-26) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#25) \n", - "markdown": "[Bug.bad2(address)](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L23-L26) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L25) \n", - "first_markdown_element": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L23-L26", - "id": "9411f6b4b3e6f3833a72789f341adf88796bcb58b4a12a47a6f7117746d09c53", + "description": "Bug.bad1(address) (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.4.25/missing_events_access_control.sol#20) \n", + "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L20) \n", + "first_markdown_element": "tests/detectors/events-access/0.4.25/missing_events_access_control.sol#L19-L21", + "id": "b2bf34ab3d02054c5f803cd517689d1e3d055b46ca612b2457d845d8d4b94731", "check": "events-access", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/events-access/0.5.16/missing_events_access_control.sol.0.5.16.MissingEventsAccessControl.json b/tests/detectors/events-access/0.5.16/missing_events_access_control.sol.0.5.16.MissingEventsAccessControl.json index fa6822d62..5fd204de5 100644 --- a/tests/detectors/events-access/0.5.16/missing_events_access_control.sol.0.5.16.MissingEventsAccessControl.json +++ b/tests/detectors/events-access/0.5.16/missing_events_access_control.sol.0.5.16.MissingEventsAccessControl.json @@ -4,19 +4,20 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 284, - "length": 76, + "start": 458, + "length": 127, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -91,42 +92,43 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2(address)" } }, { "type": "node", - "name": "owner = msg.sender", + "name": "owner = newOwner", "source_mapping": { - "start": 325, - "length": 18, + "start": 552, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 16 + 25 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 284, - "length": 76, + "start": 458, + "length": 127, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -201,16 +203,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2(address)" } } } } ], - "description": "Bug.bad0() (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#15-17) should emit an event for: \n\t- owner = msg.sender (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#16) \n", - "markdown": "[Bug.bad0()](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L15-L17) should emit an event for: \n\t- [owner = msg.sender](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L16) \n", - "first_markdown_element": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L15-L17", - "id": "99e09713b41d4b164cc0f4a88f48e6d0bd94128636c57b1bee357ac1fda130d7", + "description": "Bug.bad2(address) (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#23-26) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#25) \n", + "markdown": "[Bug.bad2(address)](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L23-L26) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L25) \n", + "first_markdown_element": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L23-L26", + "id": "1562e590ef85efee605bdbf837a010ad06cdb04cec40ac4a7ca7c8cc25cf4161", "check": "events-access", "impact": "Low", "confidence": "Medium" @@ -219,19 +221,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 364, - "length": 90, + "start": 284, + "length": 76, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -306,42 +308,42 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } }, { "type": "node", - "name": "owner = newOwner", + "name": "owner = msg.sender", "source_mapping": { - "start": 421, - "length": 16, + "start": 325, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 20 + 16 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 23 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 364, - "length": 90, + "start": 284, + "length": 76, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -416,16 +418,16 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } } } ], - "description": "Bug.bad1(address) (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#20) \n", - "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L20) \n", - "first_markdown_element": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L19-L21", - "id": "a8b5423d1085668a105afd674978791ad0b57f1c9ab15b7db682c3dfac7a49b2", + "description": "Bug.bad0() (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#15-17) should emit an event for: \n\t- owner = msg.sender (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#16) \n", + "markdown": "[Bug.bad0()](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L15-L17) should emit an event for: \n\t- [owner = msg.sender](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L16) \n", + "first_markdown_element": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L15-L17", + "id": "99e09713b41d4b164cc0f4a88f48e6d0bd94128636c57b1bee357ac1fda130d7", "check": "events-access", "impact": "Low", "confidence": "Medium" @@ -434,20 +436,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 458, - "length": 127, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -522,14 +523,14 @@ "ending_column": 2 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } }, { "type": "node", "name": "owner = newOwner", "source_mapping": { - "start": 552, + "start": 421, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", @@ -537,7 +538,7 @@ "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 25 + 20 ], "starting_column": 5, "ending_column": 21 @@ -545,20 +546,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 458, - "length": 127, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -633,16 +633,16 @@ "ending_column": 2 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } } } } ], - "description": "Bug.bad2(address) (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#23-26) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#25) \n", - "markdown": "[Bug.bad2(address)](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L23-L26) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L25) \n", - "first_markdown_element": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L23-L26", - "id": "1562e590ef85efee605bdbf837a010ad06cdb04cec40ac4a7ca7c8cc25cf4161", + "description": "Bug.bad1(address) (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.5.16/missing_events_access_control.sol#20) \n", + "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L20) \n", + "first_markdown_element": "tests/detectors/events-access/0.5.16/missing_events_access_control.sol#L19-L21", + "id": "a8b5423d1085668a105afd674978791ad0b57f1c9ab15b7db682c3dfac7a49b2", "check": "events-access", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json b/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json index 56ea7e2fd..6065b5f9c 100644 --- a/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json +++ b/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 284, - "length": 76, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -91,42 +91,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } }, { "type": "node", - "name": "owner = msg.sender", + "name": "owner = newOwner", "source_mapping": { - "start": 325, - "length": 18, + "start": 421, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 16 + 20 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 284, - "length": 76, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -201,16 +201,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } } } ], - "description": "Bug.bad0() (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#15-17) should emit an event for: \n\t- owner = msg.sender (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#16) \n", - "markdown": "[Bug.bad0()](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L15-L17) should emit an event for: \n\t- [owner = msg.sender](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L16) \n", - "first_markdown_element": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L15-L17", - "id": "81ef3707d2eed91cd30ba6e7368fa40206ec32eec757bb0af632c4b7885bd92c", + "description": "Bug.bad1(address) (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#20) \n", + "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L20) \n", + "first_markdown_element": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L19-L21", + "id": "7dd824ee9b2f6100abf2b1e95d84c1b1393a4ab27a06676b2a5d7da164788a00", "check": "events-access", "impact": "Low", "confidence": "Medium" @@ -219,19 +219,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 364, - "length": 90, + "start": 284, + "length": 76, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -306,42 +306,42 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } }, { "type": "node", - "name": "owner = newOwner", + "name": "owner = msg.sender", "source_mapping": { - "start": 421, - "length": 16, + "start": 325, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 20 + 16 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 23 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 364, - "length": 90, + "start": 284, + "length": 76, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -416,16 +416,16 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } } } ], - "description": "Bug.bad1(address) (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#20) \n", - "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L20) \n", - "first_markdown_element": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L19-L21", - "id": "7dd824ee9b2f6100abf2b1e95d84c1b1393a4ab27a06676b2a5d7da164788a00", + "description": "Bug.bad0() (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#15-17) should emit an event for: \n\t- owner = msg.sender (tests/detectors/events-access/0.6.11/missing_events_access_control.sol#16) \n", + "markdown": "[Bug.bad0()](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L15-L17) should emit an event for: \n\t- [owner = msg.sender](tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L16) \n", + "first_markdown_element": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol#L15-L17", + "id": "81ef3707d2eed91cd30ba6e7368fa40206ec32eec757bb0af632c4b7885bd92c", "check": "events-access", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/events-access/0.7.6/missing_events_access_control.sol.0.7.6.MissingEventsAccessControl.json b/tests/detectors/events-access/0.7.6/missing_events_access_control.sol.0.7.6.MissingEventsAccessControl.json index 0b1ba01ff..719b1fb59 100644 --- a/tests/detectors/events-access/0.7.6/missing_events_access_control.sol.0.7.6.MissingEventsAccessControl.json +++ b/tests/detectors/events-access/0.7.6/missing_events_access_control.sol.0.7.6.MissingEventsAccessControl.json @@ -219,19 +219,20 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 364, - "length": 90, + "start": 458, + "length": 127, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -306,14 +307,14 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad2(address)" } }, { "type": "node", "name": "owner = newOwner", "source_mapping": { - "start": 421, + "start": 552, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", @@ -321,7 +322,7 @@ "filename_short": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 20 + 25 ], "starting_column": 5, "ending_column": 21 @@ -329,19 +330,20 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 364, - "length": 90, + "start": 458, + "length": 127, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -416,16 +418,16 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad2(address)" } } } } ], - "description": "Bug.bad1(address) (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#20) \n", - "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L20) \n", - "first_markdown_element": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L19-L21", - "id": "d319284c1ad2023a792ace9e7b2371966f789c5acf5ab90b1cc5935060f855f0", + "description": "Bug.bad2(address) (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#23-26) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#25) \n", + "markdown": "[Bug.bad2(address)](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L23-L26) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L25) \n", + "first_markdown_element": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L23-L26", + "id": "3b63f24bd57a54fab8af7d3292bd8444c3dc834bf43dfd96be0e06ca0027299c", "check": "events-access", "impact": "Low", "confidence": "Medium" @@ -434,20 +436,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 458, - "length": 127, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -522,14 +523,14 @@ "ending_column": 2 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } }, { "type": "node", "name": "owner = newOwner", "source_mapping": { - "start": 552, + "start": 421, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", @@ -537,7 +538,7 @@ "filename_short": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 25 + 20 ], "starting_column": 5, "ending_column": 21 @@ -545,20 +546,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 458, - "length": 127, + "start": 364, + "length": 90, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -633,16 +633,16 @@ "ending_column": 2 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } } } } ], - "description": "Bug.bad2(address) (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#23-26) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#25) \n", - "markdown": "[Bug.bad2(address)](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L23-L26) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L25) \n", - "first_markdown_element": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L23-L26", - "id": "3b63f24bd57a54fab8af7d3292bd8444c3dc834bf43dfd96be0e06ca0027299c", + "description": "Bug.bad1(address) (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#19-21) should emit an event for: \n\t- owner = newOwner (tests/detectors/events-access/0.7.6/missing_events_access_control.sol#20) \n", + "markdown": "[Bug.bad1(address)](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L19-L21) should emit an event for: \n\t- [owner = newOwner](tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L20) \n", + "first_markdown_element": "tests/detectors/events-access/0.7.6/missing_events_access_control.sol#L19-L21", + "id": "d319284c1ad2023a792ace9e7b2371966f789c5acf5ab90b1cc5935060f855f0", "check": "events-access", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol.0.7.6.MissingEventsArithmetic.json b/tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol.0.7.6.MissingEventsArithmetic.json index 45837cbba..80bade847 100644 --- a/tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol.0.7.6.MissingEventsArithmetic.json +++ b/tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol.0.7.6.MissingEventsArithmetic.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 392, - "length": 71, + "start": 535, + "length": 72, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "is_dependency": false, "lines": [ - 22, - 23, - 24 + 30, + 31, + 32 ], "starting_column": 3, "ending_column": 4 @@ -111,42 +111,42 @@ "ending_column": 2 } }, - "signature": "bad0(uint8)" + "signature": "bad1(int16)" } }, { "type": "node", - "name": "uprice8 = _price", + "name": "iprice16 = _price", "source_mapping": { - "start": 442, - "length": 16, + "start": 585, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "is_dependency": false, "lines": [ - 23 + 31 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 22 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 392, - "length": 71, + "start": 535, + "length": 72, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "is_dependency": false, "lines": [ - 22, - 23, - 24 + 30, + 31, + 32 ], "starting_column": 3, "ending_column": 4 @@ -241,16 +241,16 @@ "ending_column": 2 } }, - "signature": "bad0(uint8)" + "signature": "bad1(int16)" } } } } ], - "description": "Bug.bad0(uint8) (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#22-24) should emit an event for: \n\t- uprice8 = _price (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#23) \n", - "markdown": "[Bug.bad0(uint8)](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L22-L24) should emit an event for: \n\t- [uprice8 = _price](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L23) \n", - "first_markdown_element": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L22-L24", - "id": "833efa3b1dab85aef7a00a7bf77bfe290cb2933e11eed34150a1e54a9644a093", + "description": "Bug.bad1(int16) (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#30-32) should emit an event for: \n\t- iprice16 = _price (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#31) \n", + "markdown": "[Bug.bad1(int16)](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L30-L32) should emit an event for: \n\t- [iprice16 = _price](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L31) \n", + "first_markdown_element": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L30-L32", + "id": "22cd7f2678dfbd4185d6254ad55b620bd3b20a406d88d9f53412ca97d9c3bf03", "check": "events-maths", "impact": "Low", "confidence": "Medium" @@ -259,19 +259,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 535, - "length": 72, + "start": 392, + "length": 71, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32 + 22, + 23, + 24 ], "starting_column": 3, "ending_column": 4 @@ -366,42 +366,42 @@ "ending_column": 2 } }, - "signature": "bad1(int16)" + "signature": "bad0(uint8)" } }, { "type": "node", - "name": "iprice16 = _price", + "name": "uprice8 = _price", "source_mapping": { - "start": 585, - "length": 17, + "start": 442, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "is_dependency": false, "lines": [ - 31 + 23 ], "starting_column": 5, - "ending_column": 22 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 535, - "length": 72, + "start": 392, + "length": 71, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32 + 22, + 23, + 24 ], "starting_column": 3, "ending_column": 4 @@ -496,16 +496,16 @@ "ending_column": 2 } }, - "signature": "bad1(int16)" + "signature": "bad0(uint8)" } } } } ], - "description": "Bug.bad1(int16) (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#30-32) should emit an event for: \n\t- iprice16 = _price (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#31) \n", - "markdown": "[Bug.bad1(int16)](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L30-L32) should emit an event for: \n\t- [iprice16 = _price](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L31) \n", - "first_markdown_element": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L30-L32", - "id": "22cd7f2678dfbd4185d6254ad55b620bd3b20a406d88d9f53412ca97d9c3bf03", + "description": "Bug.bad0(uint8) (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#22-24) should emit an event for: \n\t- uprice8 = _price (tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#23) \n", + "markdown": "[Bug.bad0(uint8)](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L22-L24) should emit an event for: \n\t- [uprice8 = _price](tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L23) \n", + "first_markdown_element": "tests/detectors/events-maths/0.7.6/missing_events_arithmetic.sol#L22-L24", + "id": "833efa3b1dab85aef7a00a7bf77bfe290cb2933e11eed34150a1e54a9644a093", "check": "events-maths", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json index 0aea04515..75e76126d 100644 --- a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json @@ -214,64 +214,60 @@ "elements": [ { "type": "function", - "name": "funcNotCalled", + "name": "parameter_read_ok_for_external", "source_mapping": { - "start": 554, - "length": 325, + "start": 1420, + "length": 81, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 + 74, + 75, + 76 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 3, + "ending_column": 4 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ContractWithFunctionNotCalled2", + "name": "FunctionParameterWrite", "source_mapping": { - "start": 473, - "length": 408, + "start": 1381, + "length": 234, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "funcNotCalled()" + "signature": "parameter_read_ok_for_external(uint256)" } } ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", + "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.4.25/external_function.sol#74-76)\n", + "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.4.25/external_function.sol#L74-L76)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L74-L76", + "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", "check": "external-function", "impact": "Optimization", "confidence": "High" @@ -280,60 +276,64 @@ "elements": [ { "type": "function", - "name": "parameter_read_ok_for_external", + "name": "funcNotCalled", "source_mapping": { - "start": 1420, - "length": 81, + "start": 554, + "length": 325, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", "is_dependency": false, "lines": [ - 74, - 75, - 76 + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 ], - "starting_column": 3, - "ending_column": 4 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FunctionParameterWrite", + "name": "ContractWithFunctionNotCalled2", "source_mapping": { - "start": 1381, - "length": 234, + "start": 473, + "length": 408, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", "is_dependency": false, "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "parameter_read_ok_for_external(uint256)" + "signature": "funcNotCalled()" } } ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.4.25/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.4.25/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", + "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#32-39)\n", + "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L32-L39)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L32-L39", + "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", "check": "external-function", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 340c8107a..4d947de06 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -214,64 +214,60 @@ "elements": [ { "type": "function", - "name": "funcNotCalled", + "name": "parameter_read_ok_for_external", "source_mapping": { - "start": 554, - "length": 325, + "start": 1420, + "length": 81, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 + 74, + 75, + 76 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 3, + "ending_column": 4 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ContractWithFunctionNotCalled2", + "name": "FunctionParameterWrite", "source_mapping": { - "start": 473, - "length": 408, + "start": 1381, + "length": 234, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "funcNotCalled()" + "signature": "parameter_read_ok_for_external(uint256)" } } ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", + "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.5.16/external_function.sol#74-76)\n", + "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.5.16/external_function.sol#L74-L76)\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L74-L76", + "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", "check": "external-function", "impact": "Optimization", "confidence": "High" @@ -280,60 +276,64 @@ "elements": [ { "type": "function", - "name": "parameter_read_ok_for_external", + "name": "funcNotCalled", "source_mapping": { - "start": 1420, - "length": 81, + "start": 554, + "length": 325, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", "is_dependency": false, "lines": [ - 74, - 75, - 76 + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 ], - "starting_column": 3, - "ending_column": 4 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FunctionParameterWrite", + "name": "ContractWithFunctionNotCalled2", "source_mapping": { - "start": 1381, - "length": 234, + "start": 473, + "length": 408, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", "is_dependency": false, "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "parameter_read_ok_for_external(uint256)" + "signature": "funcNotCalled()" } } ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.5.16/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.5.16/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", + "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#32-39)\n", + "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L32-L39)\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L32-L39", + "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", "check": "external-function", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json index eee61a19f..6bffedf78 100644 --- a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json +++ b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 259, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -78,7 +78,7 @@ "source_mapping": { "start": 306, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -98,7 +98,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 353, "length": 40, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -168,7 +168,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -214,64 +214,60 @@ "elements": [ { "type": "function", - "name": "funcNotCalled", + "name": "parameter_read_ok_for_external", "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", + "start": 1420, + "length": 81, + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 + 74, + 75, + 76 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 3, + "ending_column": 4 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ContractWithFunctionNotCalled2", + "name": "FunctionParameterWrite", "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", + "start": 1381, + "length": 234, + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "funcNotCalled()" + "signature": "parameter_read_ok_for_external(uint256)" } } ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.6.11/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.6.11/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", + "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.6.11/external_function.sol#74-76)\n", + "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.6.11/external_function.sol#L74-L76)\n", + "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L74-L76", + "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", "check": "external-function", "impact": "Optimization", "confidence": "High" @@ -280,60 +276,64 @@ "elements": [ { "type": "function", - "name": "parameter_read_ok_for_external", + "name": "funcNotCalled", "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", + "start": 554, + "length": 325, + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", "is_dependency": false, "lines": [ - 74, - 75, - 76 + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 ], - "starting_column": 3, - "ending_column": 4 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FunctionParameterWrite", + "name": "ContractWithFunctionNotCalled2", "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", + "start": 473, + "length": 408, + "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", "is_dependency": false, "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "parameter_read_ok_for_external(uint256)" + "signature": "funcNotCalled()" } } ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.6.11/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.6.11/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", + "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.6.11/external_function.sol#32-39)\n", + "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.6.11/external_function.sol#L32-L39)\n", + "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L32-L39", + "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", "check": "external-function", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json index 6e90c47ab..97eba4835 100644 --- a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json +++ b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 259, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -78,7 +78,7 @@ "source_mapping": { "start": 306, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -98,7 +98,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 353, "length": 40, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -168,7 +168,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -214,64 +214,60 @@ "elements": [ { "type": "function", - "name": "funcNotCalled", + "name": "parameter_read_ok_for_external", "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", + "start": 1420, + "length": 81, + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 + 74, + 75, + 76 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 3, + "ending_column": 4 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ContractWithFunctionNotCalled2", + "name": "FunctionParameterWrite", "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", + "start": 1381, + "length": 234, + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "funcNotCalled()" + "signature": "parameter_read_ok_for_external(uint256)" } } ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.7.6/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.7.6/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", + "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.7.6/external_function.sol#74-76)\n", + "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.7.6/external_function.sol#L74-L76)\n", + "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L74-L76", + "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", "check": "external-function", "impact": "Optimization", "confidence": "High" @@ -280,60 +276,64 @@ "elements": [ { "type": "function", - "name": "parameter_read_ok_for_external", + "name": "funcNotCalled", "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", + "start": 554, + "length": 325, + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", "is_dependency": false, "lines": [ - 74, - 75, - 76 + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 ], - "starting_column": 3, - "ending_column": 4 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FunctionParameterWrite", + "name": "ContractWithFunctionNotCalled2", "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", + "start": 473, + "length": 408, + "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", "is_dependency": false, "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "parameter_read_ok_for_external(uint256)" + "signature": "funcNotCalled()" } } ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.7.6/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.7.6/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", + "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.7.6/external_function.sol#32-39)\n", + "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.7.6/external_function.sol#L32-L39)\n", + "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L32-L39", + "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", "check": "external-function", "impact": "Optimization", "confidence": "High" diff --git a/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json b/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json index bf6612ee9..00772a400 100644 --- a/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json +++ b/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 157, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -97,20 +97,20 @@ "elements": [ { "type": "variable", - "name": "x", + "name": "z4", "source_mapping": { - "start": 268, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 842, + "length": 23, + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 7 + 17 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { @@ -119,7 +119,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -178,10 +178,10 @@ } } ], - "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L7", - "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", + "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L17", + "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -190,20 +190,20 @@ "elements": [ { "type": "variable", - "name": "y1", + "name": "x", "source_mapping": { - "start": 357, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 268, + "length": 21, + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 31 + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -212,7 +212,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -271,10 +271,10 @@ } } ], - "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L9", - "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", + "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L7", + "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -283,20 +283,20 @@ "elements": [ { "type": "variable", - "name": "y2", + "name": "y1", "source_mapping": { - "start": 453, - "length": 35, - "filename_used": "/GENERIC_PATH", + "start": 357, + "length": 26, + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 10 + 9 ], "starting_column": 5, - "ending_column": 40 + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -305,7 +305,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -364,10 +364,10 @@ } } ], - "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L10", - "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", + "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L9", + "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -376,20 +376,20 @@ "elements": [ { "type": "variable", - "name": "z4", + "name": "y2", "source_mapping": { - "start": 842, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 453, + "length": 35, + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 17 + 10 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -398,7 +398,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -457,10 +457,10 @@ } } ], - "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L17", - "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", + "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "first_markdown_element": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol#L10", + "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", "check": "function-init-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol.0.5.16.FunctionInitializedState.json b/tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol.0.5.16.FunctionInitializedState.json index 8ac1bfd7f..186e2eaca 100644 --- a/tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol.0.5.16.FunctionInitializedState.json +++ b/tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol.0.5.16.FunctionInitializedState.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 157, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 116, "length": 1575, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", @@ -97,20 +97,20 @@ "elements": [ { "type": "variable", - "name": "x", + "name": "z4", "source_mapping": { - "start": 268, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 842, + "length": 23, + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 7 + 17 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { @@ -119,7 +119,7 @@ "source_mapping": { "start": 116, "length": 1575, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", @@ -178,10 +178,10 @@ } } ], - "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L7", - "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", + "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L17", + "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -190,20 +190,20 @@ "elements": [ { "type": "variable", - "name": "y1", + "name": "x", "source_mapping": { - "start": 357, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 268, + "length": 21, + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 31 + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -212,7 +212,7 @@ "source_mapping": { "start": 116, "length": 1575, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", @@ -271,10 +271,10 @@ } } ], - "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L9", - "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", + "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L7", + "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -283,20 +283,20 @@ "elements": [ { "type": "variable", - "name": "y2", + "name": "y1", "source_mapping": { - "start": 453, - "length": 35, - "filename_used": "/GENERIC_PATH", + "start": 357, + "length": 26, + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 10 + 9 ], "starting_column": 5, - "ending_column": 40 + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -305,7 +305,7 @@ "source_mapping": { "start": 116, "length": 1575, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", @@ -364,10 +364,10 @@ } } ], - "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L10", - "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", + "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L9", + "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -376,20 +376,20 @@ "elements": [ { "type": "variable", - "name": "z4", + "name": "y2", "source_mapping": { - "start": 842, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 453, + "length": 35, + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 17 + 10 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -398,7 +398,7 @@ "source_mapping": { "start": 116, "length": 1575, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol", @@ -457,10 +457,10 @@ } } ], - "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L17", - "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", + "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "first_markdown_element": "tests/detectors/function-init-state/0.5.16/function_init_state_variables.sol#L10", + "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", "check": "function-init-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol.0.6.11.FunctionInitializedState.json b/tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol.0.6.11.FunctionInitializedState.json index 001ac77c1..fafb2911d 100644 --- a/tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol.0.6.11.FunctionInitializedState.json +++ b/tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol.0.6.11.FunctionInitializedState.json @@ -97,20 +97,20 @@ "elements": [ { "type": "variable", - "name": "x", + "name": "z4", "source_mapping": { - "start": 268, - "length": 21, + "start": 842, + "length": 23, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 7 + 17 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { @@ -178,10 +178,10 @@ } } ], - "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L7", - "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", + "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L17", + "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -190,20 +190,20 @@ "elements": [ { "type": "variable", - "name": "y1", + "name": "x", "source_mapping": { - "start": 357, - "length": 26, + "start": 268, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 31 + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -271,10 +271,10 @@ } } ], - "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L9", - "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", + "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L7", + "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -283,20 +283,20 @@ "elements": [ { "type": "variable", - "name": "y2", + "name": "y1", "source_mapping": { - "start": 453, - "length": 35, + "start": 357, + "length": 26, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 10 + 9 ], "starting_column": 5, - "ending_column": 40 + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -364,10 +364,10 @@ } } ], - "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L10", - "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", + "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L9", + "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -376,20 +376,20 @@ "elements": [ { "type": "variable", - "name": "z4", + "name": "y2", "source_mapping": { - "start": 842, - "length": 23, + "start": 453, + "length": 35, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 17 + 10 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -457,10 +457,10 @@ } } ], - "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L17", - "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", + "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "first_markdown_element": "tests/detectors/function-init-state/0.6.11/function_init_state_variables.sol#L10", + "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", "check": "function-init-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol.0.7.6.FunctionInitializedState.json b/tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol.0.7.6.FunctionInitializedState.json index ec0366a43..92082c6fe 100644 --- a/tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol.0.7.6.FunctionInitializedState.json +++ b/tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol.0.7.6.FunctionInitializedState.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 157, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", @@ -97,20 +97,20 @@ "elements": [ { "type": "variable", - "name": "x", + "name": "z4", "source_mapping": { - "start": 268, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 842, + "length": 23, + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 7 + 17 ], "starting_column": 5, - "ending_column": 26 + "ending_column": 28 }, "type_specific_fields": { "parent": { @@ -119,7 +119,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", @@ -178,10 +178,10 @@ } } ], - "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L7", - "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", + "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", + "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L17", + "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -190,20 +190,20 @@ "elements": [ { "type": "variable", - "name": "y1", + "name": "x", "source_mapping": { - "start": 357, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 268, + "length": 21, + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 9 + 7 ], "starting_column": 5, - "ending_column": 31 + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -212,7 +212,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", @@ -271,10 +271,10 @@ } } ], - "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", - "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L9", - "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", + "description": "StateVarInitFromFunction.x (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "markdown": "[StateVarInitFromFunction.x](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L7) is set pre-construction with a non-constant function or state variable:\n\t- set()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L7", + "id": "adfa394934c8669a556cfa10c364fe526dd1e295a63959e1e88fe84a919ef354", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -283,20 +283,20 @@ "elements": [ { "type": "variable", - "name": "y2", + "name": "y1", "source_mapping": { - "start": 453, - "length": 35, - "filename_used": "/GENERIC_PATH", + "start": 357, + "length": 26, + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 10 + 9 ], "starting_column": 5, - "ending_column": 40 + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -305,7 +305,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", @@ -364,10 +364,10 @@ } } ], - "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", - "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L10", - "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", + "description": "StateVarInitFromFunction.y1 (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "markdown": "[StateVarInitFromFunction.y1](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L9) is set pre-construction with a non-constant function or state variable:\n\t- 5 + get()\n", + "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L9", + "id": "b26f83c06e9aca87637dea02a0f4080fd4226c1ed90c6c2c63da85cb142d67ab", "check": "function-init-state", "impact": "Informational", "confidence": "High" @@ -376,20 +376,20 @@ "elements": [ { "type": "variable", - "name": "z4", + "name": "y2", "source_mapping": { - "start": 842, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 453, + "length": 35, + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "is_dependency": false, "lines": [ - 17 + 10 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -398,7 +398,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_relative": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol", @@ -457,10 +457,10 @@ } } ], - "description": "StateVarInitFromFunction.z4 (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "markdown": "[StateVarInitFromFunction.z4](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L17) is set pre-construction with a non-constant function or state variable:\n\t- z3 + 5\n", - "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L17", - "id": "8b7eb9ab16397c2f23479d2c3043a675ab5e2b1da07e2697631812d6d7b68525", + "description": "StateVarInitFromFunction.y2 (tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "markdown": "[StateVarInitFromFunction.y2](tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L10) is set pre-construction with a non-constant function or state variable:\n\t- (10 + (5 + get()))\n", + "first_markdown_element": "tests/detectors/function-init-state/0.7.6/function_init_state_variables.sol#L10", + "id": "b6e231b9b735794e00b73dddb86b2ba8f7a738d916c99f302fb32b1095c67472", "check": "function-init-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol.0.4.25.IncorrectStrictEquality.json b/tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol.0.4.25.IncorrectStrictEquality.json index c708e7cac..03c6befcb 100644 --- a/tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol.0.4.25.IncorrectStrictEquality.json +++ b/tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol.0.4.25.IncorrectStrictEquality.json @@ -6,17 +6,18 @@ "type": "function", "name": "bad0", "source_mapping": { - "start": 404, - "length": 101, + "start": 648, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 32, + 33, + 34, + 35 ], "starting_column": 5, "ending_column": 6 @@ -24,76 +25,126 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestContractBalance", "source_mapping": { - "start": 165, - "length": 445, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0(ERC20Function)" + "signature": "bad0()" } }, { "type": "node", - "name": "require(bool)(erc.balanceOf(address(this)) == 10)", + "name": "require(bool)(address(address(this)).balance == 10000000000000000000)", "source_mapping": { - "start": 455, - "length": 43, + "start": 683, + "length": 51, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 22 + 33 ], "starting_column": 9, - "ending_column": 52 + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", "name": "bad0", "source_mapping": { - "start": 404, - "length": 101, + "start": 648, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 32, + 33, + 34, + 35 ], "starting_column": 5, "ending_column": 6 @@ -101,50 +152,99 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestContractBalance", "source_mapping": { - "start": 165, - "length": 445, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0(ERC20Function)" + "signature": "bad0()" } } } } ], - "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#22)\n", - "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L22)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L21-L23", - "id": "d887566c310fa756ee60c8a838f09bf3165adda30dff76b4d8f7bd85f6561610", + "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#33)\n", + "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L33)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L32-L35", + "id": "126f956451cb4dcbdac6edb66148b23eabc789962d4fa3a8bd22a682c6c5bfd4", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -153,19 +253,22 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad6", "source_mapping": { - "start": 511, - "length": 97, + "start": 1538, + "length": 179, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27 + 66, + 67, + 68, + 69, + 70, + 71 ], "starting_column": 5, "ending_column": 6 @@ -173,160 +276,10 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestContractBalance", "source_mapping": { - "start": 165, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - }, - { - "type": "node", - "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", - "source_mapping": { - "start": 562, - "length": 39, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 26 - ], - "starting_column": 9, - "ending_column": 48 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 511, - "length": 97, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 165, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - } - } - } - ], - "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#26)\n", - "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L26)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L25-L27", - "id": "a962a2c49344b2acce83236c339daa07cce98d240dd8869bb7d8c5e96d412ff0", - "check": "incorrect-equality", - "impact": "Medium", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 648, - "length": 133, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TestContractBalance", - "source_mapping": { - "start": 612, - "length": 1754, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", @@ -406,43 +359,45 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad6()" } }, { "type": "node", - "name": "require(bool)(address(address(this)).balance == 10000000000000000000)", + "name": "balance == 10000000000000000000", "source_mapping": { - "start": 683, - "length": 51, + "start": 1635, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 33 + 68 ], - "starting_column": 9, - "ending_column": 60 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad6", "source_mapping": { - "start": 648, - "length": 133, + "start": 1538, + "length": 179, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35 + 66, + 67, + 68, + 69, + 70, + 71 ], "starting_column": 5, "ending_column": 6 @@ -533,16 +488,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad6()" } } } } ], - "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#33)\n", - "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L33)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L32-L35", - "id": "126f956451cb4dcbdac6edb66148b23eabc789962d4fa3a8bd22a682c6c5bfd4", + "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#68)\n", + "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L68)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L66-L71", + "id": "2cc246058513fdfe2178c6e9b552bcae42d3c29bc104c3b95734323aeda57396", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -551,20 +506,22 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 787, - "length": 133, + "start": 1362, + "length": 170, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -655,43 +612,45 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad5()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", + "name": "10000000000000000000 == balance", "source_mapping": { - "start": 822, - "length": 51, + "start": 1450, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 38 + 61 ], - "starting_column": 9, - "ending_column": 60 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 787, - "length": 133, + "start": 1362, + "length": 170, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -782,16 +741,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad5()" } } } } ], - "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#38)\n", - "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L38)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L37-L40", - "id": "de67d7a1010855e47722500e73f1156c1c2c222414e661624300ea395102af1a", + "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#61)\n", + "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L61)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L59-L64", + "id": "781645f52e6eb4c7a0e38a58537907a6421ded2703ae8b18be68251a02901e7a", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -800,9 +759,9 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 926, + "start": 1056, "length": 124, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", @@ -810,10 +769,10 @@ "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -904,14 +863,14 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad3()" } }, { "type": "node", - "name": "require(bool)(address(this).balance == 10000000000000000000)", + "name": "require(bool)(10000000000000000000 == address(this).balance)", "source_mapping": { - "start": 961, + "start": 1091, "length": 42, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", @@ -919,7 +878,7 @@ "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 43 + 48 ], "starting_column": 9, "ending_column": 51 @@ -927,9 +886,9 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 926, + "start": 1056, "length": 124, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", @@ -937,10 +896,10 @@ "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -1031,16 +990,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad3()" } } } } ], - "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#43)\n", - "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L43)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L42-L45", - "id": "b6c0963403d985cfcd3eda6d43bc2716eaebcd0d936d9a57d35df4adfbb01e46", + "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#48)\n", + "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L48)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L47-L50", + "id": "8f08cca8ee4d2d51c2bf5717f78aa1dd13c6499e430a43b89e5309f20920b11d", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1049,20 +1008,19 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 1056, - "length": 124, + "start": 3072, + "length": 67, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -1070,126 +1028,94 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 612, - "length": 1754, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad2()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(this).balance)", + "name": "require(bool)(block.number == 0)", "source_mapping": { - "start": 1091, - "length": 42, + "start": 3106, + "length": 26, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 48 + 132 ], "starting_column": 9, - "ending_column": 51 + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 1056, - "length": 124, + "start": 3072, + "length": 67, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -1197,99 +1123,68 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 612, - "length": 1754, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad3()" + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad2()" } } } } ], - "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#48)\n", - "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L48)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L47-L50", - "id": "8f08cca8ee4d2d51c2bf5717f78aa1dd13c6499e430a43b89e5309f20920b11d", + "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#132)\n", + "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L132)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L131-L133", + "id": "a65d9228ffbebf6de7f455df00a0de91ee0e23c7f13a306bdc90e16e69a043b3", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1298,22 +1193,19 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad1", "source_mapping": { - "start": 1186, - "length": 170, + "start": 511, + "length": 97, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 52, - 53, - 54, - 55, - 56, - 57 + 25, + 26, + 27 ], "starting_column": 5, "ending_column": 6 @@ -1321,128 +1213,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "ERC20TestBalance", "source_mapping": { - "start": 612, - "length": 1754, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad1(ERC20Variable)" } }, { "type": "node", - "name": "balance == 10000000000000000000", + "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", "source_mapping": { - "start": 1274, - "length": 19, + "start": 562, + "length": 39, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 54 + 26 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad1", "source_mapping": { - "start": 1186, - "length": 170, + "start": 511, + "length": 97, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 52, - 53, - 54, - 55, - 56, - 57 + 25, + 26, + 27 ], "starting_column": 5, "ending_column": 6 @@ -1450,99 +1290,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "ERC20TestBalance", "source_mapping": { - "start": 612, - "length": 1754, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad1(ERC20Variable)" } } } } ], - "description": "TestContractBalance.bad4() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#52-57) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#54)\n", - "markdown": "[TestContractBalance.bad4()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L52-L57) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L54)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L52-L57", - "id": "b7b40be64de7150ba57e0f2b6379c672ee431675bbab8b607a82acdd29338d42", + "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#26)\n", + "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L26)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L25-L27", + "id": "a962a2c49344b2acce83236c339daa07cce98d240dd8869bb7d8c5e96d412ff0", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1551,22 +1342,205 @@ "elements": [ { "type": "function", - "name": "bad5", + "name": "bad0", "source_mapping": { - "start": 1362, - "length": 170, + "start": 2935, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 123, + 124, + 125 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2368, + "length": 774, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "require(bool)(now == 0)", + "source_mapping": { + "start": 2969, + "length": 18, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 124 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 2935, + "length": 59, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 123, + 124, + 125 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2368, + "length": 774, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + } + } + } + ], + "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(now == 0) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#124)\n", + "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(now == 0)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L124)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L123-L125", + "id": "abcb113fde0b01cb4a653968a235bf5f3ee70a6f97ae3fa68c3a161c8ca5f6b8", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad2", + "source_mapping": { + "start": 926, + "length": 124, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 ], "starting_column": 5, "ending_column": 6 @@ -1657,45 +1631,43 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad2()" } }, { "type": "node", - "name": "10000000000000000000 == balance", + "name": "require(bool)(address(this).balance == 10000000000000000000)", "source_mapping": { - "start": 1450, - "length": 19, + "start": 961, + "length": 42, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 61 + 43 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 51 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad2", "source_mapping": { - "start": 1362, - "length": 170, + "start": 926, + "length": 124, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 42, + 43, + 44, + 45 ], "starting_column": 5, "ending_column": 6 @@ -1786,16 +1758,16 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad2()" } } } } ], - "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#61)\n", - "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L61)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L59-L64", - "id": "781645f52e6eb4c7a0e38a58537907a6421ded2703ae8b18be68251a02901e7a", + "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#43)\n", + "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L43)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L42-L45", + "id": "b6c0963403d985cfcd3eda6d43bc2716eaebcd0d936d9a57d35df4adfbb01e46", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1804,22 +1776,22 @@ "elements": [ { "type": "function", - "name": "bad6", + "name": "bad4", "source_mapping": { - "start": 1538, - "length": 179, + "start": 1186, + "length": 170, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 66, - 67, - 68, - 69, - 70, - 71 + 52, + 53, + 54, + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -1910,14 +1882,14 @@ "ending_column": 2 } }, - "signature": "bad6()" + "signature": "bad4()" } }, { "type": "node", "name": "balance == 10000000000000000000", "source_mapping": { - "start": 1635, + "start": 1274, "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", @@ -1925,7 +1897,7 @@ "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 68 + 54 ], "starting_column": 13, "ending_column": 32 @@ -1933,22 +1905,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad6", + "name": "bad4", "source_mapping": { - "start": 1538, - "length": 179, + "start": 1186, + "length": 170, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 66, - 67, - 68, - 69, - 70, - 71 + 52, + 53, + 54, + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -2039,16 +2011,16 @@ "ending_column": 2 } }, - "signature": "bad6()" + "signature": "bad4()" } } } } ], - "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#68)\n", - "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L68)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L66-L71", - "id": "2cc246058513fdfe2178c6e9b552bcae42d3c29bc104c3b95734323aeda57396", + "description": "TestContractBalance.bad4() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#52-57) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#54)\n", + "markdown": "[TestContractBalance.bad4()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L52-L57) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L54)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L52-L57", + "id": "b7b40be64de7150ba57e0f2b6379c672ee431675bbab8b607a82acdd29338d42", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2057,19 +2029,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 2935, - "length": 59, + "start": 3000, + "length": 66, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 123, - 124, - 125 + 127, + 128, + 129 ], "starting_column": 5, "ending_column": 6 @@ -2129,42 +2101,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(now == 0)", + "name": "require(bool)(block.number == 0)", "source_mapping": { - "start": 2969, - "length": 18, + "start": 3034, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 124 + 128 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 2935, - "length": 59, + "start": 3000, + "length": 66, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 123, - 124, - 125 + 127, + 128, + 129 ], "starting_column": 5, "ending_column": 6 @@ -2224,16 +2196,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } } } } ], - "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(now == 0) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#124)\n", - "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(now == 0)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L124)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L123-L125", - "id": "abcb113fde0b01cb4a653968a235bf5f3ee70a6f97ae3fa68c3a161c8ca5f6b8", + "description": "TestSolidityKeyword.bad1() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#127-129) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#128)\n", + "markdown": "[TestSolidityKeyword.bad1()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L127-L129) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L128)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L127-L129", + "id": "d17755463242fbfeef570c2504ff13729a74d8633ade693da26127635b145892", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2242,19 +2214,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 3000, - "length": 66, + "start": 404, + "length": 101, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 127, - 128, - 129 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2262,94 +2234,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0(ERC20Function)" } }, { "type": "node", - "name": "require(bool)(block.number == 0)", + "name": "require(bool)(erc.balanceOf(address(this)) == 10)", "source_mapping": { - "start": 3034, - "length": 25, + "start": 455, + "length": 43, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 128 + 22 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 52 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 3000, - "length": 66, + "start": 404, + "length": 101, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 127, - 128, - 129 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2357,68 +2311,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0(ERC20Function)" } } } } ], - "description": "TestSolidityKeyword.bad1() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#127-129) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#128)\n", - "markdown": "[TestSolidityKeyword.bad1()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L127-L129) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L128)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L127-L129", - "id": "d17755463242fbfeef570c2504ff13729a74d8633ade693da26127635b145892", + "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#22)\n", + "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L22)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L21-L23", + "id": "d887566c310fa756ee60c8a838f09bf3165adda30dff76b4d8f7bd85f6561610", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2427,19 +2363,20 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 3072, - "length": 67, + "start": 787, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -2447,94 +2384,126 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(block.number == 0)", + "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", "source_mapping": { - "start": 3106, - "length": 26, + "start": 822, + "length": 51, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 132 + 38 ], "starting_column": 9, - "ending_column": 35 + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 3072, - "length": 67, + "start": 787, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -2542,68 +2511,99 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } } } } ], - "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#132)\n", - "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L132)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L131-L133", - "id": "a65d9228ffbebf6de7f455df00a0de91ee0e23c7f13a306bdc90e16e69a043b3", + "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#38)\n", + "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L38)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.4.25/incorrect_equality.sol#L37-L40", + "id": "de67d7a1010855e47722500e73f1156c1c2c222414e661624300ea395102af1a", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol.0.5.16.IncorrectStrictEquality.json b/tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol.0.5.16.IncorrectStrictEquality.json index 30fe83e32..2fa0608b6 100644 --- a/tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol.0.5.16.IncorrectStrictEquality.json +++ b/tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol.0.5.16.IncorrectStrictEquality.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 404, - "length": 101, + "start": 3000, + "length": 66, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 127, + 128, + 129 ], "starting_column": 5, "ending_column": 6 @@ -24,76 +24,94 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 165, - "length": 445, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0(ERC20Function)" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(erc.balanceOf(address(this)) == 10)", + "name": "require(bool)(block.number == 0)", "source_mapping": { - "start": 455, - "length": 43, + "start": 3034, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 22 + 128 ], "starting_column": 9, - "ending_column": 52 + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 404, - "length": 101, + "start": 3000, + "length": 66, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 127, + 128, + 129 ], "starting_column": 5, "ending_column": 6 @@ -101,50 +119,68 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 165, - "length": 445, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0(ERC20Function)" + "signature": "bad1()" } } } } ], - "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#22)\n", - "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L22)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L21-L23", - "id": "f1b10c19ed186a854e281f6b2f29e08d5da8892045a928b0565355802998088a", + "description": "TestSolidityKeyword.bad1() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#127-129) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#128)\n", + "markdown": "[TestSolidityKeyword.bad1()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L127-L129) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L128)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L127-L129", + "id": "27fb1eed66075f0883f327ce69bfa39000a4cc6841a39342114cb892a1a0b23b", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -153,19 +189,22 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad6", "source_mapping": { - "start": 511, - "length": 97, + "start": 1538, + "length": 179, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27 + 66, + 67, + 68, + 69, + 70, + 71 ], "starting_column": 5, "ending_column": 6 @@ -173,160 +212,10 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 165, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - }, - { - "type": "node", - "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", - "source_mapping": { - "start": 562, - "length": 39, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 26 - ], - "starting_column": 9, - "ending_column": 48 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", + "name": "TestContractBalance", "source_mapping": { - "start": 511, - "length": 97, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 165, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - } - } - } - ], - "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#26)\n", - "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L26)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L25-L27", - "id": "43d01e301a135af4627eded0afd320a3cc986834dcd0c77ccec4d85e7ac05b57", - "check": "incorrect-equality", - "impact": "Medium", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 648, - "length": 133, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TestContractBalance", - "source_mapping": { - "start": 612, - "length": 1754, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", @@ -406,43 +295,45 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad6()" } }, { "type": "node", - "name": "require(bool)(address(address(this)).balance == 10000000000000000000)", + "name": "balance == 10000000000000000000", "source_mapping": { - "start": 683, - "length": 51, + "start": 1635, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 33 + 68 ], - "starting_column": 9, - "ending_column": 60 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad6", "source_mapping": { - "start": 648, - "length": 133, + "start": 1538, + "length": 179, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35 + 66, + 67, + 68, + 69, + 70, + 71 ], "starting_column": 5, "ending_column": 6 @@ -533,16 +424,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad6()" } } } } ], - "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#33)\n", - "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L33)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L32-L35", - "id": "d00ea5300293e9fe66a52421f56fbb2e48ba4ba942f1d8845e3c2e5bfbbbe66f", + "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#68)\n", + "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L68)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L66-L71", + "id": "280c7848636dd05a32dbdff744714307aa1350aebc6031dd862af9aeb6bdebe3", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -551,20 +442,22 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 787, - "length": 133, + "start": 1362, + "length": 170, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -655,43 +548,45 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad5()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", + "name": "10000000000000000000 == balance", "source_mapping": { - "start": 822, - "length": 51, + "start": 1450, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 38 + 61 ], - "starting_column": 9, - "ending_column": 60 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 787, - "length": 133, + "start": 1362, + "length": 170, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -782,16 +677,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad5()" } } } } ], - "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#38)\n", - "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L38)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L37-L40", - "id": "aee531d35272d761a573246a7f901716f6d1aa6906a0eab19bee4f6f570eb166", + "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#61)\n", + "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L61)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L59-L64", + "id": "2fddf13889b45374114f11585944ef935efb365935aff518b505f01d4f6c1c97", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -800,20 +695,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 926, - "length": 124, + "start": 511, + "length": 97, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 25, + 26, + 27 ], "starting_column": 5, "ending_column": 6 @@ -821,126 +715,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "ERC20TestBalance", "source_mapping": { - "start": 612, - "length": 1754, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1(ERC20Variable)" } }, { "type": "node", - "name": "require(bool)(address(this).balance == 10000000000000000000)", + "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", "source_mapping": { - "start": 961, - "length": 42, + "start": 562, + "length": 39, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 43 + 26 ], "starting_column": 9, - "ending_column": 51 + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 926, - "length": 124, + "start": 511, + "length": 97, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 25, + 26, + 27 ], "starting_column": 5, "ending_column": 6 @@ -948,99 +792,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "ERC20TestBalance", "source_mapping": { - "start": 612, - "length": 1754, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1(ERC20Variable)" } } } } ], - "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#43)\n", - "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L43)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L42-L45", - "id": "7d0195ec395960b56eb4249c96481aec69f59da34ea15128734721ff1844d469", + "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#26)\n", + "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L26)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L25-L27", + "id": "43d01e301a135af4627eded0afd320a3cc986834dcd0c77ccec4d85e7ac05b57", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1049,9 +844,9 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 1056, + "start": 926, "length": 124, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", @@ -1059,10 +854,10 @@ "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 42, + 43, + 44, + 45 ], "starting_column": 5, "ending_column": 6 @@ -1153,14 +948,14 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad2()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(this).balance)", + "name": "require(bool)(address(this).balance == 10000000000000000000)", "source_mapping": { - "start": 1091, + "start": 961, "length": 42, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", @@ -1168,7 +963,7 @@ "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 48 + 43 ], "starting_column": 9, "ending_column": 51 @@ -1176,9 +971,9 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 1056, + "start": 926, "length": 124, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", @@ -1186,10 +981,10 @@ "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 42, + 43, + 44, + 45 ], "starting_column": 5, "ending_column": 6 @@ -1280,16 +1075,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad2()" } } } } ], - "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#48)\n", - "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L48)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L47-L50", - "id": "a987ef061c48551aeeb83ad7556a7d00d13d4dc5fade167c6dc6d586738bda14", + "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#43)\n", + "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L43)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L42-L45", + "id": "7d0195ec395960b56eb4249c96481aec69f59da34ea15128734721ff1844d469", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1551,22 +1346,19 @@ "elements": [ { "type": "function", - "name": "bad5", + "name": "bad2", "source_mapping": { - "start": 1362, - "length": 170, + "start": 3072, + "length": 67, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -1574,128 +1366,94 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 612, - "length": 1754, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad2()" } }, { "type": "node", - "name": "10000000000000000000 == balance", + "name": "require(bool)(block.number == 0)", "source_mapping": { - "start": 1450, - "length": 19, + "start": 3106, + "length": 26, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 61 + 132 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad2", "source_mapping": { - "start": 1362, - "length": 170, + "start": 3072, + "length": 67, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -1703,99 +1461,68 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 612, - "length": 1754, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad2()" } } } } ], - "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#61)\n", - "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L61)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L59-L64", - "id": "2fddf13889b45374114f11585944ef935efb365935aff518b505f01d4f6c1c97", + "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#132)\n", + "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L132)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L131-L133", + "id": "9adfb849a88f90efbe4e42ae4daea709e51db6af3ae0a8bb2427d8053a832d04", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1804,22 +1531,19 @@ "elements": [ { "type": "function", - "name": "bad6", + "name": "bad0", "source_mapping": { - "start": 1538, - "length": 179, + "start": 2935, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 66, - 67, - 68, - 69, - 70, - 71 + 123, + 124, + 125 ], "starting_column": 5, "ending_column": 6 @@ -1827,30 +1551,216 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 612, - "length": 1754, + "start": 2368, + "length": 774, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "require(bool)(now == 0)", + "source_mapping": { + "start": 2969, + "length": 18, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 124 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 2935, + "length": 59, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 123, + 124, + 125 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2368, + "length": 774, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + } + } + } + ], + "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(now == 0) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#124)\n", + "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(now == 0)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L124)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L123-L125", + "id": "9f08ac90026e6fb8bcd20c0ab8f967fe7680689841262bb91747d967ac2564c4", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "source_mapping": { + "start": 1056, + "length": 124, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestContractBalance", + "source_mapping": { + "start": 612, + "length": 1754, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, 44, 45, 46, @@ -1910,45 +1820,43 @@ "ending_column": 2 } }, - "signature": "bad6()" + "signature": "bad3()" } }, { "type": "node", - "name": "balance == 10000000000000000000", + "name": "require(bool)(10000000000000000000 == address(this).balance)", "source_mapping": { - "start": 1635, - "length": 19, + "start": 1091, + "length": 42, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 68 + 48 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 51 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad6", + "name": "bad3", "source_mapping": { - "start": 1538, - "length": 179, + "start": 1056, + "length": 124, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 66, - 67, - 68, - 69, - 70, - 71 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -2039,16 +1947,16 @@ "ending_column": 2 } }, - "signature": "bad6()" + "signature": "bad3()" } } } } ], - "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#68)\n", - "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L68)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L66-L71", - "id": "280c7848636dd05a32dbdff744714307aa1350aebc6031dd862af9aeb6bdebe3", + "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#48)\n", + "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L48)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L47-L50", + "id": "a987ef061c48551aeeb83ad7556a7d00d13d4dc5fade167c6dc6d586738bda14", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2057,19 +1965,20 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 2935, - "length": 59, + "start": 787, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 123, - 124, - 125 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -2077,94 +1986,126 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(now == 0)", + "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", "source_mapping": { - "start": 2969, - "length": 18, + "start": 822, + "length": 51, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 124 + 38 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 2935, - "length": 59, + "start": 787, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 123, - 124, - 125 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -2172,68 +2113,99 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } } } } ], - "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(now == 0) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#124)\n", - "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(now == 0)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L124)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L123-L125", - "id": "9f08ac90026e6fb8bcd20c0ab8f967fe7680689841262bb91747d967ac2564c4", + "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#38)\n", + "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L38)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L37-L40", + "id": "aee531d35272d761a573246a7f901716f6d1aa6906a0eab19bee4f6f570eb166", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2242,19 +2214,20 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 3000, - "length": 66, + "start": 648, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 127, - 128, - 129 + 32, + 33, + 34, + 35 ], "starting_column": 5, "ending_column": 6 @@ -2262,94 +2235,126 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 612, + "length": 1754, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } }, { "type": "node", - "name": "require(bool)(block.number == 0)", + "name": "require(bool)(address(address(this)).balance == 10000000000000000000)", "source_mapping": { - "start": 3034, - "length": 25, + "start": 683, + "length": 51, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 128 + 33 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 3000, - "length": 66, + "start": 648, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 127, - 128, - 129 + 32, + 33, + 34, + 35 ], "starting_column": 5, "ending_column": 6 @@ -2357,68 +2362,99 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2368, - "length": 774, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + "start": 612, + "length": 1754, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } } } } ], - "description": "TestSolidityKeyword.bad1() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#127-129) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#128)\n", - "markdown": "[TestSolidityKeyword.bad1()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L127-L129) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L128)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L127-L129", - "id": "27fb1eed66075f0883f327ce69bfa39000a4cc6841a39342114cb892a1a0b23b", + "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#33)\n", + "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L33)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L32-L35", + "id": "d00ea5300293e9fe66a52421f56fbb2e48ba4ba942f1d8845e3c2e5bfbbbe66f", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2427,19 +2463,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 3072, - "length": 67, + "start": 404, + "length": 101, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2447,94 +2483,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0(ERC20Function)" } }, { "type": "node", - "name": "require(bool)(block.number == 0)", + "name": "require(bool)(erc.balanceOf(address(this)) == 10)", "source_mapping": { - "start": 3106, - "length": 26, + "start": 455, + "length": 43, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 132 + 22 ], "starting_column": 9, - "ending_column": 35 + "ending_column": 52 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 3072, - "length": 67, + "start": 404, + "length": 101, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2542,68 +2560,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2368, - "length": 774, + "start": 165, + "length": 445, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0(ERC20Function)" } } } } ], - "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#132)\n", - "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L132)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L131-L133", - "id": "9adfb849a88f90efbe4e42ae4daea709e51db6af3ae0a8bb2427d8053a832d04", + "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#22)\n", + "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L22)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.5.16/incorrect_equality.sol#L21-L23", + "id": "f1b10c19ed186a854e281f6b2f29e08d5da8892045a928b0565355802998088a", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol.0.6.11.IncorrectStrictEquality.json b/tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol.0.6.11.IncorrectStrictEquality.json index 367074b6e..46c01f686 100644 --- a/tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol.0.6.11.IncorrectStrictEquality.json +++ b/tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol.0.6.11.IncorrectStrictEquality.json @@ -1,303 +1,5 @@ [ [ - { - "elements": [ - { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 421, - "length": 101, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad0(ERC20Function)" - } - }, - { - "type": "node", - "name": "require(bool)(erc.balanceOf(address(this)) == 10)", - "source_mapping": { - "start": 472, - "length": 43, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 22 - ], - "starting_column": 9, - "ending_column": 52 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 421, - "length": 101, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad0(ERC20Function)" - } - } - } - } - ], - "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#22)\n", - "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L22)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L21-L23", - "id": "df1ee72930fcaa7dc7a92d390be6007c57953a3392aef588a852373da388d850", - "check": "incorrect-equality", - "impact": "Medium", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 528, - "length": 97, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - }, - { - "type": "node", - "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", - "source_mapping": { - "start": 579, - "length": 39, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 26 - ], - "starting_column": 9, - "ending_column": 48 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 528, - "length": 97, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - } - } - } - ], - "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#26)\n", - "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L26)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L25-L27", - "id": "4d1635766db4dc0687873af3c03047d746b770bcce326793c79210ac16a5c824", - "check": "incorrect-equality", - "impact": "Medium", - "confidence": "High" - }, { "elements": [ { @@ -306,7 +8,7 @@ "source_mapping": { "start": 665, "length": 133, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -327,7 +29,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -415,7 +117,7 @@ "source_mapping": { "start": 700, "length": 51, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -433,7 +135,7 @@ "source_mapping": { "start": 665, "length": 133, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -454,7 +156,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -539,10 +241,195 @@ } } ], - "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#33)\n", - "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L33)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L32-L35", - "id": "20756b1d1c5eb722a3edb44b8c7b2a62ca935e4e1a2491bce50856f7f4cf3f4c", + "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#33)\n", + "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L33)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L32-L35", + "id": "20756b1d1c5eb722a3edb44b8c7b2a62ca935e4e1a2491bce50856f7f4cf3f4c", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 2952, + "length": 59, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 123, + 124, + 125 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2385, + "length": 774, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "require(bool)(now == 0)", + "source_mapping": { + "start": 2986, + "length": 18, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 124 + ], + "starting_column": 9, + "ending_column": 27 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 2952, + "length": 59, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 123, + 124, + 125 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2385, + "length": 774, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + } + } + } + ], + "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(now == 0) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#124)\n", + "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(now == 0)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L124)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L123-L125", + "id": "24de80ae388956295db544441f5ab9326af42bd4fcb34e232a23af952d7fe333", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -551,20 +438,20 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad3", "source_mapping": { - "start": 804, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 1073, + "length": 124, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -576,7 +463,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -655,43 +542,43 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad3()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", + "name": "require(bool)(10000000000000000000 == address(this).balance)", "source_mapping": { - "start": 839, - "length": 51, - "filename_used": "/GENERIC_PATH", + "start": 1108, + "length": 42, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 38 + 48 ], "starting_column": 9, - "ending_column": 60 + "ending_column": 51 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad3", "source_mapping": { - "start": 804, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 1073, + "length": 124, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -703,7 +590,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -782,16 +669,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad3()" } } } } ], - "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#38)\n", - "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L38)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L37-L40", - "id": "9363dbd2bb3f41b42351b088f7a973902e04ccae0081e5c99354de90890fe6ab", + "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#48)\n", + "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L48)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L47-L50", + "id": "3cf7fef3822d0628cc1f441162960a6753d6cdcad5b8c56c84584dba741e806b", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -800,20 +687,22 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 943, - "length": 124, - "filename_used": "/GENERIC_PATH", + "start": 1379, + "length": 170, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -825,7 +714,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -904,43 +793,45 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad5()" } }, { "type": "node", - "name": "require(bool)(address(this).balance == 10000000000000000000)", + "name": "10000000000000000000 == balance", "source_mapping": { - "start": 978, - "length": 42, - "filename_used": "/GENERIC_PATH", + "start": 1467, + "length": 19, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 43 + 61 ], - "starting_column": 9, - "ending_column": 51 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 943, - "length": 124, - "filename_used": "/GENERIC_PATH", + "start": 1379, + "length": 170, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -952,7 +843,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1031,16 +922,165 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad5()" + } + } + } + } + ], + "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#61)\n", + "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L61)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L59-L64", + "id": "3e416561dc117d230bbee97788f5a0ff851da92f1def8fb5d7b94461ee6bfbc0", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "source_mapping": { + "start": 528, + "length": 97, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 25, + 26, + 27 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ERC20TestBalance", + "source_mapping": { + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(ERC20Variable)" + } + }, + { + "type": "node", + "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", + "source_mapping": { + "start": 579, + "length": 39, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 26 + ], + "starting_column": 9, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "source_mapping": { + "start": 528, + "length": 97, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 25, + 26, + 27 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ERC20TestBalance", + "source_mapping": { + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(ERC20Variable)" } } } } ], - "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#43)\n", - "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L43)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L42-L45", - "id": "50ab6a747d027b81a24ae04b84e6362bd184a5f23080e2af1b6a859ee144f637", + "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#26)\n", + "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L26)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L25-L27", + "id": "4d1635766db4dc0687873af3c03047d746b770bcce326793c79210ac16a5c824", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1049,20 +1089,20 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 1073, + "start": 943, "length": 124, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 42, + 43, + 44, + 45 ], "starting_column": 5, "ending_column": 6 @@ -1074,7 +1114,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1153,22 +1193,22 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad2()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(this).balance)", + "name": "require(bool)(address(this).balance == 10000000000000000000)", "source_mapping": { - "start": 1108, + "start": 978, "length": 42, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 48 + 43 ], "starting_column": 9, "ending_column": 51 @@ -1176,20 +1216,20 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 1073, + "start": 943, "length": 124, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 42, + 43, + 44, + 45 ], "starting_column": 5, "ending_column": 6 @@ -1201,7 +1241,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1280,16 +1320,201 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad2()" } } } } ], - "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#48)\n", - "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L48)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L47-L50", - "id": "3cf7fef3822d0628cc1f441162960a6753d6cdcad5b8c56c84584dba741e806b", + "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#43)\n", + "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L43)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L42-L45", + "id": "50ab6a747d027b81a24ae04b84e6362bd184a5f23080e2af1b6a859ee144f637", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "source_mapping": { + "start": 3017, + "length": 66, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 127, + 128, + 129 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2385, + "length": 774, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1()" + } + }, + { + "type": "node", + "name": "require(bool)(block.number == 0)", + "source_mapping": { + "start": 3051, + "length": 25, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 128 + ], + "starting_column": 9, + "ending_column": 34 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "source_mapping": { + "start": 3017, + "length": 66, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 127, + 128, + 129 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestSolidityKeyword", + "source_mapping": { + "start": 2385, + "length": 774, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1()" + } + } + } + } + ], + "description": "TestSolidityKeyword.bad1() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#127-129) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#128)\n", + "markdown": "[TestSolidityKeyword.bad1()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L127-L129) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L128)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L127-L129", + "id": "60917b5197ecd42e5554643c32624ec6fc2a46bc8da2b3627eddcd68cf2ce9f5", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1302,7 +1527,7 @@ "source_mapping": { "start": 1203, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1325,7 +1550,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1413,7 +1638,7 @@ "source_mapping": { "start": 1291, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1431,7 +1656,7 @@ "source_mapping": { "start": 1203, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1454,7 +1679,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1551,22 +1776,20 @@ "elements": [ { "type": "function", - "name": "bad5", + "name": "bad1", "source_mapping": { - "start": 1379, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 804, + "length": 133, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -1578,7 +1801,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1657,45 +1880,43 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad1()" } }, { "type": "node", - "name": "10000000000000000000 == balance", + "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", "source_mapping": { - "start": 1467, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 839, + "length": 51, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 61 + 38 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad1", "source_mapping": { - "start": 1379, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 804, + "length": 133, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -1707,7 +1928,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1786,16 +2007,16 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad1()" } } } } ], - "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#61)\n", - "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L61)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L59-L64", - "id": "3e416561dc117d230bbee97788f5a0ff851da92f1def8fb5d7b94461ee6bfbc0", + "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#38)\n", + "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L38)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L37-L40", + "id": "9363dbd2bb3f41b42351b088f7a973902e04ccae0081e5c99354de90890fe6ab", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1808,7 +2029,7 @@ "source_mapping": { "start": 1555, "length": 179, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1831,7 +2052,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1919,7 +2140,7 @@ "source_mapping": { "start": 1652, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1937,7 +2158,7 @@ "source_mapping": { "start": 1555, "length": 179, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -1960,7 +2181,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -2002,238 +2223,53 @@ 63, 64, 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad6()" - } - } - } - } - ], - "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#68)\n", - "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L68)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L66-L71", - "id": "9a6a2aee598cf4c282006337a3b8599c708487d1942e9ddfe3193581cbe1708e", - "check": "incorrect-equality", - "impact": "Medium", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 2952, - "length": 59, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 123, - 124, - 125 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TestSolidityKeyword", - "source_mapping": { - "start": 2385, - "length": 774, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad0()" - } - }, - { - "type": "node", - "name": "require(bool)(now == 0)", - "source_mapping": { - "start": 2986, - "length": 18, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 124 - ], - "starting_column": 9, - "ending_column": 27 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 2952, - "length": 59, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 123, - 124, - 125 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TestSolidityKeyword", - "source_mapping": { - "start": 2385, - "length": 774, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad6()" } } } } ], - "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(now == 0) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#124)\n", - "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(now == 0)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L124)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L123-L125", - "id": "24de80ae388956295db544441f5ab9326af42bd4fcb34e232a23af952d7fe333", + "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#68)\n", + "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L68)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L66-L71", + "id": "9a6a2aee598cf4c282006337a3b8599c708487d1942e9ddfe3193581cbe1708e", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2242,19 +2278,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 3017, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 3089, + "length": 67, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 127, - 128, - 129 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -2266,7 +2302,7 @@ "source_mapping": { "start": 2385, "length": 774, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -2314,42 +2350,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad2()" } }, { "type": "node", "name": "require(bool)(block.number == 0)", "source_mapping": { - "start": 3051, - "length": 25, - "filename_used": "/GENERIC_PATH", + "start": 3123, + "length": 26, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 128 + 132 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 3017, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 3089, + "length": 67, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 127, - 128, - 129 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -2361,7 +2397,7 @@ "source_mapping": { "start": 2385, "length": 774, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", @@ -2409,16 +2445,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad2()" } } } } ], - "description": "TestSolidityKeyword.bad1() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#127-129) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#128)\n", - "markdown": "[TestSolidityKeyword.bad1()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L127-L129) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L128)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L127-L129", - "id": "60917b5197ecd42e5554643c32624ec6fc2a46bc8da2b3627eddcd68cf2ce9f5", + "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#132)\n", + "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L132)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L131-L133", + "id": "9efb75e5f6647209e01d4053c1bf76e69bf07d6578864711e2302336f250d72e", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2427,19 +2463,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 3089, - "length": 67, - "filename_used": "/GENERIC_PATH", + "start": 421, + "length": 101, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2447,94 +2483,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2385, - "length": 774, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0(ERC20Function)" } }, { "type": "node", - "name": "require(bool)(block.number == 0)", + "name": "require(bool)(erc.balanceOf(address(this)) == 10)", "source_mapping": { - "start": 3123, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 472, + "length": 43, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 132 + 22 ], "starting_column": 9, - "ending_column": 35 + "ending_column": 52 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 3089, - "length": 67, - "filename_used": "/GENERIC_PATH", + "start": 421, + "length": 101, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2542,68 +2560,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2385, - "length": 774, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0(ERC20Function)" } } } } ], - "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#132)\n", - "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L132)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L131-L133", - "id": "9efb75e5f6647209e01d4053c1bf76e69bf07d6578864711e2302336f250d72e", + "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#22)\n", + "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L22)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.6.11/incorrect_equality.sol#L21-L23", + "id": "df1ee72930fcaa7dc7a92d390be6007c57953a3392aef588a852373da388d850", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json b/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json index 777627263..bc86f2c05 100644 --- a/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json +++ b/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json @@ -4,19 +4,20 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 421, - "length": 101, - "filename_used": "/GENERIC_PATH", + "start": 804, + "length": 133, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -24,76 +25,126 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestContractBalance", "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0(ERC20Function)" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(erc.balanceOf(address(this)) == 10)", + "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", "source_mapping": { - "start": 472, - "length": 43, - "filename_used": "/GENERIC_PATH", + "start": 839, + "length": 51, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 22 + 38 ], "starting_column": 9, - "ending_column": 52 + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 421, - "length": 101, - "filename_used": "/GENERIC_PATH", + "start": 804, + "length": 133, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23 + 37, + 38, + 39, + 40 ], "starting_column": 5, "ending_column": 6 @@ -101,50 +152,99 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestContractBalance", "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0(ERC20Function)" + "signature": "bad1()" } } } } ], - "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#22)\n", - "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L22)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L21-L23", - "id": "867a3b92771da558ee2693d8c81dc2c154b0effac8153ca43ccb183b05245310", + "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#38)\n", + "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L38)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L37-L40", + "id": "00429822fd7d6870bca827c11ac6f1f552b243431b3db4a937da8c0c616aabb9", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -153,19 +253,22 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad4", "source_mapping": { - "start": 528, - "length": 97, - "filename_used": "/GENERIC_PATH", + "start": 1203, + "length": 170, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27 + 52, + 53, + 54, + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -173,161 +276,11 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "ERC20TestBalance", + "name": "TestContractBalance", "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - }, - { - "type": "node", - "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", - "source_mapping": { - "start": 579, - "length": 39, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 26 - ], - "starting_column": 9, - "ending_column": 48 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 528, - "length": 97, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 25, - 26, - 27 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ERC20TestBalance", - "source_mapping": { - "start": 182, - "length": 445, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(ERC20Variable)" - } - } - } - } - ], - "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#26)\n", - "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L26)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L25-L27", - "id": "22a2bf7ecbe8d0217cce4d0304fc02a45968167dd408ad85ad4bfb0ed5012dd0", - "check": "incorrect-equality", - "impact": "Medium", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "bad0", - "source_mapping": { - "start": 665, - "length": 133, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TestContractBalance", - "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -406,43 +359,45 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad4()" } }, { "type": "node", - "name": "require(bool)(address(address(this)).balance == 10000000000000000000)", + "name": "balance == 10000000000000000000", "source_mapping": { - "start": 700, - "length": 51, - "filename_used": "/GENERIC_PATH", + "start": 1291, + "length": 19, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 33 + 54 ], - "starting_column": 9, - "ending_column": 60 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad4", "source_mapping": { - "start": 665, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 1203, + "length": 170, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35 + 52, + 53, + 54, + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -454,7 +409,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -533,16 +488,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad4()" } } } } ], - "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#33)\n", - "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L33)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L32-L35", - "id": "c64584a1db93863bfb52a62fae244e6c2f6bc0c1dd1a5662f50965428d978a15", + "description": "TestContractBalance.bad4() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#52-57) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#54)\n", + "markdown": "[TestContractBalance.bad4()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L52-L57) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L54)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L52-L57", + "id": "03481d21bd25c9db2606e6ac246fbf5a047d5fb094422fe19a5fabf7032e1818", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -553,18 +508,17 @@ "type": "function", "name": "bad1", "source_mapping": { - "start": 804, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 528, + "length": 97, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 25, + 26, + 27 ], "starting_column": 5, "ending_column": 6 @@ -572,126 +526,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "ERC20TestBalance", "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad1(ERC20Variable)" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(address(this)).balance)", + "name": "require(bool)(erc.balanceOf(msg.sender) == 10)", "source_mapping": { - "start": 839, - "length": 51, - "filename_used": "/GENERIC_PATH", + "start": 579, + "length": 39, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 38 + 26 ], "starting_column": 9, - "ending_column": 60 + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", "name": "bad1", "source_mapping": { - "start": 804, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 528, + "length": 97, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40 + 25, + 26, + 27 ], "starting_column": 5, "ending_column": 6 @@ -699,99 +603,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "ERC20TestBalance", "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad1(ERC20Variable)" } } } } ], - "description": "TestContractBalance.bad1() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#37-40) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(address(this)).balance) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#38)\n", - "markdown": "[TestContractBalance.bad1()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L37-L40) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(address(this)).balance)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L38)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L37-L40", - "id": "00429822fd7d6870bca827c11ac6f1f552b243431b3db4a937da8c0c616aabb9", + "description": "ERC20TestBalance.bad1(ERC20Variable) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#25-27) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(msg.sender) == 10) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#26)\n", + "markdown": "[ERC20TestBalance.bad1(ERC20Variable)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L25-L27) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(msg.sender) == 10)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L26)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L25-L27", + "id": "22a2bf7ecbe8d0217cce4d0304fc02a45968167dd408ad85ad4bfb0ed5012dd0", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -800,20 +655,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 943, - "length": 124, - "filename_used": "/GENERIC_PATH", + "start": 2964, + "length": 71, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 123, + 124, + 125 ], "starting_column": 5, "ending_column": 6 @@ -821,126 +675,94 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", + "start": 2385, + "length": 798, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad2()" - } - }, - { - "type": "node", - "name": "require(bool)(address(this).balance == 10000000000000000000)", + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "require(bool)(block.timestamp == 0)", "source_mapping": { - "start": 978, - "length": 42, - "filename_used": "/GENERIC_PATH", + "start": 2998, + "length": 30, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 43 + 124 ], "starting_column": 9, - "ending_column": 51 + "ending_column": 39 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 943, - "length": 124, - "filename_used": "/GENERIC_PATH", + "start": 2964, + "length": 71, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45 + 123, + 124, + 125 ], "starting_column": 5, "ending_column": 6 @@ -948,99 +770,68 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", + "start": 2385, + "length": 798, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } } } } ], - "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#43)\n", - "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L43)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L42-L45", - "id": "d848b883cd27d256e7ea367c14afae2cc206b22bc62e0023eeff561e4bc9bee6", + "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#124)\n", + "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L124)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L123-L125", + "id": "41fcdc7b875eec5595e7d7518953b246ab69a7baac064512fde30b157c0595f2", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1049,20 +840,22 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad6", "source_mapping": { - "start": 1073, - "length": 124, - "filename_used": "/GENERIC_PATH", + "start": 1555, + "length": 179, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 66, + 67, + 68, + 69, + 70, + 71 ], "starting_column": 5, "ending_column": 6 @@ -1074,7 +867,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1153,43 +946,45 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad6()" } }, { "type": "node", - "name": "require(bool)(10000000000000000000 == address(this).balance)", + "name": "balance == 10000000000000000000", "source_mapping": { - "start": 1108, - "length": 42, - "filename_used": "/GENERIC_PATH", + "start": 1652, + "length": 19, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 48 + 68 ], - "starting_column": 9, - "ending_column": 51 + "starting_column": 13, + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad6", "source_mapping": { - "start": 1073, - "length": 124, - "filename_used": "/GENERIC_PATH", + "start": 1555, + "length": 179, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 47, - 48, - 49, - 50 + 66, + 67, + 68, + 69, + 70, + 71 ], "starting_column": 5, "ending_column": 6 @@ -1201,7 +996,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1280,16 +1075,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad6()" } } } } ], - "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#48)\n", - "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L48)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L47-L50", - "id": "746e8e07ef37b33e1f1e49ae013311ea0873d62d00caacaf08988735eb939ddc", + "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#68)\n", + "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L68)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L66-L71", + "id": "48fdf24089d0b55885acd69fec55d6860251775e0e1b0317182476ff9015bd8d", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1298,22 +1093,22 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad5", "source_mapping": { - "start": 1203, + "start": 1379, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 52, - 53, - 54, - 55, - 56, - 57 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -1325,7 +1120,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1404,22 +1199,22 @@ "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad5()" } }, { "type": "node", - "name": "balance == 10000000000000000000", + "name": "10000000000000000000 == balance", "source_mapping": { - "start": 1291, + "start": 1467, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 54 + 61 ], "starting_column": 13, "ending_column": 32 @@ -1427,22 +1222,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad5", "source_mapping": { - "start": 1203, + "start": 1379, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 52, - 53, - 54, - 55, - 56, - 57 + 59, + 60, + 61, + 62, + 63, + 64 ], "starting_column": 5, "ending_column": 6 @@ -1454,7 +1249,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1533,16 +1328,16 @@ "ending_column": 2 } }, - "signature": "bad4()" + "signature": "bad5()" } } } } ], - "description": "TestContractBalance.bad4() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#52-57) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#54)\n", - "markdown": "[TestContractBalance.bad4()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L52-L57) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L54)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L52-L57", - "id": "03481d21bd25c9db2606e6ac246fbf5a047d5fb094422fe19a5fabf7032e1818", + "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#61)\n", + "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L61)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L59-L64", + "id": "4c491b63ac50b7636f4718de626a471d8172b614b1355e937d7a071aec148691", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1551,22 +1346,20 @@ "elements": [ { "type": "function", - "name": "bad5", + "name": "bad3", "source_mapping": { - "start": 1379, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 1073, + "length": 124, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -1578,7 +1371,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1657,45 +1450,43 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad3()" } }, { "type": "node", - "name": "10000000000000000000 == balance", + "name": "require(bool)(10000000000000000000 == address(this).balance)", "source_mapping": { - "start": 1467, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 1108, + "length": 42, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 61 + 48 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 51 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad3", "source_mapping": { - "start": 1379, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 1073, + "length": 124, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61, - 62, - 63, - 64 + 47, + 48, + 49, + 50 ], "starting_column": 5, "ending_column": 6 @@ -1707,7 +1498,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1786,16 +1577,16 @@ "ending_column": 2 } }, - "signature": "bad5()" + "signature": "bad3()" } } } } ], - "description": "TestContractBalance.bad5() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#59-64) uses a dangerous strict equality:\n\t- 10000000000000000000 == balance (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#61)\n", - "markdown": "[TestContractBalance.bad5()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L59-L64) uses a dangerous strict equality:\n\t- [10000000000000000000 == balance](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L61)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L59-L64", - "id": "4c491b63ac50b7636f4718de626a471d8172b614b1355e937d7a071aec148691", + "description": "TestContractBalance.bad3() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#47-50) uses a dangerous strict equality:\n\t- require(bool)(10000000000000000000 == address(this).balance) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#48)\n", + "markdown": "[TestContractBalance.bad3()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L47-L50) uses a dangerous strict equality:\n\t- [require(bool)(10000000000000000000 == address(this).balance)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L48)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L47-L50", + "id": "746e8e07ef37b33e1f1e49ae013311ea0873d62d00caacaf08988735eb939ddc", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -1804,22 +1595,19 @@ "elements": [ { "type": "function", - "name": "bad6", + "name": "bad2", "source_mapping": { - "start": 1555, - "length": 179, - "filename_used": "/GENERIC_PATH", + "start": 3113, + "length": 67, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 66, - 67, - 68, - 69, - 70, - 71 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -1827,128 +1615,94 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", + "start": 2385, + "length": 798, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad6()" + "signature": "bad2()" } }, { "type": "node", - "name": "balance == 10000000000000000000", + "name": "require(bool)(block.number == 0)", "source_mapping": { - "start": 1652, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 3147, + "length": 26, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 68 + 132 ], - "starting_column": 13, - "ending_column": 32 + "starting_column": 9, + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad6", + "name": "bad2", "source_mapping": { - "start": 1555, - "length": 179, - "filename_used": "/GENERIC_PATH", + "start": 3113, + "length": 67, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 66, - 67, - 68, - 69, - 70, - 71 + 131, + 132, + 133 ], "starting_column": 5, "ending_column": 6 @@ -1956,99 +1710,68 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestContractBalance", + "name": "TestSolidityKeyword", "source_mapping": { - "start": 629, - "length": 1754, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "start": 2385, + "length": 798, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad6()" + "signature": "bad2()" } } } } ], - "description": "TestContractBalance.bad6() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#66-71) uses a dangerous strict equality:\n\t- balance == 10000000000000000000 (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#68)\n", - "markdown": "[TestContractBalance.bad6()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L66-L71) uses a dangerous strict equality:\n\t- [balance == 10000000000000000000](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L68)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L66-L71", - "id": "48fdf24089d0b55885acd69fec55d6860251775e0e1b0317182476ff9015bd8d", + "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#132)\n", + "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L132)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L131-L133", + "id": "78aad151c32e2fa0c7cb17095afae17fad81d613a486d78dabb016b26396ed12", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2059,17 +1782,17 @@ "type": "function", "name": "bad0", "source_mapping": { - "start": 2964, - "length": 71, - "filename_used": "/GENERIC_PATH", + "start": 421, + "length": 101, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 123, - 124, - 125 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2077,94 +1800,76 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2385, - "length": 798, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad0(ERC20Function)" } }, { "type": "node", - "name": "require(bool)(block.timestamp == 0)", + "name": "require(bool)(erc.balanceOf(address(this)) == 10)", "source_mapping": { - "start": 2998, - "length": 30, - "filename_used": "/GENERIC_PATH", + "start": 472, + "length": 43, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 124 + 22 ], "starting_column": 9, - "ending_column": 39 + "ending_column": 52 }, "type_specific_fields": { "parent": { "type": "function", "name": "bad0", "source_mapping": { - "start": 2964, - "length": 71, - "filename_used": "/GENERIC_PATH", + "start": 421, + "length": 101, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 123, - 124, - 125 + 21, + 22, + 23 ], "starting_column": 5, "ending_column": 6 @@ -2172,68 +1877,50 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "ERC20TestBalance", "source_mapping": { - "start": 2385, - "length": 798, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 445, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 - ], + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28 + ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad0(ERC20Function)" } } } } ], - "description": "TestSolidityKeyword.bad0() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#123-125) uses a dangerous strict equality:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#124)\n", - "markdown": "[TestSolidityKeyword.bad0()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L123-L125) uses a dangerous strict equality:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L124)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L123-L125", - "id": "41fcdc7b875eec5595e7d7518953b246ab69a7baac064512fde30b157c0595f2", + "description": "ERC20TestBalance.bad0(ERC20Function) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#21-23) uses a dangerous strict equality:\n\t- require(bool)(erc.balanceOf(address(this)) == 10) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#22)\n", + "markdown": "[ERC20TestBalance.bad0(ERC20Function)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L21-L23) uses a dangerous strict equality:\n\t- [require(bool)(erc.balanceOf(address(this)) == 10)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L22)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L21-L23", + "id": "867a3b92771da558ee2693d8c81dc2c154b0effac8153ca43ccb183b05245310", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" @@ -2246,7 +1933,7 @@ "source_mapping": { "start": 3041, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2266,7 +1953,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2323,7 +2010,7 @@ "source_mapping": { "start": 3075, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2341,7 +2028,7 @@ "source_mapping": { "start": 3041, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2361,7 +2048,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2427,19 +2114,20 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 3113, - "length": 67, - "filename_used": "/GENERIC_PATH", + "start": 665, + "length": 133, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 32, + 33, + 34, + 35 ], "starting_column": 5, "ending_column": 6 @@ -2447,94 +2135,126 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2385, - "length": 798, - "filename_used": "/GENERIC_PATH", + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } }, { "type": "node", - "name": "require(bool)(block.number == 0)", + "name": "require(bool)(address(address(this)).balance == 10000000000000000000)", "source_mapping": { - "start": 3147, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 700, + "length": 51, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 132 + 33 ], "starting_column": 9, - "ending_column": 35 + "ending_column": 60 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 3113, - "length": 67, - "filename_used": "/GENERIC_PATH", + "start": 665, + "length": 133, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 131, - 132, - 133 + 32, + 33, + 34, + 35 ], "starting_column": 5, "ending_column": 6 @@ -2542,68 +2262,348 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TestSolidityKeyword", + "name": "TestContractBalance", "source_mapping": { - "start": 2385, - "length": 798, - "filename_used": "/GENERIC_PATH", + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad2()" - } - } - } - } - ], - "description": "TestSolidityKeyword.bad2() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#131-133) uses a dangerous strict equality:\n\t- require(bool)(block.number == 0) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#132)\n", - "markdown": "[TestSolidityKeyword.bad2()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L131-L133) uses a dangerous strict equality:\n\t- [require(bool)(block.number == 0)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L132)\n", - "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L131-L133", - "id": "78aad151c32e2fa0c7cb17095afae17fad81d613a486d78dabb016b26396ed12", + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + } + } + } + ], + "description": "TestContractBalance.bad0() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#32-35) uses a dangerous strict equality:\n\t- require(bool)(address(address(this)).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#33)\n", + "markdown": "[TestContractBalance.bad0()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L32-L35) uses a dangerous strict equality:\n\t- [require(bool)(address(address(this)).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L33)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L32-L35", + "id": "c64584a1db93863bfb52a62fae244e6c2f6bc0c1dd1a5662f50965428d978a15", + "check": "incorrect-equality", + "impact": "Medium", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad2", + "source_mapping": { + "start": 943, + "length": 124, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestContractBalance", + "source_mapping": { + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad2()" + } + }, + { + "type": "node", + "name": "require(bool)(address(this).balance == 10000000000000000000)", + "source_mapping": { + "start": 978, + "length": 42, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 43 + ], + "starting_column": 9, + "ending_column": 51 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad2", + "source_mapping": { + "start": 943, + "length": 124, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TestContractBalance", + "source_mapping": { + "start": 629, + "length": 1754, + "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "is_dependency": false, + "lines": [ + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad2()" + } + } + } + } + ], + "description": "TestContractBalance.bad2() (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#42-45) uses a dangerous strict equality:\n\t- require(bool)(address(this).balance == 10000000000000000000) (tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#43)\n", + "markdown": "[TestContractBalance.bad2()](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L42-L45) uses a dangerous strict equality:\n\t- [require(bool)(address(this).balance == 10000000000000000000)](tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L43)\n", + "first_markdown_element": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol#L42-L45", + "id": "d848b883cd27d256e7ea367c14afae2cc206b22bc62e0023eeff561e4bc9bee6", "check": "incorrect-equality", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json index bfb2d8224..e1a63acfc 100644 --- a/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json @@ -4,21 +4,28 @@ "elements": [ { "type": "function", - "name": "noResult", + "name": "loopsNoResult", "source_mapping": { - "start": 20, - "length": 103, - "filename_used": "/GENERIC_PATH", + "start": 496, + "length": 251, + "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41 ], "starting_column": 5, "ending_column": 6 @@ -30,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -93,14 +100,14 @@ "ending_column": 2 } }, - "signature": "noResult()" + "signature": "loopsNoResult()" } } ], - "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#2-6) does not always execute _; or revert", - "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L2-L6) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L2-L6", - "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", + "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#30-41) does not always execute _; or revert", + "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L30-L41) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L30-L41", + "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" @@ -113,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -135,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -214,28 +221,21 @@ "elements": [ { "type": "function", - "name": "loopsNoResult", + "name": "noResult", "source_mapping": { - "start": 496, - "length": 251, - "filename_used": "/GENERIC_PATH", + "start": 20, + "length": 103, + "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41 + 2, + 3, + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -310,14 +310,14 @@ "ending_column": 2 } }, - "signature": "loopsNoResult()" + "signature": "noResult()" } } ], - "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#30-41) does not always execute _; or revert", - "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L30-L41) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L30-L41", - "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", + "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#2-6) does not always execute _; or revert", + "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L2-L6) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol#L2-L6", + "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json index 257869740..416f0e236 100644 --- a/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json @@ -4,21 +4,28 @@ "elements": [ { "type": "function", - "name": "noResult", + "name": "loopsNoResult", "source_mapping": { - "start": 20, - "length": 103, - "filename_used": "/GENERIC_PATH", + "start": 496, + "length": 251, + "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41 ], "starting_column": 5, "ending_column": 6 @@ -30,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -93,14 +100,14 @@ "ending_column": 2 } }, - "signature": "noResult()" + "signature": "loopsNoResult()" } } ], - "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#2-6) does not always execute _; or revert", - "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L2-L6) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L2-L6", - "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", + "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#30-41) does not always execute _; or revert", + "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L30-L41) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L30-L41", + "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" @@ -113,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -135,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -214,28 +221,21 @@ "elements": [ { "type": "function", - "name": "loopsNoResult", + "name": "noResult", "source_mapping": { - "start": 496, - "length": 251, - "filename_used": "/GENERIC_PATH", + "start": 20, + "length": 103, + "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41 + 2, + 3, + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -310,14 +310,14 @@ "ending_column": 2 } }, - "signature": "loopsNoResult()" + "signature": "noResult()" } } ], - "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#30-41) does not always execute _; or revert", - "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L30-L41) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L30-L41", - "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", + "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#2-6) does not always execute _; or revert", + "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L2-L6) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol#L2-L6", + "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json index c6023add7..d2f7ec560 100644 --- a/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json @@ -4,21 +4,28 @@ "elements": [ { "type": "function", - "name": "noResult", + "name": "loopsNoResult", "source_mapping": { - "start": 20, - "length": 103, + "start": 496, + "length": 251, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41 ], "starting_column": 5, "ending_column": 6 @@ -93,14 +100,14 @@ "ending_column": 2 } }, - "signature": "noResult()" + "signature": "loopsNoResult()" } } ], - "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#2-6) does not always execute _; or revert", - "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L2-L6) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L2-L6", - "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", + "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#30-41) does not always execute _; or revert", + "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L30-L41) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L30-L41", + "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" @@ -214,28 +221,21 @@ "elements": [ { "type": "function", - "name": "loopsNoResult", + "name": "noResult", "source_mapping": { - "start": 496, - "length": 251, + "start": 20, + "length": 103, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41 + 2, + 3, + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -310,14 +310,14 @@ "ending_column": 2 } }, - "signature": "loopsNoResult()" + "signature": "noResult()" } } ], - "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#30-41) does not always execute _; or revert", - "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L30-L41) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L30-L41", - "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", + "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#2-6) does not always execute _; or revert", + "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L2-L6) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol#L2-L6", + "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json index 8d70ff617..592b4dde0 100644 --- a/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json @@ -4,21 +4,28 @@ "elements": [ { "type": "function", - "name": "noResult", + "name": "loopsNoResult", "source_mapping": { - "start": 20, - "length": 103, - "filename_used": "/GENERIC_PATH", + "start": 496, + "length": 251, + "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41 ], "starting_column": 5, "ending_column": 6 @@ -30,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -93,14 +100,14 @@ "ending_column": 2 } }, - "signature": "noResult()" + "signature": "loopsNoResult()" } } ], - "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#2-6) does not always execute _; or revert", - "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L2-L6) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L2-L6", - "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", + "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#30-41) does not always execute _; or revert", + "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L30-L41) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L30-L41", + "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" @@ -113,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -135,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -214,28 +221,21 @@ "elements": [ { "type": "function", - "name": "loopsNoResult", + "name": "noResult", "source_mapping": { - "start": 496, - "length": 251, - "filename_used": "/GENERIC_PATH", + "start": 20, + "length": 103, + "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41 + 2, + 3, + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -310,14 +310,14 @@ "ending_column": 2 } }, - "signature": "loopsNoResult()" + "signature": "noResult()" } } ], - "description": "Modifier Test.loopsNoResult() (tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#30-41) does not always execute _; or revert", - "markdown": "Modifier [Test.loopsNoResult()](tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L30-L41) does not always execute _; or revert", - "first_markdown_element": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L30-L41", - "id": "0ba95ef5faf2a00c06d4f83c5159220d1cd06bc346a1287a6634334b7a0c433f", + "description": "Modifier Test.noResult() (tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#2-6) does not always execute _; or revert", + "markdown": "Modifier [Test.noResult()](tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L2-L6) does not always execute _; or revert", + "first_markdown_element": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol#L2-L6", + "id": "e83e0a544940d3ddd9ea8fe0ae0277bec4660926110809cfd28153817969c3a3", "check": "incorrect-modifier", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol.0.4.25.IncorrectUnaryExpressionDetection.json b/tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol.0.4.25.IncorrectUnaryExpressionDetection.json index 6f00f629e..de342098e 100644 --- a/tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol.0.4.25.IncorrectUnaryExpressionDetection.json +++ b/tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol.0.4.25.IncorrectUnaryExpressionDetection.json @@ -1,68 +1,5 @@ [ [ - { - "elements": [ - { - "type": "variable", - "name": "c", - "source_mapping": { - "start": 42, - "length": 13, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol", - "is_dependency": false, - "lines": [ - 4 - ], - "starting_column": 3, - "ending_column": 16 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "C", - "source_mapping": { - "start": 0, - "length": 204, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.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 - } - } - } - } - ], - "description": "C.c (tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol#4) uses an dangerous unary operator: (b = + 1)\n", - "markdown": "[C.c](tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol#L4) uses an dangerous unary operator: (b = + 1)\n", - "first_markdown_element": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol#L4", - "id": "98d05a4acbe13ff0e6fa795af35dc2002541cc7607f3f4d7ffb356f9d33681bd", - "check": "incorrect-unary", - "impact": "Low", - "confidence": "Medium" - }, { "elements": [ { @@ -533,6 +470,69 @@ "check": "incorrect-unary", "impact": "Low", "confidence": "Medium" + }, + { + "elements": [ + { + "type": "variable", + "name": "c", + "source_mapping": { + "start": 42, + "length": 13, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol", + "is_dependency": false, + "lines": [ + 4 + ], + "starting_column": 3, + "ending_column": 16 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "source_mapping": { + "start": 0, + "length": 204, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.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 + } + } + } + } + ], + "description": "C.c (tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol#4) uses an dangerous unary operator: (b = + 1)\n", + "markdown": "[C.c](tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol#L4) uses an dangerous unary operator: (b = + 1)\n", + "first_markdown_element": "tests/detectors/incorrect-unary/0.4.25/invalid_unary_expression.sol#L4", + "id": "98d05a4acbe13ff0e6fa795af35dc2002541cc7607f3f4d7ffb356f9d33681bd", + "check": "incorrect-unary", + "impact": "Low", + "confidence": "Medium" } ] ] \ No newline at end of file diff --git a/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json b/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json index d2fdadabe..d68289725 100644 --- a/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json +++ b/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 368, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 47, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 25, "length": 97, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", diff --git a/tests/detectors/locked-ether/0.7.6/locked_ether.sol.0.7.6.LockedEther.json b/tests/detectors/locked-ether/0.7.6/locked_ether.sol.0.7.6.LockedEther.json index 0bdae997a..222934a44 100644 --- a/tests/detectors/locked-ether/0.7.6/locked_ether.sol.0.7.6.LockedEther.json +++ b/tests/detectors/locked-ether/0.7.6/locked_ether.sol.0.7.6.LockedEther.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 401, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 49, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 27, "length": 101, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.7.6/locked_ether.sol", diff --git a/tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol.0.4.25.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol.0.4.25.MappingDeletionDetection.json index b8abfa2e5..77bd9ffc1 100644 --- a/tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol.0.4.25.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol.0.4.25.MappingDeletionDetection.json @@ -1,188 +1,5 @@ [ [ - { - "elements": [ - { - "type": "function", - "name": "deleteSt", - "source_mapping": { - "start": 114, - "length": 70, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 9, - 10, - 11 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 158, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "deleteSt(Lib.MyStruct[1])" - } - }, - { - "type": "struct", - "name": "MyStruct", - "source_mapping": { - "start": 47, - "length": 61, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 5, - 6, - 7 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 158, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - } - } - }, - { - "type": "node", - "name": "delete st[0]", - "source_mapping": { - "start": 165, - "length": 12, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 10 - ], - "starting_column": 9, - "ending_column": 21 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "deleteSt", - "source_mapping": { - "start": 114, - "length": 70, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 9, - 10, - 11 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 158, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "deleteSt(Lib.MyStruct[1])" - } - } - } - } - ], - "description": "Lib.deleteSt(Lib.MyStruct[1]) (tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#9-11) deletes Lib.MyStruct (tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#5-7) which contains a mapping:\n\t-delete st[0] (tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#10)\n", - "markdown": "[Lib.deleteSt(Lib.MyStruct[1])](tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L9-L11) deletes [Lib.MyStruct](tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L5-L7) which contains a mapping:\n\t-[delete st[0]](tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L10)\n", - "first_markdown_element": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L9-L11", - "id": "8c8313f12eb11c77c9acf1f683fe6d44a79ca1445e0d92cffd79c04a3462d3e9", - "check": "mapping-deletion", - "impact": "Medium", - "confidence": "High" - }, { "elements": [ { @@ -422,6 +239,189 @@ "check": "mapping-deletion", "impact": "Medium", "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "deleteSt", + "source_mapping": { + "start": 114, + "length": 70, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 158, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "deleteSt(Lib.MyStruct[1])" + } + }, + { + "type": "struct", + "name": "MyStruct", + "source_mapping": { + "start": 47, + "length": 61, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 158, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "delete st[0]", + "source_mapping": { + "start": 165, + "length": 12, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "deleteSt", + "source_mapping": { + "start": 114, + "length": 70, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 158, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "deleteSt(Lib.MyStruct[1])" + } + } + } + } + ], + "description": "Lib.deleteSt(Lib.MyStruct[1]) (tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#9-11) deletes Lib.MyStruct (tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#5-7) which contains a mapping:\n\t-delete st[0] (tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#10)\n", + "markdown": "[Lib.deleteSt(Lib.MyStruct[1])](tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L9-L11) deletes [Lib.MyStruct](tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L5-L7) which contains a mapping:\n\t-[delete st[0]](tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L10)\n", + "first_markdown_element": "tests/detectors/mapping-deletion/0.4.25/MappingDeletion.sol#L9-L11", + "id": "8c8313f12eb11c77c9acf1f683fe6d44a79ca1445e0d92cffd79c04a3462d3e9", + "check": "mapping-deletion", + "impact": "Medium", + "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json index deaf2750d..594297e67 100644 --- a/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json @@ -1,188 +1,5 @@ [ [ - { - "elements": [ - { - "type": "function", - "name": "deleteSt", - "source_mapping": { - "start": 114, - "length": 80, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 9, - 10, - 11 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 168, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "deleteSt(Lib.MyStruct[1])" - } - }, - { - "type": "struct", - "name": "MyStruct", - "source_mapping": { - "start": 47, - "length": 61, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 5, - 6, - 7 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 168, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - } - } - }, - { - "type": "node", - "name": "delete st[0]", - "source_mapping": { - "start": 175, - "length": 12, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 10 - ], - "starting_column": 9, - "ending_column": 21 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "deleteSt", - "source_mapping": { - "start": 114, - "length": 80, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 9, - 10, - 11 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 168, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "deleteSt(Lib.MyStruct[1])" - } - } - } - } - ], - "description": "Lib.deleteSt(Lib.MyStruct[1]) (tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#9-11) deletes Lib.MyStruct (tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#5-7) which contains a mapping:\n\t-delete st[0] (tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#10)\n", - "markdown": "[Lib.deleteSt(Lib.MyStruct[1])](tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L9-L11) deletes [Lib.MyStruct](tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L5-L7) which contains a mapping:\n\t-[delete st[0]](tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L10)\n", - "first_markdown_element": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L9-L11", - "id": "4c08076815986fec8b813cb66a7f7fe7002a5e87179bbd46e59279da2f46e992", - "check": "mapping-deletion", - "impact": "Medium", - "confidence": "High" - }, { "elements": [ { @@ -191,7 +8,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -212,7 +29,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -262,7 +79,7 @@ "source_mapping": { "start": 228, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -283,7 +100,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -332,7 +149,7 @@ "source_mapping": { "start": 701, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -350,7 +167,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -371,7 +188,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -425,6 +242,189 @@ "check": "mapping-deletion", "impact": "Medium", "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "deleteSt", + "source_mapping": { + "start": 114, + "length": 80, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 168, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "deleteSt(Lib.MyStruct[1])" + } + }, + { + "type": "struct", + "name": "MyStruct", + "source_mapping": { + "start": 47, + "length": 61, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 168, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "delete st[0]", + "source_mapping": { + "start": 175, + "length": 12, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "deleteSt", + "source_mapping": { + "start": 114, + "length": 80, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 168, + "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "deleteSt(Lib.MyStruct[1])" + } + } + } + } + ], + "description": "Lib.deleteSt(Lib.MyStruct[1]) (tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#9-11) deletes Lib.MyStruct (tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#5-7) which contains a mapping:\n\t-delete st[0] (tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#10)\n", + "markdown": "[Lib.deleteSt(Lib.MyStruct[1])](tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L9-L11) deletes [Lib.MyStruct](tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L5-L7) which contains a mapping:\n\t-[delete st[0]](tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L10)\n", + "first_markdown_element": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol#L9-L11", + "id": "4c08076815986fec8b813cb66a7f7fe7002a5e87179bbd46e59279da2f46e992", + "check": "mapping-deletion", + "impact": "Medium", + "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json index f6e59ae14..a6d50caef 100644 --- a/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 47, "length": 61, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -79,7 +79,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -109,7 +109,7 @@ "source_mapping": { "start": 175, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -127,7 +127,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -147,7 +147,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -191,7 +191,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -262,7 +262,7 @@ "source_mapping": { "start": 228, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -283,7 +283,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -332,7 +332,7 @@ "source_mapping": { "start": 701, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -350,7 +350,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -371,7 +371,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", diff --git a/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json index d7a4397fc..db419dad9 100644 --- a/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json @@ -1,188 +1,5 @@ [ [ - { - "elements": [ - { - "type": "function", - "name": "deleteSt", - "source_mapping": { - "start": 114, - "length": 80, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 9, - 10, - 11 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 168, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "deleteSt(Lib.MyStruct[1])" - } - }, - { - "type": "struct", - "name": "MyStruct", - "source_mapping": { - "start": 47, - "length": 61, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 5, - 6, - 7 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 168, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - } - } - }, - { - "type": "node", - "name": "delete st[0]", - "source_mapping": { - "start": 175, - "length": 12, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 10 - ], - "starting_column": 9, - "ending_column": 21 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "deleteSt", - "source_mapping": { - "start": 114, - "length": 80, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 9, - 10, - 11 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Lib", - "source_mapping": { - "start": 29, - "length": 168, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "deleteSt(Lib.MyStruct[1])" - } - } - } - } - ], - "description": "Lib.deleteSt(Lib.MyStruct[1]) (tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#9-11) deletes Lib.MyStruct (tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#5-7) which contains a mapping:\n\t-delete st[0] (tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#10)\n", - "markdown": "[Lib.deleteSt(Lib.MyStruct[1])](tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L9-L11) deletes [Lib.MyStruct](tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L5-L7) which contains a mapping:\n\t-[delete st[0]](tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L10)\n", - "first_markdown_element": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L9-L11", - "id": "a6c44f7353505e72d74433eef65af07e90cc95c3797d5b395766255f0ecb91e1", - "check": "mapping-deletion", - "impact": "Medium", - "confidence": "High" - }, { "elements": [ { @@ -191,7 +8,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -212,7 +29,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -262,7 +79,7 @@ "source_mapping": { "start": 228, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -283,7 +100,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -332,7 +149,7 @@ "source_mapping": { "start": 701, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -350,7 +167,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -371,7 +188,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -425,6 +242,189 @@ "check": "mapping-deletion", "impact": "Medium", "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "deleteSt", + "source_mapping": { + "start": 114, + "length": 80, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 168, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "deleteSt(Lib.MyStruct[1])" + } + }, + { + "type": "struct", + "name": "MyStruct", + "source_mapping": { + "start": 47, + "length": 61, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 5, + 6, + 7 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 168, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + }, + { + "type": "node", + "name": "delete st[0]", + "source_mapping": { + "start": 175, + "length": 12, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 10 + ], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "deleteSt", + "source_mapping": { + "start": 114, + "length": 80, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 9, + 10, + 11 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Lib", + "source_mapping": { + "start": 29, + "length": 168, + "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "deleteSt(Lib.MyStruct[1])" + } + } + } + } + ], + "description": "Lib.deleteSt(Lib.MyStruct[1]) (tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#9-11) deletes Lib.MyStruct (tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#5-7) which contains a mapping:\n\t-delete st[0] (tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#10)\n", + "markdown": "[Lib.deleteSt(Lib.MyStruct[1])](tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L9-L11) deletes [Lib.MyStruct](tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L5-L7) which contains a mapping:\n\t-[delete st[0]](tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L10)\n", + "first_markdown_element": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol#L9-L11", + "id": "a6c44f7353505e72d74433eef65af07e90cc95c3797d5b395766255f0ecb91e1", + "check": "mapping-deletion", + "impact": "Medium", + "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json b/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json index 720e4350c..a6a4f75fd 100644 --- a/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json +++ b/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json @@ -4,37 +4,37 @@ "elements": [ { "type": "variable", - "name": "new_owner", + "name": "addr", "source_mapping": { - "start": 149, - "length": 17, + "start": 393, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10 + 19 ], - "starting_column": 27, - "ending_column": 44 + "starting_column": 26, + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad2_transfer", "source_mapping": { - "start": 125, - "length": 108, + "start": 370, + "length": 114, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -128,44 +128,44 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad2_transfer(address)" } } } }, { "type": "node", - "name": "owner = new_owner", + "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 188, - "length": 17, + "start": 427, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 11 + 20 ], "starting_column": 5, - "ending_column": 22 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad2_transfer", "source_mapping": { - "start": 125, - "length": 108, + "start": 370, + "length": 114, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -259,16 +259,16 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad2_transfer(address)" } } } } ], - "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#11)\n", - "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L11)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L10", - "id": "4215a731670a0150f45d8cd682dc81ed85ffd5268cbad6ac9fe8bd044e54f74d", + "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#20)\n", + "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L20)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L19", + "id": "16629b342aad1ee3e0d3f933781eea91f1cb34b1770f84cb38a5d911e15b3476", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -279,7 +279,7 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 256, + "start": 511, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -287,28 +287,28 @@ "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14 + 23 ], - "starting_column": 22, - "ending_column": 34 + "starting_column": 26, + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad3_transfer", "source_mapping": { - "start": 237, - "length": 129, + "start": 488, + "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -402,45 +402,45 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad3_transfer(address)" } } } }, { "type": "node", - "name": "addr.send(msg.value)", + "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 290, - "length": 20, + "start": 545, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 15 + 24 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad3_transfer", "source_mapping": { - "start": 237, - "length": 129, + "start": 488, + "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -534,45 +534,55 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad3_transfer(address)" } } } - }, + } + ], + "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#24)\n", + "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L24)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L23", + "id": "27318d51c369e1e169a889a6c2678a023a22e1e3a691ab41a429684e338d2d1e", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "addr.send(msg.value)", + "type": "variable", + "name": "addr", "source_mapping": { - "start": 340, - "length": 20, + "start": 706, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 16 + 28 ], - "starting_column": 5, - "ending_column": 25 + "starting_column": 22, + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad4_call", "source_mapping": { - "start": 237, - "length": 129, + "start": 687, + "length": 112, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -666,55 +676,44 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad4_call(address)" } } } - } - ], - "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#16)\n", - "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L16)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L14", - "id": "dd2af335a7782a70944073bf1cf5dea69845ddcf6a45ea86a9fcf59793b151c8", - "check": "missing-zero-check", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "variable", - "name": "addr", + "type": "node", + "name": "addr.call.value(msg.value)()", "source_mapping": { - "start": 393, - "length": 12, + "start": 740, + "length": 30, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19 + 29 ], - "starting_column": 26, - "ending_column": 38 + "starting_column": 5, + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad4_call", "source_mapping": { - "start": 370, - "length": 114, + "start": 687, + "length": 112, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -808,44 +807,55 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad4_call(address)" } } } - }, + } + ], + "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call.value(msg.value)() (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#29)\n", + "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call.value(msg.value)()](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L29)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L28", + "id": "34b73dbecfa159bc5631cb95ff2343c92792d80f448fc425b7d1bba399108073", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "addr.transfer(msg.value)", + "type": "variable", + "name": "new_owner", "source_mapping": { - "start": 427, - "length": 24, + "start": 149, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 20 + 10 ], - "starting_column": 5, - "ending_column": 29 + "starting_column": 27, + "ending_column": 44 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad0_set_owner", "source_mapping": { - "start": 370, - "length": 114, + "start": 125, + "length": 108, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -939,56 +949,44 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad0_set_owner(address)" } } } - } - ], - "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#20)\n", - "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L20)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L19", - "id": "16629b342aad1ee3e0d3f933781eea91f1cb34b1770f84cb38a5d911e15b3476", - "check": "missing-zero-check", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "variable", - "name": "addr", + "type": "node", + "name": "owner = new_owner", "source_mapping": { - "start": 511, - "length": 12, + "start": 188, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23 + 11 ], - "starting_column": 26, - "ending_column": 38 + "starting_column": 5, + "ending_column": 22 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad0_set_owner", "source_mapping": { - "start": 488, - "length": 195, + "start": 125, + "length": 108, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -1082,45 +1080,56 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad0_set_owner(address)" } } } - }, + } + ], + "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#11)\n", + "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L11)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L10", + "id": "4215a731670a0150f45d8cd682dc81ed85ffd5268cbad6ac9fe8bd044e54f74d", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "addr.transfer(msg.value)", + "type": "variable", + "name": "addr", "source_mapping": { - "start": 545, - "length": 24, + "start": 256, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 24 + 14 ], - "starting_column": 5, - "ending_column": 29 + "starting_column": 22, + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad1_send", "source_mapping": { - "start": 488, - "length": 195, + "start": 237, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -1214,55 +1223,45 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad1_send(address)" } } } - } - ], - "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#24)\n", - "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L24)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L23", - "id": "27318d51c369e1e169a889a6c2678a023a22e1e3a691ab41a429684e338d2d1e", - "check": "missing-zero-check", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "variable", - "name": "addr", + "type": "node", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 706, - "length": 12, + "start": 290, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28 + 15 ], - "starting_column": 22, - "ending_column": 34 + "starting_column": 5, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad1_send", "source_mapping": { - "start": 687, - "length": 112, + "start": 237, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -1356,44 +1355,45 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad1_send(address)" } } } }, { "type": "node", - "name": "addr.call.value(msg.value)()", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 740, - "length": 30, + "start": 340, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 29 + 16 ], "starting_column": 5, - "ending_column": 35 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad1_send", "source_mapping": { - "start": 687, - "length": 112, + "start": 237, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -1487,16 +1487,16 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad1_send(address)" } } } } ], - "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call.value(msg.value)() (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#29)\n", - "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call.value(msg.value)()](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L29)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L28", - "id": "34b73dbecfa159bc5631cb95ff2343c92792d80f448fc425b7d1bba399108073", + "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#16)\n", + "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L16)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol#L14", + "id": "dd2af335a7782a70944073bf1cf5dea69845ddcf6a45ea86a9fcf59793b151c8", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol.0.5.16.MissingZeroAddressValidation.json b/tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol.0.5.16.MissingZeroAddressValidation.json index ff1e00c60..5625ae961 100644 --- a/tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol.0.5.16.MissingZeroAddressValidation.json +++ b/tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol.0.5.16.MissingZeroAddressValidation.json @@ -4,37 +4,38 @@ "elements": [ { "type": "variable", - "name": "new_owner", + "name": "addr", "source_mapping": { - "start": 149, - "length": 17, - "filename_used": "/GENERIC_PATH", + "start": 256, + "length": 20, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10 + 14 ], - "starting_column": 27, - "ending_column": 44 + "starting_column": 22, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad1_send", "source_mapping": { - "start": 125, - "length": 108, - "filename_used": "/GENERIC_PATH", + "start": 237, + "length": 137, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -46,7 +47,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -128,44 +129,45 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad1_send(address)" } } } }, { "type": "node", - "name": "owner = new_owner", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 188, - "length": 17, - "filename_used": "/GENERIC_PATH", + "start": 298, + "length": 20, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 11 + 15 ], "starting_column": 5, - "ending_column": 22 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad1_send", "source_mapping": { - "start": 125, - "length": 108, - "filename_used": "/GENERIC_PATH", + "start": 237, + "length": 137, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -177,7 +179,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -259,38 +261,27 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad1_send(address)" } } } - } - ], - "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#11)\n", - "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L11)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L10", - "id": "ac59285350b35c2b885a6e9efe641474ae51b830fad5856f622fe264096e44cd", - "check": "missing-zero-check", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "variable", - "name": "addr", + "type": "node", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 256, + "start": 348, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14 + 16 ], - "starting_column": 22, - "ending_column": 42 + "starting_column": 5, + "ending_column": 25 }, "type_specific_fields": { "parent": { @@ -299,7 +290,7 @@ "source_mapping": { "start": 237, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -320,7 +311,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -406,41 +397,51 @@ } } } - }, + } + ], + "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#16)\n", + "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L16)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L14", + "id": "3d9ba6630d8f1357ab26196f519d74d6410a8e52994ae341d26a17d466200308", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "addr.send(msg.value)", + "type": "variable", + "name": "addr", "source_mapping": { - "start": 298, + "start": 401, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 15 + 19 ], - "starting_column": 5, - "ending_column": 25 + "starting_column": 26, + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad2_transfer", "source_mapping": { - "start": 237, - "length": 137, - "filename_used": "/GENERIC_PATH", + "start": 378, + "length": 122, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -452,7 +453,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -534,45 +535,44 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad2_transfer(address)" } } } }, { "type": "node", - "name": "addr.send(msg.value)", + "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 348, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 443, + "length": 24, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 16 + 20 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad2_transfer", "source_mapping": { - "start": 237, - "length": 137, - "filename_used": "/GENERIC_PATH", + "start": 378, + "length": 122, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -584,7 +584,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -666,16 +666,16 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad2_transfer(address)" } } } } ], - "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#16)\n", - "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L16)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L14", - "id": "3d9ba6630d8f1357ab26196f519d74d6410a8e52994ae341d26a17d466200308", + "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#20)\n", + "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L20)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L19", + "id": "654c703c39420ad30e6624b6a98892faffc5e90820e7aabfd3cd66fe8870b7b8", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -686,15 +686,15 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 401, + "start": 527, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19 + 23 ], "starting_column": 26, "ending_column": 46 @@ -702,19 +702,20 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad3_transfer", "source_mapping": { - "start": 378, - "length": 122, - "filename_used": "/GENERIC_PATH", + "start": 504, + "length": 203, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -726,7 +727,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -808,7 +809,7 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad3_transfer(address)" } } } @@ -817,15 +818,15 @@ "type": "node", "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 443, + "start": 569, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 20 + 24 ], "starting_column": 5, "ending_column": 29 @@ -833,19 +834,20 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad3_transfer", "source_mapping": { - "start": 378, - "length": 122, - "filename_used": "/GENERIC_PATH", + "start": 504, + "length": 203, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -857,7 +859,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -939,16 +941,16 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad3_transfer(address)" } } } } ], - "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#20)\n", - "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L20)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L19", - "id": "654c703c39420ad30e6624b6a98892faffc5e90820e7aabfd3cd66fe8870b7b8", + "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#24)\n", + "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L24)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L23", + "id": "98f43dd716a11685725ad4c615b07dd773bcf0f1c7710357fa1a5606084dd999", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -959,36 +961,35 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 527, + "start": 730, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23 + 28 ], - "starting_column": 26, - "ending_column": 46 + "starting_column": 22, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad4_call", "source_mapping": { - "start": 504, - "length": 203, - "filename_used": "/GENERIC_PATH", + "start": 711, + "length": 120, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -1000,7 +1001,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -1082,45 +1083,44 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad4_call(address)" } } } }, { "type": "node", - "name": "addr.transfer(msg.value)", + "name": "addr.call.value(msg.value)()", "source_mapping": { - "start": 569, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 772, + "length": 30, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 24 + 29 ], "starting_column": 5, - "ending_column": 29 + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad4_call", "source_mapping": { - "start": 504, - "length": 203, - "filename_used": "/GENERIC_PATH", + "start": 711, + "length": 120, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -1132,7 +1132,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -1214,16 +1214,16 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad4_call(address)" } } } } ], - "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#24)\n", - "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L24)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L23", - "id": "98f43dd716a11685725ad4c615b07dd773bcf0f1c7710357fa1a5606084dd999", + "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call.value(msg.value)() (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#29)\n", + "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call.value(msg.value)()](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L29)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L28", + "id": "aa90b9a8002d093f5996492eae0d441bde928e8187fc6d2790f973f6383d6095", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -1232,37 +1232,37 @@ "elements": [ { "type": "variable", - "name": "addr", + "name": "new_owner", "source_mapping": { - "start": 730, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 149, + "length": 17, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28 + 10 ], - "starting_column": 22, - "ending_column": 42 + "starting_column": 27, + "ending_column": 44 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad0_set_owner", "source_mapping": { - "start": 711, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 125, + "length": 108, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -1274,7 +1274,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -1356,44 +1356,44 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad0_set_owner(address)" } } } }, { "type": "node", - "name": "addr.call.value(msg.value)()", + "name": "owner = new_owner", "source_mapping": { - "start": 772, - "length": 30, - "filename_used": "/GENERIC_PATH", + "start": 188, + "length": 17, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 29 + 11 ], "starting_column": 5, - "ending_column": 35 + "ending_column": 22 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad0_set_owner", "source_mapping": { - "start": 711, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 125, + "length": 108, + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -1405,7 +1405,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol", @@ -1487,16 +1487,16 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad0_set_owner(address)" } } } } ], - "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call.value(msg.value)() (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#29)\n", - "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call.value(msg.value)()](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L29)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L28", - "id": "aa90b9a8002d093f5996492eae0d441bde928e8187fc6d2790f973f6383d6095", + "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#11)\n", + "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L11)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.5.16/missing_zero_address_validation.sol#L10", + "id": "ac59285350b35c2b885a6e9efe641474ae51b830fad5856f622fe264096e44cd", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json b/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json index 65f8c779f..3cba59cdc 100644 --- a/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json +++ b/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json @@ -4,37 +4,37 @@ "elements": [ { "type": "variable", - "name": "new_owner", + "name": "addr", "source_mapping": { - "start": 149, - "length": 17, + "start": 730, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10 + 28 ], - "starting_column": 27, - "ending_column": 44 + "starting_column": 22, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad4_call", "source_mapping": { - "start": 125, - "length": 108, + "start": 711, + "length": 120, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -128,44 +128,44 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad4_call(address)" } } } }, { "type": "node", - "name": "owner = new_owner", + "name": "addr.call.value(msg.value)()", "source_mapping": { - "start": 188, - "length": 17, + "start": 772, + "length": 30, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 11 + 29 ], "starting_column": 5, - "ending_column": 22 + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad4_call", "source_mapping": { - "start": 125, - "length": 108, + "start": 711, + "length": 120, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -259,16 +259,16 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad4_call(address)" } } } } ], - "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#11)\n", - "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L11)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L10", - "id": "1d2f6294ee0cfc4aae290fe04610e1df21d508008e75000ef017463482d78f95", + "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call.value(msg.value)() (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#29)\n", + "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call.value(msg.value)()](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L29)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L28", + "id": "174a4f81c4e872deda0a31c10f8136b52d60adc89ba9be1548b308a09e225763", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -277,38 +277,37 @@ "elements": [ { "type": "variable", - "name": "addr", + "name": "new_owner", "source_mapping": { - "start": 256, - "length": 20, + "start": 149, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14 + 10 ], - "starting_column": 22, - "ending_column": 42 + "starting_column": 27, + "ending_column": 44 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad0_set_owner", "source_mapping": { - "start": 237, - "length": 137, + "start": 125, + "length": 108, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -402,45 +401,44 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad0_set_owner(address)" } } } }, { "type": "node", - "name": "addr.send(msg.value)", + "name": "owner = new_owner", "source_mapping": { - "start": 298, - "length": 20, + "start": 188, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 15 + 11 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 22 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad0_set_owner", "source_mapping": { - "start": 237, - "length": 137, + "start": 125, + "length": 108, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -534,16 +532,27 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad0_set_owner(address)" } } } - }, + } + ], + "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#11)\n", + "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L11)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L10", + "id": "1d2f6294ee0cfc4aae290fe04610e1df21d508008e75000ef017463482d78f95", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "addr.send(msg.value)", + "type": "variable", + "name": "addr", "source_mapping": { - "start": 348, + "start": 256, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -551,10 +560,10 @@ "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 16 + 14 ], - "starting_column": 5, - "ending_column": 25 + "starting_column": 22, + "ending_column": 42 }, "type_specific_fields": { "parent": { @@ -670,23 +679,12 @@ } } } - } - ], - "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#16)\n", - "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L16)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L14", - "id": "21de216080f0f27154e9b3cd2fef7ead38dacc945160b619923c33344d636826", - "check": "missing-zero-check", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "variable", - "name": "addr", + "type": "node", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 401, + "start": 298, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -694,27 +692,28 @@ "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19 + 15 ], - "starting_column": 26, - "ending_column": 46 + "starting_column": 5, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad1_send", "source_mapping": { - "start": 378, - "length": 122, + "start": 237, + "length": 137, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -808,44 +807,45 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad1_send(address)" } } } }, { "type": "node", - "name": "addr.transfer(msg.value)", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 443, - "length": 24, + "start": 348, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 20 + 16 ], "starting_column": 5, - "ending_column": 29 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad1_send", "source_mapping": { - "start": 378, - "length": 122, + "start": 237, + "length": 137, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -939,16 +939,16 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad1_send(address)" } } } } ], - "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#20)\n", - "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L20)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L19", - "id": "3d8300f19d40cb2f76fcb587f94e3dfc751319b119bd83af4cd7f962b680feb8", + "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#16)\n", + "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L16)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L14", + "id": "21de216080f0f27154e9b3cd2fef7ead38dacc945160b619923c33344d636826", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -959,7 +959,7 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 527, + "start": 401, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -967,7 +967,7 @@ "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23 + 19 ], "starting_column": 26, "ending_column": 46 @@ -975,20 +975,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad2_transfer", "source_mapping": { - "start": 504, - "length": 203, + "start": 378, + "length": 122, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -1082,7 +1081,7 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad2_transfer(address)" } } } @@ -1091,7 +1090,7 @@ "type": "node", "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 569, + "start": 443, "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1099,7 +1098,7 @@ "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 24 + 20 ], "starting_column": 5, "ending_column": 29 @@ -1107,20 +1106,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad2_transfer", "source_mapping": { - "start": 504, - "length": 203, + "start": 378, + "length": 122, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -1214,16 +1212,16 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad2_transfer(address)" } } } } ], - "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#24)\n", - "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L24)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L23", - "id": "efee9ceff8491c62ed42aab7c70b0a8d9c7731af8ecb304e6deafcc64a20c6f4", + "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#20)\n", + "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L20)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L19", + "id": "3d8300f19d40cb2f76fcb587f94e3dfc751319b119bd83af4cd7f962b680feb8", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -1234,7 +1232,7 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 730, + "start": 527, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1242,27 +1240,28 @@ "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28 + 23 ], - "starting_column": 22, - "ending_column": 42 + "starting_column": 26, + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad3_transfer", "source_mapping": { - "start": 711, - "length": 120, + "start": 504, + "length": 203, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -1356,44 +1355,45 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad3_transfer(address)" } } } }, { "type": "node", - "name": "addr.call.value(msg.value)()", + "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 772, - "length": 30, + "start": 569, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 29 + 24 ], "starting_column": 5, - "ending_column": 35 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad3_transfer", "source_mapping": { - "start": 711, - "length": 120, + "start": 504, + "length": 203, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -1487,16 +1487,16 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad3_transfer(address)" } } } } ], - "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call.value(msg.value)() (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#29)\n", - "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call.value(msg.value)()](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L29)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L28", - "id": "174a4f81c4e872deda0a31c10f8136b52d60adc89ba9be1548b308a09e225763", + "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#24)\n", + "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L24)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol#L23", + "id": "efee9ceff8491c62ed42aab7c70b0a8d9c7731af8ecb304e6deafcc64a20c6f4", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol.0.7.6.MissingZeroAddressValidation.json b/tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol.0.7.6.MissingZeroAddressValidation.json index b9e14ce41..b719bf58c 100644 --- a/tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol.0.7.6.MissingZeroAddressValidation.json +++ b/tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol.0.7.6.MissingZeroAddressValidation.json @@ -4,37 +4,38 @@ "elements": [ { "type": "variable", - "name": "new_owner", + "name": "addr", "source_mapping": { - "start": 149, - "length": 17, + "start": 256, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10 + 14 ], - "starting_column": 27, - "ending_column": 44 + "starting_column": 22, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad1_send", "source_mapping": { - "start": 125, - "length": 108, + "start": 237, + "length": 137, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -128,44 +129,45 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad1_send(address)" } } } }, { "type": "node", - "name": "owner = new_owner", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 188, - "length": 17, + "start": 298, + "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 11 + 15 ], "starting_column": 5, - "ending_column": 22 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0_set_owner", + "name": "bad1_send", "source_mapping": { - "start": 125, - "length": 108, + "start": 237, + "length": 137, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12 + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -259,27 +261,16 @@ "ending_column": 2 } }, - "signature": "bad0_set_owner(address)" + "signature": "bad1_send(address)" } } } - } - ], - "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#11)\n", - "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L11)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L10", - "id": "2c8db81e6ce5a16bd76db4dd9d27d931037b6b06bacd06afa427e35f4dd22aa6", - "check": "missing-zero-check", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "variable", - "name": "addr", + "type": "node", + "name": "addr.send(msg.value)", "source_mapping": { - "start": 256, + "start": 348, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", @@ -287,10 +278,10 @@ "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14 + 16 ], - "starting_column": 22, - "ending_column": 42 + "starting_column": 5, + "ending_column": 25 }, "type_specific_fields": { "parent": { @@ -406,12 +397,23 @@ } } } - }, + } + ], + "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#16)\n", + "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L16)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L14", + "id": "1a145c4f40c60c9db09f5743139503a60b40be83dda9c57f8c47a400f1bc5b8a", + "check": "missing-zero-check", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "addr.send(msg.value)", + "type": "variable", + "name": "addr", "source_mapping": { - "start": 298, + "start": 527, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", @@ -419,28 +421,28 @@ "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 15 + 23 ], - "starting_column": 5, - "ending_column": 25 + "starting_column": 26, + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad3_transfer", "source_mapping": { - "start": 237, - "length": 137, + "start": 504, + "length": 203, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -534,45 +536,45 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad3_transfer(address)" } } } }, { "type": "node", - "name": "addr.send(msg.value)", + "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 348, - "length": 20, + "start": 569, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 16 + 24 ], "starting_column": 5, - "ending_column": 25 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1_send", + "name": "bad3_transfer", "source_mapping": { - "start": 237, - "length": 137, + "start": 504, + "length": 203, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17 + 23, + 24, + 25, + 26 ], "starting_column": 3, "ending_column": 4 @@ -666,16 +668,16 @@ "ending_column": 2 } }, - "signature": "bad1_send(address)" + "signature": "bad3_transfer(address)" } } } } ], - "description": "C.bad1_send(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#14) lacks a zero-check on :\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#15)\n\t\t- addr.send(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#16)\n", - "markdown": "[C.bad1_send(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L14) lacks a zero-check on :\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L15)\n\t\t- [addr.send(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L16)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L14", - "id": "1a145c4f40c60c9db09f5743139503a60b40be83dda9c57f8c47a400f1bc5b8a", + "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#24)\n", + "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L24)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L23", + "id": "1cc3cad32b73e31e6d6f214b9a99b19c5bd5633ddf3ab58267a5870051c22a02", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -684,37 +686,37 @@ "elements": [ { "type": "variable", - "name": "addr", + "name": "new_owner", "source_mapping": { - "start": 401, - "length": 20, + "start": 149, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19 + 10 ], - "starting_column": 26, - "ending_column": 46 + "starting_column": 27, + "ending_column": 44 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad0_set_owner", "source_mapping": { - "start": 378, - "length": 122, + "start": 125, + "length": 108, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -808,44 +810,44 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad0_set_owner(address)" } } } }, { "type": "node", - "name": "addr.transfer(msg.value)", + "name": "owner = new_owner", "source_mapping": { - "start": 443, - "length": 24, + "start": 188, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 20 + 11 ], "starting_column": 5, - "ending_column": 29 + "ending_column": 22 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2_transfer", + "name": "bad0_set_owner", "source_mapping": { - "start": 378, - "length": 122, + "start": 125, + "length": 108, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 10, + 11, + 12 ], "starting_column": 3, "ending_column": 4 @@ -939,16 +941,16 @@ "ending_column": 2 } }, - "signature": "bad2_transfer(address)" + "signature": "bad0_set_owner(address)" } } } } ], - "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#20)\n", - "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L20)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L19", - "id": "f7028c02d7b7a78ef72a33c7b976bcb047206b9c82a9acc39cdf11a5e188208f", + "description": "C.bad0_set_owner(address).new_owner (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#10) lacks a zero-check on :\n\t\t- owner = new_owner (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#11)\n", + "markdown": "[C.bad0_set_owner(address).new_owner](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L10) lacks a zero-check on :\n\t\t- [owner = new_owner](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L11)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L10", + "id": "2c8db81e6ce5a16bd76db4dd9d27d931037b6b06bacd06afa427e35f4dd22aa6", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -959,7 +961,7 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 527, + "start": 730, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", @@ -967,28 +969,27 @@ "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23 + 28 ], - "starting_column": 26, - "ending_column": 46 + "starting_column": 22, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad4_call", "source_mapping": { - "start": 504, - "length": 203, + "start": 711, + "length": 120, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -1082,45 +1083,44 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad4_call(address)" } } } }, { "type": "node", - "name": "addr.transfer(msg.value)", + "name": "addr.call{value: msg.value}()", "source_mapping": { - "start": 569, - "length": 24, + "start": 772, + "length": 30, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 24 + 29 ], "starting_column": 5, - "ending_column": 29 + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3_transfer", + "name": "bad4_call", "source_mapping": { - "start": 504, - "length": 203, + "start": 711, + "length": 120, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26 + 28, + 29, + 30 ], "starting_column": 3, "ending_column": 4 @@ -1214,16 +1214,16 @@ "ending_column": 2 } }, - "signature": "bad3_transfer(address)" + "signature": "bad4_call(address)" } } } } ], - "description": "C.bad3_transfer(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#23) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#24)\n", - "markdown": "[C.bad3_transfer(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L23) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L24)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L23", - "id": "1cc3cad32b73e31e6d6f214b9a99b19c5bd5633ddf3ab58267a5870051c22a02", + "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call{value: msg.value}() (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#29)\n", + "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call{value: msg.value}()](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L29)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L28", + "id": "64e549d94c8869ed8c827ad3ee766cb23d4e8a64bc9b19e06d593fa8942363b4", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" @@ -1234,7 +1234,7 @@ "type": "variable", "name": "addr", "source_mapping": { - "start": 730, + "start": 401, "length": 20, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", @@ -1242,27 +1242,27 @@ "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28 + 19 ], - "starting_column": 22, - "ending_column": 42 + "starting_column": 26, + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad2_transfer", "source_mapping": { - "start": 711, - "length": 120, + "start": 378, + "length": 122, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -1356,44 +1356,44 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad2_transfer(address)" } } } }, { "type": "node", - "name": "addr.call{value: msg.value}()", + "name": "addr.transfer(msg.value)", "source_mapping": { - "start": 772, - "length": 30, + "start": 443, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 29 + 20 ], "starting_column": 5, - "ending_column": 35 + "ending_column": 29 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4_call", + "name": "bad2_transfer", "source_mapping": { - "start": 711, - "length": 120, + "start": 378, + "length": 122, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol", "is_dependency": false, "lines": [ - 28, - 29, - 30 + 19, + 20, + 21 ], "starting_column": 3, "ending_column": 4 @@ -1487,16 +1487,16 @@ "ending_column": 2 } }, - "signature": "bad4_call(address)" + "signature": "bad2_transfer(address)" } } } } ], - "description": "C.bad4_call(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#28) lacks a zero-check on :\n\t\t- addr.call{value: msg.value}() (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#29)\n", - "markdown": "[C.bad4_call(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L28) lacks a zero-check on :\n\t\t- [addr.call{value: msg.value}()](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L29)\n", - "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L28", - "id": "64e549d94c8869ed8c827ad3ee766cb23d4e8a64bc9b19e06d593fa8942363b4", + "description": "C.bad2_transfer(address).addr (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#19) lacks a zero-check on :\n\t\t- addr.transfer(msg.value) (tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#20)\n", + "markdown": "[C.bad2_transfer(address).addr](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L19) lacks a zero-check on :\n\t\t- [addr.transfer(msg.value)](tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L20)\n", + "first_markdown_element": "tests/detectors/missing-zero-check/0.7.6/missing_zero_address_validation.sol#L19", + "id": "f7028c02d7b7a78ef72a33c7b976bcb047206b9c82a9acc39cdf11a5e188208f", "check": "missing-zero-check", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/naming-convention/0.4.25/naming_convention.sol.0.4.25.NamingConvention.json b/tests/detectors/naming-convention/0.4.25/naming_convention.sol.0.4.25.NamingConvention.json index b627e1e59..ccf0c57d3 100644 --- a/tests/detectors/naming-convention/0.4.25/naming_convention.sol.0.4.25.NamingConvention.json +++ b/tests/detectors/naming-convention/0.4.25/naming_convention.sol.0.4.25.NamingConvention.json @@ -1,83 +1,5 @@ [ [ - { - "elements": [ - { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - }, - "additional_fields": { - "target": "contract", - "convention": "CapWords" - } - } - ], - "description": "Contract naming (tests/detectors/naming-convention/0.4.25/naming_convention.sol#3-48) is not in CapWords\n", - "markdown": "Contract [naming](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L3-L48) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L3-L48", - "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, { "elements": [ { @@ -86,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -106,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -181,21 +103,21 @@ { "elements": [ { - "type": "event", - "name": "event_", + "type": "variable", + "name": "Var_One", "source_mapping": { - "start": 335, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 185, + "length": 16, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 23 + 11 ], "starting_column": 5, - "ending_column": 24 + "ending_column": 21 }, "type_specific_fields": { "parent": { @@ -204,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -260,19 +182,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "event_(uint256)" + } }, "additional_fields": { - "target": "event", - "convention": "CapWords" + "target": "variable", + "convention": "mixedCase" } } ], - "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.4.25/naming_convention.sol#23) is not in CapWords\n", - "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L23) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L23", - "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.4.25/naming_convention.sol#11) is not in mixedCase\n", + "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L11) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L11", + "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -280,24 +201,21 @@ { "elements": [ { - "type": "function", - "name": "GetOne", + "type": "variable", + "name": "MY_other_CONSTANT", "source_mapping": { - "start": 440, - "length": 75, - "filename_used": "/GENERIC_PATH", + "start": 143, + "length": 35, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33 + 9 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -306,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -362,19 +280,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "GetOne()" + } }, "additional_fields": { - "target": "function", - "convention": "mixedCase" + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" } } ], - "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.4.25/naming_convention.sol#30-33) is not in mixedCase\n", - "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L30-L33) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L30-L33", - "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", + "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.4.25/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L9", + "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -382,152 +299,108 @@ { "elements": [ { - "type": "variable", - "name": "Number2", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 551, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 35 + 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, + 48 ], - "starting_column": 35, - "ending_column": 47 + "starting_column": 1, + "ending_column": 2 + }, + "additional_fields": { + "target": "contract", + "convention": "CapWords" + } + } + ], + "description": "Contract naming (tests/detectors/naming-convention/0.4.25/naming_convention.sol#3-48) is not in CapWords\n", + "markdown": "Contract [naming](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L3-L48) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L3-L48", + "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "enum", + "name": "numbers", + "source_mapping": { + "start": 79, + "length": 23, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 6 + ], + "starting_column": 5, + "ending_column": 28 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "setInt", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 521, - "length": 63, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "is_dependency": false, - "lines": [ - 35, - 36, - 37, - 38 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setInt(uint256,uint256)" - } - } - }, - "additional_fields": { - "target": "parameter", - "convention": "mixedCase" - } - } - ], - "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.4.25/naming_convention.sol#35) is not in mixedCase\n", - "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L35) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L35", - "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "MY_other_CONSTANT", - "source_mapping": { - "start": 143, - "length": 35, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "is_dependency": false, - "lines": [ - 9 - ], - "starting_column": 5, - "ending_column": 40 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -586,15 +459,15 @@ } }, "additional_fields": { - "target": "variable_constant", - "convention": "UPPER_CASE_WITH_UNDERSCORES" + "target": "enum", + "convention": "CapWords" } } ], - "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.4.25/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L9", - "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", + "description": "Enum naming.numbers (tests/detectors/naming-convention/0.4.25/naming_convention.sol#6) is not in CapWords\n", + "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L6) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L6", + "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -603,20 +476,176 @@ "elements": [ { "type": "variable", - "name": "Var_One", + "name": "_used", "source_mapping": { - "start": 185, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 794, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 11 + 59 + ], + "starting_column": 33, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "test", + "source_mapping": { + "start": 766, + "length": 84, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 59, + 60 + ], + "starting_column": 5, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "test(uint256,uint256)" + } + } + }, + "additional_fields": { + "target": "parameter", + "convention": "mixedCase" + } + } + ], + "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.4.25/naming_convention.sol#59) is not in mixedCase\n", + "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L59) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L59", + "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_myPublicVar", + "source_mapping": { + "start": 741, + "length": 17, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 56 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 22 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable", + "convention": "mixedCase" + } + } + ], + "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.4.25/naming_convention.sol#56) is not in mixedCase\n", + "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L56) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L56", + "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "event", + "name": "event_", + "source_mapping": { + "start": 335, + "length": 19, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 23 + ], + "starting_column": 5, + "ending_column": 24 }, "type_specific_fields": { "parent": { @@ -625,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -681,18 +710,86 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "event_(uint256)" + }, + "additional_fields": { + "target": "event", + "convention": "CapWords" + } + } + ], + "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.4.25/naming_convention.sol#23) is not in CapWords\n", + "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L23) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L23", + "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "l", + "source_mapping": { + "start": 900, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 67 + ], + "starting_column": 5, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } } }, "additional_fields": { "target": "variable", - "convention": "mixedCase" + "convention": "l_O_I_should_not_be_used" } } ], - "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.4.25/naming_convention.sol#11) is not in mixedCase\n", - "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L11) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L11", - "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", + "description": "Variable T.l (tests/detectors/naming-convention/0.4.25/naming_convention.sol#67) used l, O, I, which should not be used\n", + "markdown": "Variable [T.l](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L67) used l, O, I, which should not be used\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L67", + "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -700,21 +797,23 @@ { "elements": [ { - "type": "enum", - "name": "numbers", + "type": "function", + "name": "CantDo", "source_mapping": { - "start": 79, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 591, + "length": 36, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 6 + 41, + 42, + 43 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -723,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -779,18 +878,19 @@ "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "CantDo()" }, "additional_fields": { - "target": "enum", - "convention": "CapWords" + "target": "modifier", + "convention": "mixedCase" } } ], - "description": "Enum naming.numbers (tests/detectors/naming-convention/0.4.25/naming_convention.sol#6) is not in CapWords\n", - "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L6) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L6", - "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", + "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.4.25/naming_convention.sol#41-43) is not in mixedCase\n", + "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L41-L43) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L41-L43", + "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -799,19 +899,20 @@ "elements": [ { "type": "function", - "name": "CantDo", + "name": "GetOne", "source_mapping": { - "start": 591, - "length": 36, - "filename_used": "/GENERIC_PATH", + "start": 440, + "length": 75, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 41, - 42, - 43 + 30, + 31, + 32, + 33 ], "starting_column": 5, "ending_column": 6 @@ -823,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", @@ -880,18 +981,18 @@ "ending_column": 2 } }, - "signature": "CantDo()" + "signature": "GetOne()" }, "additional_fields": { - "target": "modifier", + "target": "function", "convention": "mixedCase" } } ], - "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.4.25/naming_convention.sol#41-43) is not in mixedCase\n", - "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L41-L43) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L41-L43", - "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", + "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.4.25/naming_convention.sol#30-33) is not in mixedCase\n", + "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L30-L33) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L30-L33", + "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -900,74 +1001,107 @@ "elements": [ { "type": "variable", - "name": "_used", + "name": "Number2", "source_mapping": { - "start": 794, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 551, + "length": 12, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 59 + 35 ], - "starting_column": 33, - "ending_column": 43 + "starting_column": 35, + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "setInt", "source_mapping": { - "start": 766, - "length": 84, - "filename_used": "/GENERIC_PATH", + "start": 521, + "length": 63, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 59, - 60 + 35, + 36, + 37, + 38 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "T", + "name": "naming", "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", "is_dependency": false, "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 + 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, + 48 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "test(uint256,uint256)" + "signature": "setInt(uint256,uint256)" } } }, @@ -977,144 +1111,10 @@ } } ], - "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.4.25/naming_convention.sol#59) is not in mixedCase\n", - "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L59) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L59", - "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "_myPublicVar", - "source_mapping": { - "start": 741, - "length": 17, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "is_dependency": false, - "lines": [ - 56 - ], - "starting_column": 5, - "ending_column": 22 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "mixedCase" - } - } - ], - "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.4.25/naming_convention.sol#56) is not in mixedCase\n", - "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L56) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L56", - "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "l", - "source_mapping": { - "start": 900, - "length": 10, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "is_dependency": false, - "lines": [ - 67 - ], - "starting_column": 5, - "ending_column": 15 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.4.25/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "l_O_I_should_not_be_used" - } - } - ], - "description": "Variable T.l (tests/detectors/naming-convention/0.4.25/naming_convention.sol#67) used l, O, I, which should not be used\n", - "markdown": "Variable [T.l](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L67) used l, O, I, which should not be used\n", - "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L67", - "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", + "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.4.25/naming_convention.sol#35) is not in mixedCase\n", + "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.4.25/naming_convention.sol#L35) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.4.25/naming_convention.sol#L35", + "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", "check": "naming-convention", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json b/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json index 358b35cc0..09cd87912 100644 --- a/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json +++ b/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json @@ -1,83 +1,5 @@ [ [ - { - "elements": [ - { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - }, - "additional_fields": { - "target": "contract", - "convention": "CapWords" - } - } - ], - "description": "Contract naming (tests/detectors/naming-convention/0.5.16/naming_convention.sol#3-48) is not in CapWords\n", - "markdown": "Contract [naming](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L3-L48) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L3-L48", - "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, { "elements": [ { @@ -86,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -106,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -181,21 +103,21 @@ { "elements": [ { - "type": "event", - "name": "event_", + "type": "variable", + "name": "Var_One", "source_mapping": { - "start": 335, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 185, + "length": 16, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 23 + 11 ], "starting_column": 5, - "ending_column": 24 + "ending_column": 21 }, "type_specific_fields": { "parent": { @@ -204,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -260,19 +182,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "event_(uint256)" + } }, "additional_fields": { - "target": "event", - "convention": "CapWords" + "target": "variable", + "convention": "mixedCase" } } ], - "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.5.16/naming_convention.sol#23) is not in CapWords\n", - "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L23) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L23", - "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.5.16/naming_convention.sol#11) is not in mixedCase\n", + "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L11) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L11", + "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -280,24 +201,21 @@ { "elements": [ { - "type": "function", - "name": "GetOne", + "type": "variable", + "name": "MY_other_CONSTANT", "source_mapping": { - "start": 440, - "length": 75, - "filename_used": "/GENERIC_PATH", + "start": 143, + "length": 35, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33 + 9 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -306,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -362,19 +280,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "GetOne()" + } }, "additional_fields": { - "target": "function", - "convention": "mixedCase" + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" } } ], - "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.5.16/naming_convention.sol#30-33) is not in mixedCase\n", - "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L30-L33) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L30-L33", - "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", + "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.5.16/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L9", + "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -382,152 +299,108 @@ { "elements": [ { - "type": "variable", - "name": "Number2", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 551, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 35 + 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, + 48 ], - "starting_column": 35, - "ending_column": 47 + "starting_column": 1, + "ending_column": 2 + }, + "additional_fields": { + "target": "contract", + "convention": "CapWords" + } + } + ], + "description": "Contract naming (tests/detectors/naming-convention/0.5.16/naming_convention.sol#3-48) is not in CapWords\n", + "markdown": "Contract [naming](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L3-L48) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L3-L48", + "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "enum", + "name": "numbers", + "source_mapping": { + "start": 79, + "length": 23, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 6 + ], + "starting_column": 5, + "ending_column": 28 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "setInt", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 521, - "length": 63, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "is_dependency": false, - "lines": [ - 35, - 36, - 37, - 38 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setInt(uint256,uint256)" - } - } - }, - "additional_fields": { - "target": "parameter", - "convention": "mixedCase" - } - } - ], - "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.5.16/naming_convention.sol#35) is not in mixedCase\n", - "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L35) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L35", - "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "MY_other_CONSTANT", - "source_mapping": { - "start": 143, - "length": 35, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "is_dependency": false, - "lines": [ - 9 - ], - "starting_column": 5, - "ending_column": 40 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -586,15 +459,15 @@ } }, "additional_fields": { - "target": "variable_constant", - "convention": "UPPER_CASE_WITH_UNDERSCORES" + "target": "enum", + "convention": "CapWords" } } ], - "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.5.16/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L9", - "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", + "description": "Enum naming.numbers (tests/detectors/naming-convention/0.5.16/naming_convention.sol#6) is not in CapWords\n", + "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L6) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L6", + "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -603,20 +476,176 @@ "elements": [ { "type": "variable", - "name": "Var_One", + "name": "_used", "source_mapping": { - "start": 185, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 794, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 11 + 59 + ], + "starting_column": 33, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "test", + "source_mapping": { + "start": 766, + "length": 84, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 59, + 60 + ], + "starting_column": 5, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "test(uint256,uint256)" + } + } + }, + "additional_fields": { + "target": "parameter", + "convention": "mixedCase" + } + } + ], + "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.5.16/naming_convention.sol#59) is not in mixedCase\n", + "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L59) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L59", + "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_myPublicVar", + "source_mapping": { + "start": 741, + "length": 17, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 56 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 22 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable", + "convention": "mixedCase" + } + } + ], + "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.5.16/naming_convention.sol#56) is not in mixedCase\n", + "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L56) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L56", + "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "event", + "name": "event_", + "source_mapping": { + "start": 335, + "length": 19, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 23 + ], + "starting_column": 5, + "ending_column": 24 }, "type_specific_fields": { "parent": { @@ -625,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -681,18 +710,86 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "event_(uint256)" + }, + "additional_fields": { + "target": "event", + "convention": "CapWords" + } + } + ], + "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.5.16/naming_convention.sol#23) is not in CapWords\n", + "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L23) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L23", + "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "l", + "source_mapping": { + "start": 900, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 67 + ], + "starting_column": 5, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } } }, "additional_fields": { "target": "variable", - "convention": "mixedCase" + "convention": "l_O_I_should_not_be_used" } } ], - "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.5.16/naming_convention.sol#11) is not in mixedCase\n", - "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L11) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L11", - "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", + "description": "Variable T.l (tests/detectors/naming-convention/0.5.16/naming_convention.sol#67) used l, O, I, which should not be used\n", + "markdown": "Variable [T.l](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L67) used l, O, I, which should not be used\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L67", + "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -700,21 +797,23 @@ { "elements": [ { - "type": "enum", - "name": "numbers", + "type": "function", + "name": "CantDo", "source_mapping": { - "start": 79, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 591, + "length": 36, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 6 + 41, + 42, + 43 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -723,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -779,18 +878,19 @@ "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "CantDo()" }, "additional_fields": { - "target": "enum", - "convention": "CapWords" + "target": "modifier", + "convention": "mixedCase" } } ], - "description": "Enum naming.numbers (tests/detectors/naming-convention/0.5.16/naming_convention.sol#6) is not in CapWords\n", - "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L6) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L6", - "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", + "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.5.16/naming_convention.sol#41-43) is not in mixedCase\n", + "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L41-L43) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L41-L43", + "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -799,19 +899,20 @@ "elements": [ { "type": "function", - "name": "CantDo", + "name": "GetOne", "source_mapping": { - "start": 591, - "length": 36, - "filename_used": "/GENERIC_PATH", + "start": 440, + "length": 75, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 41, - 42, - 43 + 30, + 31, + 32, + 33 ], "starting_column": 5, "ending_column": 6 @@ -823,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -880,18 +981,18 @@ "ending_column": 2 } }, - "signature": "CantDo()" + "signature": "GetOne()" }, "additional_fields": { - "target": "modifier", + "target": "function", "convention": "mixedCase" } } ], - "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.5.16/naming_convention.sol#41-43) is not in mixedCase\n", - "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L41-L43) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L41-L43", - "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", + "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.5.16/naming_convention.sol#30-33) is not in mixedCase\n", + "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L30-L33) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L30-L33", + "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -900,74 +1001,107 @@ "elements": [ { "type": "variable", - "name": "_used", + "name": "Number2", "source_mapping": { - "start": 794, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 551, + "length": 12, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 59 + 35 ], - "starting_column": 33, - "ending_column": 43 + "starting_column": 35, + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "setInt", "source_mapping": { - "start": 766, - "length": 84, - "filename_used": "/GENERIC_PATH", + "start": 521, + "length": 63, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 59, - 60 + 35, + 36, + 37, + 38 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "T", + "name": "naming", "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "is_dependency": false, "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 + 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, + 48 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "test(uint256,uint256)" + "signature": "setInt(uint256,uint256)" } } }, @@ -977,144 +1111,10 @@ } } ], - "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.5.16/naming_convention.sol#59) is not in mixedCase\n", - "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L59) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L59", - "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "_myPublicVar", - "source_mapping": { - "start": 741, - "length": 17, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "is_dependency": false, - "lines": [ - 56 - ], - "starting_column": 5, - "ending_column": 22 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "mixedCase" - } - } - ], - "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.5.16/naming_convention.sol#56) is not in mixedCase\n", - "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L56) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L56", - "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "l", - "source_mapping": { - "start": 900, - "length": 10, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "is_dependency": false, - "lines": [ - 67 - ], - "starting_column": 5, - "ending_column": 15 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "l_O_I_should_not_be_used" - } - } - ], - "description": "Variable T.l (tests/detectors/naming-convention/0.5.16/naming_convention.sol#67) used l, O, I, which should not be used\n", - "markdown": "Variable [T.l](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L67) used l, O, I, which should not be used\n", - "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L67", - "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", + "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.5.16/naming_convention.sol#35) is not in mixedCase\n", + "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.5.16/naming_convention.sol#L35) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.5.16/naming_convention.sol#L35", + "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", "check": "naming-convention", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json b/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json index 15e9e8ad0..01a96650a 100644 --- a/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json +++ b/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json @@ -1,83 +1,5 @@ [ [ - { - "elements": [ - { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - }, - "additional_fields": { - "target": "contract", - "convention": "CapWords" - } - } - ], - "description": "Contract naming (tests/detectors/naming-convention/0.6.11/naming_convention.sol#3-48) is not in CapWords\n", - "markdown": "Contract [naming](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L3-L48) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L3-L48", - "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, { "elements": [ { @@ -86,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -106,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -181,21 +103,21 @@ { "elements": [ { - "type": "event", - "name": "event_", + "type": "variable", + "name": "Var_One", "source_mapping": { - "start": 335, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 185, + "length": 16, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 23 + 11 ], "starting_column": 5, - "ending_column": 24 + "ending_column": 21 }, "type_specific_fields": { "parent": { @@ -204,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -260,19 +182,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "event_(uint256)" + } }, "additional_fields": { - "target": "event", - "convention": "CapWords" + "target": "variable", + "convention": "mixedCase" } } ], - "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.6.11/naming_convention.sol#23) is not in CapWords\n", - "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L23) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L23", - "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.6.11/naming_convention.sol#11) is not in mixedCase\n", + "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L11) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L11", + "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -280,24 +201,21 @@ { "elements": [ { - "type": "function", - "name": "GetOne", + "type": "variable", + "name": "MY_other_CONSTANT", "source_mapping": { - "start": 440, - "length": 75, - "filename_used": "/GENERIC_PATH", + "start": 143, + "length": 35, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33 + 9 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -306,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -362,19 +280,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "GetOne()" + } }, "additional_fields": { - "target": "function", - "convention": "mixedCase" + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" } } ], - "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.6.11/naming_convention.sol#30-33) is not in mixedCase\n", - "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L30-L33) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L30-L33", - "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", + "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.6.11/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L9", + "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -382,152 +299,108 @@ { "elements": [ { - "type": "variable", - "name": "Number2", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 551, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 35 + 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, + 48 ], - "starting_column": 35, - "ending_column": 47 + "starting_column": 1, + "ending_column": 2 + }, + "additional_fields": { + "target": "contract", + "convention": "CapWords" + } + } + ], + "description": "Contract naming (tests/detectors/naming-convention/0.6.11/naming_convention.sol#3-48) is not in CapWords\n", + "markdown": "Contract [naming](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L3-L48) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L3-L48", + "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "enum", + "name": "numbers", + "source_mapping": { + "start": 79, + "length": 23, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 6 + ], + "starting_column": 5, + "ending_column": 28 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "setInt", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 521, - "length": 63, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "is_dependency": false, - "lines": [ - 35, - 36, - 37, - 38 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setInt(uint256,uint256)" - } - } - }, - "additional_fields": { - "target": "parameter", - "convention": "mixedCase" - } - } - ], - "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.6.11/naming_convention.sol#35) is not in mixedCase\n", - "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L35) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L35", - "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "MY_other_CONSTANT", - "source_mapping": { - "start": 143, - "length": 35, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "is_dependency": false, - "lines": [ - 9 - ], - "starting_column": 5, - "ending_column": 40 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -586,15 +459,15 @@ } }, "additional_fields": { - "target": "variable_constant", - "convention": "UPPER_CASE_WITH_UNDERSCORES" + "target": "enum", + "convention": "CapWords" } } ], - "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.6.11/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L9", - "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", + "description": "Enum naming.numbers (tests/detectors/naming-convention/0.6.11/naming_convention.sol#6) is not in CapWords\n", + "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L6) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L6", + "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -603,20 +476,176 @@ "elements": [ { "type": "variable", - "name": "Var_One", + "name": "_used", "source_mapping": { - "start": 185, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 794, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 11 + 59 + ], + "starting_column": 33, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "test", + "source_mapping": { + "start": 766, + "length": 84, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 59, + 60 + ], + "starting_column": 5, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "test(uint256,uint256)" + } + } + }, + "additional_fields": { + "target": "parameter", + "convention": "mixedCase" + } + } + ], + "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.6.11/naming_convention.sol#59) is not in mixedCase\n", + "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L59) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L59", + "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_myPublicVar", + "source_mapping": { + "start": 741, + "length": 17, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 56 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 22 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable", + "convention": "mixedCase" + } + } + ], + "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.6.11/naming_convention.sol#56) is not in mixedCase\n", + "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L56) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L56", + "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "event", + "name": "event_", + "source_mapping": { + "start": 335, + "length": 19, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 23 + ], + "starting_column": 5, + "ending_column": 24 }, "type_specific_fields": { "parent": { @@ -625,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -681,18 +710,86 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "event_(uint256)" + }, + "additional_fields": { + "target": "event", + "convention": "CapWords" + } + } + ], + "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.6.11/naming_convention.sol#23) is not in CapWords\n", + "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L23) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L23", + "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "l", + "source_mapping": { + "start": 900, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 67 + ], + "starting_column": 5, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } } }, "additional_fields": { "target": "variable", - "convention": "mixedCase" + "convention": "l_O_I_should_not_be_used" } } ], - "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.6.11/naming_convention.sol#11) is not in mixedCase\n", - "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L11) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L11", - "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", + "description": "Variable T.l (tests/detectors/naming-convention/0.6.11/naming_convention.sol#67) used l, O, I, which should not be used\n", + "markdown": "Variable [T.l](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L67) used l, O, I, which should not be used\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L67", + "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -700,21 +797,23 @@ { "elements": [ { - "type": "enum", - "name": "numbers", + "type": "function", + "name": "CantDo", "source_mapping": { - "start": 79, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 591, + "length": 36, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 6 + 41, + 42, + 43 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -723,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -779,18 +878,19 @@ "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "CantDo()" }, "additional_fields": { - "target": "enum", - "convention": "CapWords" + "target": "modifier", + "convention": "mixedCase" } } ], - "description": "Enum naming.numbers (tests/detectors/naming-convention/0.6.11/naming_convention.sol#6) is not in CapWords\n", - "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L6) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L6", - "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", + "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.6.11/naming_convention.sol#41-43) is not in mixedCase\n", + "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L41-L43) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L41-L43", + "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -799,19 +899,20 @@ "elements": [ { "type": "function", - "name": "CantDo", + "name": "GetOne", "source_mapping": { - "start": 591, - "length": 36, - "filename_used": "/GENERIC_PATH", + "start": 440, + "length": 75, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 41, - 42, - 43 + 30, + 31, + 32, + 33 ], "starting_column": 5, "ending_column": 6 @@ -823,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -880,18 +981,18 @@ "ending_column": 2 } }, - "signature": "CantDo()" + "signature": "GetOne()" }, "additional_fields": { - "target": "modifier", + "target": "function", "convention": "mixedCase" } } ], - "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.6.11/naming_convention.sol#41-43) is not in mixedCase\n", - "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L41-L43) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L41-L43", - "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", + "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.6.11/naming_convention.sol#30-33) is not in mixedCase\n", + "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L30-L33) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L30-L33", + "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -900,74 +1001,107 @@ "elements": [ { "type": "variable", - "name": "_used", + "name": "Number2", "source_mapping": { - "start": 794, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 551, + "length": 12, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 59 + 35 ], - "starting_column": 33, - "ending_column": 43 + "starting_column": 35, + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "setInt", "source_mapping": { - "start": 766, - "length": 84, - "filename_used": "/GENERIC_PATH", + "start": 521, + "length": 63, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 59, - 60 + 35, + 36, + 37, + 38 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "T", + "name": "naming", "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "is_dependency": false, "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 + 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, + 48 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "test(uint256,uint256)" + "signature": "setInt(uint256,uint256)" } } }, @@ -977,144 +1111,10 @@ } } ], - "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.6.11/naming_convention.sol#59) is not in mixedCase\n", - "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L59) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L59", - "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "_myPublicVar", - "source_mapping": { - "start": 741, - "length": 17, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "is_dependency": false, - "lines": [ - 56 - ], - "starting_column": 5, - "ending_column": 22 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "mixedCase" - } - } - ], - "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.6.11/naming_convention.sol#56) is not in mixedCase\n", - "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L56) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L56", - "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "l", - "source_mapping": { - "start": 900, - "length": 10, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "is_dependency": false, - "lines": [ - 67 - ], - "starting_column": 5, - "ending_column": 15 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "l_O_I_should_not_be_used" - } - } - ], - "description": "Variable T.l (tests/detectors/naming-convention/0.6.11/naming_convention.sol#67) used l, O, I, which should not be used\n", - "markdown": "Variable [T.l](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L67) used l, O, I, which should not be used\n", - "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L67", - "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", + "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.6.11/naming_convention.sol#35) is not in mixedCase\n", + "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.6.11/naming_convention.sol#L35) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.6.11/naming_convention.sol#L35", + "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", "check": "naming-convention", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json b/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json index 8a9e4568d..54016136d 100644 --- a/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json +++ b/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json @@ -1,83 +1,5 @@ [ [ - { - "elements": [ - { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - }, - "additional_fields": { - "target": "contract", - "convention": "CapWords" - } - } - ], - "description": "Contract naming (tests/detectors/naming-convention/0.7.6/naming_convention.sol#3-48) is not in CapWords\n", - "markdown": "Contract [naming](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L3-L48) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L3-L48", - "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, { "elements": [ { @@ -86,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -106,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -181,21 +103,21 @@ { "elements": [ { - "type": "event", - "name": "event_", + "type": "variable", + "name": "Var_One", "source_mapping": { - "start": 335, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 185, + "length": 16, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 23 + 11 ], "starting_column": 5, - "ending_column": 24 + "ending_column": 21 }, "type_specific_fields": { "parent": { @@ -204,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -260,19 +182,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "event_(uint256)" + } }, "additional_fields": { - "target": "event", - "convention": "CapWords" + "target": "variable", + "convention": "mixedCase" } } ], - "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.7.6/naming_convention.sol#23) is not in CapWords\n", - "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L23) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L23", - "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.7.6/naming_convention.sol#11) is not in mixedCase\n", + "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L11) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L11", + "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -280,24 +201,21 @@ { "elements": [ { - "type": "function", - "name": "GetOne", + "type": "variable", + "name": "MY_other_CONSTANT", "source_mapping": { - "start": 440, - "length": 75, - "filename_used": "/GENERIC_PATH", + "start": 143, + "length": 35, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 30, - 31, - 32, - 33 + 9 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 40 }, "type_specific_fields": { "parent": { @@ -306,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -362,19 +280,18 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "GetOne()" + } }, "additional_fields": { - "target": "function", - "convention": "mixedCase" + "target": "variable_constant", + "convention": "UPPER_CASE_WITH_UNDERSCORES" } } ], - "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.7.6/naming_convention.sol#30-33) is not in mixedCase\n", - "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L30-L33) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L30-L33", - "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", + "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.7.6/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L9", + "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -382,152 +299,108 @@ { "elements": [ { - "type": "variable", - "name": "Number2", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 551, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 35 + 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, + 48 ], - "starting_column": 35, - "ending_column": 47 + "starting_column": 1, + "ending_column": 2 + }, + "additional_fields": { + "target": "contract", + "convention": "CapWords" + } + } + ], + "description": "Contract naming (tests/detectors/naming-convention/0.7.6/naming_convention.sol#3-48) is not in CapWords\n", + "markdown": "Contract [naming](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L3-L48) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L3-L48", + "id": "7247d550fb327e3aeb21c82714137e5b45a7e9eeaa6a1bc878102c8081033f85", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "enum", + "name": "numbers", + "source_mapping": { + "start": 79, + "length": 23, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 6 + ], + "starting_column": 5, + "ending_column": 28 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "setInt", + "type": "contract", + "name": "naming", "source_mapping": { - "start": 521, - "length": 63, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "is_dependency": false, - "lines": [ - 35, - 36, - 37, - 38 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.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, - 47, - 48 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "setInt(uint256,uint256)" - } - } - }, - "additional_fields": { - "target": "parameter", - "convention": "mixedCase" - } - } - ], - "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.7.6/naming_convention.sol#35) is not in mixedCase\n", - "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L35) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L35", - "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "MY_other_CONSTANT", - "source_mapping": { - "start": 143, - "length": 35, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "is_dependency": false, - "lines": [ - 9 - ], - "starting_column": 5, - "ending_column": 40 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "naming", - "source_mapping": { - "start": 28, - "length": 642, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -586,15 +459,15 @@ } }, "additional_fields": { - "target": "variable_constant", - "convention": "UPPER_CASE_WITH_UNDERSCORES" + "target": "enum", + "convention": "CapWords" } } ], - "description": "Constant naming.MY_other_CONSTANT (tests/detectors/naming-convention/0.7.6/naming_convention.sol#9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "markdown": "Constant [naming.MY_other_CONSTANT](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L9) is not in UPPER_CASE_WITH_UNDERSCORES\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L9", - "id": "596c2e8064f8f2df55cd5c878eb59c0a74ac7f20719c420d8af307f2431a1a90", + "description": "Enum naming.numbers (tests/detectors/naming-convention/0.7.6/naming_convention.sol#6) is not in CapWords\n", + "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L6) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L6", + "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -603,20 +476,176 @@ "elements": [ { "type": "variable", - "name": "Var_One", + "name": "_used", "source_mapping": { - "start": 185, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 794, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 11 + 59 + ], + "starting_column": 33, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "test", + "source_mapping": { + "start": 766, + "length": 84, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 59, + 60 + ], + "starting_column": 5, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "test(uint256,uint256)" + } + } + }, + "additional_fields": { + "target": "parameter", + "convention": "mixedCase" + } + } + ], + "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.7.6/naming_convention.sol#59) is not in mixedCase\n", + "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L59) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L59", + "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "_myPublicVar", + "source_mapping": { + "start": 741, + "length": 17, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 56 ], "starting_column": 5, - "ending_column": 21 + "ending_column": 22 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } + } + }, + "additional_fields": { + "target": "variable", + "convention": "mixedCase" + } + } + ], + "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.7.6/naming_convention.sol#56) is not in mixedCase\n", + "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L56) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L56", + "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "event", + "name": "event_", + "source_mapping": { + "start": 335, + "length": 19, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 23 + ], + "starting_column": 5, + "ending_column": 24 }, "type_specific_fields": { "parent": { @@ -625,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -681,18 +710,86 @@ "starting_column": 1, "ending_column": 2 } + }, + "signature": "event_(uint256)" + }, + "additional_fields": { + "target": "event", + "convention": "CapWords" + } + } + ], + "description": "Event namingevent_(uint256) (tests/detectors/naming-convention/0.7.6/naming_convention.sol#23) is not in CapWords\n", + "markdown": "Event [namingevent_(uint256)](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L23) is not in CapWords\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L23", + "id": "978ecf4a2c8b96d947e60f6601cf60d0e25e07ebe80ebbc37a7e7f279afd1405", + "check": "naming-convention", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "l", + "source_mapping": { + "start": 900, + "length": 10, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 67 + ], + "starting_column": 5, + "ending_column": 15 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "source_mapping": { + "start": 692, + "length": 221, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "is_dependency": false, + "lines": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68 + ], + "starting_column": 1, + "ending_column": 2 + } } }, "additional_fields": { "target": "variable", - "convention": "mixedCase" + "convention": "l_O_I_should_not_be_used" } } ], - "description": "Variable naming.Var_One (tests/detectors/naming-convention/0.7.6/naming_convention.sol#11) is not in mixedCase\n", - "markdown": "Variable [naming.Var_One](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L11) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L11", - "id": "34b7c817201b3f3086fc3541f140898d9e9aabe999b1c0a6ef8639ec04351f26", + "description": "Variable T.l (tests/detectors/naming-convention/0.7.6/naming_convention.sol#67) used l, O, I, which should not be used\n", + "markdown": "Variable [T.l](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L67) used l, O, I, which should not be used\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L67", + "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -700,21 +797,23 @@ { "elements": [ { - "type": "enum", - "name": "numbers", + "type": "function", + "name": "CantDo", "source_mapping": { - "start": 79, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 591, + "length": 36, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 6 + 41, + 42, + 43 ], "starting_column": 5, - "ending_column": 28 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -723,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -779,18 +878,19 @@ "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "CantDo()" }, "additional_fields": { - "target": "enum", - "convention": "CapWords" + "target": "modifier", + "convention": "mixedCase" } } ], - "description": "Enum naming.numbers (tests/detectors/naming-convention/0.7.6/naming_convention.sol#6) is not in CapWords\n", - "markdown": "Enum [naming.numbers](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L6) is not in CapWords\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L6", - "id": "7c87b076ea2865060182cf11d155caadb1dcea415ccce0ca8563a74a01611fc2", + "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.7.6/naming_convention.sol#41-43) is not in mixedCase\n", + "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L41-L43) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L41-L43", + "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -799,19 +899,20 @@ "elements": [ { "type": "function", - "name": "CantDo", + "name": "GetOne", "source_mapping": { - "start": 591, - "length": 36, - "filename_used": "/GENERIC_PATH", + "start": 440, + "length": 75, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 41, - 42, - 43 + 30, + 31, + 32, + 33 ], "starting_column": 5, "ending_column": 6 @@ -823,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -880,18 +981,18 @@ "ending_column": 2 } }, - "signature": "CantDo()" + "signature": "GetOne()" }, "additional_fields": { - "target": "modifier", + "target": "function", "convention": "mixedCase" } } ], - "description": "Modifier naming.CantDo() (tests/detectors/naming-convention/0.7.6/naming_convention.sol#41-43) is not in mixedCase\n", - "markdown": "Modifier [naming.CantDo()](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L41-L43) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L41-L43", - "id": "b8a754a01bd47127f00032cdedd0ade3e27e6543631d8f5bc9e44365ab732895", + "description": "Function naming.GetOne() (tests/detectors/naming-convention/0.7.6/naming_convention.sol#30-33) is not in mixedCase\n", + "markdown": "Function [naming.GetOne()](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L30-L33) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L30-L33", + "id": "bf6f97d6a82b84284efdade52d01bd6112007426e2e88d1568190d63c5c4a049", "check": "naming-convention", "impact": "Informational", "confidence": "High" @@ -900,74 +1001,107 @@ "elements": [ { "type": "variable", - "name": "_used", + "name": "Number2", "source_mapping": { - "start": 794, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 551, + "length": 12, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 59 + 35 ], - "starting_column": 33, - "ending_column": 43 + "starting_column": 35, + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "setInt", "source_mapping": { - "start": 766, - "length": 84, - "filename_used": "/GENERIC_PATH", + "start": 521, + "length": 63, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 59, - 60 + 35, + 36, + 37, + 38 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "T", + "name": "naming", "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 642, + "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "is_dependency": false, "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 + 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, + 48 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "test(uint256,uint256)" + "signature": "setInt(uint256,uint256)" } } }, @@ -977,144 +1111,10 @@ } } ], - "description": "Parameter T.test(uint256,uint256)._used (tests/detectors/naming-convention/0.7.6/naming_convention.sol#59) is not in mixedCase\n", - "markdown": "Parameter [T.test(uint256,uint256)._used](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L59) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L59", - "id": "818962ad9f50f13eb87b5c7deade22666431945fb60055f572b38246cfbf311e", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "_myPublicVar", - "source_mapping": { - "start": 741, - "length": 17, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "is_dependency": false, - "lines": [ - 56 - ], - "starting_column": 5, - "ending_column": 22 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "mixedCase" - } - } - ], - "description": "Variable T._myPublicVar (tests/detectors/naming-convention/0.7.6/naming_convention.sol#56) is not in mixedCase\n", - "markdown": "Variable [T._myPublicVar](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L56) is not in mixedCase\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L56", - "id": "8acd53815786acad5b92b51366daf79182a67ab438daa41a6e1ec8a9601fa9a3", - "check": "naming-convention", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "l", - "source_mapping": { - "start": 900, - "length": 10, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "is_dependency": false, - "lines": [ - 67 - ], - "starting_column": 5, - "ending_column": 15 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "T", - "source_mapping": { - "start": 692, - "length": 221, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", - "is_dependency": false, - "lines": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68 - ], - "starting_column": 1, - "ending_column": 2 - } - } - }, - "additional_fields": { - "target": "variable", - "convention": "l_O_I_should_not_be_used" - } - } - ], - "description": "Variable T.l (tests/detectors/naming-convention/0.7.6/naming_convention.sol#67) used l, O, I, which should not be used\n", - "markdown": "Variable [T.l](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L67) used l, O, I, which should not be used\n", - "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L67", - "id": "b595f9e6d03b8b501b7c4a9bf8ff0ad9bf11448a25f53d63ab5031c95f8ae89c", + "description": "Parameter naming.setInt(uint256,uint256).Number2 (tests/detectors/naming-convention/0.7.6/naming_convention.sol#35) is not in mixedCase\n", + "markdown": "Parameter [naming.setInt(uint256,uint256).Number2](tests/detectors/naming-convention/0.7.6/naming_convention.sol#L35) is not in mixedCase\n", + "first_markdown_element": "tests/detectors/naming-convention/0.7.6/naming_convention.sol#L35", + "id": "f03bff0b488524254e19ff7d688d34211cd2f29934e22417c9f1fa43fc4a08ad", "check": "naming-convention", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json b/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json index 7c69fdcc0..20ccd7127 100644 --- a/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json +++ b/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json @@ -34,7 +34,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.4.25/pragma.0.4.25.sol", "filename_relative": "tests/detectors/pragma/0.4.25/pragma.0.4.25.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.4.25/pragma.0.4.25.sol", diff --git a/tests/detectors/pragma/0.5.16/pragma.0.5.16.sol.0.5.16.ConstantPragma.json b/tests/detectors/pragma/0.5.16/pragma.0.5.16.sol.0.5.16.ConstantPragma.json index cc19f31d1..5b57a0247 100644 --- a/tests/detectors/pragma/0.5.16/pragma.0.5.16.sol.0.5.16.ConstantPragma.json +++ b/tests/detectors/pragma/0.5.16/pragma.0.5.16.sol.0.5.16.ConstantPragma.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.5.16/pragma.0.5.15.sol", "filename_relative": "tests/detectors/pragma/0.5.16/pragma.0.5.15.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.5.16/pragma.0.5.15.sol", diff --git a/tests/detectors/pragma/0.6.11/pragma.0.6.11.sol.0.6.11.ConstantPragma.json b/tests/detectors/pragma/0.6.11/pragma.0.6.11.sol.0.6.11.ConstantPragma.json index dc5f6ad5a..7d0fba537 100644 --- a/tests/detectors/pragma/0.6.11/pragma.0.6.11.sol.0.6.11.ConstantPragma.json +++ b/tests/detectors/pragma/0.6.11/pragma.0.6.11.sol.0.6.11.ConstantPragma.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.6.11/pragma.0.6.10.sol", "filename_relative": "tests/detectors/pragma/0.6.11/pragma.0.6.10.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.6.11/pragma.0.6.10.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.6.11/pragma.0.6.11.sol", "filename_relative": "tests/detectors/pragma/0.6.11/pragma.0.6.11.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.6.11/pragma.0.6.11.sol", diff --git a/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json b/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json index 4f4fea023..8b3ccf4ea 100644 --- a/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json +++ b/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.7.6/pragma.0.7.5.sol", "filename_relative": "tests/detectors/pragma/0.7.6/pragma.0.7.5.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.7.6/pragma.0.7.5.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.7.6/pragma.0.7.6.sol", "filename_relative": "tests/detectors/pragma/0.7.6/pragma.0.7.6.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.7.6/pragma.0.7.6.sol", diff --git a/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json b/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json index 5856f4527..5045588d4 100644 --- a/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 141, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -126,17 +126,17 @@ "elements": [ { "type": "node", - "name": "bool", + "name": "uint256", "source_mapping": { - "start": 155, + "start": 257, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 7 + 12 ], "starting_column": 9, "ending_column": 13 @@ -144,21 +144,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -170,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -197,7 +198,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -208,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -236,10 +237,10 @@ } } ], - "description": "Redundant expression \"bool (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#7)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[bool](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L7)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L7", - "id": "da776628bba71bca43caf77bb06a7055fe3c0f4f18a30274c5cb508bcb3a27b4", + "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#12)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L12)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L12", + "id": "7423f2beb0d066fc4e193c27dd50b172186e9539b778ab72bf950dbe872df720", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -248,39 +249,40 @@ "elements": [ { "type": "node", - "name": "RedundantStatementsContract", + "name": "test", "source_mapping": { - "start": 169, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 287, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 8 + 14 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -292,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -319,7 +321,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -330,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -358,10 +360,10 @@ } } ], - "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L8", - "id": "cb9ace5d0188d80bdc530d3760b41a1dcf1a4c10151b720e468550bb22be0e74", + "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L14", + "id": "c3c9961e4467e57974929ecfaeb34a0923fc257422a7705c9d1b14257cfe0c3a", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -370,40 +372,39 @@ "elements": [ { "type": "node", - "name": "uint256", + "name": "RedundantStatementsContract", "source_mapping": { - "start": 257, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 169, + "length": 27, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 12 + 8 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -415,7 +416,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -442,7 +443,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -453,7 +454,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -481,10 +482,10 @@ } } ], - "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#12)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L12)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L12", - "id": "7423f2beb0d066fc4e193c27dd50b172186e9539b778ab72bf950dbe872df720", + "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L8", + "id": "cb9ace5d0188d80bdc530d3760b41a1dcf1a4c10151b720e468550bb22be0e74", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -493,40 +494,39 @@ "elements": [ { "type": "node", - "name": "assert(bool)", + "name": "bool", "source_mapping": { - "start": 271, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 155, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 13 + 7 ], "starting_column": 9, - "ending_column": 15 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -538,7 +538,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -565,7 +565,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -576,7 +576,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -604,10 +604,10 @@ } } ], - "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L13", - "id": "e0137cf6a61eb49d07e1a67a7cdfd0cb82cac0402cded9f1cfb85ae1e6e8d3fe", + "description": "Redundant expression \"bool (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#7)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[bool](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L7)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L7", + "id": "da776628bba71bca43caf77bb06a7055fe3c0f4f18a30274c5cb508bcb3a27b4", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -616,20 +616,20 @@ "elements": [ { "type": "node", - "name": "test", + "name": "assert(bool)", "source_mapping": { - "start": 287, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 271, + "length": 6, + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "is_dependency": false, "lines": [ - 14 + 13 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 15 }, "type_specific_fields": { "parent": { @@ -638,7 +638,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -727,10 +727,10 @@ } } ], - "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L14", - "id": "c3c9961e4467e57974929ecfaeb34a0923fc257422a7705c9d1b14257cfe0c3a", + "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol#L13", + "id": "e0137cf6a61eb49d07e1a67a7cdfd0cb82cac0402cded9f1cfb85ae1e6e8d3fe", "check": "redundant-statements", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json b/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json index 2f09ce19b..c971759c6 100644 --- a/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json @@ -4,39 +4,40 @@ "elements": [ { "type": "node", - "name": "uint256", + "name": "assert(bool)", "source_mapping": { - "start": 141, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 271, + "length": 6, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 6 + 13 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -48,7 +49,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -75,7 +76,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -86,7 +87,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -114,10 +115,10 @@ } } ], - "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#6)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L6)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L6", - "id": "58d73cb2126e8c76752e57c69feeed96ee7db0cc50cf33c0f92679525acc26e9", + "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L13", + "id": "342d8ac4c8c6e96ca7ca18f4bb9abed731c08b4c19a4461151ea48fc503be342", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -126,17 +127,17 @@ "elements": [ { "type": "node", - "name": "bool", + "name": "uint256", "source_mapping": { - "start": 155, + "start": 141, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 9, "ending_column": 13 @@ -148,7 +149,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -170,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -208,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -236,10 +237,10 @@ } } ], - "description": "Redundant expression \"bool (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#7)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[bool](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L7)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L7", - "id": "f57f949deb97e88dedd17864427a4941d1395be24db436d3a45945a45c53b919", + "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#6)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L6)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L6", + "id": "58d73cb2126e8c76752e57c69feeed96ee7db0cc50cf33c0f92679525acc26e9", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -248,39 +249,40 @@ "elements": [ { "type": "node", - "name": "RedundantStatementsContract", + "name": "test", "source_mapping": { - "start": 169, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 287, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 8 + 14 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -292,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -319,7 +321,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -330,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -358,10 +360,10 @@ } } ], - "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L8", - "id": "faaa2cdb764d49e4d06709c566d903cc4b222634a27b31bbbb0217a13b84aa62", + "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L14", + "id": "b36c497f678f32a5479ead924c310a0c86b398e465f69b0e7365f06befaef172", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -374,7 +376,7 @@ "source_mapping": { "start": 257, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -392,7 +394,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -415,7 +417,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -453,7 +455,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -493,40 +495,39 @@ "elements": [ { "type": "node", - "name": "assert(bool)", + "name": "bool", "source_mapping": { - "start": 271, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 155, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 13 + 7 ], "starting_column": 9, - "ending_column": 15 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -538,7 +539,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -565,7 +566,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -576,7 +577,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -604,10 +605,10 @@ } } ], - "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L13", - "id": "342d8ac4c8c6e96ca7ca18f4bb9abed731c08b4c19a4461151ea48fc503be342", + "description": "Redundant expression \"bool (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#7)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[bool](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L7)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L7", + "id": "f57f949deb97e88dedd17864427a4941d1395be24db436d3a45945a45c53b919", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -616,40 +617,39 @@ "elements": [ { "type": "node", - "name": "test", + "name": "RedundantStatementsContract", "source_mapping": { - "start": 287, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 169, + "length": 27, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 14 + 8 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -688,7 +688,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -727,10 +727,10 @@ } } ], - "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L14", - "id": "b36c497f678f32a5479ead924c310a0c86b398e465f69b0e7365f06befaef172", + "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol#L8", + "id": "faaa2cdb764d49e4d06709c566d903cc4b222634a27b31bbbb0217a13b84aa62", "check": "redundant-statements", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json b/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json index f57476a4a..478d1eba6 100644 --- a/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json @@ -4,20 +4,20 @@ "elements": [ { "type": "node", - "name": "uint256", + "name": "RedundantStatementsContract", "source_mapping": { - "start": 141, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 169, + "length": 27, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 6 + 8 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 36 }, "type_specific_fields": { "parent": { @@ -26,7 +26,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -114,10 +114,10 @@ } } ], - "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#6)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L6)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L6", - "id": "c58083eaf5653fc9616833c617157456ad9088c4638009d9cdfebdc1445671bd", + "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L8", + "id": "1ffcec7a83522ce311c8410e5523283b97944a0c27356e3141b26a7f32a022d3", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -126,17 +126,17 @@ "elements": [ { "type": "node", - "name": "bool", + "name": "test", "source_mapping": { - "start": 155, + "start": 287, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 7 + 14 ], "starting_column": 9, "ending_column": 13 @@ -144,21 +144,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -170,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -197,7 +198,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -208,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -236,10 +237,10 @@ } } ], - "description": "Redundant expression \"bool (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#7)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[bool](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L7)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L7", - "id": "f0fef441fabe415b9cbc63bfc5a2a5c69f6248ce22d1bd94f73979f928cb7dba", + "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L14", + "id": "5223d6cc441a1f923616873898ea34e0ff11a758c38d6b5244b9e9ea6be9bec8", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -248,39 +249,40 @@ "elements": [ { "type": "node", - "name": "RedundantStatementsContract", + "name": "uint256", "source_mapping": { - "start": 169, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 257, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 8 + 12 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -292,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -319,7 +321,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -330,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -358,10 +360,10 @@ } } ], - "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L8", - "id": "1ffcec7a83522ce311c8410e5523283b97944a0c27356e3141b26a7f32a022d3", + "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#12)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L12)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L12", + "id": "53f741bfdd4465fbdb8799391ca2fa50ac657b72ac9b822c87e2e4ae79d831d8", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -372,15 +374,15 @@ "type": "node", "name": "uint256", "source_mapping": { - "start": 257, + "start": 141, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 12 + 6 ], "starting_column": 9, "ending_column": 13 @@ -388,22 +390,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -415,7 +416,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -442,7 +443,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -453,7 +454,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -481,10 +482,10 @@ } } ], - "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#12)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L12)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L12", - "id": "53f741bfdd4465fbdb8799391ca2fa50ac657b72ac9b822c87e2e4ae79d831d8", + "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#6)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L6)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L6", + "id": "c58083eaf5653fc9616833c617157456ad9088c4638009d9cdfebdc1445671bd", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -493,40 +494,39 @@ "elements": [ { "type": "node", - "name": "assert(bool)", + "name": "bool", "source_mapping": { - "start": 271, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 155, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 13 + 7 ], "starting_column": 9, - "ending_column": 15 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -538,7 +538,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -565,7 +565,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -576,7 +576,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -604,10 +604,10 @@ } } ], - "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L13", - "id": "f902982db50d530e22b29f35ab1a740f1af29683b0ebb9edd53240721b4f95b9", + "description": "Redundant expression \"bool (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#7)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[bool](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L7)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L7", + "id": "f0fef441fabe415b9cbc63bfc5a2a5c69f6248ce22d1bd94f73979f928cb7dba", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -616,20 +616,20 @@ "elements": [ { "type": "node", - "name": "test", + "name": "assert(bool)", "source_mapping": { - "start": 287, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 271, + "length": 6, + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "is_dependency": false, "lines": [ - 14 + 13 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 15 }, "type_specific_fields": { "parent": { @@ -638,7 +638,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -727,10 +727,10 @@ } } ], - "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L14", - "id": "5223d6cc441a1f923616873898ea34e0ff11a758c38d6b5244b9e9ea6be9bec8", + "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol#L13", + "id": "f902982db50d530e22b29f35ab1a740f1af29683b0ebb9edd53240721b4f95b9", "check": "redundant-statements", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/redundant-statements/0.7.6/redundant_statements.sol.0.7.6.RedundantStatements.json b/tests/detectors/redundant-statements/0.7.6/redundant_statements.sol.0.7.6.RedundantStatements.json index 3cf570b00..8efe4bc3d 100644 --- a/tests/detectors/redundant-statements/0.7.6/redundant_statements.sol.0.7.6.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.7.6/redundant_statements.sol.0.7.6.RedundantStatements.json @@ -4,17 +4,17 @@ "elements": [ { "type": "node", - "name": "uint256", + "name": "test", "source_mapping": { - "start": 141, + "start": 287, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 6 + 14 ], "starting_column": 9, "ending_column": 13 @@ -22,21 +22,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -48,7 +49,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -75,7 +76,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -86,7 +87,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -114,10 +115,10 @@ } } ], - "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#6)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L6)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L6", - "id": "d16c698a23693dc64165fc886c68f6900a7a2699998f0f3713d875cf49a2af87", + "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L14", + "id": "45bb5d6a69015db0e07e6d13107db089e1095da3cf0918f624db12181fac28a1", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -130,7 +131,7 @@ "source_mapping": { "start": 155, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -148,7 +149,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -170,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -208,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -248,39 +249,40 @@ "elements": [ { "type": "node", - "name": "RedundantStatementsContract", + "name": "assert(bool)", "source_mapping": { - "start": 169, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 271, + "length": 6, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 8 + 13 ], "starting_column": 9, - "ending_column": 36 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "function", - "name": "constructor", + "name": "test", "source_mapping": { - "start": 110, - "length": 93, - "filename_used": "/GENERIC_PATH", + "start": 209, + "length": 109, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 5, - 6, - 7, - 8, - 9 + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 5, "ending_column": 6 @@ -292,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -319,7 +321,7 @@ "ending_column": 0 } }, - "signature": "constructor()" + "signature": "test()" } } } @@ -330,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -358,10 +360,10 @@ } } ], - "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L8", - "id": "caf262c2d237789c12de0cf27ef88625491b29a1bc3209ced3a12d2890fc799e", + "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L13", + "id": "774a4440b59af9fa94c7552ba0ce21a7835511012dc6257afc3fd4d80a023b28", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -370,40 +372,39 @@ "elements": [ { "type": "node", - "name": "uint256", + "name": "RedundantStatementsContract", "source_mapping": { - "start": 257, - "length": 4, - "filename_used": "/GENERIC_PATH", + "start": 169, + "length": 27, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 12 + 8 ], "starting_column": 9, - "ending_column": 13 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -415,7 +416,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -442,7 +443,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -453,7 +454,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -481,10 +482,10 @@ } } ], - "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#12)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L12)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L12", - "id": "ffe6709dbcfc3342d28833aad5375135da8cc7369bf0649ab1796ff4eae14ca1", + "description": "Redundant expression \"RedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#8)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L8)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L8", + "id": "caf262c2d237789c12de0cf27ef88625491b29a1bc3209ced3a12d2890fc799e", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -493,40 +494,39 @@ "elements": [ { "type": "node", - "name": "assert(bool)", + "name": "uint256", "source_mapping": { - "start": 271, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 141, + "length": 4, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 13 + 6 ], "starting_column": 9, - "ending_column": 15 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "function", - "name": "test", + "name": "constructor", "source_mapping": { - "start": 209, - "length": 109, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 93, + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16 + 5, + 6, + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -538,7 +538,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -565,7 +565,7 @@ "ending_column": 0 } }, - "signature": "test()" + "signature": "constructor()" } } } @@ -576,7 +576,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -604,10 +604,10 @@ } } ], - "description": "Redundant expression \"assert(bool) (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#13)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[assert(bool)](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L13)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L13", - "id": "774a4440b59af9fa94c7552ba0ce21a7835511012dc6257afc3fd4d80a023b28", + "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#6)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L6)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L6", + "id": "d16c698a23693dc64165fc886c68f6900a7a2699998f0f3713d875cf49a2af87", "check": "redundant-statements", "impact": "Informational", "confidence": "High" @@ -616,17 +616,17 @@ "elements": [ { "type": "node", - "name": "test", + "name": "uint256", "source_mapping": { - "start": 287, + "start": 257, "length": 4, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "is_dependency": false, "lines": [ - 14 + 12 ], "starting_column": 9, "ending_column": 13 @@ -638,7 +638,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_relative": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol", @@ -727,10 +727,10 @@ } } ], - "description": "Redundant expression \"test (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#14)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", - "markdown": "Redundant expression \"[test](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L14)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", - "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L14", - "id": "45bb5d6a69015db0e07e6d13107db089e1095da3cf0918f624db12181fac28a1", + "description": "Redundant expression \"uint256 (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#12)\" inRedundantStatementsContract (tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#3-18)\n", + "markdown": "Redundant expression \"[uint256](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L12)\" in[RedundantStatementsContract](tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L3-L18)\n", + "first_markdown_element": "tests/detectors/redundant-statements/0.7.6/redundant_statements.sol#L12", + "id": "ffe6709dbcfc3342d28833aad5375135da8cc7369bf0649ab1796ff4eae14ca1", "check": "redundant-statements", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol.0.4.25.ReentrancyBenign.json b/tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol.0.4.25.ReentrancyBenign.json index af7c329b2..47b9b2bc9 100644 --- a/tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol.0.4.25.ReentrancyBenign.json +++ b/tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol.0.4.25.ReentrancyBenign.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 116, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -31,7 +31,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -111,7 +111,7 @@ "source_mapping": { "start": 153, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -129,7 +129,7 @@ "source_mapping": { "start": 116, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -152,7 +152,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -237,7 +237,7 @@ "source_mapping": { "start": 153, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -255,7 +255,7 @@ "source_mapping": { "start": 116, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -278,7 +278,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -363,7 +363,7 @@ "source_mapping": { "start": 217, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -381,7 +381,7 @@ "source_mapping": { "start": 116, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -404,7 +404,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -501,7 +501,7 @@ "source_mapping": { "start": 242, "length": 132, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -523,7 +523,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -603,7 +603,7 @@ "source_mapping": { "start": 289, "length": 30, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -621,7 +621,7 @@ "source_mapping": { "start": 242, "length": 132, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -643,7 +643,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -728,7 +728,7 @@ "source_mapping": { "start": 289, "length": 30, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -746,7 +746,7 @@ "source_mapping": { "start": 242, "length": 132, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -768,7 +768,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -853,7 +853,7 @@ "source_mapping": { "start": 355, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -871,7 +871,7 @@ "source_mapping": { "start": 242, "length": 132, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -893,7 +893,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -986,26 +986,21 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 380, - "length": 238, - "filename_used": "/GENERIC_PATH", + "start": 931, + "length": 128, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -1017,7 +1012,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1088,49 +1083,44 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad5(address)" } }, { "type": "node", - "name": "success = target.call()", + "name": "ethSender(address(0))", "source_mapping": { - "start": 427, - "length": 30, - "filename_used": "/GENERIC_PATH", + "start": 978, + "length": 21, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21 + 45 ], "starting_column": 9, - "ending_column": 39 + "ending_column": 30 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 380, - "length": 238, - "filename_used": "/GENERIC_PATH", + "start": 931, + "length": 128, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -1142,7 +1132,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1213,7 +1203,7 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad5(address)" } } }, @@ -1223,44 +1213,37 @@ }, { "type": "node", - "name": "address(target).call.value(1000)()", + "name": "address(target).call.value(1)()", "source_mapping": { - "start": 494, - "length": 34, - "filename_used": "/GENERIC_PATH", + "start": 1211, + "length": 31, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 23 + 55 ], - "starting_column": 13, - "ending_column": 47 + "starting_column": 9, + "ending_column": 40 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "ethSender", "source_mapping": { - "start": 380, - "length": 238, - "filename_used": "/GENERIC_PATH", + "start": 1158, + "length": 91, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 54, + 55, + 56 ], "starting_column": 5, "ending_column": 6 @@ -1272,7 +1255,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1343,54 +1326,49 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "ethSender(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "success = target.call()", + "name": "varChanger()", "source_mapping": { - "start": 427, - "length": 30, - "filename_used": "/GENERIC_PATH", + "start": 1009, + "length": 12, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21 + 46 ], "starting_column": 9, - "ending_column": 39 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 380, - "length": 238, - "filename_used": "/GENERIC_PATH", + "start": 931, + "length": 128, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 44, + 45, + 46, + 47, + 48 ], "starting_column": 5, "ending_column": 6 @@ -1402,7 +1380,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1473,54 +1451,48 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad5(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" } }, { "type": "node", - "name": "address(target).call.value(1000)()", + "name": "anotherVariableToChange ++", "source_mapping": { - "start": 494, - "length": 34, - "filename_used": "/GENERIC_PATH", + "start": 1295, + "length": 25, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 23 + 59 ], - "starting_column": 13, - "ending_column": 47 + "starting_column": 9, + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "varChanger", "source_mapping": { - "start": 380, - "length": 238, - "filename_used": "/GENERIC_PATH", + "start": 1255, + "length": 72, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 58, + 59, + 60 ], "starting_column": 5, "ending_column": 6 @@ -1532,7 +1504,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1603,44 +1575,77 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "varChanger()" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" } - }, + } + ], + "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#44-48):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#45)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#55)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#46)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#59)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L44-L48):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L45)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L55)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L46)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L59)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L44-L48", + "id": "944f4ca691fcae3a55ccd543406d1eb8e969ab1b5d716cc975d4656f998f08f9", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "counter += 1", + "type": "function", + "name": "bad3", "source_mapping": { - "start": 542, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 624, + "length": 125, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 24 + 31, + 32, + 33, + 34, + 35 ], - "starting_column": 13, - "ending_column": 25 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "bad2", + "type": "contract", + "name": "ReentrancyBenign", "source_mapping": { - "start": 380, - "length": 238, - "filename_used": "/GENERIC_PATH", + "start": 25, + "length": 1304, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.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, @@ -1650,203 +1655,40 @@ 26, 27, 28, - 29 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 25, - "length": 1304, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad2(address)" - } - } - }, - "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "counter" - } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad2(address) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#20-29):\n\tExternal calls:\n\t- success = target.call() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#21)\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#23)\n\tExternal calls sending eth:\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#23)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#24)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad2(address)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L20-L29):\n\tExternal calls:\n\t- [success = target.call()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L21)\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L23)\n\tExternal calls sending eth:\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L23)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L24)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L20-L29", - "id": "d0cd48646930b460d018a96dca75d8781c9707be1d4a451d83f1fec56f560c43", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad3", - "source_mapping": { - "start": 624, - "length": 125, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 25, - "length": 1304, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62 + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 ], "starting_column": 1, "ending_column": 0 @@ -1861,7 +1703,7 @@ "source_mapping": { "start": 671, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1879,7 +1721,7 @@ "source_mapping": { "start": 624, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1901,7 +1743,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -1986,7 +1828,7 @@ "source_mapping": { "start": 1123, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2004,7 +1846,7 @@ "source_mapping": { "start": 1065, "length": 87, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2024,7 +1866,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2109,7 +1951,7 @@ "source_mapping": { "start": 671, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2127,7 +1969,7 @@ "source_mapping": { "start": 624, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2149,7 +1991,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2234,7 +2076,7 @@ "source_mapping": { "start": 1123, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2252,7 +2094,7 @@ "source_mapping": { "start": 1065, "length": 87, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2272,7 +2114,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2357,7 +2199,7 @@ "source_mapping": { "start": 703, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2375,7 +2217,7 @@ "source_mapping": { "start": 624, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2397,7 +2239,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2483,7 +2325,7 @@ "source_mapping": { "start": 1295, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2501,7 +2343,7 @@ "source_mapping": { "start": 1255, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2521,7 +2363,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2614,22 +2456,26 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 755, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 238, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40, - 41, - 42 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 5, "ending_column": 6 @@ -2641,7 +2487,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2712,45 +2558,49 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad2(address)" } }, { "type": "node", - "name": "externalCaller(target)", + "name": "success = target.call()", "source_mapping": { - "start": 802, - "length": 22, - "filename_used": "/GENERIC_PATH", + "start": 427, + "length": 30, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38 + 21 ], "starting_column": 9, - "ending_column": 31 + "ending_column": 39 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 755, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 238, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40, - 41, - 42 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 5, "ending_column": 6 @@ -2762,7 +2612,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2833,7 +2683,7 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad2(address)" } } }, @@ -2843,37 +2693,174 @@ }, { "type": "node", - "name": "address(target).call()", + "name": "address(target).call.value(1000)()", "source_mapping": { - "start": 1123, - "length": 22, - "filename_used": "/GENERIC_PATH", + "start": 494, + "length": 34, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 51 + 23 + ], + "starting_column": 13, + "ending_column": 47 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad2", + "source_mapping": { + "start": 380, + "length": 238, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 25, + "length": 1304, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad2(address)" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls" + } + }, + { + "type": "node", + "name": "success = target.call()", + "source_mapping": { + "start": 427, + "length": 30, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 21 ], "starting_column": 9, - "ending_column": 31 + "ending_column": 39 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "bad2", "source_mapping": { - "start": 1065, - "length": 87, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 238, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 50, - 51, - 52 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 5, "ending_column": 6 @@ -2885,7 +2872,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -2956,7 +2943,7 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "bad2(address)" } } }, @@ -2966,40 +2953,44 @@ }, { "type": "node", - "name": "ethSender(address(0))", + "name": "address(target).call.value(1000)()", "source_mapping": { - "start": 834, - "length": 21, - "filename_used": "/GENERIC_PATH", + "start": 494, + "length": 34, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 39 + 23 ], - "starting_column": 9, - "ending_column": 30 + "starting_column": 13, + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad2", "source_mapping": { - "start": 755, - "length": 170, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 238, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 37, - 38, - 39, - 40, - 41, - 42 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 5, "ending_column": 6 @@ -3011,7 +3002,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3082,47 +3073,54 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad2(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "address(target).call.value(1)()", + "name": "counter += 1", "source_mapping": { - "start": 1211, - "length": 31, - "filename_used": "/GENERIC_PATH", + "start": 542, + "length": 12, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55 + 24 ], - "starting_column": 9, - "ending_column": 40 + "starting_column": 13, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "bad2", "source_mapping": { - "start": 1158, - "length": 91, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 238, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 54, - 55, - 56 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 5, "ending_column": 6 @@ -3134,7 +3132,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3205,12 +3203,127 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "bad2(address)" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "counter" + } + } + ], + "description": "Reentrancy in ReentrancyBenign.bad2(address) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#20-29):\n\tExternal calls:\n\t- success = target.call() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#21)\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#23)\n\tExternal calls sending eth:\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#23)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#24)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad2(address)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L20-L29):\n\tExternal calls:\n\t- [success = target.call()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L21)\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L23)\n\tExternal calls sending eth:\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L23)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L24)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L20-L29", + "id": "d0cd48646930b460d018a96dca75d8781c9707be1d4a451d83f1fec56f560c43", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "source_mapping": { + "start": 755, + "length": 170, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 37, + 38, + 39, + 40, + 41, + 42 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 25, + "length": 1304, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ], + "starting_column": 1, + "ending_column": 0 } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" + }, + "signature": "bad4(address)" } }, { @@ -3219,7 +3332,7 @@ "source_mapping": { "start": 802, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3237,7 +3350,7 @@ "source_mapping": { "start": 755, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3260,7 +3373,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3336,7 +3449,7 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { @@ -3345,7 +3458,7 @@ "source_mapping": { "start": 1123, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3363,7 +3476,7 @@ "source_mapping": { "start": 1065, "length": 87, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3383,7 +3496,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3468,7 +3581,7 @@ "source_mapping": { "start": 834, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3486,7 +3599,7 @@ "source_mapping": { "start": 755, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3509,7 +3622,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3585,7 +3698,7 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { @@ -3594,7 +3707,7 @@ "source_mapping": { "start": 1211, "length": 31, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3612,7 +3725,7 @@ "source_mapping": { "start": 1158, "length": 91, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3632,7 +3745,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3713,20 +3826,20 @@ }, { "type": "node", - "name": "varChanger()", + "name": "externalCaller(target)", "source_mapping": { - "start": 865, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 802, + "length": 22, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 40 + 38 ], "starting_column": 9, - "ending_column": 21 + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -3735,7 +3848,7 @@ "source_mapping": { "start": 755, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3758,7 +3871,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3834,43 +3947,42 @@ } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "anotherVariableToChange ++", + "name": "address(target).call()", "source_mapping": { - "start": 1295, - "length": 25, - "filename_used": "/GENERIC_PATH", + "start": 1123, + "length": 22, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 59 + 51 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "varChanger", + "name": "externalCaller", "source_mapping": { - "start": 1255, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 1065, + "length": 87, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 58, - 59, - 60 + 50, + 51, + 52 ], "starting_column": 5, "ending_column": 6 @@ -3882,7 +3994,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -3953,141 +4065,27 @@ "ending_column": 0 } }, - "signature": "varChanger()" + "signature": "externalCaller(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" - } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#37-42):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#38)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#51)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#39)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#55)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#39)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#55)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#40)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#59)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L37-L42):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L38)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L51)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L39)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L55)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L39)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L55)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L40)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L59)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L37-L42", - "id": "f8ae59addfdbac8f20e5440f9a184916be6ddefc82424d7c3f29a226c4f2795f", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad5", - "source_mapping": { - "start": 931, - "length": 128, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 44, - 45, - 46, - 47, - 48 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 25, - "length": 1304, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad5(address)" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", "name": "ethSender(address(0))", "source_mapping": { - "start": 978, + "start": 834, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45 + 39 ], "starting_column": 9, "ending_column": 30 @@ -4095,21 +4093,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad4", "source_mapping": { - "start": 931, - "length": 128, - "filename_used": "/GENERIC_PATH", + "start": 755, + "length": 170, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 44, - 45, - 46, - 47, - 48 + 37, + 38, + 39, + 40, + 41, + 42 ], "starting_column": 5, "ending_column": 6 @@ -4121,7 +4120,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4192,12 +4191,12 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { @@ -4206,7 +4205,7 @@ "source_mapping": { "start": 1211, "length": 31, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4224,7 +4223,7 @@ "source_mapping": { "start": 1158, "length": 91, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4244,7 +4243,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4327,15 +4326,15 @@ "type": "node", "name": "varChanger()", "source_mapping": { - "start": 1009, + "start": 865, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 46 + 40 ], "starting_column": 9, "ending_column": 21 @@ -4343,21 +4342,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad4", "source_mapping": { - "start": 931, - "length": 128, - "filename_used": "/GENERIC_PATH", + "start": 755, + "length": 170, + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 44, - 45, - 46, - 47, - 48 + 37, + 38, + 39, + 40, + 41, + 42 ], "starting_column": 5, "ending_column": 6 @@ -4369,7 +4369,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4440,7 +4440,7 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad4(address)" } } }, @@ -4455,7 +4455,7 @@ "source_mapping": { "start": 1295, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4473,7 +4473,7 @@ "source_mapping": { "start": 1255, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4493,7 +4493,7 @@ "source_mapping": { "start": 25, "length": 1304, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol", @@ -4574,10 +4574,10 @@ } } ], - "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#44-48):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#45)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#55)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#46)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#59)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L44-L48):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L45)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L55)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L46)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L59)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L44-L48", - "id": "944f4ca691fcae3a55ccd543406d1eb8e969ab1b5d716cc975d4656f998f08f9", + "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#37-42):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#38)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#51)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#39)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#55)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#39)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#55)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#40)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#59)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L37-L42):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L38)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L51)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L39)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L55)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L39)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L55)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L40)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L59)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.4.25/reentrancy-benign.sol#L37-L42", + "id": "f8ae59addfdbac8f20e5440f9a184916be6ddefc82424d7c3f29a226c4f2795f", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol.0.5.16.ReentrancyBenign.json b/tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol.0.5.16.ReentrancyBenign.json index f4463d9c9..d18ec8989 100644 --- a/tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol.0.5.16.ReentrancyBenign.json +++ b/tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol.0.5.16.ReentrancyBenign.json @@ -505,21 +505,21 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 280, - "length": 135, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -603,44 +603,44 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "bad5(address)" } }, { "type": "node", - "name": "(success) = target.call()", + "name": "ethSender(address(0))", "source_mapping": { - "start": 327, - "length": 33, + "start": 1026, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 16 + 46 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 30 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 280, - "length": 135, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -724,7 +724,7 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "bad5(address)" } } }, @@ -734,9 +734,9 @@ }, { "type": "node", - "name": "(success) = target.call()", + "name": "address(target).call.value(1)()", "source_mapping": { - "start": 327, + "start": 1261, "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", @@ -744,7 +744,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 16 + 56 ], "starting_column": 9, "ending_column": 42 @@ -752,21 +752,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "ethSender", "source_mapping": { - "start": 280, - "length": 135, + "start": 1208, + "length": 93, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -850,7 +848,7 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "ethSender(address)" } } }, @@ -860,9 +858,9 @@ }, { "type": "node", - "name": "counter += 1", + "name": "varChanger()", "source_mapping": { - "start": 396, + "start": 1057, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", @@ -870,7 +868,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 18 + 47 ], "starting_column": 9, "ending_column": 21 @@ -878,21 +876,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad5", "source_mapping": { - "start": 280, - "length": 135, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -976,20 +974,145 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "bad5(address)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "counter" + "variable_name": "anotherVariableToChange" + } + }, + { + "type": "node", + "name": "anotherVariableToChange ++", + "source_mapping": { + "start": 1347, + "length": 25, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 60 + ], + "starting_column": 9, + "ending_column": 34 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "varChanger", + "source_mapping": { + "start": 1307, + "length": 72, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 59, + 60, + 61 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "varChanger()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" } } ], - "description": "Reentrancy in ReentrancyBenign.bad1(address) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#15-19):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#16)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#18)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad1(address)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L15-L19):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L16)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L18)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L15-L19", - "id": "ae6f8d6b98538fe324c8bbbcb19a0729901bc42fc166a1b1f0927b0f3f0d185f", + "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#45-49):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#46)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#47)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L45-L49):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L46)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L47)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L45-L49", + "id": "3b1a0f56972cc373bb64019a51f2424653de8fab99fb3941328f1c98f358e766", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" @@ -2639,22 +2762,21 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad1", "source_mapping": { - "start": 801, - "length": 172, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -2738,45 +2860,44 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad1(address)" } }, { "type": "node", - "name": "externalCaller(target)", + "name": "(success) = target.call()", "source_mapping": { - "start": 848, - "length": 22, + "start": 327, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 39 + 16 ], "starting_column": 9, - "ending_column": 31 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad1", "source_mapping": { - "start": 801, - "length": 172, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -2860,7 +2981,7 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad1(address)" } } }, @@ -2870,37 +2991,39 @@ }, { "type": "node", - "name": "address(target).call()", + "name": "(success) = target.call()", "source_mapping": { - "start": 1171, - "length": 24, + "start": 327, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 52 + 16 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "bad1", "source_mapping": { - "start": 1113, - "length": 89, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 51, - 52, - 53 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -2984,7 +3107,7 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "bad1(address)" } } }, @@ -2994,40 +3117,39 @@ }, { "type": "node", - "name": "ethSender(address(0))", + "name": "counter += 1", "source_mapping": { - "start": 880, - "length": 21, + "start": 396, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 40 + 18 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad1", "source_mapping": { - "start": 801, - "length": 172, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -3111,136 +3233,128 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "counter" } - }, + } + ], + "description": "Reentrancy in ReentrancyBenign.bad1(address) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#15-19):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#16)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#18)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad1(address)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L15-L19):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L16)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L18)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L15-L19", + "id": "ae6f8d6b98538fe324c8bbbcb19a0729901bc42fc166a1b1f0927b0f3f0d185f", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "address(target).call.value(1)()", + "type": "function", + "name": "bad4", "source_mapping": { - "start": 1261, - "length": 33, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 38, + 39, + 40, + 41, + 42, + 43 ], - "starting_column": 9, - "ending_column": 42 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "ethSender", + "type": "contract", + "name": "ReentrancyBenign", "source_mapping": { - "start": 1208, - "length": 93, + "start": 28, + "length": 1353, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, 55, 56, - 57 + 57, + 58, + 59, + 60, + 61, + 62, + 63 ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "ethSender(address)" + "starting_column": 1, + "ending_column": 0 } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" + }, + "signature": "bad4(address)" } }, { @@ -3367,7 +3481,7 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { @@ -3618,7 +3732,7 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { @@ -3747,20 +3861,20 @@ }, { "type": "node", - "name": "varChanger()", + "name": "externalCaller(target)", "source_mapping": { - "start": 911, - "length": 12, + "start": 848, + "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 41 + 39 ], "starting_column": 9, - "ending_column": 21 + "ending_column": 31 }, "type_specific_fields": { "parent": { @@ -3869,43 +3983,42 @@ } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "anotherVariableToChange ++", + "name": "address(target).call()", "source_mapping": { - "start": 1347, - "length": 25, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 60 + 52 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "varChanger", + "name": "externalCaller", "source_mapping": { - "start": 1307, - "length": 72, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -3989,134 +4102,19 @@ "ending_column": 0 } }, - "signature": "varChanger()" + "signature": "externalCaller(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" - } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#38-43):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#39)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#52)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#56)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#41)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L38-L43):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L39)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L52)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L56)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L41)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L38-L43", - "id": "ed01a6eca7c4b485a34d6d66adb1e0d47e622663622a208c823c920e6d377aca", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad5", - "source_mapping": { - "start": 979, - "length": 128, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 45, - 46, - 47, - 48, - 49 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad5(address)" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", "name": "ethSender(address(0))", "source_mapping": { - "start": 1026, + "start": 880, "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", @@ -4124,7 +4122,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 46 + 40 ], "starting_column": 9, "ending_column": 30 @@ -4132,21 +4130,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad4", "source_mapping": { - "start": 979, - "length": 128, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45, - 46, - 47, - 48, - 49 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -4230,12 +4229,12 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { @@ -4366,7 +4365,7 @@ "type": "node", "name": "varChanger()", "source_mapping": { - "start": 1057, + "start": 911, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", @@ -4374,7 +4373,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 47 + 41 ], "starting_column": 9, "ending_column": 21 @@ -4382,21 +4381,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad4", "source_mapping": { - "start": 979, - "length": 128, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45, - 46, - 47, - 48, - 49 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -4480,7 +4480,7 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad4(address)" } } }, @@ -4615,10 +4615,10 @@ } } ], - "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#45-49):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#46)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#47)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L45-L49):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L46)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L47)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L45-L49", - "id": "3b1a0f56972cc373bb64019a51f2424653de8fab99fb3941328f1c98f358e766", + "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#38-43):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#39)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#52)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#56)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#41)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L38-L43):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L39)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L52)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L56)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L41)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.5.16/reentrancy-benign.sol#L38-L43", + "id": "ed01a6eca7c4b485a34d6d66adb1e0d47e622663622a208c823c920e6d377aca", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol.0.6.11.ReentrancyBenign.json b/tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol.0.6.11.ReentrancyBenign.json index 9aae3d210..3fd5d0ac3 100644 --- a/tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol.0.6.11.ReentrancyBenign.json +++ b/tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol.0.6.11.ReentrancyBenign.json @@ -4,23 +4,26 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 119, - "length": 155, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -104,46 +107,49 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad2(address)" } }, { "type": "node", - "name": "(success) = msg.sender.call()", + "name": "(success) = target.call()", "source_mapping": { - "start": 152, - "length": 37, + "start": 468, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 8 + 22 ], "starting_column": 9, - "ending_column": 46 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 119, - "length": 155, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -227,7 +233,7 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad2(address)" } } }, @@ -237,41 +243,44 @@ }, { "type": "node", - "name": "(success) = msg.sender.call()", + "name": "address(target).call.value(1000)()", "source_mapping": { - "start": 152, - "length": 37, + "start": 538, + "length": 36, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 8 + 24 ], - "starting_column": 9, - "ending_column": 46 + "starting_column": 13, + "ending_column": 49 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 119, - "length": 155, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -355,51 +364,54 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad2(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "counter += 1", + "name": "(success) = target.call()", "source_mapping": { - "start": 255, - "length": 12, + "start": 468, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 12 + 22 ], "starting_column": 9, - "ending_column": 21 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 119, - "length": 155, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -483,78 +495,44 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad2(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "counter" + "underlying_type": "external_calls_sending_eth" } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad0() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#7-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#8)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#12)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad0()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L7-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L8)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L12)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L7-L13", - "id": "e35d0f014a7459e09ea372373807f325e4c901c8412f473d46c93b949e8b4908", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "function", - "name": "bad1", + "type": "node", + "name": "address(target).call.value(1000)()", "source_mapping": { - "start": 280, - "length": 135, + "start": 538, + "length": 36, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 24 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 13, + "ending_column": 49 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "ReentrancyBenign", + "type": "function", + "name": "bad2", "source_mapping": { - "start": 28, - "length": 1353, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, @@ -564,209 +542,7 @@ 27, 28, 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad1(address)" - } - }, - { - "type": "node", - "name": "(success) = target.call()", - "source_mapping": { - "start": 327, - "length": 33, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 16 - ], - "starting_column": 9, - "ending_column": 42 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 280, - "length": 135, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 15, - 16, - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad1(address)" - } - } - }, - "additional_fields": { - "underlying_type": "external_calls" - } - }, - { - "type": "node", - "name": "(success) = target.call()", - "source_mapping": { - "start": 327, - "length": 33, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 16 - ], - "starting_column": 9, - "ending_column": 42 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 280, - "length": 135, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 15, - 16, - 17, - 18, - 19 + 30 ], "starting_column": 5, "ending_column": 6 @@ -850,7 +626,7 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "bad2(address)" } } }, @@ -862,7 +638,7 @@ "type": "node", "name": "counter += 1", "source_mapping": { - "start": 396, + "start": 588, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -870,29 +646,34 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 18 + 25 ], - "starting_column": 9, - "ending_column": 21 + "starting_column": 13, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 280, - "length": 135, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -976,7 +757,7 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "bad2(address)" } } }, @@ -986,10 +767,10 @@ } } ], - "description": "Reentrancy in ReentrancyBenign.bad1(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#15-19):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#16)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#18)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad1(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L15-L19):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L16)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L18)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L15-L19", - "id": "ad393dc7d573b714cb2f23bd3edcc782fe4e087293db87efb6fcf2ca78c13002", + "description": "Reentrancy in ReentrancyBenign.bad2(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#21-30):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#22)\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#24)\n\tExternal calls sending eth:\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#24)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#25)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad2(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L21-L30):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L22)\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L24)\n\tExternal calls sending eth:\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L24)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L25)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L21-L30", + "id": "416fe229b7f234a232cd7727df5925368d4abd38be42a4a774f4d3b7d93c0707", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" @@ -998,26 +779,21 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 421, - "length": 243, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -1101,49 +877,44 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad5(address)" } }, { "type": "node", - "name": "(success) = target.call()", + "name": "ethSender(address(0))", "source_mapping": { - "start": 468, - "length": 33, + "start": 1026, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 22 + 46 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 30 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad5", "source_mapping": { - "start": 421, - "length": 243, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -1227,7 +998,7 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad5(address)" } } }, @@ -1237,34 +1008,443 @@ }, { "type": "node", - "name": "address(target).call.value(1000)()", + "name": "address(target).call.value(1)()", "source_mapping": { - "start": 538, - "length": 36, + "start": 1261, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 24 + 56 ], - "starting_column": 13, - "ending_column": 49 + "starting_column": 9, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "ethSender", "source_mapping": { - "start": 421, - "length": 243, - "filename_used": "/GENERIC_PATH", + "start": 1208, + "length": 93, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 55, + 56, + 57 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "ethSender(address)" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls_sending_eth" + } + }, + { + "type": "node", + "name": "varChanger()", + "source_mapping": { + "start": 1057, + "length": 12, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 47 + ], + "starting_column": 9, + "ending_column": 21 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad5", + "source_mapping": { + "start": 979, + "length": 128, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 45, + 46, + 47, + 48, + 49 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad5(address)" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" + } + }, + { + "type": "node", + "name": "anotherVariableToChange ++", + "source_mapping": { + "start": 1347, + "length": 25, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 60 + ], + "starting_column": 9, + "ending_column": 34 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "varChanger", + "source_mapping": { + "start": 1307, + "length": 72, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 59, + 60, + 61 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "varChanger()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" + } + } + ], + "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#45-49):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#46)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#47)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L45-L49):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L46)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L47)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L45-L49", + "id": "8fc09eeb31a7d9cdd78f1271f6dc486187ef7e75d35bf205c1e8a4cf70bd5ab9", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "source_mapping": { + "start": 280, + "length": 135, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 15, + 16, + 17, + 18, + 19 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, @@ -1274,103 +1454,53 @@ 27, 28, 29, - 30 + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad2(address)" + "starting_column": 1, + "ending_column": 0 } - } - }, - "additional_fields": { - "underlying_type": "external_calls" + }, + "signature": "bad1(address)" } }, { "type": "node", "name": "(success) = target.call()", "source_mapping": { - "start": 468, + "start": 327, "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -1378,7 +1508,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 22 + 16 ], "starting_column": 9, "ending_column": 42 @@ -1386,26 +1516,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 421, - "length": 243, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -1489,54 +1614,49 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "address(target).call.value(1000)()", + "name": "(success) = target.call()", "source_mapping": { - "start": 538, - "length": 36, + "start": 327, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 24 + 16 ], - "starting_column": 13, - "ending_column": 49 + "starting_column": 9, + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 421, - "length": 243, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -1620,7 +1740,7 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } } }, @@ -1632,7 +1752,7 @@ "type": "node", "name": "counter += 1", "source_mapping": { - "start": 588, + "start": 396, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -1640,34 +1760,29 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 25 + 18 ], - "starting_column": 13, - "ending_column": 25 + "starting_column": 9, + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 421, - "length": 243, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -1751,7 +1866,7 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad1(address)" } } }, @@ -1761,10 +1876,10 @@ } } ], - "description": "Reentrancy in ReentrancyBenign.bad2(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#21-30):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#22)\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#24)\n\tExternal calls sending eth:\n\t- address(target).call.value(1000)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#24)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#25)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad2(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L21-L30):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L22)\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L24)\n\tExternal calls sending eth:\n\t- [address(target).call.value(1000)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L24)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L25)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L21-L30", - "id": "416fe229b7f234a232cd7727df5925368d4abd38be42a4a774f4d3b7d93c0707", + "description": "Reentrancy in ReentrancyBenign.bad1(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#15-19):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#16)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#18)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad1(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L15-L19):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L16)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L18)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L15-L19", + "id": "ad393dc7d573b714cb2f23bd3edcc782fe4e087293db87efb6fcf2ca78c13002", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" @@ -1773,21 +1888,22 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad4", "source_mapping": { - "start": 670, - "length": 125, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -1871,14 +1987,14 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad4(address)" } }, { "type": "node", "name": "externalCaller(target)", "source_mapping": { - "start": 717, + "start": 848, "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -1886,7 +2002,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 33 + 39 ], "starting_column": 9, "ending_column": 31 @@ -1894,21 +2010,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad4", "source_mapping": { - "start": 670, - "length": 125, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -1992,7 +2109,7 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad4(address)" } } }, @@ -2126,39 +2243,40 @@ }, { "type": "node", - "name": "externalCaller(target)", + "name": "ethSender(address(0))", "source_mapping": { - "start": 717, - "length": 22, + "start": 880, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 33 + 40 ], "starting_column": 9, - "ending_column": 31 + "ending_column": 30 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad4", "source_mapping": { - "start": 670, - "length": 125, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -2242,47 +2360,47 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "address(target).call()", + "name": "address(target).call.value(1)()", "source_mapping": { - "start": 1171, - "length": 24, + "start": 1261, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 52 + 56 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "ethSender", "source_mapping": { - "start": 1113, - "length": 89, + "start": 1208, + "length": 93, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 51, - 52, - 53 + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -2366,7 +2484,7 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "ethSender(address)" } } }, @@ -2376,39 +2494,40 @@ }, { "type": "node", - "name": "varChanger()", + "name": "externalCaller(target)", "source_mapping": { - "start": 749, - "length": 12, + "start": 848, + "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 34 + 39 ], "starting_column": 9, - "ending_column": 21 + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad4", "source_mapping": { - "start": 670, - "length": 125, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -2492,48 +2611,47 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "anotherVariableToChange ++", + "name": "address(target).call()", "source_mapping": { - "start": 1347, - "length": 25, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 60 + 52 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "varChanger", + "name": "externalCaller", "source_mapping": { - "start": 1307, - "length": 72, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -2617,146 +2735,30 @@ "ending_column": 0 } }, - "signature": "varChanger()" + "signature": "externalCaller(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" - } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad3(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#32-36):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#33)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#52)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#34)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad3(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L32-L36):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L33)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L52)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L34)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L32-L36", - "id": "e1fae91060d6fa1e5a3655e7bd39bf087c5c66ddc73630646dff0ba23c65dfd5", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad4", - "source_mapping": { - "start": 801, - "length": 172, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad4(address)" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "externalCaller(target)", + "name": "ethSender(address(0))", "source_mapping": { - "start": 848, - "length": 22, + "start": 880, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 39 + 40 ], "starting_column": 9, - "ending_column": 31 + "ending_column": 30 }, "type_specific_fields": { "parent": { @@ -2865,42 +2867,42 @@ } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "address(target).call()", + "name": "address(target).call.value(1)()", "source_mapping": { - "start": 1171, - "length": 24, + "start": 1261, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 52 + 56 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "ethSender", "source_mapping": { - "start": 1113, - "length": 89, + "start": 1208, + "length": 93, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, - "lines": [ - 51, - 52, - 53 + "lines": [ + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -2984,7 +2986,7 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "ethSender(address)" } } }, @@ -2994,20 +2996,20 @@ }, { "type": "node", - "name": "ethSender(address(0))", + "name": "varChanger()", "source_mapping": { - "start": 880, - "length": 21, + "start": 911, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 40 + 41 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 21 }, "type_specific_fields": { "parent": { @@ -3116,42 +3118,43 @@ } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" } }, { "type": "node", - "name": "address(target).call.value(1)()", + "name": "anotherVariableToChange ++", "source_mapping": { - "start": 1261, - "length": 33, + "start": 1347, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 60 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "varChanger", "source_mapping": { - "start": 1208, - "length": 93, + "start": 1307, + "length": 72, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55, - 56, - 57 + 59, + 60, + 61 ], "starting_column": 5, "ending_column": 6 @@ -3235,19 +3238,134 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "varChanger()" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" + } + } + ], + "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#38-43):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#39)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#52)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#56)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#41)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L38-L43):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L39)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L52)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L56)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L41)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L38-L43", + "id": "d049c8562c4857b9d8bc23ceca965bd5fc572520db59bc43c0010f03c1d08936", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "source_mapping": { + "start": 670, + "length": 125, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35, + 36 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad3(address)" } }, { "type": "node", "name": "externalCaller(target)", "source_mapping": { - "start": 848, + "start": 717, "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -3255,7 +3373,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 39 + 33 ], "starting_column": 9, "ending_column": 31 @@ -3263,22 +3381,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad3", "source_mapping": { - "start": 801, - "length": 172, + "start": 670, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 32, + 33, + 34, + 35, + 36 ], "starting_column": 5, "ending_column": 6 @@ -3362,12 +3479,12 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad3(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { @@ -3496,40 +3613,39 @@ }, { "type": "node", - "name": "ethSender(address(0))", + "name": "externalCaller(target)", "source_mapping": { - "start": 880, - "length": 21, + "start": 717, + "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 40 + 33 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad3", "source_mapping": { - "start": 801, - "length": 172, + "start": 670, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 32, + 33, + 34, + 35, + 36 ], "starting_column": 5, "ending_column": 6 @@ -3613,7 +3729,7 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad3(address)" } } }, @@ -3623,37 +3739,37 @@ }, { "type": "node", - "name": "address(target).call.value(1)()", + "name": "address(target).call()", "source_mapping": { - "start": 1261, - "length": 33, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 52 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "externalCaller", "source_mapping": { - "start": 1208, - "length": 93, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55, - 56, - 57 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -3737,7 +3853,7 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "externalCaller(address)" } } }, @@ -3749,7 +3865,7 @@ "type": "node", "name": "varChanger()", "source_mapping": { - "start": 911, + "start": 749, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -3757,7 +3873,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 41 + 34 ], "starting_column": 9, "ending_column": 21 @@ -3765,22 +3881,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad3", "source_mapping": { - "start": 801, - "length": 172, + "start": 670, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35, + 36 ], "starting_column": 5, "ending_column": 6 @@ -3864,7 +3979,7 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad3(address)" } } }, @@ -3999,10 +4114,10 @@ } } ], - "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#38-43):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#39)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#52)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#56)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#40)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#41)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L38-L43):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L39)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L52)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L56)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L40)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L41)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L38-L43", - "id": "d049c8562c4857b9d8bc23ceca965bd5fc572520db59bc43c0010f03c1d08936", + "description": "Reentrancy in ReentrancyBenign.bad3(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#32-36):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#33)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#52)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#34)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad3(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L32-L36):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L33)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L52)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L34)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L32-L36", + "id": "e1fae91060d6fa1e5a3655e7bd39bf087c5c66ddc73630646dff0ba23c65dfd5", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" @@ -4011,21 +4126,23 @@ "elements": [ { "type": "function", - "name": "bad5", + "name": "bad0", "source_mapping": { - "start": 979, - "length": 128, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45, - 46, - 47, - 48, - 49 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -4109,44 +4226,46 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad0()" } }, { "type": "node", - "name": "ethSender(address(0))", + "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 1026, - "length": 21, + "start": 152, + "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 46 + 8 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad0", "source_mapping": { - "start": 979, - "length": 128, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45, - 46, - 47, - 48, - 49 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -4230,7 +4349,7 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad0()" } } }, @@ -4240,37 +4359,41 @@ }, { "type": "node", - "name": "address(target).call.value(1)()", + "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 1261, - "length": 33, + "start": 152, + "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 8 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "bad0", "source_mapping": { - "start": 1208, - "length": 93, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55, - 56, - 57 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -4354,7 +4477,7 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "bad0()" } } }, @@ -4364,9 +4487,9 @@ }, { "type": "node", - "name": "varChanger()", + "name": "counter += 1", "source_mapping": { - "start": 1057, + "start": 255, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", @@ -4374,7 +4497,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 47 + 12 ], "starting_column": 9, "ending_column": 21 @@ -4382,146 +4505,23 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", - "source_mapping": { - "start": 979, - "length": 128, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 45, - 46, - 47, - 48, - 49 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad5(address)" - } - } - }, - "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" - } - }, - { - "type": "node", - "name": "anotherVariableToChange ++", - "source_mapping": { - "start": 1347, - "length": 25, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 60 - ], - "starting_column": 9, - "ending_column": 34 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "varChanger", + "name": "bad0", "source_mapping": { - "start": 1307, - "length": 72, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -4605,20 +4605,20 @@ "ending_column": 0 } }, - "signature": "varChanger()" + "signature": "bad0()" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "variable_name": "counter" } } ], - "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#45-49):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#46)\n\t\t- address(target).call.value(1)() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#47)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L45-L49):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L46)\n\t\t- [address(target).call.value(1)()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L47)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L45-L49", - "id": "8fc09eeb31a7d9cdd78f1271f6dc486187ef7e75d35bf205c1e8a4cf70bd5ab9", + "description": "Reentrancy in ReentrancyBenign.bad0() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#7-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#8)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#12)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad0()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L7-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L8)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L12)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.6.11/reentrancy-benign.sol#L7-L13", + "id": "e35d0f014a7459e09ea372373807f325e4c901c8412f473d46c93b949e8b4908", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json b/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json index 9c6041cdf..b0f060bbb 100644 --- a/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json +++ b/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json @@ -4,23 +4,21 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad5", "source_mapping": { - "start": 119, - "length": 155, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -104,46 +102,44 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad5(address)" } }, { "type": "node", - "name": "(success) = msg.sender.call()", + "name": "ethSender(address(0))", "source_mapping": { - "start": 152, - "length": 37, + "start": 1026, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 8 + 46 ], "starting_column": 9, - "ending_column": 46 + "ending_column": 30 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad5", "source_mapping": { - "start": 119, - "length": 155, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -227,7 +223,7 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad5(address)" } } }, @@ -237,41 +233,37 @@ }, { "type": "node", - "name": "(success) = msg.sender.call()", + "name": "address(target).call{value: 1}()", "source_mapping": { - "start": 152, - "length": 37, + "start": 1261, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 8 + 56 ], "starting_column": 9, - "ending_column": 46 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "ethSender", "source_mapping": { - "start": 119, - "length": 155, + "start": 1208, + "length": 93, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -355,7 +347,7 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "ethSender(address)" } } }, @@ -365,9 +357,9 @@ }, { "type": "node", - "name": "counter += 1", + "name": "varChanger()", "source_mapping": { - "start": 255, + "start": 1057, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -375,7 +367,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 12 + 47 ], "starting_column": 9, "ending_column": 21 @@ -383,23 +375,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad5", "source_mapping": { - "start": 119, - "length": 155, + "start": 979, + "length": 128, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 45, + 46, + 47, + 48, + 49 ], "starting_column": 5, "ending_column": 6 @@ -483,164 +473,48 @@ "ending_column": 0 } }, - "signature": "bad0()" + "signature": "bad5(address)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "counter" - } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad0() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#7-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#8)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#12)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad0()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L7-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L8)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L12)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L7-L13", - "id": "b162165ec474792dc887b42c40e2d6ba28de0bde22bebdc2b5f63381bde85086", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 280, - "length": 135, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 15, - 16, - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad1(address)" + "variable_name": "anotherVariableToChange" } }, { "type": "node", - "name": "(success) = target.call()", + "name": "anotherVariableToChange ++", "source_mapping": { - "start": 327, - "length": 33, + "start": 1347, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 16 + 60 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "varChanger", "source_mapping": { - "start": 280, - "length": 135, + "start": 1307, + "length": 72, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 59, + 60, + 61 ], "starting_column": 5, "ending_column": 6 @@ -724,49 +598,166 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "varChanger()" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" } - }, - { - "type": "node", - "name": "(success) = target.call()", - "source_mapping": { - "start": 327, - "length": 33, + } + ], + "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#45-49):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#46)\n\t\t- address(target).call{value: 1}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#47)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L45-L49):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L46)\n\t\t- [address(target).call{value: 1}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L47)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L45-L49", + "id": "068323f92a1eaa2d419e19d35185150639a2b3f992b9b382972f13d546cd414d", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "source_mapping": { + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 16 + 38, + 39, + 40, + 41, + 42, + 43 ], - "starting_column": 9, - "ending_column": 42 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "bad1", + "type": "contract", + "name": "ReentrancyBenign", "source_mapping": { - "start": 280, - "length": 135, + "start": 28, + "length": 1353, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, 15, 16, 17, 18, - 19 + 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, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad4(address)" + } + }, + { + "type": "node", + "name": "externalCaller(target)", + "source_mapping": { + "start": 848, + "length": 22, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 39 + ], + "starting_column": 9, + "ending_column": 31 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "source_mapping": { + "start": 801, + "length": 172, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -850,49 +841,47 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "counter += 1", + "name": "address(target).call()", "source_mapping": { - "start": 396, - "length": 12, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 18 + 52 ], "starting_column": 9, - "ending_column": 21 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "externalCaller", "source_mapping": { - "start": 280, - "length": 135, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -976,174 +965,425 @@ "ending_column": 0 } }, - "signature": "bad1(address)" + "signature": "externalCaller(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "counter" + "underlying_type": "external_calls_sending_eth" } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad1(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#15-19):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#16)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#18)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad1(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L15-L19):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L16)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L18)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L15-L19", - "id": "bc777bbc032af8fcb23146285a47012df0d4a7825596c3fc57a27e8758500dd2", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "function", - "name": "bad2", + "type": "node", + "name": "ethSender(address(0))", "source_mapping": { - "start": 421, - "length": 243, + "start": 880, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 40 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 9, + "ending_column": 30 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "ReentrancyBenign", + "type": "function", + "name": "bad4", "source_mapping": { - "start": 28, - "length": 1353, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, + 43 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad4(address)" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls" + } + }, + { + "type": "node", + "name": "address(target).call{value: 1}()", + "source_mapping": { + "start": 1261, + "length": 33, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 56 + ], + "starting_column": 9, + "ending_column": 42 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "ethSender", + "source_mapping": { + "start": 1208, + "length": 93, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ 55, 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 + 57 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "ethSender(address)" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls_sending_eth" + } + }, + { + "type": "node", + "name": "externalCaller(target)", + "source_mapping": { + "start": 848, + "length": 22, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 39 + ], + "starting_column": 9, + "ending_column": 31 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "source_mapping": { + "start": 801, + "length": 172, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 38, + 39, + 40, + 41, + 42, + 43 ], - "starting_column": 1, - "ending_column": 0 + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad4(address)" } - }, - "signature": "bad2(address)" + } + }, + "additional_fields": { + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "(success) = target.call()", + "name": "address(target).call()", "source_mapping": { - "start": 468, - "length": 33, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 22 + 52 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "externalCaller", "source_mapping": { - "start": 421, - "length": 243, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -1227,54 +1467,50 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "externalCaller(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "address(target).call{value: 1000}()", + "name": "ethSender(address(0))", "source_mapping": { - "start": 538, - "length": 36, + "start": 880, + "length": 21, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 24 + 40 ], - "starting_column": 13, - "ending_column": 49 + "starting_column": 9, + "ending_column": 30 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad4", "source_mapping": { - "start": 421, - "length": 243, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -1358,19 +1594,19 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "(success) = target.call()", + "name": "address(target).call{value: 1}()", "source_mapping": { - "start": 468, + "start": 1261, "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1378,7 +1614,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 22 + 56 ], "starting_column": 9, "ending_column": 42 @@ -1386,26 +1622,19 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "ethSender", "source_mapping": { - "start": 421, - "length": 243, + "start": 1208, + "length": 93, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 55, + 56, + 57 ], "starting_column": 5, "ending_column": 6 @@ -1489,7 +1718,7 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "ethSender(address)" } } }, @@ -1499,44 +1728,40 @@ }, { "type": "node", - "name": "address(target).call{value: 1000}()", + "name": "varChanger()", "source_mapping": { - "start": 538, - "length": 36, + "start": 911, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 24 + 41 ], - "starting_column": 13, - "ending_column": 49 + "starting_column": 9, + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad4", "source_mapping": { - "start": 421, - "length": 243, + "start": 801, + "length": 172, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 38, + 39, + 40, + 41, + 42, + 43 ], "starting_column": 5, "ending_column": 6 @@ -1620,54 +1845,48 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "bad4(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "anotherVariableToChange" } }, { "type": "node", - "name": "counter += 1", + "name": "anotherVariableToChange ++", "source_mapping": { - "start": 588, - "length": 12, + "start": 1347, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 25 + 60 ], - "starting_column": 13, - "ending_column": 25 + "starting_column": 9, + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "varChanger", "source_mapping": { - "start": 421, - "length": 243, + "start": 1307, + "length": 72, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30 + 59, + 60, + 61 ], "starting_column": 5, "ending_column": 6 @@ -1751,20 +1970,20 @@ "ending_column": 0 } }, - "signature": "bad2(address)" + "signature": "varChanger()" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "counter" + "variable_name": "anotherVariableToChange" } } ], - "description": "Reentrancy in ReentrancyBenign.bad2(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#21-30):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#22)\n\t- address(target).call{value: 1000}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#24)\n\tExternal calls sending eth:\n\t- address(target).call{value: 1000}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#24)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#25)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad2(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L21-L30):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L22)\n\t- [address(target).call{value: 1000}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L24)\n\tExternal calls sending eth:\n\t- [address(target).call{value: 1000}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L24)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L25)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L21-L30", - "id": "79c88ecb3f548fa798f9c5cbb0e3658e78510fbd1cbae4455df47ba39a6fa505", + "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#38-43):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#39)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#52)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#40)\n\t\t- address(target).call{value: 1}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#56)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#40)\n\t\t- address(target).call{value: 1}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#41)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L38-L43):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L39)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L52)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L40)\n\t\t- [address(target).call{value: 1}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L56)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L40)\n\t\t- [address(target).call{value: 1}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L41)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L38-L43", + "id": "693e60a81db5856504cce9c31c639630515a7bf4431ba129d2f1dfbef4caa0e6", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" @@ -1773,21 +1992,26 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 670, - "length": 125, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -1871,44 +2095,49 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad2(address)" } }, { "type": "node", - "name": "externalCaller(target)", + "name": "(success) = target.call()", "source_mapping": { - "start": 717, - "length": 22, + "start": 468, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 33 + 22 ], "starting_column": 9, - "ending_column": 31 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 670, - "length": 125, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -1992,7 +2221,7 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad2(address)" } } }, @@ -2002,163 +2231,44 @@ }, { "type": "node", - "name": "address(target).call()", - "source_mapping": { - "start": 1171, - "length": 24, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 52 - ], - "starting_column": 9, - "ending_column": 33 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "externalCaller", - "source_mapping": { - "start": 1113, - "length": 89, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 51, - 52, - 53 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "externalCaller(address)" - } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" - } - }, - { - "type": "node", - "name": "externalCaller(target)", + "name": "address(target).call{value: 1000}()", "source_mapping": { - "start": 717, - "length": 22, + "start": 538, + "length": 36, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 33 + 24 ], - "starting_column": 9, - "ending_column": 31 + "starting_column": 13, + "ending_column": 49 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 670, - "length": 125, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -2242,47 +2352,54 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad2(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "address(target).call()", + "name": "(success) = target.call()", "source_mapping": { - "start": 1171, - "length": 24, + "start": 468, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 52 + 22 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "bad2", "source_mapping": { - "start": 1113, - "length": 89, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 51, - 52, - 53 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -2366,7 +2483,7 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "bad2(address)" } } }, @@ -2376,39 +2493,44 @@ }, { "type": "node", - "name": "varChanger()", + "name": "address(target).call{value: 1000}()", "source_mapping": { - "start": 749, - "length": 12, + "start": 538, + "length": 36, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 34 + 24 ], - "starting_column": 9, - "ending_column": 21 + "starting_column": 13, + "ending_column": 49 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad2", "source_mapping": { - "start": 670, - "length": 125, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 32, - 33, - 34, - 35, - 36 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -2492,48 +2614,54 @@ "ending_column": 0 } }, - "signature": "bad3(address)" + "signature": "bad2(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "anotherVariableToChange ++", + "name": "counter += 1", "source_mapping": { - "start": 1347, - "length": 25, + "start": 588, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 60 + 25 ], - "starting_column": 9, - "ending_column": 34 + "starting_column": 13, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "varChanger", + "name": "bad2", "source_mapping": { - "start": 1307, - "length": 72, + "start": 421, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61 + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 ], "starting_column": 5, "ending_column": 6 @@ -2617,20 +2745,20 @@ "ending_column": 0 } }, - "signature": "varChanger()" + "signature": "bad2(address)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "variable_name": "counter" } } ], - "description": "Reentrancy in ReentrancyBenign.bad3(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#32-36):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#33)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#52)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#34)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad3(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L32-L36):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L33)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L52)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L34)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L32-L36", - "id": "d8315c27e619d086ab8ec4206250374daad8449de43d0eb685dc2cb38376e6e3", + "description": "Reentrancy in ReentrancyBenign.bad2(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#21-30):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#22)\n\t- address(target).call{value: 1000}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#24)\n\tExternal calls sending eth:\n\t- address(target).call{value: 1000}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#24)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#25)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad2(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L21-L30):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L22)\n\t- [address(target).call{value: 1000}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L24)\n\tExternal calls sending eth:\n\t- [address(target).call{value: 1000}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L24)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L25)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L21-L30", + "id": "79c88ecb3f548fa798f9c5cbb0e3658e78510fbd1cbae4455df47ba39a6fa505", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" @@ -2639,22 +2767,23 @@ "elements": [ { "type": "function", - "name": "bad4", + "name": "bad0", "source_mapping": { - "start": 801, - "length": 172, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -2724,183 +2853,60 @@ 52, 53, 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad4(address)" - } - }, - { - "type": "node", - "name": "externalCaller(target)", - "source_mapping": { - "start": 848, - "length": 22, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 39 - ], - "starting_column": 9, - "ending_column": 31 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad4", - "source_mapping": { - "start": 801, - "length": 172, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad4(address)" + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 } - } - }, - "additional_fields": { - "underlying_type": "external_calls" + }, + "signature": "bad0()" } }, { "type": "node", - "name": "address(target).call()", + "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 1171, - "length": 24, + "start": 152, + "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 52 + 8 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "bad0", "source_mapping": { - "start": 1113, - "length": 89, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 51, - 52, - 53 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -2984,50 +2990,51 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "ethSender(address(0))", + "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 880, - "length": 21, + "start": 152, + "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 40 + 8 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad0", "source_mapping": { - "start": 801, - "length": 172, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -3111,47 +3118,51 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "address(target).call{value: 1}()", + "name": "counter += 1", "source_mapping": { - "start": 1261, - "length": 33, + "start": 255, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 12 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "bad0", "source_mapping": { - "start": 1208, - "length": 93, + "start": 119, + "length": 155, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55, - 56, - 57 + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -3235,174 +3246,164 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "counter" } - }, + } + ], + "description": "Reentrancy in ReentrancyBenign.bad0() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#7-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#8)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#12)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad0()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L7-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L8)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L12)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L7-L13", + "id": "b162165ec474792dc887b42c40e2d6ba28de0bde22bebdc2b5f63381bde85086", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "externalCaller(target)", + "type": "function", + "name": "bad1", "source_mapping": { - "start": 848, - "length": 22, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 39 + 15, + 16, + 17, + 18, + 19 ], - "starting_column": 9, - "ending_column": 31 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "bad4", + "type": "contract", + "name": "ReentrancyBenign", "source_mapping": { - "start": 801, - "length": 172, + "start": 28, + "length": 1353, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad4(address)" + 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, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" + }, + "signature": "bad1(address)" } }, { "type": "node", - "name": "address(target).call()", + "name": "(success) = target.call()", "source_mapping": { - "start": 1171, - "length": 24, + "start": 327, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 52 + 16 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "externalCaller", + "name": "bad1", "source_mapping": { - "start": 1113, - "length": 89, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 51, - 52, - 53 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -3486,50 +3487,49 @@ "ending_column": 0 } }, - "signature": "externalCaller(address)" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "ethSender(address(0))", + "name": "(success) = target.call()", "source_mapping": { - "start": 880, - "length": 21, + "start": 327, + "length": 33, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 40 + 16 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad1", "source_mapping": { - "start": 801, - "length": 172, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -3613,7 +3613,7 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad1(address)" } } }, @@ -3623,37 +3623,39 @@ }, { "type": "node", - "name": "address(target).call{value: 1}()", + "name": "counter += 1", "source_mapping": { - "start": 1261, - "length": 33, + "start": 396, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 18 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 21 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "bad1", "source_mapping": { - "start": 1208, - "length": 93, + "start": 280, + "length": 135, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55, - 56, - 57 + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -3737,50 +3739,164 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "counter" + } + } + ], + "description": "Reentrancy in ReentrancyBenign.bad1(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#15-19):\n\tExternal calls:\n\t- (success) = target.call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#16)\n\tState variables written after the call(s):\n\t- counter += 1 (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#18)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad1(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L15-L19):\n\tExternal calls:\n\t- [(success) = target.call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L16)\n\tState variables written after the call(s):\n\t- [counter += 1](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L18)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L15-L19", + "id": "bc777bbc032af8fcb23146285a47012df0d4a7825596c3fc57a27e8758500dd2", + "check": "reentrancy-benign", + "impact": "Low", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "source_mapping": { + "start": 670, + "length": 125, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35, + 36 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ReentrancyBenign", + "source_mapping": { + "start": 28, + "length": 1353, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad3(address)" } }, { "type": "node", - "name": "varChanger()", + "name": "externalCaller(target)", "source_mapping": { - "start": 911, - "length": 12, + "start": 717, + "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 41 + 33 ], "starting_column": 9, - "ending_column": 21 + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad4", + "name": "bad3", "source_mapping": { - "start": 801, - "length": 172, + "start": 670, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 38, - 39, - 40, - 41, - 42, - 43 + 32, + 33, + 34, + 35, + 36 ], "starting_column": 5, "ending_column": 6 @@ -3864,48 +3980,47 @@ "ending_column": 0 } }, - "signature": "bad4(address)" + "signature": "bad3(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "anotherVariableToChange ++", + "name": "address(target).call()", "source_mapping": { - "start": 1347, - "length": 25, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 60 + 52 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "varChanger", + "name": "externalCaller", "source_mapping": { - "start": 1307, - "length": 72, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 59, - 60, - 61 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -3989,164 +4104,49 @@ "ending_column": 0 } }, - "signature": "varChanger()" + "signature": "externalCaller(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "anotherVariableToChange" - } - } - ], - "description": "Reentrancy in ReentrancyBenign.bad4(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#38-43):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#39)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#52)\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#40)\n\t\t- address(target).call{value: 1}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#56)\n\tExternal calls sending eth:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#40)\n\t\t- address(target).call{value: 1}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#41)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad4(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L38-L43):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L39)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L52)\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L40)\n\t\t- [address(target).call{value: 1}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L56)\n\tExternal calls sending eth:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L40)\n\t\t- [address(target).call{value: 1}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L41)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L38-L43", - "id": "693e60a81db5856504cce9c31c639630515a7bf4431ba129d2f1dfbef4caa0e6", - "check": "reentrancy-benign", - "impact": "Low", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad5", - "source_mapping": { - "start": 979, - "length": 128, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "is_dependency": false, - "lines": [ - 45, - 46, - 47, - 48, - 49 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyBenign", - "source_mapping": { - "start": 28, - "length": 1353, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.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, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "bad5(address)" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "ethSender(address(0))", + "name": "externalCaller(target)", "source_mapping": { - "start": 1026, - "length": 21, + "start": 717, + "length": 22, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 46 + 33 ], "starting_column": 9, - "ending_column": 30 + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad3", "source_mapping": { - "start": 979, - "length": 128, + "start": 670, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45, - 46, - 47, - 48, - 49 + 32, + 33, + 34, + 35, + 36 ], "starting_column": 5, "ending_column": 6 @@ -4230,47 +4230,47 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad3(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "address(target).call{value: 1}()", + "name": "address(target).call()", "source_mapping": { - "start": 1261, - "length": 33, + "start": 1171, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 56 + 52 ], "starting_column": 9, - "ending_column": 42 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "ethSender", + "name": "externalCaller", "source_mapping": { - "start": 1208, - "length": 93, + "start": 1113, + "length": 89, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 55, - 56, - 57 + 51, + 52, + 53 ], "starting_column": 5, "ending_column": 6 @@ -4354,7 +4354,7 @@ "ending_column": 0 } }, - "signature": "ethSender(address)" + "signature": "externalCaller(address)" } } }, @@ -4366,7 +4366,7 @@ "type": "node", "name": "varChanger()", "source_mapping": { - "start": 1057, + "start": 749, "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4374,7 +4374,7 @@ "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 47 + 34 ], "starting_column": 9, "ending_column": 21 @@ -4382,21 +4382,21 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad5", + "name": "bad3", "source_mapping": { - "start": 979, - "length": 128, + "start": 670, + "length": 125, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "is_dependency": false, "lines": [ - 45, - 46, - 47, - 48, - 49 + 32, + 33, + 34, + 35, + 36 ], "starting_column": 5, "ending_column": 6 @@ -4480,7 +4480,7 @@ "ending_column": 0 } }, - "signature": "bad5(address)" + "signature": "bad3(address)" } } }, @@ -4615,10 +4615,10 @@ } } ], - "description": "Reentrancy in ReentrancyBenign.bad5(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#45-49):\n\tExternal calls:\n\t- ethSender(address(0)) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#46)\n\t\t- address(target).call{value: 1}() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#56)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#47)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#60)\n", - "markdown": "Reentrancy in [ReentrancyBenign.bad5(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L45-L49):\n\tExternal calls:\n\t- [ethSender(address(0))](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L46)\n\t\t- [address(target).call{value: 1}()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L56)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L47)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L60)\n", - "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L45-L49", - "id": "068323f92a1eaa2d419e19d35185150639a2b3f992b9b382972f13d546cd414d", + "description": "Reentrancy in ReentrancyBenign.bad3(address) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#32-36):\n\tExternal calls:\n\t- externalCaller(target) (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#33)\n\t\t- address(target).call() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#52)\n\tState variables written after the call(s):\n\t- varChanger() (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#34)\n\t\t- anotherVariableToChange ++ (tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#60)\n", + "markdown": "Reentrancy in [ReentrancyBenign.bad3(address)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L32-L36):\n\tExternal calls:\n\t- [externalCaller(target)](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L33)\n\t\t- [address(target).call()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L52)\n\tState variables written after the call(s):\n\t- [varChanger()](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L34)\n\t\t- [anotherVariableToChange ++](tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L60)\n", + "first_markdown_element": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol#L32-L36", + "id": "d8315c27e619d086ab8ec4206250374daad8449de43d0eb685dc2cb38376e6e3", "check": "reentrancy-benign", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json index 0e531c382..c92dbd48b 100644 --- a/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json @@ -4,101 +4,31 @@ "elements": [ { "type": "function", - "name": "executeProposal", + "name": "refund", "source_mapping": { - "start": 32955, - "length": 2978, - "filename_used": "/GENERIC_PATH", + "start": 11531, + "length": 635, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937 + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332 ], "starting_column": 5, "ending_column": 6 @@ -106,3874 +36,1451 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "DAO", + "name": "TokenCreation", "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", + "start": 10437, + "length": 2342, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "executeProposal(uint256,bytes)" - } - }, - { - "type": "node", - "name": "! isRecipientAllowed(p.recipient)", - "source_mapping": { - "start": 33981, - "length": 32, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 881 - ], - "starting_column": 13, - "ending_column": 45 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "executeProposal", - "source_mapping": { - "start": 32955, - "length": 2978, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "executeProposal(uint256,bytes)" - } - } - }, - "additional_fields": { - "underlying_type": "external_calls" - } - }, - { - "type": "node", - "name": "allowedRecipients[_recipient] || (_recipient == address(extraBalance) && totalRewardToken > extraBalance.accumulatedInput())", - "source_mapping": { - "start": 43091, - "length": 289, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 1159, - 1160, - 1161, - 1162, - 1163 - ], - "starting_column": 13, - "ending_column": 71 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "isRecipientAllowed", - "source_mapping": { - "start": 42994, - "length": 457, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "isRecipientAllowed(address)" - } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" - } - }, - { - "type": "node", - "name": "! p.recipient.call.value(p.amount)(_transactionData)", - "source_mapping": { - "start": 35109, - "length": 51, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 915 - ], - "starting_column": 17, - "ending_column": 68 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "executeProposal", - "source_mapping": { - "start": 32955, - "length": 2978, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "executeProposal(uint256,bytes)" - } - } - }, - "additional_fields": { - "underlying_type": "external_calls" - } - }, - { - "type": "node", - "name": "! p.creator.send(p.proposalDeposit)", - "source_mapping": { - "start": 34718, - "length": 34, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 904 - ], - "starting_column": 17, - "ending_column": 51 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "executeProposal", - "source_mapping": { - "start": 32955, - "length": 2978, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "executeProposal(uint256,bytes)" - } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" - } - }, - { - "type": "node", - "name": "! p.recipient.call.value(p.amount)(_transactionData)", - "source_mapping": { - "start": 35109, - "length": 51, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 915 - ], - "starting_column": 17, - "ending_column": 68 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "executeProposal", - "source_mapping": { - "start": 32955, - "length": 2978, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "refund()" + } + }, + { + "type": "node", + "name": "extraBalance.balance >= extraBalance.accumulatedInput()", + "source_mapping": { + "start": 11704, + "length": 55, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 321 + ], + "starting_column": 17, + "ending_column": 72 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "refund", + "source_mapping": { + "start": 11531, + "length": 635, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TokenCreation", + "source_mapping": { + "start": 10437, + "length": 2342, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "refund()" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls" + } + }, + { + "type": "node", + "name": "extraBalance.payOut(address(this),extraBalance.accumulatedInput())", + "source_mapping": { + "start": 11777, + "length": 67, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 322 + ], + "starting_column": 17, + "ending_column": 84 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "refund", + "source_mapping": { + "start": 11531, + "length": 635, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TokenCreation", + "source_mapping": { + "start": 10437, + "length": 2342, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "refund()" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls" + } + }, + { + "type": "node", + "name": "msg.sender.call.value(weiGiven[msg.sender])()", + "source_mapping": { + "start": 11893, + "length": 45, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 325 + ], + "starting_column": 17, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "refund", + "source_mapping": { + "start": 11531, + "length": 635, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TokenCreation", + "source_mapping": { + "start": 10437, + "length": 2342, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "refund()" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls" + } + }, + { + "type": "node", + "name": "msg.sender.call.value(weiGiven[msg.sender])()", + "source_mapping": { + "start": 11893, + "length": 45, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 325 + ], + "starting_column": 17, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "refund", + "source_mapping": { + "start": 11531, + "length": 635, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TokenCreation", + "source_mapping": { + "start": 10437, + "length": 2342, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "executeProposal(uint256,bytes)" + "signature": "refund()" + } + } + }, + "additional_fields": { + "underlying_type": "external_calls_sending_eth" + } + }, + { + "type": "node", + "name": "weiGiven[msg.sender] = 0", + "source_mapping": { + "start": 12111, + "length": 24, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 329 + ], + "starting_column": 17, + "ending_column": 41 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "refund", + "source_mapping": { + "start": 11531, + "length": 635, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "TokenCreation", + "source_mapping": { + "start": 10437, + "length": 2342, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "refund()" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "weiGiven" + } + } + ], + "description": "Reentrancy in TokenCreation.refund() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#318-332):\n\tExternal calls:\n\t- extraBalance.balance >= extraBalance.accumulatedInput() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#321)\n\t- extraBalance.payOut(address(this),extraBalance.accumulatedInput()) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#322)\n\t- msg.sender.call.value(weiGiven[msg.sender])() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#325)\n\tExternal calls sending eth:\n\t- msg.sender.call.value(weiGiven[msg.sender])() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#325)\n\tState variables written after the call(s):\n\t- weiGiven[msg.sender] = 0 (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#329)\n", + "markdown": "Reentrancy in [TokenCreation.refund()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L318-L332):\n\tExternal calls:\n\t- [extraBalance.balance >= extraBalance.accumulatedInput()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L321)\n\t- [extraBalance.payOut(address(this),extraBalance.accumulatedInput())](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L322)\n\t- [msg.sender.call.value(weiGiven[msg.sender])()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L325)\n\tExternal calls sending eth:\n\t- [msg.sender.call.value(weiGiven[msg.sender])()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L325)\n\tState variables written after the call(s):\n\t- [weiGiven[msg.sender] = 0](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L329)\n", + "first_markdown_element": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L318-L332", + "id": "c464e3c8a788029668f77cdff5d7e6a2af53a5ec0f79e21392a5910bfb9dcbe5", + "check": "reentrancy-eth", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "executeProposal", + "source_mapping": { + "start": 32955, + "length": 2978, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "DAO", + "source_mapping": { + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 + ], + "starting_column": 1, + "ending_column": 2 } - } - }, - "additional_fields": { - "underlying_type": "external_calls_sending_eth" + }, + "signature": "executeProposal(uint256,bytes)" } }, { "type": "node", - "name": "p.proposalPassed = true", + "name": "! isRecipientAllowed(p.recipient)", "source_mapping": { - "start": 35198, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 33981, + "length": 32, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 918 + 881 ], "starting_column": 13, - "ending_column": 36 + "ending_column": 45 }, "type_specific_fields": { "parent": { @@ -3982,7 +1489,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4084,7 +1591,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4630,125 +2137,53 @@ } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "proposals" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "closeProposal(_proposalID)", + "name": "allowedRecipients[_recipient] || (_recipient == address(extraBalance) && totalRewardToken > extraBalance.accumulatedInput())", "source_mapping": { - "start": 35817, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 43091, + "length": 289, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 933 - ], - "starting_column": 9, - "ending_column": 35 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "executeProposal", - "source_mapping": { - "start": 32955, - "length": 2978, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937 + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 1159, + 1160, + 1161, + 1162, + 1163 + ], + "starting_column": 13, + "ending_column": 71 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "isRecipientAllowed", + "source_mapping": { + "start": 42994, + "length": 457, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167 ], "starting_column": 5, "ending_column": 6 @@ -4760,7 +2195,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -5301,51 +2736,129 @@ "ending_column": 2 } }, - "signature": "executeProposal(uint256,bytes)" + "signature": "isRecipientAllowed(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "proposals" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "p.open = false", + "name": "! p.recipient.call.value(p.amount)(_transactionData)", "source_mapping": { - "start": 36121, - "length": 14, - "filename_used": "/GENERIC_PATH", + "start": 35109, + "length": 51, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 944 + 915 ], - "starting_column": 9, - "ending_column": 23 + "starting_column": 17, + "ending_column": 68 }, "type_specific_fields": { "parent": { "type": "function", - "name": "closeProposal", + "name": "executeProposal", "source_mapping": { - "start": 35940, - "length": 202, - "filename_used": "/GENERIC_PATH", + "start": 32955, + "length": 2978, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 940, - 941, - 942, - 943, - 944, - 945 + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937 ], "starting_column": 5, "ending_column": 6 @@ -5357,7 +2870,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -5898,31 +3411,30 @@ "ending_column": 2 } }, - "signature": "closeProposal(uint256)" + "signature": "executeProposal(uint256,bytes)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "proposals" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "rewardToken[address(this)] += p.amount", + "name": "! p.creator.send(p.proposalDeposit)", "source_mapping": { - "start": 35698, - "length": 38, - "filename_used": "/GENERIC_PATH", + "start": 34718, + "length": 34, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 928 + 904 ], "starting_column": 17, - "ending_column": 55 + "ending_column": 51 }, "type_specific_fields": { "parent": { @@ -5931,7 +3443,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6033,7 +3545,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6579,26 +4091,25 @@ } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "rewardToken" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "closeProposal(_proposalID)", + "name": "! p.recipient.call.value(p.amount)(_transactionData)", "source_mapping": { - "start": 35817, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 35109, + "length": 51, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 933 + 915 ], - "starting_column": 9, - "ending_column": 35 + "starting_column": 17, + "ending_column": 68 }, "type_specific_fields": { "parent": { @@ -6607,7 +4118,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6709,7 +4220,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -7255,46 +4766,124 @@ } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "sumOfProposalDeposits" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "sumOfProposalDeposits -= p.proposalDeposit", + "name": "p.proposalPassed = true", "source_mapping": { - "start": 36069, - "length": 42, - "filename_used": "/GENERIC_PATH", + "start": 35198, + "length": 23, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 943 + 918 ], "starting_column": 13, - "ending_column": 55 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "closeProposal", + "name": "executeProposal", "source_mapping": { - "start": 35940, - "length": 202, - "filename_used": "/GENERIC_PATH", + "start": 32955, + "length": 2978, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 940, - 941, - 942, - 943, - 944, - 945 + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937 ], "starting_column": 5, "ending_column": 6 @@ -7306,7 +4895,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -7847,31 +5436,31 @@ "ending_column": 2 } }, - "signature": "closeProposal(uint256)" + "signature": "executeProposal(uint256,bytes)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "sumOfProposalDeposits" + "variable_name": "proposals" } }, { "type": "node", - "name": "totalRewardToken += p.amount", + "name": "closeProposal(_proposalID)", "source_mapping": { - "start": 35754, - "length": 28, - "filename_used": "/GENERIC_PATH", + "start": 35817, + "length": 26, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 929 + 933 ], - "starting_column": 17, - "ending_column": 45 + "starting_column": 9, + "ending_column": 35 }, "type_specific_fields": { "parent": { @@ -7880,7 +5469,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -7982,7 +5571,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8443,265 +6032,131 @@ 1146, 1147, 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "executeProposal(uint256,bytes)" - } - } - }, - "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "totalRewardToken" - } - } - ], - "description": "Reentrancy in DAO.executeProposal(uint256,bytes) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#853-937):\n\tExternal calls:\n\t- ! isRecipientAllowed(p.recipient) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#881)\n\t\t- allowedRecipients[_recipient] || (_recipient == address(extraBalance) && totalRewardToken > extraBalance.accumulatedInput()) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#1159-1163)\n\t- ! p.recipient.call.value(p.amount)(_transactionData) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#915)\n\tExternal calls sending eth:\n\t- ! p.creator.send(p.proposalDeposit) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#904)\n\t- ! p.recipient.call.value(p.amount)(_transactionData) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#915)\n\tState variables written after the call(s):\n\t- p.proposalPassed = true (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#918)\n\t- closeProposal(_proposalID) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#933)\n\t\t- p.open = false (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#944)\n\t- rewardToken[address(this)] += p.amount (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#928)\n\t- closeProposal(_proposalID) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#933)\n\t\t- sumOfProposalDeposits -= p.proposalDeposit (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#943)\n\t- totalRewardToken += p.amount (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#929)\n", - "markdown": "Reentrancy in [DAO.executeProposal(uint256,bytes)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L853-L937):\n\tExternal calls:\n\t- [! isRecipientAllowed(p.recipient)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L881)\n\t\t- [allowedRecipients[_recipient] || (_recipient == address(extraBalance) && totalRewardToken > extraBalance.accumulatedInput())](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L1159-L1163)\n\t- [! p.recipient.call.value(p.amount)(_transactionData)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L915)\n\tExternal calls sending eth:\n\t- [! p.creator.send(p.proposalDeposit)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L904)\n\t- [! p.recipient.call.value(p.amount)(_transactionData)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L915)\n\tState variables written after the call(s):\n\t- [p.proposalPassed = true](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L918)\n\t- [closeProposal(_proposalID)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L933)\n\t\t- [p.open = false](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L944)\n\t- [rewardToken[address(this)] += p.amount](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L928)\n\t- [closeProposal(_proposalID)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L933)\n\t\t- [sumOfProposalDeposits -= p.proposalDeposit](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L943)\n\t- [totalRewardToken += p.amount](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L929)\n", - "first_markdown_element": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L853-L937", - "id": "da2955efdedec834e2cbc56b913933ba273e4a4da5d9c5c6be9ff59c9249b84c", - "check": "reentrancy-eth", - "impact": "High", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "refund", - "source_mapping": { - "start": 11531, - "length": 635, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TokenCreation", - "source_mapping": { - "start": 10437, - "length": 2342, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348 - ], - "starting_column": 1, - "ending_column": 2 + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "executeProposal(uint256,bytes)" } - }, - "signature": "refund()" + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "proposals" } }, { "type": "node", - "name": "extraBalance.balance >= extraBalance.accumulatedInput()", + "name": "p.open = false", "source_mapping": { - "start": 11704, - "length": 55, - "filename_used": "/GENERIC_PATH", + "start": 36121, + "length": 14, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 321 + 944 ], - "starting_column": 17, - "ending_column": 72 + "starting_column": 9, + "ending_column": 23 }, "type_specific_fields": { "parent": { "type": "function", - "name": "refund", + "name": "closeProposal", "source_mapping": { - "start": 11531, - "length": 635, - "filename_used": "/GENERIC_PATH", + "start": 35940, + "length": 202, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332 + 940, + 941, + 942, + 943, + 944, + 945 ], "starting_column": 5, "ending_column": 6 @@ -8709,136 +6164,675 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TokenCreation", + "name": "DAO", "source_mapping": { - "start": 10437, - "length": 2342, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348 + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "refund()" + "signature": "closeProposal(uint256)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "proposals" } }, { "type": "node", - "name": "extraBalance.payOut(address(this),extraBalance.accumulatedInput())", + "name": "rewardToken[address(this)] += p.amount", "source_mapping": { - "start": 11777, - "length": 67, - "filename_used": "/GENERIC_PATH", + "start": 35698, + "length": 38, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 322 + 928 ], "starting_column": 17, - "ending_column": 84 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "refund", - "source_mapping": { - "start": 11531, - "length": 635, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332 + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "executeProposal", + "source_mapping": { + "start": 32955, + "length": 2978, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937 ], "starting_column": 5, "ending_column": 6 @@ -8846,136 +6840,675 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TokenCreation", + "name": "DAO", "source_mapping": { - "start": 10437, - "length": 2342, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348 + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "refund()" + "signature": "executeProposal(uint256,bytes)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "rewardToken" } }, { "type": "node", - "name": "msg.sender.call.value(weiGiven[msg.sender])()", + "name": "closeProposal(_proposalID)", "source_mapping": { - "start": 11893, - "length": 45, - "filename_used": "/GENERIC_PATH", + "start": 35817, + "length": 26, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 325 + 933 ], - "starting_column": 17, - "ending_column": 62 + "starting_column": 9, + "ending_column": 35 }, "type_specific_fields": { "parent": { "type": "function", - "name": "refund", + "name": "executeProposal", "source_mapping": { - "start": 11531, - "length": 635, - "filename_used": "/GENERIC_PATH", + "start": 32955, + "length": 2978, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332 + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937 ], "starting_column": 5, "ending_column": 6 @@ -8983,273 +7516,1272 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TokenCreation", + "name": "DAO", "source_mapping": { - "start": 10437, - "length": 2342, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348 + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "refund()" + "signature": "executeProposal(uint256,bytes)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "sumOfProposalDeposits" } }, { "type": "node", - "name": "msg.sender.call.value(weiGiven[msg.sender])()", + "name": "sumOfProposalDeposits -= p.proposalDeposit", "source_mapping": { - "start": 11893, - "length": 45, - "filename_used": "/GENERIC_PATH", + "start": 36069, + "length": 42, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 325 + 943 ], - "starting_column": 17, - "ending_column": 62 + "starting_column": 13, + "ending_column": 55 }, "type_specific_fields": { "parent": { "type": "function", - "name": "refund", + "name": "closeProposal", "source_mapping": { - "start": 11531, - "length": 635, - "filename_used": "/GENERIC_PATH", + "start": 35940, + "length": 202, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "TokenCreation", - "source_mapping": { - "start": 10437, - "length": 2342, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348 + 940, + 941, + 942, + 943, + 944, + 945 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "DAO", + "source_mapping": { + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "refund()" + "signature": "closeProposal(uint256)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "sumOfProposalDeposits" } }, { "type": "node", - "name": "weiGiven[msg.sender] = 0", + "name": "totalRewardToken += p.amount", "source_mapping": { - "start": 12111, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 35754, + "length": 28, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 329 + 929 ], "starting_column": 17, - "ending_column": 41 + "ending_column": 45 }, "type_specific_fields": { "parent": { "type": "function", - "name": "refund", + "name": "executeProposal", "source_mapping": { - "start": 11531, - "length": 635, - "filename_used": "/GENERIC_PATH", + "start": 32955, + "length": 2978, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332 + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937 ], "starting_column": 5, "ending_column": 6 @@ -9257,97 +8789,565 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "TokenCreation", + "name": "DAO", "source_mapping": { - "start": 10437, - "length": 2342, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348 + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "refund()" + "signature": "executeProposal(uint256,bytes)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "weiGiven" + "variable_name": "totalRewardToken" } } ], - "description": "Reentrancy in TokenCreation.refund() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#318-332):\n\tExternal calls:\n\t- extraBalance.balance >= extraBalance.accumulatedInput() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#321)\n\t- extraBalance.payOut(address(this),extraBalance.accumulatedInput()) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#322)\n\t- msg.sender.call.value(weiGiven[msg.sender])() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#325)\n\tExternal calls sending eth:\n\t- msg.sender.call.value(weiGiven[msg.sender])() (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#325)\n\tState variables written after the call(s):\n\t- weiGiven[msg.sender] = 0 (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#329)\n", - "markdown": "Reentrancy in [TokenCreation.refund()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L318-L332):\n\tExternal calls:\n\t- [extraBalance.balance >= extraBalance.accumulatedInput()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L321)\n\t- [extraBalance.payOut(address(this),extraBalance.accumulatedInput())](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L322)\n\t- [msg.sender.call.value(weiGiven[msg.sender])()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L325)\n\tExternal calls sending eth:\n\t- [msg.sender.call.value(weiGiven[msg.sender])()](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L325)\n\tState variables written after the call(s):\n\t- [weiGiven[msg.sender] = 0](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L329)\n", - "first_markdown_element": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L318-L332", - "id": "c464e3c8a788029668f77cdff5d7e6a2af53a5ec0f79e21392a5910bfb9dcbe5", + "description": "Reentrancy in DAO.executeProposal(uint256,bytes) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#853-937):\n\tExternal calls:\n\t- ! isRecipientAllowed(p.recipient) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#881)\n\t\t- allowedRecipients[_recipient] || (_recipient == address(extraBalance) && totalRewardToken > extraBalance.accumulatedInput()) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#1159-1163)\n\t- ! p.recipient.call.value(p.amount)(_transactionData) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#915)\n\tExternal calls sending eth:\n\t- ! p.creator.send(p.proposalDeposit) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#904)\n\t- ! p.recipient.call.value(p.amount)(_transactionData) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#915)\n\tState variables written after the call(s):\n\t- p.proposalPassed = true (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#918)\n\t- closeProposal(_proposalID) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#933)\n\t\t- p.open = false (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#944)\n\t- rewardToken[address(this)] += p.amount (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#928)\n\t- closeProposal(_proposalID) (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#933)\n\t\t- sumOfProposalDeposits -= p.proposalDeposit (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#943)\n\t- totalRewardToken += p.amount (tests/detectors/reentrancy-eth/0.4.25/DAO.sol#929)\n", + "markdown": "Reentrancy in [DAO.executeProposal(uint256,bytes)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L853-L937):\n\tExternal calls:\n\t- [! isRecipientAllowed(p.recipient)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L881)\n\t\t- [allowedRecipients[_recipient] || (_recipient == address(extraBalance) && totalRewardToken > extraBalance.accumulatedInput())](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L1159-L1163)\n\t- [! p.recipient.call.value(p.amount)(_transactionData)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L915)\n\tExternal calls sending eth:\n\t- [! p.creator.send(p.proposalDeposit)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L904)\n\t- [! p.recipient.call.value(p.amount)(_transactionData)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L915)\n\tState variables written after the call(s):\n\t- [p.proposalPassed = true](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L918)\n\t- [closeProposal(_proposalID)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L933)\n\t\t- [p.open = false](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L944)\n\t- [rewardToken[address(this)] += p.amount](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L928)\n\t- [closeProposal(_proposalID)](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L933)\n\t\t- [sumOfProposalDeposits -= p.proposalDeposit](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L943)\n\t- [totalRewardToken += p.amount](tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L929)\n", + "first_markdown_element": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol#L853-L937", + "id": "da2955efdedec834e2cbc56b913933ba273e4a4da5d9c5c6be9ff59c9249b84c", "check": "reentrancy-eth", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json index e31dd873a..1a4c53840 100644 --- a/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 299, "length": 314, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -123,7 +123,7 @@ "source_mapping": { "start": 482, "length": 53, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 299, "length": 314, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -166,7 +166,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 579, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 299, "length": 314, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -411,7 +411,7 @@ "source_mapping": { "start": 2108, "length": 246, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -435,7 +435,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -525,7 +525,7 @@ "source_mapping": { "start": 2263, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -543,7 +543,7 @@ "source_mapping": { "start": 2108, "length": 246, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -567,7 +567,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 2310, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -680,7 +680,7 @@ "source_mapping": { "start": 2108, "length": 246, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", diff --git a/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json index b7aa05148..d7cc02619 100644 --- a/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -106,7 +106,7 @@ "source_mapping": { "start": 480, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -150,7 +150,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -227,7 +227,7 @@ "source_mapping": { "start": 624, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -245,7 +245,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -360,7 +360,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -387,7 +387,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -459,7 +459,7 @@ "source_mapping": { "start": 1682, "length": 64, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -477,7 +477,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -504,7 +504,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -581,7 +581,7 @@ "source_mapping": { "start": 1781, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -599,7 +599,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -626,7 +626,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", diff --git a/tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol.0.7.6.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol.0.7.6.ReentrancyEth.json index 842e17513..d30d8d6f4 100644 --- a/tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol.0.7.6.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol.0.7.6.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 807, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -120,7 +120,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 746, "length": 51, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -187,7 +187,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 894, "length": 34, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -354,7 +354,7 @@ "source_mapping": { "start": 938, "length": 36, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -372,7 +372,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", @@ -397,7 +397,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy_indirect.sol", diff --git a/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json b/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json index d56617523..13ff8c285 100644 --- a/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json +++ b/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -63,7 +63,7 @@ "source_mapping": { "start": 120, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -81,7 +81,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -102,7 +102,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 135, "length": 8, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -159,7 +159,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -180,7 +180,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", diff --git a/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json b/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json index b0b061cbf..156859a5c 100644 --- a/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json +++ b/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json @@ -4,37 +4,90 @@ "elements": [ { "type": "function", - "name": "retrieveDAOReward", + "name": "splitDAO", "source_mapping": { - "start": 39505, - "length": 735, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -46,7 +99,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -587,62 +640,113 @@ "ending_column": 2 } }, - "signature": "retrieveDAOReward(bool)" + "signature": "splitDAO(uint256,address)" } }, { "type": "node", - "name": "reward = (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) / totalRewardToken - DAOpaidOut[msg.sender]", + "name": "p.splitData[0].newDAO = createNewDAO(_newCurator)", "source_mapping": { - "start": 39789, - "length": 145, - "filename_used": "/GENERIC_PATH", + "start": 37159, + "length": 49, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1044, - 1045, - 1046 + 974 ], - "starting_column": 9, - "ending_column": 54 + "starting_column": 13, + "ending_column": 62 }, "type_specific_fields": { "parent": { "type": "function", - "name": "retrieveDAOReward", + "name": "splitDAO", "source_mapping": { - "start": 39505, - "length": 735, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -654,7 +758,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1195,7 +1299,7 @@ "ending_column": 2 } }, - "signature": "retrieveDAOReward(bool)" + "signature": "splitDAO(uint256,address)" } } }, @@ -1205,55 +1309,38 @@ }, { "type": "node", - "name": "! DAOrewardAccount.payOut(dao.rewardAccount(),reward)", + "name": "daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)", "source_mapping": { - "start": 39977, - "length": 53, - "filename_used": "/GENERIC_PATH", + "start": 44544, + "length": 74, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1048 + 1196 ], - "starting_column": 17, - "ending_column": 70 + "starting_column": 9, + "ending_column": 83 }, "type_specific_fields": { "parent": { "type": "function", - "name": "retrieveDAOReward", + "name": "createNewDAO", "source_mapping": { - "start": 39505, - "length": 735, - "filename_used": "/GENERIC_PATH", + "start": 44427, + "length": 198, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057 + 1194, + 1195, + 1196, + 1197 ], "starting_column": 5, "ending_column": 6 @@ -1265,7 +1352,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1806,65 +1893,118 @@ "ending_column": 2 } }, - "signature": "retrieveDAOReward(bool)" + "signature": "createNewDAO(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "! DAOrewardAccount.payOut(dao,reward)", + "name": "withdrawRewardFor(msg.sender)", "source_mapping": { - "start": 40100, - "length": 37, - "filename_used": "/GENERIC_PATH", + "start": 38796, + "length": 29, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1052 + 1015 ], - "starting_column": 17, - "ending_column": 54 + "starting_column": 9, + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "retrieveDAOReward", + "name": "splitDAO", "source_mapping": { - "start": 39505, - "length": 735, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -1876,7 +2016,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -2417,7 +2557,7 @@ "ending_column": 2 } }, - "signature": "retrieveDAOReward(bool)" + "signature": "splitDAO(uint256,address)" } } }, @@ -2427,55 +2567,45 @@ }, { "type": "node", - "name": "DAOpaidOut[msg.sender] += reward", + "name": "(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]", "source_mapping": { - "start": 40180, - "length": 32, - "filename_used": "/GENERIC_PATH", + "start": 40461, + "length": 90, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1055 + 1065 ], - "starting_column": 9, - "ending_column": 41 + "starting_column": 13, + "ending_column": 103 }, "type_specific_fields": { "parent": { "type": "function", - "name": "retrieveDAOReward", + "name": "withdrawRewardFor", "source_mapping": { - "start": 39505, - "length": 735, - "filename_used": "/GENERIC_PATH", + "start": 40361, + "length": 473, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057 + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074 ], "starting_column": 5, "ending_column": 6 @@ -2487,7 +2617,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3028,499 +3158,45 @@ "ending_column": 2 } }, - "signature": "retrieveDAOReward(bool)" + "signature": "withdrawRewardFor(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "DAOpaidOut" + "underlying_type": "external_calls_sending_eth" } - } - ], - "description": "Reentrancy in DAO.retrieveDAOReward(bool) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1037-1057):\n\tExternal calls:\n\t- reward = (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) / totalRewardToken - DAOpaidOut[msg.sender] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1044-1046)\n\t- ! DAOrewardAccount.payOut(dao.rewardAccount(),reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1048)\n\t- ! DAOrewardAccount.payOut(dao,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1052)\n\tState variables written after the call(s):\n\t- DAOpaidOut[msg.sender] += reward (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1055)\n", - "markdown": "Reentrancy in [DAO.retrieveDAOReward(bool)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1037-L1057):\n\tExternal calls:\n\t- [reward = (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) / totalRewardToken - DAOpaidOut[msg.sender]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1044-L1046)\n\t- [! DAOrewardAccount.payOut(dao.rewardAccount(),reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1048)\n\t- [! DAOrewardAccount.payOut(dao,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1052)\n\tState variables written after the call(s):\n\t- [DAOpaidOut[msg.sender] += reward](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1055)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1037-L1057", - "id": "f4fcbe9e693a60538ed19ff7c298fa578309af52604f3265bac4254b82e45d8f", - "check": "reentrancy-no-eth", - "impact": "Medium", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "function", - "name": "splitDAO", + "type": "node", + "name": "reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]", "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", + "start": 40581, + "length": 116, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 + 1068, + 1069 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 9, + "ending_column": 103 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "DAO", + "type": "function", + "name": "withdrawRewardFor", "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", + "start": 40361, + "length": 473, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, 1064, 1065, 1066, @@ -3531,268 +3207,7 @@ 1071, 1072, 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "splitDAO(uint256,address)" - } - }, - { - "type": "node", - "name": "p.splitData[0].newDAO = createNewDAO(_newCurator)", - "source_mapping": { - "start": 37159, - "length": 49, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 974 - ], - "starting_column": 13, - "ending_column": 62 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "splitDAO", - "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 + 1074 ], "starting_column": 5, "ending_column": 6 @@ -3804,7 +3219,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -4345,48 +3760,55 @@ "ending_column": 2 } }, - "signature": "splitDAO(uint256,address)" + "signature": "withdrawRewardFor(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)", + "name": "! rewardAccount.payOut(_account,reward)", "source_mapping": { - "start": 44544, - "length": 74, - "filename_used": "/GENERIC_PATH", + "start": 40711, + "length": 39, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1196 + 1070 ], - "starting_column": 9, - "ending_column": 83 + "starting_column": 13, + "ending_column": 52 }, "type_specific_fields": { "parent": { "type": "function", - "name": "createNewDAO", + "name": "withdrawRewardFor", "source_mapping": { - "start": 44427, - "length": 198, - "filename_used": "/GENERIC_PATH", + "start": 40361, + "length": 473, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1194, - 1195, - 1196, - 1197 + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074 ], "starting_column": 5, "ending_column": 6 @@ -4398,7 +3820,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -4939,7 +4361,7 @@ "ending_column": 2 } }, - "signature": "createNewDAO(address)" + "signature": "withdrawRewardFor(address)" } } }, @@ -4949,20 +4371,20 @@ }, { "type": "node", - "name": "p.splitData[0].splitBalance = actualBalance()", + "name": "balances[msg.sender] = 0", "source_mapping": { - "start": 37456, - "length": 45, - "filename_used": "/GENERIC_PATH", + "start": 38912, + "length": 24, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 981 + 1017 ], - "starting_column": 13, - "ending_column": 58 + "starting_column": 9, + "ending_column": 33 }, "type_specific_fields": { "parent": { @@ -4971,7 +4393,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5062,7 +4484,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5609,25 +5031,25 @@ }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "proposals" + "variable_name": "balances" } }, { "type": "node", - "name": "p.splitData[0].rewardToken = rewardToken[address(this)]", + "name": "paidOut[msg.sender] = 0", "source_mapping": { - "start": 37515, - "length": 55, - "filename_used": "/GENERIC_PATH", + "start": 38946, + "length": 23, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 982 + 1018 ], - "starting_column": 13, - "ending_column": 68 + "starting_column": 9, + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -5636,7 +5058,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5727,7 +5149,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6274,25 +5696,25 @@ }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "proposals" + "variable_name": "paidOut" } }, { "type": "node", - "name": "p.splitData[0].totalSupply = totalSupply", + "name": "totalSupply -= balances[msg.sender]", "source_mapping": { - "start": 37584, - "length": 40, - "filename_used": "/GENERIC_PATH", + "start": 38867, + "length": 35, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 983 + 1016 ], - "starting_column": 13, - "ending_column": 53 + "starting_column": 9, + "ending_column": 44 }, "type_specific_fields": { "parent": { @@ -6301,7 +5723,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6392,7 +5814,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6939,2024 +6361,637 @@ }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "proposals" + "variable_name": "totalSupply" } - }, + } + ], + "description": "Reentrancy in DAO.splitDAO(uint256,address) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#947-1020):\n\tExternal calls:\n\t- p.splitData[0].newDAO = createNewDAO(_newCurator) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#974)\n\t\t- daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1196)\n\t- withdrawRewardFor(msg.sender) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1015)\n\t\t- (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1065)\n\t\t- reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1068-1069)\n\t\t- ! rewardAccount.payOut(_account,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1070)\n\tState variables written after the call(s):\n\t- balances[msg.sender] = 0 (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1017)\n\t- paidOut[msg.sender] = 0 (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1018)\n\t- totalSupply -= balances[msg.sender] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1016)\n", + "markdown": "Reentrancy in [DAO.splitDAO(uint256,address)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020):\n\tExternal calls:\n\t- [p.splitData[0].newDAO = createNewDAO(_newCurator)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L974)\n\t\t- [daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1196)\n\t- [withdrawRewardFor(msg.sender)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1015)\n\t\t- [(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1065)\n\t\t- [reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1068-L1069)\n\t\t- [! rewardAccount.payOut(_account,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1070)\n\tState variables written after the call(s):\n\t- [balances[msg.sender] = 0](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1017)\n\t- [paidOut[msg.sender] = 0](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1018)\n\t- [totalSupply -= balances[msg.sender]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1016)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020", + "id": "4ce8b483e6c9e8e2bbc854d3ff7713e20404b0be5e7cc714329c9a56c52e8d31", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "p.proposalPassed = true", + "type": "function", + "name": "transferFromWithoutReward", "source_mapping": { - "start": 37638, - "length": 23, - "filename_used": "/GENERIC_PATH", + "start": 41743, + "length": 247, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 984 + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121 ], - "starting_column": 13, - "ending_column": 36 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "splitDAO", + "type": "contract", + "name": "DAO", "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "splitDAO(uint256,address)" - } - } - }, - "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "proposals" - } - } - ], - "description": "Reentrancy in DAO.splitDAO(uint256,address) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#947-1020):\n\tExternal calls:\n\t- p.splitData[0].newDAO = createNewDAO(_newCurator) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#974)\n\t\t- daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1196)\n\tState variables written after the call(s):\n\t- p.splitData[0].splitBalance = actualBalance() (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#981)\n\t- p.splitData[0].rewardToken = rewardToken[address(this)] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#982)\n\t- p.splitData[0].totalSupply = totalSupply (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#983)\n\t- p.proposalPassed = true (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#984)\n", - "markdown": "Reentrancy in [DAO.splitDAO(uint256,address)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020):\n\tExternal calls:\n\t- [p.splitData[0].newDAO = createNewDAO(_newCurator)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L974)\n\t\t- [daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1196)\n\tState variables written after the call(s):\n\t- [p.splitData[0].splitBalance = actualBalance()](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L981)\n\t- [p.splitData[0].rewardToken = rewardToken[address(this)]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L982)\n\t- [p.splitData[0].totalSupply = totalSupply](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L983)\n\t- [p.proposalPassed = true](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L984)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020", - "id": "ca170302627c298d8230a6d9f9cae19a84c58325d2df49a6ef15a0b17208bf00", - "check": "reentrancy-no-eth", - "impact": "Medium", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "splitDAO", - "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "splitDAO(uint256,address)" - } - }, - { - "type": "node", - "name": "p.splitData[0].newDAO = createNewDAO(_newCurator)", - "source_mapping": { - "start": 37159, - "length": 49, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 974 - ], - "starting_column": 13, - "ending_column": 62 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "splitDAO", - "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "DAO", - "source_mapping": { - "start": 28296, - "length": 17108, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 694, - 695, - 696, - 697, - 698, - 699, - 700, - 701, - 702, - 703, - 704, - 705, - 706, - 707, - 708, - 709, - 710, - 711, - 712, - 713, - 714, - 715, - 716, - 717, - 718, - 719, - 720, - 721, - 722, - 723, - 724, - 725, - 726, - 727, - 728, - 729, - 730, - 731, - 732, - 733, - 734, - 735, - 736, - 737, - 738, - 739, - 740, - 741, - 742, - 743, - 744, - 745, - 746, - 747, - 748, - 749, - 750, - 751, - 752, - 753, - 754, - 755, - 756, - 757, - 758, - 759, - 760, - 761, - 762, - 763, - 764, - 765, - 766, - 767, - 768, - 769, - 770, - 771, - 772, - 773, - 774, - 775, - 776, - 777, - 778, - 779, - 780, - 781, - 782, - 783, - 784, - 785, - 786, - 787, - 788, - 789, - 790, - 791, - 792, - 793, - 794, - 795, - 796, - 797, - 798, - 799, - 800, - 801, - 802, - 803, - 804, - 805, - 806, - 807, - 808, - 809, - 810, - 811, - 812, - 813, - 814, - 815, - 816, - 817, - 818, - 819, - 820, - 821, - 822, - 823, - 824, - 825, - 826, - 827, - 828, - 829, - 830, - 831, - 832, - 833, - 834, - 835, - 836, - 837, - 838, - 839, - 840, - 841, - 842, - 843, - 844, - 845, - 846, - 847, - 848, - 849, - 850, - 851, - 852, - 853, - 854, - 855, - 856, - 857, - 858, - 859, - 860, - 861, - 862, - 863, - 864, - 865, - 866, - 867, - 868, - 869, - 870, - 871, - 872, - 873, - 874, - 875, - 876, - 877, - 878, - 879, - 880, - 881, - 882, - 883, - 884, - 885, - 886, - 887, - 888, - 889, - 890, - 891, - 892, - 893, - 894, - 895, - 896, - 897, - 898, - 899, - 900, - 901, - 902, - 903, - 904, - 905, - 906, - 907, - 908, - 909, - 910, - 911, - 912, - 913, - 914, - 915, - 916, - 917, - 918, - 919, - 920, - 921, - 922, - 923, - 924, - 925, - 926, - 927, - 928, - 929, - 930, - 931, - 932, - 933, - 934, - 935, - 936, - 937, - 938, - 939, - 940, - 941, - 942, - 943, - 944, - 945, - 946, - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020, - 1021, - 1022, - 1023, - 1024, - 1025, - 1026, - 1027, - 1028, - 1029, - 1030, - 1031, - 1032, - 1033, - 1034, - 1035, - 1036, - 1037, - 1038, - 1039, - 1040, - 1041, - 1042, - 1043, - 1044, - 1045, - 1046, - 1047, - 1048, - 1049, - 1050, - 1051, - 1052, - 1053, - 1054, - 1055, - 1056, - 1057, - 1058, - 1059, - 1060, - 1061, - 1062, - 1063, - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074, - 1075, - 1076, - 1077, - 1078, - 1079, - 1080, - 1081, - 1082, - 1083, - 1084, - 1085, - 1086, - 1087, - 1088, - 1089, - 1090, - 1091, - 1092, - 1093, - 1094, - 1095, - 1096, - 1097, - 1098, - 1099, - 1100, - 1101, - 1102, - 1103, - 1104, - 1105, - 1106, - 1107, - 1108, - 1109, - 1110, - 1111, - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121, - 1122, - 1123, - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136, - 1137, - 1138, - 1139, - 1140, - 1141, - 1142, - 1143, - 1144, - 1145, - 1146, - 1147, - 1148, - 1149, - 1150, - 1151, - 1152, - 1153, - 1154, - 1155, - 1156, - 1157, - 1158, - 1159, - 1160, - 1161, - 1162, - 1163, - 1164, - 1165, - 1166, - 1167, - 1168, - 1169, - 1170, - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1180, - 1181, - 1182, - 1183, - 1184, - 1185, - 1186, - 1187, - 1188, - 1189, - 1190, - 1191, - 1192, - 1193, - 1194, - 1195, - 1196, - 1197, - 1198, - 1199, - 1200, - 1201, - 1202, - 1203, - 1204, - 1205, - 1206, - 1207, - 1208, - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1219, - 1220, - 1221, - 1222, - 1223 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "splitDAO(uint256,address)" + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 + ], + "starting_column": 1, + "ending_column": 2 } - } - }, - "additional_fields": { - "underlying_type": "external_calls" + }, + "signature": "transferFromWithoutReward(address,address,uint256)" } }, { "type": "node", - "name": "daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)", + "name": "! withdrawRewardFor(_from)", "source_mapping": { - "start": 44544, - "length": 74, - "filename_used": "/GENERIC_PATH", + "start": 41890, + "length": 25, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1196 + 1118 ], - "starting_column": 9, - "ending_column": 83 + "starting_column": 13, + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "createNewDAO", + "name": "transferFromWithoutReward", "source_mapping": { - "start": 44427, - "length": 198, - "filename_used": "/GENERIC_PATH", + "start": 41743, + "length": 247, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1194, - 1195, - 1196, - 1197 + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121 ], "starting_column": 5, "ending_column": 6 @@ -8968,7 +7003,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -9509,118 +7544,55 @@ "ending_column": 2 } }, - "signature": "createNewDAO(address)" + "signature": "transferFromWithoutReward(address,address,uint256)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "withdrawRewardFor(msg.sender)", + "name": "(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]", "source_mapping": { - "start": 38796, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 40461, + "length": 90, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1015 + 1065 ], - "starting_column": 9, - "ending_column": 38 + "starting_column": 13, + "ending_column": 103 }, "type_specific_fields": { "parent": { "type": "function", - "name": "splitDAO", + "name": "withdrawRewardFor", "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", + "start": 40361, + "length": 473, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074 ], "starting_column": 5, "ending_column": 6 @@ -9632,7 +7604,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10173,29 +8145,30 @@ "ending_column": 2 } }, - "signature": "splitDAO(uint256,address)" + "signature": "withdrawRewardFor(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]", + "name": "reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]", "source_mapping": { - "start": 40461, - "length": 90, - "filename_used": "/GENERIC_PATH", + "start": 40581, + "length": 116, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1065 + 1068, + 1069 ], - "starting_column": 13, + "starting_column": 9, "ending_column": 103 }, "type_specific_fields": { @@ -10205,7 +8178,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10233,7 +8206,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10784,21 +8757,20 @@ }, { "type": "node", - "name": "reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]", + "name": "! rewardAccount.payOut(_account,reward)", "source_mapping": { - "start": 40581, - "length": 116, - "filename_used": "/GENERIC_PATH", + "start": 40711, + "length": 39, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1068, - 1069 + 1070 ], - "starting_column": 9, - "ending_column": 103 + "starting_column": 13, + "ending_column": 52 }, "type_specific_fields": { "parent": { @@ -10807,7 +8779,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10835,7 +8807,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -11386,45 +9358,44 @@ }, { "type": "node", - "name": "! rewardAccount.payOut(_account,reward)", + "name": "transferFrom(_from,_to,_value)", "source_mapping": { - "start": 40711, + "start": 41944, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1070 + 1120 ], - "starting_column": 13, - "ending_column": 52 + "starting_column": 9, + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", - "name": "withdrawRewardFor", + "name": "transferFromWithoutReward", "source_mapping": { - "start": 40361, - "length": 473, - "filename_used": "/GENERIC_PATH", + "start": 41743, + "length": 247, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074 + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121 ], "starting_column": 5, "ending_column": 6 @@ -11436,7 +9407,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -11977,118 +9948,315 @@ "ending_column": 2 } }, - "signature": "withdrawRewardFor(address)" + "signature": "transferFromWithoutReward(address,address,uint256)" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "balances" + } + }, + { + "type": "node", + "name": "balances[_to] += _amount", + "source_mapping": { + "start": 4393, + "length": 24, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 120 + ], + "starting_column": 13, + "ending_column": 37 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "transferFrom", + "source_mapping": { + "start": 4127, + "length": 509, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Token", + "source_mapping": { + "start": 3440, + "length": 1550, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "transferFrom(address,address,uint256)" + } + } + }, + "additional_fields": { + "underlying_type": "variables_written", + "variable_name": "balances" + } + }, + { + "type": "node", + "name": "balances[_from] -= _amount", + "source_mapping": { + "start": 4431, + "length": 26, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 121 + ], + "starting_column": 13, + "ending_column": 39 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "transferFrom", + "source_mapping": { + "start": 4127, + "length": 509, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Token", + "source_mapping": { + "start": 3440, + "length": 1550, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "transferFrom(address,address,uint256)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "balances" } }, { "type": "node", - "name": "balances[msg.sender] = 0", + "name": "transferFrom(_from,_to,_value)", "source_mapping": { - "start": 38912, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 41944, + "length": 39, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1017 + 1120 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 48 }, "type_specific_fields": { "parent": { "type": "function", - "name": "splitDAO", + "name": "transferFromWithoutReward", "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", + "start": 41743, + "length": 247, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121 ], "starting_column": 5, "ending_column": 6 @@ -12100,7 +10268,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -12641,119 +10809,58 @@ "ending_column": 2 } }, - "signature": "splitDAO(uint256,address)" + "signature": "transferFromWithoutReward(address,address,uint256)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "balances" + "variable_name": "paidOut" } }, { "type": "node", - "name": "paidOut[msg.sender] = 0", - "source_mapping": { - "start": 38946, - "length": 23, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 1018 - ], - "starting_column": 9, - "ending_column": 32 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "splitDAO", - "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 + "name": "paidOut[_from] -= transferPaidOut", + "source_mapping": { + "start": 42279, + "length": 33, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 1133 + ], + "starting_column": 9, + "ending_column": 42 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "transferPaidOut", + "source_mapping": { + "start": 41997, + "length": 384, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136 ], "starting_column": 5, "ending_column": 6 @@ -12765,7 +10872,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13306,7 +11413,7 @@ "ending_column": 2 } }, - "signature": "splitDAO(uint256,address)" + "signature": "transferPaidOut(address,address,uint256)" } } }, @@ -13317,108 +11424,47 @@ }, { "type": "node", - "name": "totalSupply -= balances[msg.sender]", + "name": "paidOut[_to] += transferPaidOut", "source_mapping": { - "start": 38867, - "length": 35, - "filename_used": "/GENERIC_PATH", + "start": 42322, + "length": 31, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1016 + 1134 ], "starting_column": 9, - "ending_column": 44 + "ending_column": 40 }, "type_specific_fields": { "parent": { "type": "function", - "name": "splitDAO", + "name": "transferPaidOut", "source_mapping": { - "start": 36148, - "length": 2849, - "filename_used": "/GENERIC_PATH", + "start": 41997, + "length": 384, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 947, - 948, - 949, - 950, - 951, - 952, - 953, - 954, - 955, - 956, - 957, - 958, - 959, - 960, - 961, - 962, - 963, - 964, - 965, - 966, - 967, - 968, - 969, - 970, - 971, - 972, - 973, - 974, - 975, - 976, - 977, - 978, - 979, - 980, - 981, - 982, - 983, - 984, - 985, - 986, - 987, - 988, - 989, - 990, - 991, - 992, - 993, - 994, - 995, - 996, - 997, - 998, - 999, - 1000, - 1001, - 1002, - 1003, - 1004, - 1005, - 1006, - 1007, - 1008, - 1009, - 1010, - 1011, - 1012, - 1013, - 1014, - 1015, - 1016, - 1017, - 1018, - 1019, - 1020 + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136 ], "starting_column": 5, "ending_column": 6 @@ -13430,7 +11476,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13971,20 +12017,20 @@ "ending_column": 2 } }, - "signature": "splitDAO(uint256,address)" + "signature": "transferPaidOut(address,address,uint256)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "totalSupply" + "variable_name": "paidOut" } } ], - "description": "Reentrancy in DAO.splitDAO(uint256,address) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#947-1020):\n\tExternal calls:\n\t- p.splitData[0].newDAO = createNewDAO(_newCurator) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#974)\n\t\t- daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1196)\n\t- withdrawRewardFor(msg.sender) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1015)\n\t\t- (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1065)\n\t\t- reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1068-1069)\n\t\t- ! rewardAccount.payOut(_account,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1070)\n\tState variables written after the call(s):\n\t- balances[msg.sender] = 0 (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1017)\n\t- paidOut[msg.sender] = 0 (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1018)\n\t- totalSupply -= balances[msg.sender] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1016)\n", - "markdown": "Reentrancy in [DAO.splitDAO(uint256,address)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020):\n\tExternal calls:\n\t- [p.splitData[0].newDAO = createNewDAO(_newCurator)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L974)\n\t\t- [daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1196)\n\t- [withdrawRewardFor(msg.sender)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1015)\n\t\t- [(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1065)\n\t\t- [reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1068-L1069)\n\t\t- [! rewardAccount.payOut(_account,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1070)\n\tState variables written after the call(s):\n\t- [balances[msg.sender] = 0](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1017)\n\t- [paidOut[msg.sender] = 0](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1018)\n\t- [totalSupply -= balances[msg.sender]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1016)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020", - "id": "4ce8b483e6c9e8e2bbc854d3ff7713e20404b0be5e7cc714329c9a56c52e8d31", + "description": "Reentrancy in DAO.transferFromWithoutReward(address,address,uint256) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1112-1121):\n\tExternal calls:\n\t- ! withdrawRewardFor(_from) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1118)\n\t\t- (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1065)\n\t\t- reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1068-1069)\n\t\t- ! rewardAccount.payOut(_account,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1070)\n\tState variables written after the call(s):\n\t- transferFrom(_from,_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1120)\n\t\t- balances[_to] += _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#120)\n\t\t- balances[_from] -= _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#121)\n\t- transferFrom(_from,_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1120)\n\t\t- paidOut[_from] -= transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1133)\n\t\t- paidOut[_to] += transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1134)\n", + "markdown": "Reentrancy in [DAO.transferFromWithoutReward(address,address,uint256)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1112-L1121):\n\tExternal calls:\n\t- [! withdrawRewardFor(_from)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1118)\n\t\t- [(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1065)\n\t\t- [reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1068-L1069)\n\t\t- [! rewardAccount.payOut(_account,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1070)\n\tState variables written after the call(s):\n\t- [transferFrom(_from,_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1120)\n\t\t- [balances[_to] += _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L120)\n\t\t- [balances[_from] -= _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L121)\n\t- [transferFrom(_from,_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1120)\n\t\t- [paidOut[_from] -= transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1133)\n\t\t- [paidOut[_to] += transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1134)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1112-L1121", + "id": "b888f2335a7b1a29c1f4940886bfbe26a6277d2dca59310ede3dfdb6f02adeb0", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium" @@ -13993,26 +12039,21 @@ "elements": [ { "type": "function", - "name": "transferFromWithoutReward", + "name": "transferWithoutReward", "source_mapping": { - "start": 41743, - "length": 247, - "filename_used": "/GENERIC_PATH", + "start": 41191, + "length": 175, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121 + 1091, + 1092, + 1093, + 1094, + 1095 ], "starting_column": 5, "ending_column": 6 @@ -14024,7 +12065,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -14565,49 +12606,44 @@ "ending_column": 2 } }, - "signature": "transferFromWithoutReward(address,address,uint256)" + "signature": "transferWithoutReward(address,uint256)" } }, { "type": "node", - "name": "! withdrawRewardFor(_from)", + "name": "! getMyReward()", "source_mapping": { - "start": 41890, - "length": 25, - "filename_used": "/GENERIC_PATH", + "start": 41288, + "length": 14, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1118 + 1092 ], "starting_column": 13, - "ending_column": 38 + "ending_column": 27 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferFromWithoutReward", + "name": "transferWithoutReward", "source_mapping": { - "start": 41743, - "length": 247, - "filename_used": "/GENERIC_PATH", + "start": 41191, + "length": 175, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121 + 1091, + 1092, + 1093, + 1094, + 1095 ], "starting_column": 5, "ending_column": 6 @@ -14619,7 +12655,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15160,7 +13196,7 @@ "ending_column": 2 } }, - "signature": "transferFromWithoutReward(address,address,uint256)" + "signature": "transferWithoutReward(address,uint256)" } } }, @@ -15174,7 +13210,7 @@ "source_mapping": { "start": 40461, "length": 90, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15192,7 +13228,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15220,7 +13256,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15775,7 +13811,7 @@ "source_mapping": { "start": 40581, "length": 116, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15794,7 +13830,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15822,7 +13858,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16377,7 +14413,7 @@ "source_mapping": { "start": 40711, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16395,7 +14431,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16423,7 +14459,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16974,44 +15010,39 @@ }, { "type": "node", - "name": "transferFrom(_from,_to,_value)", + "name": "transfer(_to,_value)", "source_mapping": { - "start": 41944, - "length": 39, - "filename_used": "/GENERIC_PATH", + "start": 41331, + "length": 28, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1120 + 1094 ], "starting_column": 9, - "ending_column": 48 + "ending_column": 37 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferFromWithoutReward", + "name": "transferWithoutReward", "source_mapping": { - "start": 41743, - "length": 247, - "filename_used": "/GENERIC_PATH", + "start": 41191, + "length": 175, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121 + 1091, + 1092, + 1093, + 1094, + 1095 ], "starting_column": 5, "ending_column": 6 @@ -17023,7 +15054,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17564,7 +15595,7 @@ "ending_column": 2 } }, - "signature": "transferFromWithoutReward(address,address,uint256)" + "signature": "transferWithoutReward(address,uint256)" } } }, @@ -17575,53 +15606,44 @@ }, { "type": "node", - "name": "balances[_to] += _amount", + "name": "balances[msg.sender] -= _amount", "source_mapping": { - "start": 4393, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 3920, + "length": 31, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 120 + 101 ], "starting_column": 13, - "ending_column": 37 + "ending_column": 44 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferFrom", + "name": "transfer", "source_mapping": { - "start": 4127, - "length": 509, - "filename_used": "/GENERIC_PATH", + "start": 3765, + "length": 356, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108 ], "starting_column": 5, "ending_column": 6 @@ -17633,7 +15655,7 @@ "source_mapping": { "start": 3440, "length": 1550, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17694,7 +15716,7 @@ "ending_column": 2 } }, - "signature": "transferFrom(address,address,uint256)" + "signature": "transfer(address,uint256)" } } }, @@ -17705,53 +15727,44 @@ }, { "type": "node", - "name": "balances[_from] -= _amount", + "name": "balances[_to] += _amount", "source_mapping": { - "start": 4431, - "length": 26, - "filename_used": "/GENERIC_PATH", + "start": 3965, + "length": 24, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 121 + 102 ], "starting_column": 13, - "ending_column": 39 + "ending_column": 37 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferFrom", + "name": "transfer", "source_mapping": { - "start": 4127, - "length": 509, - "filename_used": "/GENERIC_PATH", + "start": 3765, + "length": 356, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128 + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108 ], "starting_column": 5, "ending_column": 6 @@ -17763,7 +15776,7 @@ "source_mapping": { "start": 3440, "length": 1550, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17824,7 +15837,7 @@ "ending_column": 2 } }, - "signature": "transferFrom(address,address,uint256)" + "signature": "transfer(address,uint256)" } } }, @@ -17835,44 +15848,39 @@ }, { "type": "node", - "name": "transferFrom(_from,_to,_value)", + "name": "transfer(_to,_value)", "source_mapping": { - "start": 41944, - "length": 39, - "filename_used": "/GENERIC_PATH", + "start": 41331, + "length": 28, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1120 + 1094 ], "starting_column": 9, - "ending_column": 48 + "ending_column": 37 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferFromWithoutReward", + "name": "transferWithoutReward", "source_mapping": { - "start": 41743, - "length": 247, - "filename_used": "/GENERIC_PATH", + "start": 41191, + "length": 175, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1112, - 1113, - 1114, - 1115, - 1116, - 1117, - 1118, - 1119, - 1120, - 1121 + 1091, + 1092, + 1093, + 1094, + 1095 ], "starting_column": 5, "ending_column": 6 @@ -17884,7 +15892,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18425,7 +16433,7 @@ "ending_column": 2 } }, - "signature": "transferFromWithoutReward(address,address,uint256)" + "signature": "transferWithoutReward(address,uint256)" } } }, @@ -18440,7 +16448,7 @@ "source_mapping": { "start": 42279, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18458,7 +16466,7 @@ "source_mapping": { "start": 41997, "length": 384, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18488,7 +16496,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19044,7 +17052,7 @@ "source_mapping": { "start": 42322, "length": 31, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19062,7 +17070,7 @@ "source_mapping": { "start": 41997, "length": 384, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19092,7 +17100,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19643,10 +17651,10 @@ } } ], - "description": "Reentrancy in DAO.transferFromWithoutReward(address,address,uint256) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1112-1121):\n\tExternal calls:\n\t- ! withdrawRewardFor(_from) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1118)\n\t\t- (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1065)\n\t\t- reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1068-1069)\n\t\t- ! rewardAccount.payOut(_account,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1070)\n\tState variables written after the call(s):\n\t- transferFrom(_from,_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1120)\n\t\t- balances[_to] += _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#120)\n\t\t- balances[_from] -= _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#121)\n\t- transferFrom(_from,_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1120)\n\t\t- paidOut[_from] -= transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1133)\n\t\t- paidOut[_to] += transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1134)\n", - "markdown": "Reentrancy in [DAO.transferFromWithoutReward(address,address,uint256)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1112-L1121):\n\tExternal calls:\n\t- [! withdrawRewardFor(_from)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1118)\n\t\t- [(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1065)\n\t\t- [reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1068-L1069)\n\t\t- [! rewardAccount.payOut(_account,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1070)\n\tState variables written after the call(s):\n\t- [transferFrom(_from,_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1120)\n\t\t- [balances[_to] += _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L120)\n\t\t- [balances[_from] -= _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L121)\n\t- [transferFrom(_from,_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1120)\n\t\t- [paidOut[_from] -= transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1133)\n\t\t- [paidOut[_to] += transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1134)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1112-L1121", - "id": "b888f2335a7b1a29c1f4940886bfbe26a6277d2dca59310ede3dfdb6f02adeb0", + "description": "Reentrancy in DAO.transferWithoutReward(address,uint256) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1091-1095):\n\tExternal calls:\n\t- ! getMyReward() (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1092)\n\t\t- (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1065)\n\t\t- reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1068-1069)\n\t\t- ! rewardAccount.payOut(_account,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1070)\n\tState variables written after the call(s):\n\t- transfer(_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1094)\n\t\t- balances[msg.sender] -= _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#101)\n\t\t- balances[_to] += _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#102)\n\t- transfer(_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1094)\n\t\t- paidOut[_from] -= transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1133)\n\t\t- paidOut[_to] += transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1134)\n", + "markdown": "Reentrancy in [DAO.transferWithoutReward(address,uint256)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1091-L1095):\n\tExternal calls:\n\t- [! getMyReward()](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1092)\n\t\t- [(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1065)\n\t\t- [reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1068-L1069)\n\t\t- [! rewardAccount.payOut(_account,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1070)\n\tState variables written after the call(s):\n\t- [transfer(_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1094)\n\t\t- [balances[msg.sender] -= _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L101)\n\t\t- [balances[_to] += _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L102)\n\t- [transfer(_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1094)\n\t\t- [paidOut[_from] -= transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1133)\n\t\t- [paidOut[_to] += transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1134)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1091-L1095", + "id": "bb78c66126a39c10a22c2be95caccd1bc16b010bc959bdeb23bdc1d728654eea", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium" @@ -19655,21 +17663,90 @@ "elements": [ { "type": "function", - "name": "transferWithoutReward", + "name": "splitDAO", "source_mapping": { - "start": 41191, - "length": 175, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1091, - 1092, - 1093, - 1094, - 1095 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -19681,7 +17758,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20218,48 +18295,711 @@ 1222, 1223 ], - "starting_column": 1, - "ending_column": 2 + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "splitDAO(uint256,address)" + } + }, + { + "type": "node", + "name": "p.splitData[0].newDAO = createNewDAO(_newCurator)", + "source_mapping": { + "start": 37159, + "length": 49, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 974 + ], + "starting_column": 13, + "ending_column": 62 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "splitDAO", + "source_mapping": { + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "DAO", + "source_mapping": { + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "is_dependency": false, + "lines": [ + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "splitDAO(uint256,address)" } - }, - "signature": "transferWithoutReward(address,uint256)" + } + }, + "additional_fields": { + "underlying_type": "external_calls" } }, { "type": "node", - "name": "! getMyReward()", + "name": "daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)", "source_mapping": { - "start": 41288, - "length": 14, - "filename_used": "/GENERIC_PATH", + "start": 44544, + "length": 74, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1092 + 1196 ], - "starting_column": 13, - "ending_column": 27 + "starting_column": 9, + "ending_column": 83 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferWithoutReward", + "name": "createNewDAO", "source_mapping": { - "start": 41191, - "length": 175, - "filename_used": "/GENERIC_PATH", + "start": 44427, + "length": 198, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1091, - 1092, - 1093, - 1094, - 1095 + 1194, + 1195, + 1196, + 1197 ], "starting_column": 5, "ending_column": 6 @@ -20271,7 +19011,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20812,55 +19552,118 @@ "ending_column": 2 } }, - "signature": "transferWithoutReward(address,uint256)" + "signature": "createNewDAO(address)" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { "type": "node", - "name": "(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]", + "name": "p.splitData[0].splitBalance = actualBalance()", "source_mapping": { - "start": 40461, - "length": 90, - "filename_used": "/GENERIC_PATH", + "start": 37456, + "length": 45, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1065 + 981 ], "starting_column": 13, - "ending_column": 103 + "ending_column": 58 }, "type_specific_fields": { "parent": { "type": "function", - "name": "withdrawRewardFor", + "name": "splitDAO", "source_mapping": { - "start": 40361, - "length": 473, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -20872,7 +19675,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -21413,56 +20216,119 @@ "ending_column": 2 } }, - "signature": "withdrawRewardFor(address)" + "signature": "splitDAO(uint256,address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "proposals" } }, { "type": "node", - "name": "reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]", + "name": "p.splitData[0].rewardToken = rewardToken[address(this)]", "source_mapping": { - "start": 40581, - "length": 116, - "filename_used": "/GENERIC_PATH", + "start": 37515, + "length": 55, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1068, - 1069 + 982 ], - "starting_column": 9, - "ending_column": 103 + "starting_column": 13, + "ending_column": 68 }, "type_specific_fields": { "parent": { "type": "function", - "name": "withdrawRewardFor", + "name": "splitDAO", "source_mapping": { - "start": 40361, - "length": 473, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -21474,7 +20340,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22015,55 +20881,119 @@ "ending_column": 2 } }, - "signature": "withdrawRewardFor(address)" + "signature": "splitDAO(uint256,address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "proposals" } }, { "type": "node", - "name": "! rewardAccount.payOut(_account,reward)", + "name": "p.splitData[0].totalSupply = totalSupply", "source_mapping": { - "start": 40711, - "length": 39, - "filename_used": "/GENERIC_PATH", + "start": 37584, + "length": 40, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1070 + 983 ], "starting_column": 13, - "ending_column": 52 + "ending_column": 53 }, "type_specific_fields": { "parent": { "type": "function", - "name": "withdrawRewardFor", + "name": "splitDAO", "source_mapping": { - "start": 40361, - "length": 473, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1064, - 1065, - 1066, - 1067, - 1068, - 1069, - 1070, - 1071, - 1072, - 1073, - 1074 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -22075,7 +21005,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22616,49 +21546,119 @@ "ending_column": 2 } }, - "signature": "withdrawRewardFor(address)" + "signature": "splitDAO(uint256,address)" } } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "proposals" } }, { "type": "node", - "name": "transfer(_to,_value)", + "name": "p.proposalPassed = true", "source_mapping": { - "start": 41331, - "length": 28, - "filename_used": "/GENERIC_PATH", + "start": 37638, + "length": 23, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1094 + 984 ], - "starting_column": 9, - "ending_column": 37 + "starting_column": 13, + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferWithoutReward", + "name": "splitDAO", "source_mapping": { - "start": 41191, - "length": 175, - "filename_used": "/GENERIC_PATH", + "start": 36148, + "length": 2849, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1091, - 1092, - 1093, - 1094, - 1095 + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020 ], "starting_column": 5, "ending_column": 6 @@ -22670,7 +21670,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -23211,176 +22211,667 @@ "ending_column": 2 } }, - "signature": "transferWithoutReward(address,uint256)" + "signature": "splitDAO(uint256,address)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "balances" + "variable_name": "proposals" } - }, + } + ], + "description": "Reentrancy in DAO.splitDAO(uint256,address) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#947-1020):\n\tExternal calls:\n\t- p.splitData[0].newDAO = createNewDAO(_newCurator) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#974)\n\t\t- daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1196)\n\tState variables written after the call(s):\n\t- p.splitData[0].splitBalance = actualBalance() (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#981)\n\t- p.splitData[0].rewardToken = rewardToken[address(this)] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#982)\n\t- p.splitData[0].totalSupply = totalSupply (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#983)\n\t- p.proposalPassed = true (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#984)\n", + "markdown": "Reentrancy in [DAO.splitDAO(uint256,address)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020):\n\tExternal calls:\n\t- [p.splitData[0].newDAO = createNewDAO(_newCurator)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L974)\n\t\t- [daoCreator.createDAO(_newCurator,0,0,now + splitExecutionPeriod)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1196)\n\tState variables written after the call(s):\n\t- [p.splitData[0].splitBalance = actualBalance()](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L981)\n\t- [p.splitData[0].rewardToken = rewardToken[address(this)]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L982)\n\t- [p.splitData[0].totalSupply = totalSupply](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L983)\n\t- [p.proposalPassed = true](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L984)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L947-L1020", + "id": "ca170302627c298d8230a6d9f9cae19a84c58325d2df49a6ef15a0b17208bf00", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "balances[msg.sender] -= _amount", + "type": "function", + "name": "retrieveDAOReward", "source_mapping": { - "start": 3920, - "length": 31, - "filename_used": "/GENERIC_PATH", + "start": 39505, + "length": 735, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 101 + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057 ], - "starting_column": 13, - "ending_column": 44 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "transfer", + "type": "contract", + "name": "DAO", "source_mapping": { - "start": 3765, - "length": 356, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108 + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Token", - "source_mapping": { - "start": 3440, - "length": 1550, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", - "is_dependency": false, - "lines": [ - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "transfer(address,uint256)" + "starting_column": 1, + "ending_column": 2 } - } - }, - "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "balances" + }, + "signature": "retrieveDAOReward(bool)" } }, { "type": "node", - "name": "balances[_to] += _amount", + "name": "reward = (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) / totalRewardToken - DAOpaidOut[msg.sender]", "source_mapping": { - "start": 3965, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 39789, + "length": 145, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 102 + 1044, + 1045, + 1046 ], - "starting_column": 13, - "ending_column": 37 + "starting_column": 9, + "ending_column": 54 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transfer", + "name": "retrieveDAOReward", "source_mapping": { - "start": 3765, - "length": 356, - "filename_used": "/GENERIC_PATH", + "start": 39505, + "length": 735, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108 + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057 ], "starting_column": 5, "ending_column": 6 @@ -23388,115 +22879,610 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Token", + "name": "DAO", "source_mapping": { - "start": 3440, - "length": 1550, - "filename_used": "/GENERIC_PATH", + "start": 28296, + "length": 17108, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139 + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "transfer(address,uint256)" + "signature": "retrieveDAOReward(bool)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "balances" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "transfer(_to,_value)", + "name": "! DAOrewardAccount.payOut(dao.rewardAccount(),reward)", "source_mapping": { - "start": 41331, - "length": 28, - "filename_used": "/GENERIC_PATH", + "start": 39977, + "length": 53, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1094 + 1048 ], - "starting_column": 9, - "ending_column": 37 + "starting_column": 17, + "ending_column": 70 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferWithoutReward", + "name": "retrieveDAOReward", "source_mapping": { - "start": 41191, - "length": 175, - "filename_used": "/GENERIC_PATH", + "start": 39505, + "length": 735, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1091, - 1092, - 1093, - 1094, - 1095 + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057 ], "starting_column": 5, "ending_column": 6 @@ -23508,7 +23494,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24049,58 +24035,65 @@ "ending_column": 2 } }, - "signature": "transferWithoutReward(address,uint256)" + "signature": "retrieveDAOReward(bool)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "paidOut" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "paidOut[_from] -= transferPaidOut", + "name": "! DAOrewardAccount.payOut(dao,reward)", "source_mapping": { - "start": 42279, - "length": 33, - "filename_used": "/GENERIC_PATH", + "start": 40100, + "length": 37, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1133 + 1052 ], - "starting_column": 9, - "ending_column": 42 + "starting_column": 17, + "ending_column": 54 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferPaidOut", + "name": "retrieveDAOReward", "source_mapping": { - "start": 41997, - "length": 384, - "filename_used": "/GENERIC_PATH", + "start": 39505, + "length": 735, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136 + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057 ], "starting_column": 5, "ending_column": 6 @@ -24112,7 +24105,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24653,58 +24646,65 @@ "ending_column": 2 } }, - "signature": "transferPaidOut(address,address,uint256)" + "signature": "retrieveDAOReward(bool)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "paidOut" + "underlying_type": "external_calls" } }, { "type": "node", - "name": "paidOut[_to] += transferPaidOut", + "name": "DAOpaidOut[msg.sender] += reward", "source_mapping": { - "start": 42322, - "length": 31, - "filename_used": "/GENERIC_PATH", + "start": 40180, + "length": 32, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1134 + 1055 ], "starting_column": 9, - "ending_column": 40 + "ending_column": 41 }, "type_specific_fields": { "parent": { "type": "function", - "name": "transferPaidOut", + "name": "retrieveDAOReward", "source_mapping": { - "start": 41997, - "length": 384, - "filename_used": "/GENERIC_PATH", + "start": 39505, + "length": 735, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "is_dependency": false, "lines": [ - 1124, - 1125, - 1126, - 1127, - 1128, - 1129, - 1130, - 1131, - 1132, - 1133, - 1134, - 1135, - 1136 + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057 ], "starting_column": 5, "ending_column": 6 @@ -24716,7 +24716,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25257,20 +25257,20 @@ "ending_column": 2 } }, - "signature": "transferPaidOut(address,address,uint256)" + "signature": "retrieveDAOReward(bool)" } } }, "additional_fields": { "underlying_type": "variables_written", - "variable_name": "paidOut" + "variable_name": "DAOpaidOut" } } ], - "description": "Reentrancy in DAO.transferWithoutReward(address,uint256) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1091-1095):\n\tExternal calls:\n\t- ! getMyReward() (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1092)\n\t\t- (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1065)\n\t\t- reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1068-1069)\n\t\t- ! rewardAccount.payOut(_account,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1070)\n\tState variables written after the call(s):\n\t- transfer(_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1094)\n\t\t- balances[msg.sender] -= _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#101)\n\t\t- balances[_to] += _amount (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#102)\n\t- transfer(_to,_value) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1094)\n\t\t- paidOut[_from] -= transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1133)\n\t\t- paidOut[_to] += transferPaidOut (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1134)\n", - "markdown": "Reentrancy in [DAO.transferWithoutReward(address,uint256)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1091-L1095):\n\tExternal calls:\n\t- [! getMyReward()](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1092)\n\t\t- [(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1065)\n\t\t- [reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1068-L1069)\n\t\t- [! rewardAccount.payOut(_account,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1070)\n\tState variables written after the call(s):\n\t- [transfer(_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1094)\n\t\t- [balances[msg.sender] -= _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L101)\n\t\t- [balances[_to] += _amount](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L102)\n\t- [transfer(_to,_value)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1094)\n\t\t- [paidOut[_from] -= transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1133)\n\t\t- [paidOut[_to] += transferPaidOut](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1134)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1091-L1095", - "id": "bb78c66126a39c10a22c2be95caccd1bc16b010bc959bdeb23bdc1d728654eea", + "description": "Reentrancy in DAO.retrieveDAOReward(bool) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1037-1057):\n\tExternal calls:\n\t- reward = (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) / totalRewardToken - DAOpaidOut[msg.sender] (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1044-1046)\n\t- ! DAOrewardAccount.payOut(dao.rewardAccount(),reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1048)\n\t- ! DAOrewardAccount.payOut(dao,reward) (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1052)\n\tState variables written after the call(s):\n\t- DAOpaidOut[msg.sender] += reward (tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#1055)\n", + "markdown": "Reentrancy in [DAO.retrieveDAOReward(bool)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1037-L1057):\n\tExternal calls:\n\t- [reward = (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) / totalRewardToken - DAOpaidOut[msg.sender]](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1044-L1046)\n\t- [! DAOrewardAccount.payOut(dao.rewardAccount(),reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1048)\n\t- [! DAOrewardAccount.payOut(dao,reward)](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1052)\n\tState variables written after the call(s):\n\t- [DAOpaidOut[msg.sender] += reward](tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1055)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol#L1037-L1057", + "id": "f4fcbe9e693a60538ed19ff7c298fa578309af52604f3265bac4254b82e45d8f", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium" @@ -25283,7 +25283,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25311,7 +25311,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25861,7 +25861,7 @@ "source_mapping": { "start": 40581, "length": 116, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25880,7 +25880,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25908,7 +25908,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -26463,7 +26463,7 @@ "source_mapping": { "start": 40711, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -26481,7 +26481,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -26509,7 +26509,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -27064,7 +27064,7 @@ "source_mapping": { "start": 40779, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -27082,7 +27082,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -27110,7 +27110,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", diff --git a/tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol.0.4.25.ReentrancyReadBeforeWritten.json b/tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol.0.4.25.ReentrancyReadBeforeWritten.json index 4571d2286..2105c5ec5 100644 --- a/tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol.0.4.25.ReentrancyReadBeforeWritten.json +++ b/tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol.0.4.25.ReentrancyReadBeforeWritten.json @@ -4,23 +4,22 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 153, - "filename_used": "/GENERIC_PATH", + "start": 246, + "length": 158, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12 + 14, + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -32,7 +31,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -70,46 +69,45 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } }, { "type": "node", - "name": "! (msg.sender.call())", + "name": "success = msg.sender.call()", "source_mapping": { - "start": 152, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 321, + "length": 34, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 8 + 16 ], - "starting_column": 13, - "ending_column": 33 + "starting_column": 9, + "ending_column": 43 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 153, - "filename_used": "/GENERIC_PATH", + "start": 246, + "length": 158, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12 + 14, + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -121,7 +119,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -159,7 +157,7 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } }, @@ -169,41 +167,40 @@ }, { "type": "node", - "name": "notCalled = false", + "name": "bad0()", "source_mapping": { - "start": 216, - "length": 17, - "filename_used": "/GENERIC_PATH", + "start": 391, + "length": 6, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 11 + 18 ], "starting_column": 9, - "ending_column": 26 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 153, - "filename_used": "/GENERIC_PATH", + "start": 246, + "length": 158, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12 + 14, + 15, + 16, + 17, + 18, + 19 ], "starting_column": 5, "ending_column": 6 @@ -215,7 +212,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -253,132 +250,51 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "notCalled" + "underlying_type": "external_calls" } - } - ], - "description": "Reentrancy in ReentrancyWrite.bad0() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#6-12):\n\tExternal calls:\n\t- ! (msg.sender.call()) (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#11)\n", - "markdown": "Reentrancy in [ReentrancyWrite.bad0()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L6-L12):\n\tExternal calls:\n\t- [! (msg.sender.call())](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L11)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L6-L12", - "id": "f933b0dd64ecd6dfb70018248bff9e11c03a35657032529ff992308456d475dd", - "check": "reentrancy-no-eth", - "impact": "Medium", - "confidence": "Medium" - }, - { - "elements": [ + }, { - "type": "function", - "name": "bad1", + "type": "node", + "name": "! (msg.sender.call())", "source_mapping": { - "start": 246, - "length": 158, - "filename_used": "/GENERIC_PATH", + "start": 152, + "length": 20, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18, - 19 + 8 ], - "starting_column": 5, - "ending_column": 6 + "starting_column": 13, + "ending_column": 33 }, "type_specific_fields": { "parent": { - "type": "contract", - "name": "ReentrancyWrite", + "type": "function", + "name": "bad0", "source_mapping": { - "start": 28, - "length": 537, - "filename_used": "/GENERIC_PATH", + "start": 87, + "length": 153, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(address)" - } - }, - { - "type": "node", - "name": "success = msg.sender.call()", - "source_mapping": { - "start": 321, - "length": 34, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", - "is_dependency": false, - "lines": [ - 16 - ], - "starting_column": 9, - "ending_column": 43 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 246, - "length": 158, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", - "is_dependency": false, - "lines": [ - 14, - 15, - 16, - 17, - 18, - 19 + 12 ], "starting_column": 5, "ending_column": 6 @@ -390,7 +306,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -428,12 +344,12 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { @@ -442,7 +358,7 @@ "source_mapping": { "start": 391, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -460,7 +376,7 @@ "source_mapping": { "start": 246, "length": 158, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -483,7 +399,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -526,25 +442,26 @@ } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "notCalled" } }, { "type": "node", - "name": "! (msg.sender.call())", + "name": "notCalled = false", "source_mapping": { - "start": 152, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 216, + "length": 17, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 8 + 11 ], - "starting_column": 13, - "ending_column": 33 + "starting_column": 9, + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -553,7 +470,7 @@ "source_mapping": { "start": 87, "length": 153, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -577,7 +494,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -620,45 +537,129 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "notCalled" } - }, + } + ], + "description": "Reentrancy in ReentrancyWrite.bad1(address) (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#14-19):\n\tExternal calls:\n\t- success = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#16)\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#18)\n\t\t- ! (msg.sender.call()) (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#18)\n\t\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#11)\n", + "markdown": "Reentrancy in [ReentrancyWrite.bad1(address)](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L14-L19):\n\tExternal calls:\n\t- [success = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L16)\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L18)\n\t\t- [! (msg.sender.call())](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L18)\n\t\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L11)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L14-L19", + "id": "7bb6139d33983b626159983e8a4d7fc049710a8f08908c1d212bd13b68640a6a", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "bad0()", + "type": "function", + "name": "bad0", "source_mapping": { - "start": 391, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 87, + "length": 153, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ - 18 + 6, + 7, + 8, + 9, + 10, + 11, + 12 ], - "starting_column": 9, - "ending_column": 15 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "bad1", + "type": "contract", + "name": "ReentrancyWrite", "source_mapping": { - "start": 246, - "length": 158, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 537, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "is_dependency": false, "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, 14, 15, 16, 17, 18, - 19 + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "! (msg.sender.call())", + "source_mapping": { + "start": 152, + "length": 20, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", + "is_dependency": false, + "lines": [ + 8 + ], + "starting_column": 13, + "ending_column": 33 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 87, + "length": 153, + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12 ], "starting_column": 5, "ending_column": 6 @@ -670,7 +671,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -708,13 +709,12 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "notCalled" + "underlying_type": "external_calls" } }, { @@ -723,7 +723,7 @@ "source_mapping": { "start": 216, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -741,7 +741,7 @@ "source_mapping": { "start": 87, "length": 153, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -765,7 +765,7 @@ "source_mapping": { "start": 28, "length": 537, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol", @@ -813,10 +813,10 @@ } } ], - "description": "Reentrancy in ReentrancyWrite.bad1(address) (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#14-19):\n\tExternal calls:\n\t- success = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#16)\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#18)\n\t\t- ! (msg.sender.call()) (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#18)\n\t\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#11)\n", - "markdown": "Reentrancy in [ReentrancyWrite.bad1(address)](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L14-L19):\n\tExternal calls:\n\t- [success = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L16)\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L18)\n\t\t- [! (msg.sender.call())](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L18)\n\t\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L11)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L14-L19", - "id": "7bb6139d33983b626159983e8a4d7fc049710a8f08908c1d212bd13b68640a6a", + "description": "Reentrancy in ReentrancyWrite.bad0() (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#6-12):\n\tExternal calls:\n\t- ! (msg.sender.call()) (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#11)\n", + "markdown": "Reentrancy in [ReentrancyWrite.bad0()](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L6-L12):\n\tExternal calls:\n\t- [! (msg.sender.call())](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L11)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.4.25/reentrancy-write.sol#L6-L12", + "id": "f933b0dd64ecd6dfb70018248bff9e11c03a35657032529ff992308456d475dd", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol.0.5.16.ReentrancyReadBeforeWritten.json b/tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol.0.5.16.ReentrancyReadBeforeWritten.json index bfb51198f..2b62bc7a0 100644 --- a/tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol.0.5.16.ReentrancyReadBeforeWritten.json +++ b/tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol.0.5.16.ReentrancyReadBeforeWritten.json @@ -4,24 +4,22 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 188, + "start": 281, + "length": 161, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -73,14 +71,14 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } }, { "type": "node", "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 148, + "start": 356, "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", @@ -88,7 +86,7 @@ "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 8 + 17 ], "starting_column": 9, "ending_column": 46 @@ -96,24 +94,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 188, + "start": 281, + "length": 161, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -165,7 +161,7 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } }, @@ -175,42 +171,40 @@ }, { "type": "node", - "name": "notCalled = false", + "name": "bad0()", "source_mapping": { - "start": 251, - "length": 17, + "start": 429, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 12 + 19 ], "starting_column": 9, - "ending_column": 26 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 188, + "start": 281, + "length": 161, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -262,103 +256,19 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "notCalled" - } - } - ], - "description": "Reentrancy in ReentrancyWrite.bad0() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#6-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#12)\n", - "markdown": "Reentrancy in [ReentrancyWrite.bad0()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L6-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L12)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L6-L13", - "id": "0aac5bbaf3a6f1b7de2ac725771ade12f8b1453c0639d09517b8bddb098a13d2", - "check": "reentrancy-no-eth", - "impact": "Medium", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 281, - "length": 161, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", - "is_dependency": false, - "lines": [ - 15, - 16, - 17, - 18, - 19, - 20 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyWrite", - "source_mapping": { - "start": 28, - "length": 610, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(address)" + "underlying_type": "external_calls" } }, { "type": "node", "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 356, + "start": 148, "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", @@ -366,7 +276,7 @@ "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 17 + 8 ], "starting_column": 9, "ending_column": 46 @@ -374,22 +284,24 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 281, - "length": 161, + "start": 87, + "length": 188, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19, - 20 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -441,12 +353,12 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { @@ -541,25 +453,26 @@ } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "notCalled" } }, { "type": "node", - "name": "(success) = msg.sender.call()", + "name": "notCalled = false", "source_mapping": { - "start": 148, - "length": 37, + "start": 251, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 8 + 12 ], "starting_column": 9, - "ending_column": 46 + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -638,45 +551,133 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "notCalled" } - }, + } + ], + "description": "Reentrancy in ReentrancyWrite.bad1(address) (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#15-20):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#17)\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#19)\n\t\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#19)\n\t\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#12)\n", + "markdown": "Reentrancy in [ReentrancyWrite.bad1(address)](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L15-L20):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L17)\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L19)\n\t\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L19)\n\t\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L12)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L15-L20", + "id": "05033b6ee9ae71d9cc7b1ec3f6b09d4c0a43a6c92393f54fa45ce27c89a1e771", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "bad0()", + "type": "function", + "name": "bad0", "source_mapping": { - "start": 429, - "length": 6, + "start": 87, + "length": 188, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ - 19 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], - "starting_column": 9, - "ending_column": 15 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "bad1", + "type": "contract", + "name": "ReentrancyWrite", "source_mapping": { - "start": 281, - "length": 161, + "start": 28, + "length": 610, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", "is_dependency": false, "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, 15, 16, 17, 18, 19, - 20 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "(success) = msg.sender.call()", + "source_mapping": { + "start": 148, + "length": 37, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", + "is_dependency": false, + "lines": [ + 8 + ], + "starting_column": 9, + "ending_column": 46 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 87, + "length": 188, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -728,13 +729,12 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "notCalled" + "underlying_type": "external_calls" } }, { @@ -836,10 +836,10 @@ } } ], - "description": "Reentrancy in ReentrancyWrite.bad1(address) (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#15-20):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#17)\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#19)\n\t\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#19)\n\t\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#12)\n", - "markdown": "Reentrancy in [ReentrancyWrite.bad1(address)](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L15-L20):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L17)\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L19)\n\t\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L19)\n\t\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L12)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L15-L20", - "id": "05033b6ee9ae71d9cc7b1ec3f6b09d4c0a43a6c92393f54fa45ce27c89a1e771", + "description": "Reentrancy in ReentrancyWrite.bad0() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#6-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#12)\n", + "markdown": "Reentrancy in [ReentrancyWrite.bad0()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L6-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L12)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.5.16/reentrancy-write.sol#L6-L13", + "id": "0aac5bbaf3a6f1b7de2ac725771ade12f8b1453c0639d09517b8bddb098a13d2", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol.0.6.11.ReentrancyReadBeforeWritten.json b/tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol.0.6.11.ReentrancyReadBeforeWritten.json index c8ed4b66e..e213189be 100644 --- a/tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol.0.6.11.ReentrancyReadBeforeWritten.json +++ b/tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol.0.6.11.ReentrancyReadBeforeWritten.json @@ -4,24 +4,22 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 188, - "filename_used": "/GENERIC_PATH", + "start": 281, + "length": 161, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -33,7 +31,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -73,22 +71,22 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } }, { "type": "node", "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 148, + "start": 356, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 8 + 17 ], "starting_column": 9, "ending_column": 46 @@ -96,24 +94,22 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 188, - "filename_used": "/GENERIC_PATH", + "start": 281, + "length": 161, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -125,7 +121,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -165,7 +161,7 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } }, @@ -175,42 +171,40 @@ }, { "type": "node", - "name": "notCalled = false", + "name": "bad0()", "source_mapping": { - "start": 251, - "length": 17, - "filename_used": "/GENERIC_PATH", + "start": 429, + "length": 6, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 12 + 19 ], "starting_column": 9, - "ending_column": 26 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 87, - "length": 188, - "filename_used": "/GENERIC_PATH", + "start": 281, + "length": 161, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13 + 15, + 16, + 17, + 18, + 19, + 20 ], "starting_column": 5, "ending_column": 6 @@ -222,7 +216,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -262,111 +256,27 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1(address)" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "notCalled" - } - } - ], - "description": "Reentrancy in ReentrancyWrite.bad0() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#6-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#12)\n", - "markdown": "Reentrancy in [ReentrancyWrite.bad0()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L6-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L12)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L6-L13", - "id": "a786c050fdd723d3185d93105e0903cb696bf4ce71996fc791e79d8f97c5e72d", - "check": "reentrancy-no-eth", - "impact": "Medium", - "confidence": "Medium" - }, - { - "elements": [ - { - "type": "function", - "name": "bad1", - "source_mapping": { - "start": 281, - "length": 161, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", - "is_dependency": false, - "lines": [ - 15, - 16, - 17, - 18, - 19, - 20 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ReentrancyWrite", - "source_mapping": { - "start": 28, - "length": 610, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.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 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "bad1(address)" + "underlying_type": "external_calls" } }, { "type": "node", "name": "(success) = msg.sender.call()", "source_mapping": { - "start": 356, + "start": 148, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 17 + 8 ], "starting_column": 9, "ending_column": 46 @@ -374,22 +284,24 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 281, - "length": 161, - "filename_used": "/GENERIC_PATH", + "start": 87, + "length": 188, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17, - 18, - 19, - 20 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -401,7 +313,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -441,12 +353,12 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "external_calls_sending_eth" } }, { @@ -455,7 +367,7 @@ "source_mapping": { "start": 429, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -473,7 +385,7 @@ "source_mapping": { "start": 281, "length": 161, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -496,7 +408,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -541,25 +453,26 @@ } }, "additional_fields": { - "underlying_type": "external_calls" + "underlying_type": "variables_written", + "variable_name": "notCalled" } }, { "type": "node", - "name": "(success) = msg.sender.call()", + "name": "notCalled = false", "source_mapping": { - "start": 148, - "length": 37, - "filename_used": "/GENERIC_PATH", + "start": 251, + "length": 17, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 8 + 12 ], "starting_column": 9, - "ending_column": 46 + "ending_column": 26 }, "type_specific_fields": { "parent": { @@ -568,7 +481,7 @@ "source_mapping": { "start": 87, "length": 188, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -593,7 +506,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -638,45 +551,133 @@ } }, "additional_fields": { - "underlying_type": "external_calls_sending_eth" + "underlying_type": "variables_written", + "variable_name": "notCalled" } - }, + } + ], + "description": "Reentrancy in ReentrancyWrite.bad1(address) (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#15-20):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#17)\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#19)\n\t\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#19)\n\t\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#12)\n", + "markdown": "Reentrancy in [ReentrancyWrite.bad1(address)](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L15-L20):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L17)\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L19)\n\t\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L19)\n\t\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L12)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L15-L20", + "id": "02d9e7190770aed44ccdabc149dfc114e91d2f90346cfbfff570c7ccbc1d64e8", + "check": "reentrancy-no-eth", + "impact": "Medium", + "confidence": "Medium" + }, + { + "elements": [ { - "type": "node", - "name": "bad0()", + "type": "function", + "name": "bad0", "source_mapping": { - "start": 429, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 87, + "length": 188, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ - 19 + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], - "starting_column": 9, - "ending_column": 15 + "starting_column": 5, + "ending_column": 6 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "bad1", + "type": "contract", + "name": "ReentrancyWrite", "source_mapping": { - "start": 281, - "length": 161, - "filename_used": "/GENERIC_PATH", + "start": 28, + "length": 610, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "is_dependency": false, "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, 15, 16, 17, 18, 19, - 20 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad0()" + } + }, + { + "type": "node", + "name": "(success) = msg.sender.call()", + "source_mapping": { + "start": 148, + "length": 37, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", + "is_dependency": false, + "lines": [ + 8 + ], + "starting_column": 9, + "ending_column": 46 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad0", + "source_mapping": { + "start": 87, + "length": 188, + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", + "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -688,7 +689,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -728,13 +729,12 @@ "ending_column": 2 } }, - "signature": "bad1(address)" + "signature": "bad0()" } } }, "additional_fields": { - "underlying_type": "variables_written", - "variable_name": "notCalled" + "underlying_type": "external_calls" } }, { @@ -743,7 +743,7 @@ "source_mapping": { "start": 251, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -761,7 +761,7 @@ "source_mapping": { "start": 87, "length": 188, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -786,7 +786,7 @@ "source_mapping": { "start": 28, "length": 610, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_relative": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol", @@ -836,10 +836,10 @@ } } ], - "description": "Reentrancy in ReentrancyWrite.bad1(address) (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#15-20):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#17)\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#19)\n\t\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- bad0() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#19)\n\t\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#12)\n", - "markdown": "Reentrancy in [ReentrancyWrite.bad1(address)](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L15-L20):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L17)\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L19)\n\t\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [bad0()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L19)\n\t\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L12)\n", - "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L15-L20", - "id": "02d9e7190770aed44ccdabc149dfc114e91d2f90346cfbfff570c7ccbc1d64e8", + "description": "Reentrancy in ReentrancyWrite.bad0() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#6-13):\n\tExternal calls:\n\t- (success) = msg.sender.call() (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#8)\n\tState variables written after the call(s):\n\t- notCalled = false (tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#12)\n", + "markdown": "Reentrancy in [ReentrancyWrite.bad0()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L6-L13):\n\tExternal calls:\n\t- [(success) = msg.sender.call()](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L8)\n\tState variables written after the call(s):\n\t- [notCalled = false](tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L12)\n", + "first_markdown_element": "tests/detectors/reentrancy-no-eth/0.6.11/reentrancy-write.sol#L6-L13", + "id": "a786c050fdd723d3185d93105e0903cb696bf4ce71996fc791e79d8f97c5e72d", "check": "reentrancy-no-eth", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json b/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json index 2612dca44..8b56e09e4 100644 --- a/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json +++ b/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json @@ -4,21 +4,21 @@ "elements": [ { "type": "contract", - "name": "C", + "name": "E", "source_mapping": { - "start": 155, - "length": 65, - "filename_used": "/GENERIC_PATH", + "start": 295, + "length": 77, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, "ending_column": 2 @@ -26,19 +26,19 @@ }, { "type": "function", - "name": "A", + "name": "C", "source_mapping": { - "start": 34, - "length": 50, - "filename_used": "/GENERIC_PATH", + "start": 176, + "length": 42, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 15, + 16, + 17 ], "starting_column": 5, "ending_column": 6 @@ -46,47 +46,46 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "C", "source_mapping": { - "start": 0, - "length": 86, - "filename_used": "/GENERIC_PATH", + "start": 155, + "length": 65, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 1, - 2, - 3, - 4, - 5, - 6 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "A(uint256)" + "signature": "C(uint256)" } }, { "type": "contract", - "name": "C", + "name": "E", "source_mapping": { - "start": 155, - "length": 65, - "filename_used": "/GENERIC_PATH", + "start": 295, + "length": 77, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, "ending_column": 2 @@ -94,31 +93,31 @@ }, { "type": "contract", - "name": "B", + "name": "D", "source_mapping": { - "start": 88, - "length": 65, - "filename_used": "/GENERIC_PATH", + "start": 222, + "length": 71, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18", - "id": "d2847fcb309e0ee45dfb303bf749123bbebee692a080ae6a718a76ef785ae8d2", + "description": "E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) gives base constructor C.C(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#15-17) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#20-24) constructor definition\n", + "markdown": "[E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) gives base constructor [C.C(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L15-L17) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30", + "id": "085dceba8f0b37580e72952eafe1368bf0d09f10c2f44c0b6ff53ad7e72f92b1", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -127,21 +126,21 @@ "elements": [ { "type": "contract", - "name": "D", + "name": "E", "source_mapping": { - "start": 222, - "length": 71, - "filename_used": "/GENERIC_PATH", + "start": 295, + "length": 77, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, "ending_column": 2 @@ -153,7 +152,7 @@ "source_mapping": { "start": 34, "length": 50, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -173,7 +172,7 @@ "source_mapping": { "start": 0, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -199,7 +198,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -221,7 +220,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -238,10 +237,10 @@ } } ], - "description": "D (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#20-24) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[D](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24", - "id": "7436d3215ee6260f9a4b2f4697fa242225ad3f10e30bfbd162679a5e3fa48f10", + "description": "E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30", + "id": "14d6bffb3f1849cfebb7156cb797315fd01ac83911a1261650f702792f4db830", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -250,41 +249,42 @@ "elements": [ { "type": "contract", - "name": "E", + "name": "F", "source_mapping": { - "start": 295, - "length": 77, - "filename_used": "/GENERIC_PATH", + "start": 375, + "length": 57, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 33, + 34, + 35, + 36, + 37, + 38 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, { "type": "function", - "name": "B", + "name": "A", "source_mapping": { - "start": 109, - "length": 42, - "filename_used": "/GENERIC_PATH", + "start": 34, + "length": 50, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 3, + 4, + 5 ], "starting_column": 5, "ending_column": 6 @@ -292,78 +292,80 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "B", + "name": "A", "source_mapping": { - "start": 88, - "length": 65, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 86, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 1, + 2, + 3, + 4, + 5, + 6 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "B(uint256)" + "signature": "A(uint256)" } }, { "type": "contract", - "name": "E", + "name": "F", "source_mapping": { - "start": 295, - "length": 77, - "filename_used": "/GENERIC_PATH", + "start": 375, + "length": 57, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 33, + 34, + 35, + 36, + 37, + 38 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, { "type": "contract", - "name": "D", + "name": "B", "source_mapping": { - "start": 222, - "length": 71, - "filename_used": "/GENERIC_PATH", + "start": 88, + "length": 65, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) gives base constructor B.B(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#9-11) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#20-24) constructor definition\n", - "markdown": "[E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) gives base constructor [B.B(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L9-L11) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30", - "id": "e79d62c434ba85788dd5087e4994bb136be6b9e8a55e8057b0e30c9b0436abdc", + "description": "F (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#33-38) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From F (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#33-38) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[F](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L33-L38) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [F](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L33-L38) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L33-L38", + "id": "71e08d0e5c44bbc2671e014018a6333bd92db7380a85732bf2d17aa5500f6434", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -372,21 +374,21 @@ "elements": [ { "type": "contract", - "name": "E", + "name": "D", "source_mapping": { - "start": 295, - "length": 77, - "filename_used": "/GENERIC_PATH", + "start": 222, + "length": 71, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 @@ -394,19 +396,19 @@ }, { "type": "function", - "name": "C", + "name": "A", "source_mapping": { - "start": 176, - "length": 42, - "filename_used": "/GENERIC_PATH", + "start": 34, + "length": 50, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17 + 3, + 4, + 5 ], "starting_column": 5, "ending_column": 6 @@ -414,46 +416,47 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "C", + "name": "A", "source_mapping": { - "start": 155, - "length": 65, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 86, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 1, + 2, + 3, + 4, + 5, + 6 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "C(uint256)" + "signature": "A(uint256)" } }, { "type": "contract", - "name": "E", + "name": "C", "source_mapping": { - "start": 295, - "length": 77, - "filename_used": "/GENERIC_PATH", + "start": 155, + "length": 65, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -461,31 +464,31 @@ }, { "type": "contract", - "name": "D", + "name": "B", "source_mapping": { - "start": 222, - "length": 71, - "filename_used": "/GENERIC_PATH", + "start": 88, + "length": 65, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) gives base constructor C.C(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#15-17) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#20-24) constructor definition\n", - "markdown": "[E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) gives base constructor [C.C(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L15-L17) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30", - "id": "085dceba8f0b37580e72952eafe1368bf0d09f10c2f44c0b6ff53ad7e72f92b1", + "description": "D (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#20-24) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[D](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24", + "id": "7436d3215ee6260f9a4b2f4697fa242225ad3f10e30bfbd162679a5e3fa48f10", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -494,21 +497,21 @@ "elements": [ { "type": "contract", - "name": "E", + "name": "C", "source_mapping": { - "start": 295, - "length": 77, - "filename_used": "/GENERIC_PATH", + "start": 155, + "length": 65, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -520,7 +523,7 @@ "source_mapping": { "start": 34, "length": 50, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -540,7 +543,7 @@ "source_mapping": { "start": 0, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -566,7 +569,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -588,7 +591,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -605,10 +608,10 @@ } } ], - "description": "E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30", - "id": "14d6bffb3f1849cfebb7156cb797315fd01ac83911a1261650f702792f4db830", + "description": "C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L14-L18", + "id": "d2847fcb309e0ee45dfb303bf749123bbebee692a080ae6a718a76ef785ae8d2", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -617,42 +620,41 @@ "elements": [ { "type": "contract", - "name": "F", + "name": "E", "source_mapping": { - "start": 375, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 295, + "length": 77, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 33, - 34, - 35, - 36, - 37, - 38 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, { "type": "function", - "name": "A", + "name": "B", "source_mapping": { - "start": 34, - "length": 50, - "filename_used": "/GENERIC_PATH", + "start": 109, + "length": 42, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -660,80 +662,78 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "B", "source_mapping": { - "start": 0, - "length": 86, - "filename_used": "/GENERIC_PATH", + "start": 88, + "length": 65, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 1, - 2, - 3, - 4, - 5, - 6 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "A(uint256)" + "signature": "B(uint256)" } }, { "type": "contract", - "name": "F", + "name": "E", "source_mapping": { - "start": 375, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 295, + "length": 77, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 33, - 34, - 35, - 36, - 37, - 38 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, { "type": "contract", - "name": "B", + "name": "D", "source_mapping": { - "start": 88, - "length": 65, - "filename_used": "/GENERIC_PATH", + "start": 222, + "length": 71, + "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "F (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#33-38) gives base constructor A.A(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From F (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#33-38) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[F](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L33-L38) gives base constructor [A.A(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [F](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L33-L38) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L8-L12) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L33-L38", - "id": "71e08d0e5c44bbc2671e014018a6333bd92db7380a85732bf2d17aa5500f6434", + "description": "E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) gives base constructor B.B(uint256) (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#9-11) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#20-24) constructor definition\n", + "markdown": "[E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) gives base constructor [B.B(uint256)](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L9-L11) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L20-L24) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol#L26-L30", + "id": "e79d62c434ba85788dd5087e4994bb136be6b9e8a55e8057b0e30c9b0436abdc", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol.0.4.25.ReusedBaseConstructor.json b/tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol.0.4.25.ReusedBaseConstructor.json index 9d698a4c3..8ff2358e5 100644 --- a/tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol.0.4.25.ReusedBaseConstructor.json +++ b/tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol.0.4.25.ReusedBaseConstructor.json @@ -4,21 +4,21 @@ "elements": [ { "type": "contract", - "name": "C", + "name": "D", "source_mapping": { - "start": 157, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 225, + "length": 72, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 @@ -30,7 +30,7 @@ "source_mapping": { "start": 34, "length": 51, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -50,7 +50,7 @@ "source_mapping": { "start": 0, "length": 87, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 157, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -98,7 +98,7 @@ "source_mapping": { "start": 89, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -115,10 +115,10 @@ } } ], - "description": "C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18", - "id": "2d9d2b1b6d2540f86fd909f9766e128da573e659f40a50835cc9adef3c4dbee8", + "description": "D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24", + "id": "1f85bf19873eaee39a8f703b0c783aa86e34c91fad5556ee831eb7c6adcfdb77", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -127,21 +127,21 @@ "elements": [ { "type": "contract", - "name": "D", + "name": "C", "source_mapping": { - "start": 225, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 157, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -151,17 +151,17 @@ "type": "function", "name": "constructor", "source_mapping": { - "start": 110, - "length": 43, - "filename_used": "/GENERIC_PATH", + "start": 34, + "length": 51, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 3, + 4, + 5 ], "starting_column": 5, "ending_column": 6 @@ -169,21 +169,22 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "B", + "name": "A", "source_mapping": { - "start": 89, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 87, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 1, + 2, + 3, + 4, + 5, + 6 ], "starting_column": 1, "ending_column": 2 @@ -194,21 +195,21 @@ }, { "type": "contract", - "name": "D", + "name": "C", "source_mapping": { - "start": 225, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 157, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -216,31 +217,31 @@ }, { "type": "contract", - "name": "D", + "name": "B", "source_mapping": { - "start": 225, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 89, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) gives base constructor B.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#9-11) arguments more than once in inheritance hierarchy:\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", - "markdown": "[D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) gives base constructor [B.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L9-L11) arguments more than once in inheritance hierarchy:\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24", - "id": "5f3b188e7d6c737684f829c3fde96f739cd502b4aba8f3f6e3ceab7decffa618", + "description": "C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18", + "id": "2d9d2b1b6d2540f86fd909f9766e128da573e659f40a50835cc9adef3c4dbee8", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -249,21 +250,21 @@ "elements": [ { "type": "contract", - "name": "D", + "name": "E", "source_mapping": { - "start": 225, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 299, + "length": 78, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, "ending_column": 2 @@ -275,7 +276,7 @@ "source_mapping": { "start": 178, "length": 43, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -295,7 +296,7 @@ "source_mapping": { "start": 157, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -314,13 +315,35 @@ "signature": "constructor(uint256)" } }, + { + "type": "contract", + "name": "E", + "source_mapping": { + "start": 299, + "length": 78, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "is_dependency": false, + "lines": [ + 26, + 27, + 28, + 29, + 30 + ], + "starting_column": 1, + "ending_column": 2 + } + }, { "type": "contract", "name": "D", "source_mapping": { "start": 225, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -342,7 +365,7 @@ "source_mapping": { "start": 225, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -359,10 +382,10 @@ } } ], - "description": "D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) gives base constructor C.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#15-17) arguments more than once in inheritance hierarchy:\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", - "markdown": "[D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) gives base constructor [C.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L15-L17) arguments more than once in inheritance hierarchy:\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24", - "id": "b579da8996b6a1a35169bcae74ad8126c68fb0a1819d3977cea3e0e295ff2d5c", + "description": "E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) gives base constructor C.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#15-17) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", + "markdown": "[E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) gives base constructor [C.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L15-L17) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30", + "id": "33b16377cf3026b60d644e79d92682e6e626d7ad6598387440c9b20fd8aa44fe", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -375,7 +398,7 @@ "source_mapping": { "start": 225, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -395,17 +418,17 @@ "type": "function", "name": "constructor", "source_mapping": { - "start": 34, - "length": 51, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 43, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -413,22 +436,21 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "B", "source_mapping": { - "start": 0, - "length": 87, - "filename_used": "/GENERIC_PATH", + "start": 89, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 1, - 2, - 3, - 4, - 5, - 6 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 @@ -439,21 +461,21 @@ }, { "type": "contract", - "name": "C", + "name": "D", "source_mapping": { - "start": 157, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 225, + "length": 72, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 @@ -461,31 +483,31 @@ }, { "type": "contract", - "name": "B", + "name": "D", "source_mapping": { - "start": 89, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 225, + "length": 72, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", + "description": "D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) gives base constructor B.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#9-11) arguments more than once in inheritance hierarchy:\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", + "markdown": "[D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) gives base constructor [B.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L9-L11) arguments more than once in inheritance hierarchy:\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24", - "id": "1f85bf19873eaee39a8f703b0c783aa86e34c91fad5556ee831eb7c6adcfdb77", + "id": "5f3b188e7d6c737684f829c3fde96f739cd502b4aba8f3f6e3ceab7decffa618", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -494,21 +516,21 @@ "elements": [ { "type": "contract", - "name": "E", + "name": "D", "source_mapping": { - "start": 299, - "length": 78, - "filename_used": "/GENERIC_PATH", + "start": 225, + "length": 72, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 @@ -518,17 +540,17 @@ "type": "function", "name": "constructor", "source_mapping": { - "start": 110, + "start": 178, "length": 43, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 15, + 16, + 17 ], "starting_column": 5, "ending_column": 6 @@ -536,21 +558,21 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "B", + "name": "C", "source_mapping": { - "start": 89, + "start": 157, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -559,57 +581,13 @@ "signature": "constructor(uint256)" } }, - { - "type": "contract", - "name": "E", - "source_mapping": { - "start": 299, - "length": 78, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", - "is_dependency": false, - "lines": [ - 26, - 27, - 28, - 29, - 30 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - { - "type": "contract", - "name": "E", - "source_mapping": { - "start": 299, - "length": 78, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", - "is_dependency": false, - "lines": [ - 26, - 27, - 28, - 29, - 30 - ], - "starting_column": 1, - "ending_column": 2 - } - }, { "type": "contract", "name": "D", "source_mapping": { "start": 225, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -631,7 +609,7 @@ "source_mapping": { "start": 225, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -648,10 +626,10 @@ } } ], - "description": "E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) gives base constructor B.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#9-11) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) contract definition\n\t- From E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", - "markdown": "[E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) gives base constructor [B.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L9-L11) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) contract definition\n\t- From [E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30", - "id": "ee7d44329ffb81dc06e2a2f1b3a166a5115287a1175b32cf828b57479afbc4ae", + "description": "D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) gives base constructor C.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#15-17) arguments more than once in inheritance hierarchy:\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", + "markdown": "[D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) gives base constructor [C.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L15-L17) arguments more than once in inheritance hierarchy:\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24", + "id": "b579da8996b6a1a35169bcae74ad8126c68fb0a1819d3977cea3e0e295ff2d5c", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -660,41 +638,42 @@ "elements": [ { "type": "contract", - "name": "E", + "name": "F", "source_mapping": { - "start": 299, - "length": 78, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 58, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 26, - 27, - 28, - 29, - 30 + 33, + 34, + 35, + 36, + 37, + 38 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, { "type": "function", "name": "constructor", "source_mapping": { - "start": 178, - "length": 43, - "filename_used": "/GENERIC_PATH", + "start": 34, + "length": 51, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 15, - 16, - 17 + 3, + 4, + 5 ], "starting_column": 5, "ending_column": 6 @@ -702,21 +681,22 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "C", + "name": "A", "source_mapping": { - "start": 157, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 0, + "length": 87, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 1, + 2, + 3, + 4, + 5, + 6 ], "starting_column": 1, "ending_column": 2 @@ -727,75 +707,54 @@ }, { "type": "contract", - "name": "E", - "source_mapping": { - "start": 299, - "length": 78, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", - "is_dependency": false, - "lines": [ - 26, - 27, - 28, - 29, - 30 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - { - "type": "contract", - "name": "D", + "name": "F", "source_mapping": { - "start": 225, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 58, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 33, + 34, + 35, + 36, + 37, + 38 ], "starting_column": 1, - "ending_column": 2 + "ending_column": 0 } }, { "type": "contract", - "name": "D", + "name": "B", "source_mapping": { - "start": 225, - "length": 72, - "filename_used": "/GENERIC_PATH", + "start": 89, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) gives base constructor C.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#15-17) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", - "markdown": "[E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) gives base constructor [C.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L15-L17) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30", - "id": "33b16377cf3026b60d644e79d92682e6e626d7ad6598387440c9b20fd8aa44fe", + "description": "F (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#33-38) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From F (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#33-38) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[F](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L33-L38) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [F](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L33-L38) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L33-L38", + "id": "b74eb2b11af7a004b623d28b035228963f09aed588c95efed636021f426c5cdc", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -808,7 +767,7 @@ "source_mapping": { "start": 299, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -828,17 +787,17 @@ "type": "function", "name": "constructor", "source_mapping": { - "start": 34, - "length": 51, - "filename_used": "/GENERIC_PATH", + "start": 110, + "length": 43, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -846,22 +805,21 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "A", + "name": "B", "source_mapping": { - "start": 0, - "length": 87, - "filename_used": "/GENERIC_PATH", + "start": 89, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 1, - 2, - 3, - 4, - 5, - 6 + 8, + 9, + 10, + 11, + 12 ], "starting_column": 1, "ending_column": 2 @@ -872,21 +830,21 @@ }, { "type": "contract", - "name": "C", + "name": "E", "source_mapping": { - "start": 157, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 299, + "length": 78, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 14, - 15, - 16, - 17, - 18 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, "ending_column": 2 @@ -894,31 +852,75 @@ }, { "type": "contract", - "name": "B", + "name": "E", "source_mapping": { - "start": 89, - "length": 66, - "filename_used": "/GENERIC_PATH", + "start": 299, + "length": 78, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12 + 26, + 27, + 28, + 29, + 30 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 225, + "length": 72, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "is_dependency": false, + "lines": [ + 20, + 21, + 22, + 23, + 24 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + { + "type": "contract", + "name": "D", + "source_mapping": { + "start": 225, + "length": 72, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", + "is_dependency": false, + "lines": [ + 20, + 21, + 22, + 23, + 24 ], "starting_column": 1, "ending_column": 2 } } ], - "description": "E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", + "description": "E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) gives base constructor B.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#9-11) arguments more than once in inheritance hierarchy:\n\t- From E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) contract definition\n\t- From E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) constructor definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) contract definition\n\t- From D (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#20-24) constructor definition\n", + "markdown": "[E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) gives base constructor [B.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L9-L11) arguments more than once in inheritance hierarchy:\n\t- From [E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) contract definition\n\t- From [E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) constructor definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) contract definition\n\t- From [D](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L20-L24) constructor definition\n", "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30", - "id": "f5c86955c15d44fe9471680d12d37843a15ba934cbb124786cadab0919ea68d1", + "id": "ee7d44329ffb81dc06e2a2f1b3a166a5115287a1175b32cf828b57479afbc4ae", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" @@ -927,25 +929,24 @@ "elements": [ { "type": "contract", - "name": "F", + "name": "E", "source_mapping": { - "start": 380, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 299, + "length": 78, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 33, - 34, - 35, - 36, - 37, - 38 + 26, + 27, + 28, + 29, + 30 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, { @@ -954,7 +955,7 @@ "source_mapping": { "start": 34, "length": 51, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -974,7 +975,7 @@ "source_mapping": { "start": 0, "length": 87, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -996,25 +997,24 @@ }, { "type": "contract", - "name": "F", + "name": "C", "source_mapping": { - "start": 380, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 157, + "length": 66, + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "is_dependency": false, "lines": [ - 33, - 34, - 35, - 36, - 37, - 38 + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, - "ending_column": 0 + "ending_column": 2 } }, { @@ -1023,7 +1023,7 @@ "source_mapping": { "start": 89, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_relative": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol", @@ -1040,10 +1040,10 @@ } } ], - "description": "F (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#33-38) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From F (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#33-38) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", - "markdown": "[F](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L33-L38) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [F](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L33-L38) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", - "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L33-L38", - "id": "b74eb2b11af7a004b623d28b035228963f09aed588c95efed636021f426c5cdc", + "description": "E (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#26-30) gives base constructor A.constructor(uint256) (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#3-5) arguments more than once in inheritance hierarchy:\n\t- From C (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#14-18) constructor definition\n\t- From B (tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#8-12) constructor definition\n", + "markdown": "[E](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30) gives base constructor [A.constructor(uint256)](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L3-L5) arguments more than once in inheritance hierarchy:\n\t- From [C](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L14-L18) constructor definition\n\t- From [B](tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L8-L12) constructor definition\n", + "first_markdown_element": "tests/detectors/reused-constructor/0.4.25/reused_base_constructor.sol#L26-L30", + "id": "f5c86955c15d44fe9471680d12d37843a15ba934cbb124786cadab0919ea68d1", "check": "reused-constructor", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/rtlo/0.4.25/right_to_left_override.sol.0.4.25.RightToLeftOverride.json b/tests/detectors/rtlo/0.4.25/right_to_left_override.sol.0.4.25.RightToLeftOverride.json index 797ba6085..f08ecef4b 100644 --- a/tests/detectors/rtlo/0.4.25/right_to_left_override.sol.0.4.25.RightToLeftOverride.json +++ b/tests/detectors/rtlo/0.4.25/right_to_left_override.sol.0.4.25.RightToLeftOverride.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 96, "length": 3, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/rtlo/0.4.25/right_to_left_override.sol", "filename_relative": "tests/detectors/rtlo/0.4.25/right_to_left_override.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/rtlo/0.4.25/right_to_left_override.sol", diff --git a/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json b/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json index 14a2a32d1..d93bb2e3f 100644 --- a/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json +++ b/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json @@ -4,40 +4,38 @@ "elements": [ { "type": "variable", - "name": "blockhash", + "name": "mutable", "source_mapping": { - "start": 54, - "length": 14, - "filename_used": "/GENERIC_PATH", + "start": 527, + "length": 15, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 4 + 32 ], "starting_column": 5, - "ending_column": 19 + "ending_column": 20 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseContract", + "name": "Reserved", "source_mapping": { - "start": 26, - "length": 94, - "filename_used": "/GENERIC_PATH", + "start": 504, + "length": 42, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8 + 31, + 32, + 33, + 34 ], "starting_column": 1, "ending_column": 2 @@ -46,10 +44,10 @@ } } ], - "description": "BaseContract.blockhash (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#4) (state variable) shadows built-in symbol\"\n", - "markdown": "[BaseContract.blockhash](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L4) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L4", - "id": "61d1c1452e694c321d00576decdf35c62efbe8860f664273955fadce5e063cc8", + "description": "Reserved.mutable (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#32) (state variable) shadows built-in symbol\"\n", + "markdown": "[Reserved.mutable](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L32) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L32", + "id": "11840553a9e11623596d7a07275814e65a5b1d90277ae0e2954cd8ce74d6a6d2", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -58,40 +56,41 @@ "elements": [ { "type": "variable", - "name": "now", + "name": "ecrecover", "source_mapping": { - "start": 74, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 170, + "length": 18, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 5 + 11 ], "starting_column": 5, - "ending_column": 13 + "ending_column": 23 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseContract", + "name": "ExtendedContract", "source_mapping": { - "start": 26, - "length": 94, - "filename_used": "/GENERIC_PATH", + "start": 122, + "length": 139, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8 + 10, + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 1, "ending_column": 2 @@ -100,10 +99,10 @@ } } ], - "description": "BaseContract.now (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#5) (state variable) shadows built-in symbol\"\n", - "markdown": "[BaseContract.now](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L5) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L5", - "id": "942ad0405af0bc533374dded6e2474c53892747c98d2df14d59cbb6840fa18b3", + "description": "ExtendedContract.ecrecover (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#11) (state variable) shadows built-in symbol\"\n", + "markdown": "[ExtendedContract.ecrecover](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L11) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L11", + "id": "39737925cf3bd4ebf9a1c7bbe39da8b80ba28e5a3d93a938d1a4cca78a6a436d", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -111,54 +110,145 @@ { "elements": [ { - "type": "event", - "name": "revert", + "type": "variable", + "name": "keccak256", "source_mapping": { - "start": 89, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 449, + "length": 14, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 7 + 25 + ], + "starting_column": 9, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "require", + "source_mapping": { + "start": 380, + "length": 120, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 23, + 24, + 25, + 26, + 27, + 28 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "FurtherExtendedContract", + "source_mapping": { + "start": 263, + "length": 239, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "require()" + } + } + } + } + ], + "description": "FurtherExtendedContract.require().keccak256 (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#25) (local variable) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.require().keccak256](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L25) (local variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L25", + "id": "40f0453d27abf2d9ed76fe60853b6e2e0cd9a443d639e9da457460ea02b2bdc7", + "check": "shadowing-builtin", + "impact": "Low", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "abi", + "source_mapping": { + "start": 365, + "length": 8, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 21 ], "starting_column": 5, - "ending_column": 34 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseContract", + "name": "FurtherExtendedContract", "source_mapping": { - "start": 26, - "length": 94, - "filename_used": "/GENERIC_PATH", + "start": 263, + "length": 239, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8 + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 1, "ending_column": 2 } - }, - "signature": "revert(bool)" + } } } ], - "description": "BaseContractrevert(bool) (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#7) (event) shadows built-in symbol\"\n", - "markdown": "[BaseContractrevert(bool)](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L7) (event) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L7", - "id": "9c428e61cb4832d899b2bb711c8d428154425dbadf5dfc2e2d857254824d8f72", + "description": "FurtherExtendedContract.abi (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#21) (state variable) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.abi](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L21) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L21", + "id": "4665243a2df090e3543ab26447528fa3401916f4669fe1264145891846d4bc40", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -166,57 +256,53 @@ { "elements": [ { - "type": "function", - "name": "assert", + "type": "variable", + "name": "blockhash", "source_mapping": { - "start": 195, - "length": 64, - "filename_used": "/GENERIC_PATH", + "start": 54, + "length": 14, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 4 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 19 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ExtendedContract", + "name": "BaseContract", "source_mapping": { - "start": 122, - "length": 139, - "filename_used": "/GENERIC_PATH", + "start": 26, + "length": 94, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5, + 6, + 7, + 8 ], "starting_column": 1, "ending_column": 2 } - }, - "signature": "assert(bool)" + } } } ], - "description": "ExtendedContract.assert(bool) (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#13-15) (function) shadows built-in symbol\"\n", - "markdown": "[ExtendedContract.assert(bool)](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L13-L15) (function) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L13-L15", - "id": "b3a1b23c1daed52b1a2ff5fb76d4fcdf2bc0b2126524303321cf8e7835116d6f", + "description": "BaseContract.blockhash (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#4) (state variable) shadows built-in symbol\"\n", + "markdown": "[BaseContract.blockhash](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L4) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L4", + "id": "61d1c1452e694c321d00576decdf35c62efbe8860f664273955fadce5e063cc8", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -225,76 +311,58 @@ "elements": [ { "type": "variable", - "name": "msg", + "name": "this", "source_mapping": { - "start": 244, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 346, + "length": 13, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 14 + 20 ], - "starting_column": 9, - "ending_column": 17 + "starting_column": 5, + "ending_column": 18 }, "type_specific_fields": { "parent": { - "type": "function", - "name": "assert", + "type": "contract", + "name": "FurtherExtendedContract", "source_mapping": { - "start": 195, - "length": 64, - "filename_used": "/GENERIC_PATH", + "start": 263, + "length": 239, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ExtendedContract", - "source_mapping": { - "start": 122, - "length": 139, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "assert(bool)" + "starting_column": 1, + "ending_column": 2 } } } } ], - "description": "ExtendedContract.assert(bool).msg (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#14) (local variable) shadows built-in symbol\"\n", - "markdown": "[ExtendedContract.assert(bool).msg](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L14) (local variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L14", - "id": "a2a7e1e27320d38e52b51c9b1ec67cca0a403673ff6fdd59652f9cd8425d011f", + "description": "FurtherExtendedContract.this (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#20) (state variable) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.this](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L20) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L20", + "id": "87e1cc0cb95181dd120d3e6e55d89fdc7b5cd01da2f89cd7a3d105738f57c10b", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -303,41 +371,40 @@ "elements": [ { "type": "variable", - "name": "ecrecover", + "name": "now", "source_mapping": { - "start": 170, - "length": 18, - "filename_used": "/GENERIC_PATH", + "start": 74, + "length": 8, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 11 + 5 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 13 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ExtendedContract", + "name": "BaseContract", "source_mapping": { - "start": 122, - "length": 139, - "filename_used": "/GENERIC_PATH", + "start": 26, + "length": 94, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5, + 6, + 7, + 8 ], "starting_column": 1, "ending_column": 2 @@ -346,10 +413,10 @@ } } ], - "description": "ExtendedContract.ecrecover (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#11) (state variable) shadows built-in symbol\"\n", - "markdown": "[ExtendedContract.ecrecover](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L11) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L11", - "id": "39737925cf3bd4ebf9a1c7bbe39da8b80ba28e5a3d93a938d1a4cca78a6a436d", + "description": "BaseContract.now (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#5) (state variable) shadows built-in symbol\"\n", + "markdown": "[BaseContract.now](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L5) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L5", + "id": "942ad0405af0bc533374dded6e2474c53892747c98d2df14d59cbb6840fa18b3", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -357,65 +424,54 @@ { "elements": [ { - "type": "function", - "name": "require", + "type": "event", + "name": "revert", "source_mapping": { - "start": 380, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 89, + "length": 29, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26, - 27, - 28 + 7 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FurtherExtendedContract", + "name": "BaseContract", "source_mapping": { - "start": 263, - "length": 239, - "filename_used": "/GENERIC_PATH", + "start": 26, + "length": 94, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 3, + 4, + 5, + 6, + 7, + 8 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "require()" + "signature": "revert(bool)" } } ], - "description": "FurtherExtendedContract.require() (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#23-28) (modifier) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.require()](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L23-L28) (modifier) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L23-L28", - "id": "db6c26c9a7c319c1a34c486e6e625c0906a2b118f8cd72f38a38c167832aab4f", + "description": "BaseContractrevert(bool) (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#7) (event) shadows built-in symbol\"\n", + "markdown": "[BaseContractrevert(bool)](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L7) (event) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L7", + "id": "9c428e61cb4832d899b2bb711c8d428154425dbadf5dfc2e2d857254824d8f72", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -424,40 +480,37 @@ "elements": [ { "type": "variable", - "name": "keccak256", + "name": "msg", "source_mapping": { - "start": 449, - "length": 14, - "filename_used": "/GENERIC_PATH", + "start": 244, + "length": 8, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 25 + 14 ], "starting_column": 9, - "ending_column": 23 + "ending_column": 17 }, "type_specific_fields": { "parent": { "type": "function", - "name": "require", + "name": "assert", "source_mapping": { - "start": 380, - "length": 120, - "filename_used": "/GENERIC_PATH", + "start": 195, + "length": 64, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25, - 26, - 27, - 28 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -465,43 +518,96 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "FurtherExtendedContract", + "name": "ExtendedContract", "source_mapping": { - "start": 263, - "length": 239, - "filename_used": "/GENERIC_PATH", + "start": 122, + "length": 139, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 10, + 11, + 12, + 13, + 14, + 15, + 16 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "require()" + "signature": "assert(bool)" } } } } ], - "description": "FurtherExtendedContract.require().keccak256 (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#25) (local variable) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.require().keccak256](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L25) (local variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L25", - "id": "40f0453d27abf2d9ed76fe60853b6e2e0cd9a443d639e9da457460ea02b2bdc7", + "description": "ExtendedContract.assert(bool).msg (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#14) (local variable) shadows built-in symbol\"\n", + "markdown": "[ExtendedContract.assert(bool).msg](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L14) (local variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L14", + "id": "a2a7e1e27320d38e52b51c9b1ec67cca0a403673ff6fdd59652f9cd8425d011f", + "check": "shadowing-builtin", + "impact": "Low", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "assert", + "source_mapping": { + "start": 195, + "length": 64, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 13, + 14, + 15 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ExtendedContract", + "source_mapping": { + "start": 122, + "length": 139, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "assert(bool)" + } + } + ], + "description": "ExtendedContract.assert(bool) (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#13-15) (function) shadows built-in symbol\"\n", + "markdown": "[ExtendedContract.assert(bool)](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L13-L15) (function) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L13-L15", + "id": "b3a1b23c1daed52b1a2ff5fb76d4fcdf2bc0b2126524303321cf8e7835116d6f", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -514,7 +620,7 @@ "source_mapping": { "start": 473, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -532,7 +638,7 @@ "source_mapping": { "start": 380, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -555,7 +661,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -600,7 +706,7 @@ "source_mapping": { "start": 322, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -618,7 +724,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -655,81 +761,26 @@ { "elements": [ { - "type": "variable", - "name": "this", - "source_mapping": { - "start": 346, - "length": 13, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 20 - ], - "starting_column": 5, - "ending_column": 18 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FurtherExtendedContract", - "source_mapping": { - "start": 263, - "length": 239, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - } - } - } - ], - "description": "FurtherExtendedContract.this (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#20) (state variable) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.this](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L20) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L20", - "id": "87e1cc0cb95181dd120d3e6e55d89fdc7b5cd01da2f89cd7a3d105738f57c10b", - "check": "shadowing-builtin", - "impact": "Low", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "abi", + "type": "function", + "name": "require", "source_mapping": { - "start": 365, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 380, + "length": 120, + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 21 + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 5, - "ending_column": 13 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -738,7 +789,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -760,66 +811,15 @@ "starting_column": 1, "ending_column": 2 } - } - } - } - ], - "description": "FurtherExtendedContract.abi (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#21) (state variable) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.abi](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L21) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L21", - "id": "4665243a2df090e3543ab26447528fa3401916f4669fe1264145891846d4bc40", - "check": "shadowing-builtin", - "impact": "Low", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "mutable", - "source_mapping": { - "start": 527, - "length": 15, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 32 - ], - "starting_column": 5, - "ending_column": 20 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Reserved", - "source_mapping": { - "start": 504, - "length": 42, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34 - ], - "starting_column": 1, - "ending_column": 2 - } - } + }, + "signature": "require()" } } ], - "description": "Reserved.mutable (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#32) (state variable) shadows built-in symbol\"\n", - "markdown": "[Reserved.mutable](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L32) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L32", - "id": "11840553a9e11623596d7a07275814e65a5b1d90277ae0e2954cd8ce74d6a6d2", + "description": "FurtherExtendedContract.require() (tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#23-28) (modifier) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.require()](tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L23-L28) (modifier) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol#L23-L28", + "id": "db6c26c9a7c319c1a34c486e6e625c0906a2b118f8cd72f38a38c167832aab4f", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json b/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json index 1012fbe88..4c4ccc2bd 100644 --- a/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json +++ b/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json @@ -1,5 +1,206 @@ [ [ + { + "elements": [ + { + "type": "variable", + "name": "ecrecover", + "source_mapping": { + "start": 173, + "length": 18, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 11 + ], + "starting_column": 5, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "ExtendedContract", + "source_mapping": { + "start": 125, + "length": 139, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + } + ], + "description": "ExtendedContract.ecrecover (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#11) (state variable) shadows built-in symbol\"\n", + "markdown": "[ExtendedContract.ecrecover](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L11) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L11", + "id": "39737925cf3bd4ebf9a1c7bbe39da8b80ba28e5a3d93a938d1a4cca78a6a436d", + "check": "shadowing-builtin", + "impact": "Low", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "keccak256", + "source_mapping": { + "start": 452, + "length": 14, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 25 + ], + "starting_column": 9, + "ending_column": 23 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "require", + "source_mapping": { + "start": 383, + "length": 120, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 23, + 24, + 25, + 26, + 27, + 28 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "FurtherExtendedContract", + "source_mapping": { + "start": 266, + "length": 239, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "require()" + } + } + } + } + ], + "description": "FurtherExtendedContract.require().keccak256 (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#25) (local variable) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.require().keccak256](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L25) (local variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L25", + "id": "40f0453d27abf2d9ed76fe60853b6e2e0cd9a443d639e9da457460ea02b2bdc7", + "check": "shadowing-builtin", + "impact": "Low", + "confidence": "High" + }, + { + "elements": [ + { + "type": "variable", + "name": "abi", + "source_mapping": { + "start": 368, + "length": 8, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 21 + ], + "starting_column": 5, + "ending_column": 13 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "FurtherExtendedContract", + "source_mapping": { + "start": 266, + "length": 239, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "is_dependency": false, + "lines": [ + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 + ], + "starting_column": 1, + "ending_column": 2 + } + } + } + } + ], + "description": "FurtherExtendedContract.abi (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#21) (state variable) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.abi](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L21) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L21", + "id": "4665243a2df090e3543ab26447528fa3401916f4669fe1264145891846d4bc40", + "check": "shadowing-builtin", + "impact": "Low", + "confidence": "High" + }, { "elements": [ { @@ -8,7 +209,7 @@ "source_mapping": { "start": 57, "length": 14, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -26,7 +227,7 @@ "source_mapping": { "start": 29, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -58,40 +259,46 @@ "elements": [ { "type": "variable", - "name": "now", + "name": "this", "source_mapping": { - "start": 77, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 349, + "length": 13, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 5 + 20 ], "starting_column": 5, - "ending_column": 13 + "ending_column": 18 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseContract", + "name": "FurtherExtendedContract", "source_mapping": { - "start": 29, - "length": 94, - "filename_used": "/GENERIC_PATH", + "start": 266, + "length": 239, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8 + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 1, "ending_column": 2 @@ -100,10 +307,10 @@ } } ], - "description": "BaseContract.now (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#5) (state variable) shadows built-in symbol\"\n", - "markdown": "[BaseContract.now](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L5) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L5", - "id": "942ad0405af0bc533374dded6e2474c53892747c98d2df14d59cbb6840fa18b3", + "description": "FurtherExtendedContract.this (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#20) (state variable) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.this](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L20) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L20", + "id": "87e1cc0cb95181dd120d3e6e55d89fdc7b5cd01da2f89cd7a3d105738f57c10b", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -111,21 +318,21 @@ { "elements": [ { - "type": "event", - "name": "revert", + "type": "variable", + "name": "now", "source_mapping": { - "start": 92, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 8, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 7 + 5 ], "starting_column": 5, - "ending_column": 34 + "ending_column": 13 }, "type_specific_fields": { "parent": { @@ -134,7 +341,7 @@ "source_mapping": { "start": 29, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -150,15 +357,14 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "revert(bool)" + } } } ], - "description": "BaseContractrevert(bool) (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#7) (event) shadows built-in symbol\"\n", - "markdown": "[BaseContractrevert(bool)](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L7) (event) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L7", - "id": "9c428e61cb4832d899b2bb711c8d428154425dbadf5dfc2e2d857254824d8f72", + "description": "BaseContract.now (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#5) (state variable) shadows built-in symbol\"\n", + "markdown": "[BaseContract.now](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L5) (state variable) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L5", + "id": "942ad0405af0bc533374dded6e2474c53892747c98d2df14d59cbb6840fa18b3", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -166,57 +372,54 @@ { "elements": [ { - "type": "function", - "name": "assert", + "type": "event", + "name": "revert", "source_mapping": { - "start": 198, - "length": 64, - "filename_used": "/GENERIC_PATH", + "start": 92, + "length": 29, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 7 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 34 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ExtendedContract", + "name": "BaseContract", "source_mapping": { - "start": 125, - "length": 139, - "filename_used": "/GENERIC_PATH", + "start": 29, + "length": 94, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16 + 3, + 4, + 5, + 6, + 7, + 8 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "assert(bool)" + "signature": "revert(bool)" } } ], - "description": "ExtendedContract.assert(bool) (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#13-15) (function) shadows built-in symbol\"\n", - "markdown": "[ExtendedContract.assert(bool)](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L13-L15) (function) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L13-L15", - "id": "b3a1b23c1daed52b1a2ff5fb76d4fcdf2bc0b2126524303321cf8e7835116d6f", + "description": "BaseContractrevert(bool) (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#7) (event) shadows built-in symbol\"\n", + "markdown": "[BaseContractrevert(bool)](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L7) (event) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L7", + "id": "9c428e61cb4832d899b2bb711c8d428154425dbadf5dfc2e2d857254824d8f72", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -229,7 +432,7 @@ "source_mapping": { "start": 247, "length": 8, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -247,7 +450,7 @@ "source_mapping": { "start": 198, "length": 64, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -267,7 +470,7 @@ "source_mapping": { "start": 125, "length": 139, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -302,21 +505,23 @@ { "elements": [ { - "type": "variable", - "name": "ecrecover", + "type": "function", + "name": "assert", "source_mapping": { - "start": 173, - "length": 18, - "filename_used": "/GENERIC_PATH", + "start": 198, + "length": 64, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 11 + 13, + 14, + 15 ], "starting_column": 5, - "ending_column": 23 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -325,7 +530,7 @@ "source_mapping": { "start": 125, "length": 139, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -342,166 +547,15 @@ "starting_column": 1, "ending_column": 2 } - } - } - } - ], - "description": "ExtendedContract.ecrecover (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#11) (state variable) shadows built-in symbol\"\n", - "markdown": "[ExtendedContract.ecrecover](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L11) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L11", - "id": "39737925cf3bd4ebf9a1c7bbe39da8b80ba28e5a3d93a938d1a4cca78a6a436d", - "check": "shadowing-builtin", - "impact": "Low", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "require", - "source_mapping": { - "start": 383, - "length": 120, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FurtherExtendedContract", - "source_mapping": { - "start": 266, - "length": 239, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } }, - "signature": "require()" - } - } - ], - "description": "FurtherExtendedContract.require() (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#23-28) (modifier) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.require()](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L23-L28) (modifier) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L23-L28", - "id": "db6c26c9a7c319c1a34c486e6e625c0906a2b118f8cd72f38a38c167832aab4f", - "check": "shadowing-builtin", - "impact": "Low", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "keccak256", - "source_mapping": { - "start": 452, - "length": 14, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 25 - ], - "starting_column": 9, - "ending_column": 23 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "require", - "source_mapping": { - "start": 383, - "length": 120, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 23, - 24, - 25, - 26, - 27, - 28 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FurtherExtendedContract", - "source_mapping": { - "start": 266, - "length": 239, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "require()" - } - } + "signature": "assert(bool)" } } ], - "description": "FurtherExtendedContract.require().keccak256 (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#25) (local variable) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.require().keccak256](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L25) (local variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L25", - "id": "40f0453d27abf2d9ed76fe60853b6e2e0cd9a443d639e9da457460ea02b2bdc7", + "description": "ExtendedContract.assert(bool) (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#13-15) (function) shadows built-in symbol\"\n", + "markdown": "[ExtendedContract.assert(bool)](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L13-L15) (function) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L13-L15", + "id": "b3a1b23c1daed52b1a2ff5fb76d4fcdf2bc0b2126524303321cf8e7835116d6f", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" @@ -514,7 +568,7 @@ "source_mapping": { "start": 476, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -532,7 +586,7 @@ "source_mapping": { "start": 383, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -555,7 +609,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -600,7 +654,7 @@ "source_mapping": { "start": 325, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -618,7 +672,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -655,81 +709,26 @@ { "elements": [ { - "type": "variable", - "name": "this", - "source_mapping": { - "start": 349, - "length": 13, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 20 - ], - "starting_column": 5, - "ending_column": 18 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FurtherExtendedContract", - "source_mapping": { - "start": 266, - "length": 239, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", - "is_dependency": false, - "lines": [ - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - } - } - } - ], - "description": "FurtherExtendedContract.this (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#20) (state variable) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.this](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L20) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L20", - "id": "87e1cc0cb95181dd120d3e6e55d89fdc7b5cd01da2f89cd7a3d105738f57c10b", - "check": "shadowing-builtin", - "impact": "Low", - "confidence": "High" - }, - { - "elements": [ - { - "type": "variable", - "name": "abi", + "type": "function", + "name": "require", "source_mapping": { - "start": 368, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 383, + "length": 120, + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "is_dependency": false, "lines": [ - 21 + 23, + 24, + 25, + 26, + 27, + 28 ], "starting_column": 5, - "ending_column": 13 + "ending_column": 6 }, "type_specific_fields": { "parent": { @@ -738,7 +737,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -760,14 +759,15 @@ "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "require()" } } ], - "description": "FurtherExtendedContract.abi (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#21) (state variable) shadows built-in symbol\"\n", - "markdown": "[FurtherExtendedContract.abi](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L21) (state variable) shadows built-in symbol\"\n", - "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L21", - "id": "4665243a2df090e3543ab26447528fa3401916f4669fe1264145891846d4bc40", + "description": "FurtherExtendedContract.require() (tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#23-28) (modifier) shadows built-in symbol\"\n", + "markdown": "[FurtherExtendedContract.require()](tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L23-L28) (modifier) shadows built-in symbol\"\n", + "first_markdown_element": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol#L23-L28", + "id": "db6c26c9a7c319c1a34c486e6e625c0906a2b118f8cd72f38a38c167832aab4f", "check": "shadowing-builtin", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol.0.4.25.LocalShadowing.json b/tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol.0.4.25.LocalShadowing.json index 9516c83cb..a353d0e4f 100644 --- a/tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol.0.4.25.LocalShadowing.json +++ b/tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol.0.4.25.LocalShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 376, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 351, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -44,7 +44,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 256, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -125,7 +125,7 @@ "source_mapping": { "start": 133, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -143,7 +143,7 @@ "source_mapping": { "start": 85, "length": 110, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 54, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -187,7 +187,7 @@ "source_mapping": { "start": 26, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -221,7 +221,7 @@ "source_mapping": { "start": 398, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -239,7 +239,7 @@ "source_mapping": { "start": 351, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -257,7 +257,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -290,7 +290,7 @@ "source_mapping": { "start": 70, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -308,7 +308,7 @@ "source_mapping": { "start": 26, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -338,11 +338,11 @@ "elements": [ { "type": "variable", - "name": "z", + "name": "v", "source_mapping": { - "start": 405, + "start": 421, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -350,8 +350,8 @@ "lines": [ 25 ], - "starting_column": 59, - "ending_column": 65 + "starting_column": 75, + "ending_column": 81 }, "type_specific_fields": { "parent": { @@ -360,7 +360,7 @@ "source_mapping": { "start": 351, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -378,7 +378,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -406,21 +406,21 @@ } }, { - "type": "function", - "name": "z", + "type": "event", + "name": "v", "source_mapping": { - "start": 150, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 183, + "length": 10, + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 11 + 13 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 15 }, "type_specific_fields": { "parent": { @@ -429,7 +429,7 @@ "source_mapping": { "start": 85, "length": 110, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -447,14 +447,14 @@ "ending_column": 2 } }, - "signature": "z()" + "signature": "v()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#11) (function)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L11) (function)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#13) (event)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L13) (event)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L25", - "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", + "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -467,7 +467,7 @@ "source_mapping": { "start": 413, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -485,7 +485,7 @@ "source_mapping": { "start": 351, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -503,7 +503,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -536,7 +536,7 @@ "source_mapping": { "start": 274, "length": 71, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -557,7 +557,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -595,11 +595,11 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "z", "source_mapping": { - "start": 421, + "start": 405, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -607,8 +607,8 @@ "lines": [ 25 ], - "starting_column": 75, - "ending_column": 81 + "starting_column": 59, + "ending_column": 65 }, "type_specific_fields": { "parent": { @@ -617,7 +617,7 @@ "source_mapping": { "start": 351, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -635,7 +635,7 @@ "source_mapping": { "start": 197, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -663,21 +663,21 @@ } }, { - "type": "event", - "name": "v", + "type": "function", + "name": "z", "source_mapping": { - "start": 183, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 27, + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 13 + 11 ], "starting_column": 5, - "ending_column": 15 + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -686,7 +686,7 @@ "source_mapping": { "start": 85, "length": 110, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol", @@ -704,14 +704,14 @@ "ending_column": 2 } }, - "signature": "v()" + "signature": "z()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#13) (event)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L13) (event)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#11) (function)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L11) (function)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.4.25/shadowing_local_variable.sol#L25", - "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", + "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", "check": "shadowing-local", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol.0.5.16.LocalShadowing.json b/tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol.0.5.16.LocalShadowing.json index bb012fce1..99778d01c 100644 --- a/tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol.0.5.16.LocalShadowing.json +++ b/tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol.0.5.16.LocalShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 379, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 354, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -44,7 +44,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 259, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -125,7 +125,7 @@ "source_mapping": { "start": 136, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -143,7 +143,7 @@ "source_mapping": { "start": 88, "length": 110, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 57, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -187,7 +187,7 @@ "source_mapping": { "start": 29, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -221,7 +221,7 @@ "source_mapping": { "start": 401, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -239,7 +239,7 @@ "source_mapping": { "start": 354, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -257,7 +257,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -290,7 +290,7 @@ "source_mapping": { "start": 73, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -308,7 +308,7 @@ "source_mapping": { "start": 29, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -338,11 +338,11 @@ "elements": [ { "type": "variable", - "name": "z", + "name": "v", "source_mapping": { - "start": 408, + "start": 424, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -350,8 +350,8 @@ "lines": [ 25 ], - "starting_column": 59, - "ending_column": 65 + "starting_column": 75, + "ending_column": 81 }, "type_specific_fields": { "parent": { @@ -360,7 +360,7 @@ "source_mapping": { "start": 354, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -378,7 +378,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -406,21 +406,21 @@ } }, { - "type": "function", - "name": "z", + "type": "event", + "name": "v", "source_mapping": { - "start": 153, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 186, + "length": 10, + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 11 + 13 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 15 }, "type_specific_fields": { "parent": { @@ -429,7 +429,7 @@ "source_mapping": { "start": 88, "length": 110, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -447,14 +447,14 @@ "ending_column": 2 } }, - "signature": "z()" + "signature": "v()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#11) (function)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L11) (function)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#13) (event)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L13) (event)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L25", - "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", + "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -467,7 +467,7 @@ "source_mapping": { "start": 416, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -485,7 +485,7 @@ "source_mapping": { "start": 354, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -503,7 +503,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -536,7 +536,7 @@ "source_mapping": { "start": 277, "length": 71, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -557,7 +557,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -595,11 +595,11 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "z", "source_mapping": { - "start": 424, + "start": 408, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -607,8 +607,8 @@ "lines": [ 25 ], - "starting_column": 75, - "ending_column": 81 + "starting_column": 59, + "ending_column": 65 }, "type_specific_fields": { "parent": { @@ -617,7 +617,7 @@ "source_mapping": { "start": 354, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -635,7 +635,7 @@ "source_mapping": { "start": 200, "length": 235, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -663,21 +663,21 @@ } }, { - "type": "event", - "name": "v", + "type": "function", + "name": "z", "source_mapping": { - "start": 186, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 153, + "length": 27, + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 13 + 11 ], "starting_column": 5, - "ending_column": 15 + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -686,7 +686,7 @@ "source_mapping": { "start": 88, "length": 110, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol", @@ -704,14 +704,14 @@ "ending_column": 2 } }, - "signature": "v()" + "signature": "z()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#13) (event)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L13) (event)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#11) (function)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L11) (function)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.5.16/shadowing_local_variable.sol#L25", - "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", + "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", "check": "shadowing-local", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol.0.6.11.LocalShadowing.json b/tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol.0.6.11.LocalShadowing.json index f4eed78f8..3cd190e9f 100644 --- a/tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol.0.6.11.LocalShadowing.json +++ b/tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol.0.6.11.LocalShadowing.json @@ -4,10 +4,10 @@ "elements": [ { "type": "variable", - "name": "__x", + "name": "y", "source_mapping": { - "start": 382, - "length": 8, + "start": 406, + "length": 5, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", @@ -16,8 +16,8 @@ "lines": [ 25 ], - "starting_column": 30, - "ending_column": 38 + "starting_column": 54, + "ending_column": 59 }, "type_specific_fields": { "parent": { @@ -73,45 +73,38 @@ }, { "type": "variable", - "name": "__x", + "name": "y", "source_mapping": { - "start": 260, - "length": 12, + "start": 73, + "length": 10, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 17 + 5 ], "starting_column": 5, - "ending_column": 17 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FurtherExtendedContract", + "name": "BaseContract", "source_mapping": { - "start": 201, - "length": 239, + "start": 29, + "length": 57, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26 + 3, + 4, + 5, + 6 ], "starting_column": 1, "ending_column": 2 @@ -120,10 +113,10 @@ } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).__x (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.__x (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#17) (state variable)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).__x](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.__x](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L17) (state variable)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).y (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- BaseContract.y (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#5) (state variable)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).y](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [BaseContract.y](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L5) (state variable)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25", - "id": "cd61765f88a1447471f5c75c7a488af44534d81be3998f5d01a6b5fa8f693327", + "id": "465bd81cbb09a3d2cc84ea6102fb059296f1970e85e2d86a171f8219f1a34508", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -132,10 +125,10 @@ "elements": [ { "type": "variable", - "name": "y", + "name": "v", "source_mapping": { - "start": 406, - "length": 5, + "start": 429, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", @@ -144,8 +137,8 @@ "lines": [ 25 ], - "starting_column": 54, - "ending_column": 59 + "starting_column": 77, + "ending_column": 83 }, "type_specific_fields": { "parent": { @@ -200,10 +193,10 @@ } }, { - "type": "variable", - "name": "y", + "type": "event", + "name": "v", "source_mapping": { - "start": 73, + "start": 187, "length": 10, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", @@ -211,7 +204,7 @@ "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 5 + 13 ], "starting_column": 5, "ending_column": 15 @@ -219,32 +212,36 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseContract", + "name": "ExtendedContract", "source_mapping": { - "start": 29, - "length": 57, + "start": 88, + "length": 111, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6 + 8, + 9, + 10, + 11, + 12, + 13, + 14 ], "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "v()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).y (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- BaseContract.y (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#5) (state variable)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).y](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [BaseContract.y](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L5) (state variable)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#13) (event)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L13) (event)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25", - "id": "465bd81cbb09a3d2cc84ea6102fb059296f1970e85e2d86a171f8219f1a34508", + "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -253,9 +250,9 @@ "elements": [ { "type": "variable", - "name": "z", + "name": "w", "source_mapping": { - "start": 413, + "start": 421, "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", @@ -265,8 +262,8 @@ "lines": [ 25 ], - "starting_column": 61, - "ending_column": 67 + "starting_column": 69, + "ending_column": 75 }, "type_specific_fields": { "parent": { @@ -322,54 +319,61 @@ }, { "type": "function", - "name": "z", + "name": "w", "source_mapping": { - "start": 154, - "length": 27, + "start": 280, + "length": 71, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 11 + 20, + 21, + 22, + 23 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ExtendedContract", + "name": "FurtherExtendedContract", "source_mapping": { - "start": 88, - "length": 111, + "start": 201, + "length": 239, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14 + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "z()" + "signature": "w()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#11) (function)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L11) (function)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).w (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.w() (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#20-23) (modifier)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).w](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.w()](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L20-L23) (modifier)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25", - "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", + "id": "a94a2b9331482c75582868e6d3cc5c9b01487e7505f219abcf36a20d76e0b089", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -378,10 +382,10 @@ "elements": [ { "type": "variable", - "name": "w", + "name": "__x", "source_mapping": { - "start": 421, - "length": 6, + "start": 382, + "length": 8, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", @@ -390,8 +394,8 @@ "lines": [ 25 ], - "starting_column": 69, - "ending_column": 75 + "starting_column": 30, + "ending_column": 38 }, "type_specific_fields": { "parent": { @@ -446,24 +450,21 @@ } }, { - "type": "function", - "name": "w", + "type": "variable", + "name": "__x", "source_mapping": { - "start": 280, - "length": 71, + "start": 260, + "length": 12, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23 + 17 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 17 }, "type_specific_fields": { "parent": { @@ -493,15 +494,14 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "w()" + } } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).w (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.w() (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#20-23) (modifier)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).w](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.w()](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L20-L23) (modifier)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).__x (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.__x (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#17) (state variable)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).__x](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.__x](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L17) (state variable)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25", - "id": "a94a2b9331482c75582868e6d3cc5c9b01487e7505f219abcf36a20d76e0b089", + "id": "cd61765f88a1447471f5c75c7a488af44534d81be3998f5d01a6b5fa8f693327", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -510,9 +510,9 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "z", "source_mapping": { - "start": 429, + "start": 413, "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", @@ -522,8 +522,8 @@ "lines": [ 25 ], - "starting_column": 77, - "ending_column": 83 + "starting_column": 61, + "ending_column": 67 }, "type_specific_fields": { "parent": { @@ -578,21 +578,21 @@ } }, { - "type": "event", - "name": "v", + "type": "function", + "name": "z", "source_mapping": { - "start": 187, - "length": 10, + "start": 154, + "length": 27, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 13 + 11 ], "starting_column": 5, - "ending_column": 15 + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -619,14 +619,14 @@ "ending_column": 2 } }, - "signature": "v()" + "signature": "z()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#13) (event)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L13) (event)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#11) (function)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L11) (function)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.6.11/shadowing_local_variable.sol#L25", - "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", + "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", "check": "shadowing-local", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json b/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json index d79a3b6fb..617ff661d 100644 --- a/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json +++ b/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json @@ -4,11 +4,11 @@ "elements": [ { "type": "variable", - "name": "__x", + "name": "y", "source_mapping": { - "start": 382, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 406, + "length": 5, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -16,8 +16,8 @@ "lines": [ 25 ], - "starting_column": 30, - "ending_column": 38 + "starting_column": 54, + "ending_column": 59 }, "type_specific_fields": { "parent": { @@ -26,7 +26,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -44,7 +44,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -73,45 +73,38 @@ }, { "type": "variable", - "name": "__x", + "name": "y", "source_mapping": { - "start": 260, - "length": 12, - "filename_used": "/GENERIC_PATH", + "start": 73, + "length": 10, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 17 + 5 ], "starting_column": 5, - "ending_column": 17 + "ending_column": 15 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "FurtherExtendedContract", + "name": "BaseContract", "source_mapping": { - "start": 201, - "length": 239, - "filename_used": "/GENERIC_PATH", + "start": 29, + "length": 57, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26 + 3, + 4, + 5, + 6 ], "starting_column": 1, "ending_column": 2 @@ -120,10 +113,10 @@ } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).__x (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.__x (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#17) (state variable)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).__x](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.__x](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L17) (state variable)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).y (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- BaseContract.y (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#5) (state variable)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).y](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [BaseContract.y](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L5) (state variable)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25", - "id": "cd61765f88a1447471f5c75c7a488af44534d81be3998f5d01a6b5fa8f693327", + "id": "465bd81cbb09a3d2cc84ea6102fb059296f1970e85e2d86a171f8219f1a34508", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -132,11 +125,11 @@ "elements": [ { "type": "variable", - "name": "y", + "name": "v", "source_mapping": { - "start": 406, - "length": 5, - "filename_used": "/GENERIC_PATH", + "start": 429, + "length": 6, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -144,8 +137,8 @@ "lines": [ 25 ], - "starting_column": 54, - "ending_column": 59 + "starting_column": 77, + "ending_column": 83 }, "type_specific_fields": { "parent": { @@ -154,7 +147,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -172,7 +165,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -200,18 +193,18 @@ } }, { - "type": "variable", - "name": "y", + "type": "event", + "name": "v", "source_mapping": { - "start": 73, + "start": 187, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 5 + 13 ], "starting_column": 5, "ending_column": 15 @@ -219,32 +212,36 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseContract", + "name": "ExtendedContract", "source_mapping": { - "start": 29, - "length": 57, - "filename_used": "/GENERIC_PATH", + "start": 88, + "length": 111, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6 + 8, + 9, + 10, + 11, + 12, + 13, + 14 ], "starting_column": 1, "ending_column": 2 } - } + }, + "signature": "v()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).y (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- BaseContract.y (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#5) (state variable)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).y](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [BaseContract.y](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L5) (state variable)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#13) (event)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L13) (event)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25", - "id": "465bd81cbb09a3d2cc84ea6102fb059296f1970e85e2d86a171f8219f1a34508", + "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -253,11 +250,11 @@ "elements": [ { "type": "variable", - "name": "z", + "name": "w", "source_mapping": { - "start": 413, + "start": 421, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -265,8 +262,8 @@ "lines": [ 25 ], - "starting_column": 61, - "ending_column": 67 + "starting_column": 69, + "ending_column": 75 }, "type_specific_fields": { "parent": { @@ -275,7 +272,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -293,7 +290,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -322,54 +319,61 @@ }, { "type": "function", - "name": "z", + "name": "w", "source_mapping": { - "start": 154, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 280, + "length": 71, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 11 + 20, + 21, + 22, + 23 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 6 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "ExtendedContract", + "name": "FurtherExtendedContract", "source_mapping": { - "start": 88, - "length": 111, - "filename_used": "/GENERIC_PATH", + "start": 201, + "length": 239, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14 + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "z()" + "signature": "w()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#11) (function)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L11) (function)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).w (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.w() (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#20-23) (modifier)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).w](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.w()](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L20-L23) (modifier)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25", - "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", + "id": "a94a2b9331482c75582868e6d3cc5c9b01487e7505f219abcf36a20d76e0b089", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -378,11 +382,11 @@ "elements": [ { "type": "variable", - "name": "w", + "name": "__x", "source_mapping": { - "start": 421, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 382, + "length": 8, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -390,8 +394,8 @@ "lines": [ 25 ], - "starting_column": 69, - "ending_column": 75 + "starting_column": 30, + "ending_column": 38 }, "type_specific_fields": { "parent": { @@ -400,7 +404,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -418,7 +422,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -446,24 +450,21 @@ } }, { - "type": "function", - "name": "w", + "type": "variable", + "name": "__x", "source_mapping": { - "start": 280, - "length": 71, - "filename_used": "/GENERIC_PATH", + "start": 260, + "length": 12, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23 + 17 ], "starting_column": 5, - "ending_column": 6 + "ending_column": 17 }, "type_specific_fields": { "parent": { @@ -472,7 +473,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -493,15 +494,14 @@ "starting_column": 1, "ending_column": 2 } - }, - "signature": "w()" + } } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).w (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.w() (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#20-23) (modifier)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).w](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.w()](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L20-L23) (modifier)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).__x (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- FurtherExtendedContract.__x (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#17) (state variable)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).__x](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [FurtherExtendedContract.__x](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L17) (state variable)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25", - "id": "a94a2b9331482c75582868e6d3cc5c9b01487e7505f219abcf36a20d76e0b089", + "id": "cd61765f88a1447471f5c75c7a488af44534d81be3998f5d01a6b5fa8f693327", "check": "shadowing-local", "impact": "Low", "confidence": "High" @@ -510,11 +510,11 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "z", "source_mapping": { - "start": 429, + "start": 413, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -522,8 +522,8 @@ "lines": [ 25 ], - "starting_column": 77, - "ending_column": 83 + "starting_column": 61, + "ending_column": 67 }, "type_specific_fields": { "parent": { @@ -532,7 +532,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -550,7 +550,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -578,21 +578,21 @@ } }, { - "type": "event", - "name": "v", + "type": "function", + "name": "z", "source_mapping": { - "start": 187, - "length": 10, - "filename_used": "/GENERIC_PATH", + "start": 154, + "length": 27, + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "is_dependency": false, "lines": [ - 13 + 11 ], "starting_column": 5, - "ending_column": 15 + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -601,7 +601,7 @@ "source_mapping": { "start": 88, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -619,14 +619,14 @@ "ending_column": 2 } }, - "signature": "v()" + "signature": "z()" } } ], - "description": "FurtherExtendedContract.shadowingParent(uint256).v (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContractv() (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#13) (event)\n", - "markdown": "[FurtherExtendedContract.shadowingParent(uint256).v](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContractv()](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L13) (event)\n", + "description": "FurtherExtendedContract.shadowingParent(uint256).z (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#25) shadows:\n\t- ExtendedContract.z() (tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#11) (function)\n", + "markdown": "[FurtherExtendedContract.shadowingParent(uint256).z](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25) shadows:\n\t- [ExtendedContract.z()](tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L11) (function)\n", "first_markdown_element": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol#L25", - "id": "973e31cc30dc7a3e1f089dfa5848234075f237f78fa492c772b1083e12c79054", + "id": "e3d2948e9c1252fe84e0d7e58f6682af7af84ef209f6e71f039faccabf07b0bd", "check": "shadowing-local", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/solc-version/0.5.14/static.sol.0.5.14.IncorrectSolc.json b/tests/detectors/solc-version/0.5.14/static.sol.0.5.14.IncorrectSolc.json index 62633e836..7ef7a4580 100644 --- a/tests/detectors/solc-version/0.5.14/static.sol.0.5.14.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.5.14/static.sol.0.5.14.IncorrectSolc.json @@ -1,5 +1,15 @@ [ [ + { + "elements": [], + "description": "solc-0.5.14 is not recommended for deployment\n", + "markdown": "solc-0.5.14 is not recommended for deployment\n", + "first_markdown_element": "", + "id": "839b9aa9c05b3f4bfeb7aefa9b7a69d82a322bf527f21bbf7080a7855f003803", + "check": "solc-version", + "impact": "Informational", + "confidence": "High" + }, { "elements": [ { @@ -35,16 +45,6 @@ "check": "solc-version", "impact": "Informational", "confidence": "High" - }, - { - "elements": [], - "description": "solc-0.5.14 is not recommended for deployment\n", - "markdown": "solc-0.5.14 is not recommended for deployment\n", - "first_markdown_element": "", - "id": "839b9aa9c05b3f4bfeb7aefa9b7a69d82a322bf527f21bbf7080a7855f003803", - "check": "solc-version", - "impact": "Informational", - "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json b/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json index ed491e31c..8d174ce84 100644 --- a/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/solc-version/0.5.16/dynamic_1.sol", "filename_relative": "tests/detectors/solc-version/0.5.16/dynamic_1.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.5.16/dynamic_1.sol", diff --git a/tests/detectors/solc-version/0.6.10/static.sol.0.6.10.IncorrectSolc.json b/tests/detectors/solc-version/0.6.10/static.sol.0.6.10.IncorrectSolc.json index 5e92ed5a7..a079d019e 100644 --- a/tests/detectors/solc-version/0.6.10/static.sol.0.6.10.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.6.10/static.sol.0.6.10.IncorrectSolc.json @@ -1,5 +1,15 @@ [ [ + { + "elements": [], + "description": "solc-0.6.10 is not recommended for deployment\n", + "markdown": "solc-0.6.10 is not recommended for deployment\n", + "first_markdown_element": "", + "id": "b2c2f26d29a163098673e6dcb2342e00d94996a84040bac62f7dbb2f20fa8f28", + "check": "solc-version", + "impact": "Informational", + "confidence": "High" + }, { "elements": [ { @@ -35,16 +45,6 @@ "check": "solc-version", "impact": "Informational", "confidence": "High" - }, - { - "elements": [], - "description": "solc-0.6.10 is not recommended for deployment\n", - "markdown": "solc-0.6.10 is not recommended for deployment\n", - "first_markdown_element": "", - "id": "b2c2f26d29a163098673e6dcb2342e00d94996a84040bac62f7dbb2f20fa8f28", - "check": "solc-version", - "impact": "Informational", - "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/solc-version/0.7.4/static.sol.0.7.4.IncorrectSolc.json b/tests/detectors/solc-version/0.7.4/static.sol.0.7.4.IncorrectSolc.json index 66976b6a6..0f03e7d15 100644 --- a/tests/detectors/solc-version/0.7.4/static.sol.0.7.4.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.7.4/static.sol.0.7.4.IncorrectSolc.json @@ -1,5 +1,15 @@ [ [ + { + "elements": [], + "description": "solc-0.7.4 is not recommended for deployment\n", + "markdown": "solc-0.7.4 is not recommended for deployment\n", + "first_markdown_element": "", + "id": "27e54a3813c974274b355c03bd742d4f2b8cd63fa57143b4fb741cbecd022dd2", + "check": "solc-version", + "impact": "Informational", + "confidence": "High" + }, { "elements": [ { @@ -35,16 +45,6 @@ "check": "solc-version", "impact": "Informational", "confidence": "High" - }, - { - "elements": [], - "description": "solc-0.7.4 is not recommended for deployment\n", - "markdown": "solc-0.7.4 is not recommended for deployment\n", - "first_markdown_element": "", - "id": "27e54a3813c974274b355c03bd742d4f2b8cd63fa57143b4fb741cbecd022dd2", - "check": "solc-version", - "impact": "Informational", - "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json b/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json index 3aacc95b3..03906c15f 100644 --- a/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/solc-version/0.7.6/dynamic_1.sol", "filename_relative": "tests/detectors/solc-version/0.7.6/dynamic_1.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.7.6/dynamic_1.sol", diff --git a/tests/detectors/solc-version/0.7.6/dynamic_2.sol.0.7.6.IncorrectSolc.json b/tests/detectors/solc-version/0.7.6/dynamic_2.sol.0.7.6.IncorrectSolc.json index 9f68554ac..27d201ca1 100644 --- a/tests/detectors/solc-version/0.7.6/dynamic_2.sol.0.7.6.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.7.6/dynamic_2.sol.0.7.6.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/solc-version/0.7.6/dynamic_2.sol", "filename_relative": "tests/detectors/solc-version/0.7.6/dynamic_2.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.7.6/dynamic_2.sol", diff --git a/tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol.0.5.10.StorageSignedIntegerArray.json b/tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol.0.5.10.StorageSignedIntegerArray.json index 9f3a635e5..b6d8deae0 100644 --- a/tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol.0.5.10.StorageSignedIntegerArray.json +++ b/tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol.0.5.10.StorageSignedIntegerArray.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 25, "length": 2256, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -68,7 +68,7 @@ "source_mapping": { "start": 601, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -88,7 +88,7 @@ "source_mapping": { "start": 25, "length": 2256, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -151,7 +151,7 @@ "source_mapping": { "start": 746, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 601, "length": 170, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -189,7 +189,7 @@ "source_mapping": { "start": 25, "length": 2256, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -265,7 +265,7 @@ "source_mapping": { "start": 25, "length": 2256, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -325,7 +325,7 @@ "source_mapping": { "start": 355, "length": 132, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -345,7 +345,7 @@ "source_mapping": { "start": 25, "length": 2256, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -408,7 +408,7 @@ "source_mapping": { "start": 384, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -426,7 +426,7 @@ "source_mapping": { "start": 355, "length": 132, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", @@ -446,7 +446,7 @@ "source_mapping": { "start": 25, "length": 2256, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_relative": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/storage-array/0.5.10/storage_signed_integer_array.sol", diff --git a/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json b/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json index ca52a6c96..b62912670 100644 --- a/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json +++ b/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/suicidal/0.4.25/suicidal.sol", "filename_relative": "tests/detectors/suicidal/0.4.25/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.4.25/suicidal.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/suicidal/0.4.25/suicidal.sol", "filename_relative": "tests/detectors/suicidal/0.4.25/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.4.25/suicidal.sol", diff --git a/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json b/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json index 8905e2b86..fa655a9c6 100644 --- a/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json +++ b/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/suicidal/0.5.16/suicidal.sol", "filename_relative": "tests/detectors/suicidal/0.5.16/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.5.16/suicidal.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/suicidal/0.5.16/suicidal.sol", "filename_relative": "tests/detectors/suicidal/0.5.16/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.5.16/suicidal.sol", diff --git a/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json b/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json index 84c033bd8..08e972fe3 100644 --- a/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json +++ b/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 47, - "length": 70, + "start": 231, + "length": 79, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -59,42 +59,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } }, { "type": "node", - "name": "require(bool)(block.timestamp == 0)", + "name": "block.timestamp > 0", "source_mapping": { - "start": 81, - "length": 29, + "start": 279, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 5 + 14 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 47, - "length": 70, + "start": 231, + "length": 79, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -137,16 +137,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } } } } ], - "description": "Timestamp.bad0() (tests/detectors/timestamp/0.4.25/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.4.25/timestamp.sol#5)\n", - "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.4.25/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.4.25/timestamp.sol#L5)\n", - "first_markdown_element": "tests/detectors/timestamp/0.4.25/timestamp.sol#L4-L6", - "id": "9d7c44d1a332d53aacc312d316891fc85c62db8b5a5a638a64cdb718c9f20029", + "description": "Timestamp.bad2() (tests/detectors/timestamp/0.4.25/timestamp.sol#13-15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp > 0 (tests/detectors/timestamp/0.4.25/timestamp.sol#14)\n", + "markdown": "[Timestamp.bad2()](tests/detectors/timestamp/0.4.25/timestamp.sol#L13-L15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [block.timestamp > 0](tests/detectors/timestamp/0.4.25/timestamp.sol#L14)\n", + "first_markdown_element": "tests/detectors/timestamp/0.4.25/timestamp.sol#L13-L15", + "id": "2182d79d032d47fdf8137bc06dd7d4c1796356e19fab558e282f5d596391ec58", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -155,20 +155,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 126, - "length": 96, + "start": 47, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -211,43 +210,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } }, { "type": "node", - "name": "require(bool)(time == 0)", + "name": "require(bool)(block.timestamp == 0)", "source_mapping": { - "start": 197, - "length": 18, + "start": 81, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 10 + 5 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 126, - "length": 96, + "start": 47, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -290,16 +288,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } } } } ], - "description": "Timestamp.bad1() (tests/detectors/timestamp/0.4.25/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.4.25/timestamp.sol#10)\n", - "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.4.25/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.4.25/timestamp.sol#L10)\n", - "first_markdown_element": "tests/detectors/timestamp/0.4.25/timestamp.sol#L8-L11", - "id": "d2f6167c2351e267210692e16350d8426db102519fe3eaeeadb6d17d2445dbbd", + "description": "Timestamp.bad0() (tests/detectors/timestamp/0.4.25/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.4.25/timestamp.sol#5)\n", + "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.4.25/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.4.25/timestamp.sol#L5)\n", + "first_markdown_element": "tests/detectors/timestamp/0.4.25/timestamp.sol#L4-L6", + "id": "9d7c44d1a332d53aacc312d316891fc85c62db8b5a5a638a64cdb718c9f20029", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -308,19 +306,20 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 231, - "length": 79, + "start": 126, + "length": 96, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -363,42 +362,43 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } }, { "type": "node", - "name": "block.timestamp > 0", + "name": "require(bool)(time == 0)", "source_mapping": { - "start": 279, - "length": 24, + "start": 197, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 14 + 10 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 27 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 231, - "length": 79, + "start": 126, + "length": 96, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -441,16 +441,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } } } } ], - "description": "Timestamp.bad2() (tests/detectors/timestamp/0.4.25/timestamp.sol#13-15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp > 0 (tests/detectors/timestamp/0.4.25/timestamp.sol#14)\n", - "markdown": "[Timestamp.bad2()](tests/detectors/timestamp/0.4.25/timestamp.sol#L13-L15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [block.timestamp > 0](tests/detectors/timestamp/0.4.25/timestamp.sol#L14)\n", - "first_markdown_element": "tests/detectors/timestamp/0.4.25/timestamp.sol#L13-L15", - "id": "2182d79d032d47fdf8137bc06dd7d4c1796356e19fab558e282f5d596391ec58", + "description": "Timestamp.bad1() (tests/detectors/timestamp/0.4.25/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.4.25/timestamp.sol#10)\n", + "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.4.25/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.4.25/timestamp.sol#L10)\n", + "first_markdown_element": "tests/detectors/timestamp/0.4.25/timestamp.sol#L8-L11", + "id": "d2f6167c2351e267210692e16350d8426db102519fe3eaeeadb6d17d2445dbbd", "check": "timestamp", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/timestamp/0.5.16/timestamp.sol.0.5.16.Timestamp.json b/tests/detectors/timestamp/0.5.16/timestamp.sol.0.5.16.Timestamp.json index 93e067ba7..d5a96fc97 100644 --- a/tests/detectors/timestamp/0.5.16/timestamp.sol.0.5.16.Timestamp.json +++ b/tests/detectors/timestamp/0.5.16/timestamp.sol.0.5.16.Timestamp.json @@ -4,19 +4,20 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 47, - "length": 70, + "start": 126, + "length": 96, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.5.16/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.5.16/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -59,42 +60,43 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(block.timestamp == 0)", + "name": "require(bool)(time == 0)", "source_mapping": { - "start": 81, - "length": 29, + "start": 197, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.5.16/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.5.16/timestamp.sol", "is_dependency": false, "lines": [ - 5 + 10 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 27 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 47, - "length": 70, + "start": 126, + "length": 96, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.5.16/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.5.16/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -137,16 +139,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } } } } ], - "description": "Timestamp.bad0() (tests/detectors/timestamp/0.5.16/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.5.16/timestamp.sol#5)\n", - "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.5.16/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.5.16/timestamp.sol#L5)\n", - "first_markdown_element": "tests/detectors/timestamp/0.5.16/timestamp.sol#L4-L6", - "id": "ae9cf69893e0e1a3487dc6ce8a8ae0f5ea9628607d77d32b3dfcb0202617d6e3", + "description": "Timestamp.bad1() (tests/detectors/timestamp/0.5.16/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.5.16/timestamp.sol#10)\n", + "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.5.16/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.5.16/timestamp.sol#L10)\n", + "first_markdown_element": "tests/detectors/timestamp/0.5.16/timestamp.sol#L8-L11", + "id": "95b42362b948094ddfa2507b20840e67789d4c5d92e8e3ddac30f5b6577dc1cb", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -155,20 +157,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 126, - "length": 96, + "start": 47, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.5.16/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.5.16/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -211,43 +212,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } }, { "type": "node", - "name": "require(bool)(time == 0)", + "name": "require(bool)(block.timestamp == 0)", "source_mapping": { - "start": 197, - "length": 18, + "start": 81, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.5.16/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.5.16/timestamp.sol", "is_dependency": false, "lines": [ - 10 + 5 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 126, - "length": 96, + "start": 47, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.5.16/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.5.16/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -290,16 +290,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } } } } ], - "description": "Timestamp.bad1() (tests/detectors/timestamp/0.5.16/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.5.16/timestamp.sol#10)\n", - "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.5.16/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.5.16/timestamp.sol#L10)\n", - "first_markdown_element": "tests/detectors/timestamp/0.5.16/timestamp.sol#L8-L11", - "id": "95b42362b948094ddfa2507b20840e67789d4c5d92e8e3ddac30f5b6577dc1cb", + "description": "Timestamp.bad0() (tests/detectors/timestamp/0.5.16/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.5.16/timestamp.sol#5)\n", + "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.5.16/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.5.16/timestamp.sol#L5)\n", + "first_markdown_element": "tests/detectors/timestamp/0.5.16/timestamp.sol#L4-L6", + "id": "ae9cf69893e0e1a3487dc6ce8a8ae0f5ea9628607d77d32b3dfcb0202617d6e3", "check": "timestamp", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json b/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json index a933c4198..db2cda014 100644 --- a/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json +++ b/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json @@ -4,19 +4,20 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 47, - "length": 70, + "start": 126, + "length": 96, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -59,42 +60,43 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } }, { "type": "node", - "name": "require(bool)(block.timestamp == 0)", + "name": "require(bool)(time == 0)", "source_mapping": { - "start": 81, - "length": 29, + "start": 197, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 5 + 10 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 27 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad1", "source_mapping": { - "start": 47, - "length": 70, + "start": 126, + "length": 96, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -137,16 +139,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad1()" } } } } ], - "description": "Timestamp.bad0() (tests/detectors/timestamp/0.6.11/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.6.11/timestamp.sol#5)\n", - "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.6.11/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.6.11/timestamp.sol#L5)\n", - "first_markdown_element": "tests/detectors/timestamp/0.6.11/timestamp.sol#L4-L6", - "id": "e4e3a8ade3a3bd11b4788b70785548f81395e776a86f2940834731e8f5e05bdc", + "description": "Timestamp.bad1() (tests/detectors/timestamp/0.6.11/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.6.11/timestamp.sol#10)\n", + "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.6.11/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.6.11/timestamp.sol#L10)\n", + "first_markdown_element": "tests/detectors/timestamp/0.6.11/timestamp.sol#L8-L11", + "id": "5d42d80cf0c66675f78bbf7717e2c532f05e8b0641d100c436ef8e1d6dc02f61", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -155,20 +157,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 126, - "length": 96, + "start": 231, + "length": 79, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -211,43 +212,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad2()" } }, { "type": "node", - "name": "require(bool)(time == 0)", + "name": "block.timestamp > 0", "source_mapping": { - "start": 197, - "length": 18, + "start": 279, + "length": 24, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 10 + 14 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 126, - "length": 96, + "start": 231, + "length": 79, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -290,16 +290,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad2()" } } } } ], - "description": "Timestamp.bad1() (tests/detectors/timestamp/0.6.11/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.6.11/timestamp.sol#10)\n", - "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.6.11/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.6.11/timestamp.sol#L10)\n", - "first_markdown_element": "tests/detectors/timestamp/0.6.11/timestamp.sol#L8-L11", - "id": "5d42d80cf0c66675f78bbf7717e2c532f05e8b0641d100c436ef8e1d6dc02f61", + "description": "Timestamp.bad2() (tests/detectors/timestamp/0.6.11/timestamp.sol#13-15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp > 0 (tests/detectors/timestamp/0.6.11/timestamp.sol#14)\n", + "markdown": "[Timestamp.bad2()](tests/detectors/timestamp/0.6.11/timestamp.sol#L13-L15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [block.timestamp > 0](tests/detectors/timestamp/0.6.11/timestamp.sol#L14)\n", + "first_markdown_element": "tests/detectors/timestamp/0.6.11/timestamp.sol#L13-L15", + "id": "c2c1fc5eaaf8498a2f03135fb61180314cbd104df5ab6b2447620b8ac3978cac", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -308,19 +308,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 231, - "length": 79, + "start": 47, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -363,42 +363,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } }, { "type": "node", - "name": "block.timestamp > 0", + "name": "require(bool)(block.timestamp == 0)", "source_mapping": { - "start": 279, - "length": 24, + "start": 81, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 14 + 5 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 231, - "length": 79, + "start": 47, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -441,16 +441,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } } } } ], - "description": "Timestamp.bad2() (tests/detectors/timestamp/0.6.11/timestamp.sol#13-15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp > 0 (tests/detectors/timestamp/0.6.11/timestamp.sol#14)\n", - "markdown": "[Timestamp.bad2()](tests/detectors/timestamp/0.6.11/timestamp.sol#L13-L15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [block.timestamp > 0](tests/detectors/timestamp/0.6.11/timestamp.sol#L14)\n", - "first_markdown_element": "tests/detectors/timestamp/0.6.11/timestamp.sol#L13-L15", - "id": "c2c1fc5eaaf8498a2f03135fb61180314cbd104df5ab6b2447620b8ac3978cac", + "description": "Timestamp.bad0() (tests/detectors/timestamp/0.6.11/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.6.11/timestamp.sol#5)\n", + "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.6.11/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.6.11/timestamp.sol#L5)\n", + "first_markdown_element": "tests/detectors/timestamp/0.6.11/timestamp.sol#L4-L6", + "id": "e4e3a8ade3a3bd11b4788b70785548f81395e776a86f2940834731e8f5e05bdc", "check": "timestamp", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json b/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json index 5ac960dcc..98c47cf31 100644 --- a/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json +++ b/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 47, - "length": 70, - "filename_used": "/GENERIC_PATH", + "start": 231, + "length": 79, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -59,42 +59,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } }, { "type": "node", - "name": "require(bool)(block.timestamp == 0)", + "name": "block.timestamp > 0", "source_mapping": { - "start": 81, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 279, + "length": 24, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 5 + 14 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 33 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 47, - "length": 70, - "filename_used": "/GENERIC_PATH", + "start": 231, + "length": 79, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -106,7 +106,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -137,16 +137,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } } } } ], - "description": "Timestamp.bad0() (tests/detectors/timestamp/0.7.6/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.7.6/timestamp.sol#5)\n", - "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.7.6/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.7.6/timestamp.sol#L5)\n", - "first_markdown_element": "tests/detectors/timestamp/0.7.6/timestamp.sol#L4-L6", - "id": "e776b1a35c5ff7cecd1cf6eba25c7017c852dfab68d0aaa8b2c8ecaf97b69a6b", + "description": "Timestamp.bad2() (tests/detectors/timestamp/0.7.6/timestamp.sol#13-15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp > 0 (tests/detectors/timestamp/0.7.6/timestamp.sol#14)\n", + "markdown": "[Timestamp.bad2()](tests/detectors/timestamp/0.7.6/timestamp.sol#L13-L15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [block.timestamp > 0](tests/detectors/timestamp/0.7.6/timestamp.sol#L14)\n", + "first_markdown_element": "tests/detectors/timestamp/0.7.6/timestamp.sol#L13-L15", + "id": "11b3472709ff3f3a4b3ec47abaa5a62f8dbfcd3b0b6bea0972f5b3d790049130", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -155,20 +155,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 126, - "length": 96, - "filename_used": "/GENERIC_PATH", + "start": 47, + "length": 70, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -180,7 +179,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -211,43 +210,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } }, { "type": "node", - "name": "require(bool)(time == 0)", + "name": "require(bool)(block.timestamp == 0)", "source_mapping": { - "start": 197, - "length": 18, - "filename_used": "/GENERIC_PATH", + "start": 81, + "length": 29, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 10 + 5 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 126, - "length": 96, - "filename_used": "/GENERIC_PATH", + "start": 47, + "length": 70, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10, - 11 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -259,7 +257,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -290,16 +288,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } } } } ], - "description": "Timestamp.bad1() (tests/detectors/timestamp/0.7.6/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.7.6/timestamp.sol#10)\n", - "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.7.6/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.7.6/timestamp.sol#L10)\n", - "first_markdown_element": "tests/detectors/timestamp/0.7.6/timestamp.sol#L8-L11", - "id": "fc05e44a41cc99fb6e68c9d8bfc8cbc97377f3327ed7a3c75ba170c9e75394d1", + "description": "Timestamp.bad0() (tests/detectors/timestamp/0.7.6/timestamp.sol#4-6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(block.timestamp == 0) (tests/detectors/timestamp/0.7.6/timestamp.sol#5)\n", + "markdown": "[Timestamp.bad0()](tests/detectors/timestamp/0.7.6/timestamp.sol#L4-L6) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(block.timestamp == 0)](tests/detectors/timestamp/0.7.6/timestamp.sol#L5)\n", + "first_markdown_element": "tests/detectors/timestamp/0.7.6/timestamp.sol#L4-L6", + "id": "e776b1a35c5ff7cecd1cf6eba25c7017c852dfab68d0aaa8b2c8ecaf97b69a6b", "check": "timestamp", "impact": "Low", "confidence": "Medium" @@ -308,19 +306,20 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 231, - "length": 79, - "filename_used": "/GENERIC_PATH", + "start": 126, + "length": 96, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -332,7 +331,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -363,42 +362,43 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } }, { "type": "node", - "name": "block.timestamp > 0", + "name": "require(bool)(time == 0)", "source_mapping": { - "start": 279, - "length": 24, - "filename_used": "/GENERIC_PATH", + "start": 197, + "length": 18, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 14 + 10 ], "starting_column": 9, - "ending_column": 33 + "ending_column": 27 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 231, - "length": 79, - "filename_used": "/GENERIC_PATH", + "start": 126, + "length": 96, + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15 + 8, + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -410,7 +410,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -441,16 +441,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } } } } ], - "description": "Timestamp.bad2() (tests/detectors/timestamp/0.7.6/timestamp.sol#13-15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- block.timestamp > 0 (tests/detectors/timestamp/0.7.6/timestamp.sol#14)\n", - "markdown": "[Timestamp.bad2()](tests/detectors/timestamp/0.7.6/timestamp.sol#L13-L15) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [block.timestamp > 0](tests/detectors/timestamp/0.7.6/timestamp.sol#L14)\n", - "first_markdown_element": "tests/detectors/timestamp/0.7.6/timestamp.sol#L13-L15", - "id": "11b3472709ff3f3a4b3ec47abaa5a62f8dbfcd3b0b6bea0972f5b3d790049130", + "description": "Timestamp.bad1() (tests/detectors/timestamp/0.7.6/timestamp.sol#8-11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool)(time == 0) (tests/detectors/timestamp/0.7.6/timestamp.sol#10)\n", + "markdown": "[Timestamp.bad1()](tests/detectors/timestamp/0.7.6/timestamp.sol#L8-L11) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- [require(bool)(time == 0)](tests/detectors/timestamp/0.7.6/timestamp.sol#L10)\n", + "first_markdown_element": "tests/detectors/timestamp/0.7.6/timestamp.sol#L8-L11", + "id": "fc05e44a41cc99fb6e68c9d8bfc8cbc97377f3327ed7a3c75ba170c9e75394d1", "check": "timestamp", "impact": "Low", "confidence": "Medium" diff --git a/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol.0.4.25.TooManyDigits.json b/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol.0.4.25.TooManyDigits.json index a866423ae..1ece15736 100644 --- a/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol.0.4.25.TooManyDigits.json +++ b/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol.0.4.25.TooManyDigits.json @@ -86,20 +86,20 @@ }, { "type": "node", - "name": "x1 = 0x000001", + "name": "x3 = 1000000000000000000", "source_mapping": { - "start": 209, - "length": 18, + "start": 272, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 10 + 12 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 38 }, "type_specific_fields": { "parent": { @@ -187,10 +187,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x1 = 0x000001 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#10)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x1 = 0x000001](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L10)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#12)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L12)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15", - "id": "33591d733ce2e17a001b912024d5bbe2fd89b63811968c715cf1feed5e302ef1", + "id": "07b9feef94432fdda97b5b5f32b4b6acfa23801e48f9fbd9997c5c3142c56474", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -199,23 +199,21 @@ "elements": [ { "type": "function", - "name": "f", + "name": "h", "source_mapping": { - "start": 177, - "length": 195, + "start": 456, + "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 5, "ending_column": 6 @@ -276,46 +274,44 @@ "ending_column": 2 } }, - "signature": "f()" + "signature": "h()" } }, { "type": "node", - "name": "x2 = 0x0000000000001", + "name": "x2 = 100000", "source_mapping": { - "start": 237, - "length": 25, + "start": 512, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 11 + 22 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "h", "source_mapping": { - "start": 177, - "length": 195, + "start": 456, + "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 5, "ending_column": 6 @@ -376,16 +372,16 @@ "ending_column": 2 } }, - "signature": "f()" + "signature": "h()" } } } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#11)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L11)\n", - "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15", - "id": "3e08ab6e8312a9489e23b50c6252a0ae7db88a7fc2c9d83c34d6d8aceb634d08", + "description": "C.h() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#20-24) uses literals with too many digits:\n\t- x2 = 100000 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#22)\n", + "markdown": "[C.h()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L20-L24) uses literals with too many digits:\n\t- [x2 = 100000](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L22)\n", + "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L20-L24", + "id": "2ae61bfeb6a9bad69fe9cb1990583dae50614da8a86cc9a720493218e11e0aa5", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -476,20 +472,20 @@ }, { "type": "node", - "name": "x3 = 1000000000000000000", + "name": "x1 = 0x000001", "source_mapping": { - "start": 272, - "length": 29, + "start": 209, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 12 + 10 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 27 }, "type_specific_fields": { "parent": { @@ -577,10 +573,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#12)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L12)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x1 = 0x000001 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#10)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x1 = 0x000001](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L10)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15", - "id": "07b9feef94432fdda97b5b5f32b4b6acfa23801e48f9fbd9997c5c3142c56474", + "id": "33591d733ce2e17a001b912024d5bbe2fd89b63811968c715cf1feed5e302ef1", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -671,20 +667,20 @@ }, { "type": "node", - "name": "x4 = 100000", + "name": "x2 = 0x0000000000001", "source_mapping": { - "start": 311, - "length": 16, + "start": 237, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 13 + 11 ], "starting_column": 9, - "ending_column": 25 + "ending_column": 34 }, "type_specific_fields": { "parent": { @@ -772,10 +768,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x4 = 100000 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#13)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x4 = 100000](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L13)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#11)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L11)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15", - "id": "809a1adef5afed04cc3371628a1595dd47bb1b1003a9e0cc6be72987c4034345", + "id": "3e08ab6e8312a9489e23b50c6252a0ae7db88a7fc2c9d83c34d6d8aceb634d08", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -784,21 +780,23 @@ "elements": [ { "type": "function", - "name": "h", + "name": "f", "source_mapping": { - "start": 456, - "length": 113, + "start": 177, + "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 9, + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -859,14 +857,14 @@ "ending_column": 2 } }, - "signature": "h()" + "signature": "f()" } }, { "type": "node", - "name": "x2 = 100000", + "name": "x4 = 100000", "source_mapping": { - "start": 512, + "start": 311, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", @@ -874,7 +872,7 @@ "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 22 + 13 ], "starting_column": 9, "ending_column": 25 @@ -882,21 +880,23 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "h", + "name": "f", "source_mapping": { - "start": 456, - "length": 113, + "start": 177, + "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 9, + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -957,16 +957,16 @@ "ending_column": 2 } }, - "signature": "h()" + "signature": "f()" } } } } ], - "description": "C.h() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#20-24) uses literals with too many digits:\n\t- x2 = 100000 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#22)\n", - "markdown": "[C.h()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L20-L24) uses literals with too many digits:\n\t- [x2 = 100000](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L22)\n", - "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L20-L24", - "id": "2ae61bfeb6a9bad69fe9cb1990583dae50614da8a86cc9a720493218e11e0aa5", + "description": "C.f() (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x4 = 100000 (tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#13)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x4 = 100000](tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L13)\n", + "first_markdown_element": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol#L9-L15", + "id": "809a1adef5afed04cc3371628a1595dd47bb1b1003a9e0cc6be72987c4034345", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" diff --git a/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol.0.5.16.TooManyDigits.json b/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol.0.5.16.TooManyDigits.json index 5d5827e21..56036080f 100644 --- a/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol.0.5.16.TooManyDigits.json +++ b/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol.0.5.16.TooManyDigits.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 209, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -132,7 +132,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -199,23 +199,21 @@ "elements": [ { "type": "function", - "name": "f", + "name": "h", "source_mapping": { - "start": 177, - "length": 195, - "filename_used": "/GENERIC_PATH", + "start": 456, + "length": 113, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 5, "ending_column": 6 @@ -227,7 +225,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -276,46 +274,44 @@ "ending_column": 2 } }, - "signature": "f()" + "signature": "h()" } }, { "type": "node", - "name": "x2 = 0x0000000000001", + "name": "x2 = 100000", "source_mapping": { - "start": 237, - "length": 25, - "filename_used": "/GENERIC_PATH", + "start": 512, + "length": 16, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 11 + 22 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "h", "source_mapping": { - "start": 177, - "length": 195, - "filename_used": "/GENERIC_PATH", + "start": 456, + "length": 113, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 5, "ending_column": 6 @@ -327,7 +323,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -376,16 +372,16 @@ "ending_column": 2 } }, - "signature": "f()" + "signature": "h()" } } } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#11)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L11)\n", - "first_markdown_element": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15", - "id": "ae48ab82ba202c409ec056e498d7255162ef5ab54ddb9ced3b46feb51f4c5021", + "description": "C.h() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#20-24) uses literals with too many digits:\n\t- x2 = 100000 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#22)\n", + "markdown": "[C.h()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L20-L24) uses literals with too many digits:\n\t- [x2 = 100000](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L22)\n", + "first_markdown_element": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L20-L24", + "id": "2ca6b97b24a0e595f484c9a0090c3b17b654c167be300e04d9c2cc9a44406d10", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -398,7 +394,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -422,7 +418,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -476,20 +472,20 @@ }, { "type": "node", - "name": "x3 = 1000000000000000000", + "name": "x4 = 100000", "source_mapping": { - "start": 272, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 311, + "length": 16, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 12 + 13 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 25 }, "type_specific_fields": { "parent": { @@ -498,7 +494,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -522,7 +518,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -577,10 +573,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#12)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L12)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x4 = 100000 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#13)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x4 = 100000](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L13)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15", - "id": "c295b48b8aece38cfd41bceca05ef1953bf5bf0018073076809087a4580ff086", + "id": "7e07e946fcdb14de3e3d3bc796f8f6aff17f22002129db4937e0d12767260d3d", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -593,7 +589,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -617,7 +613,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -671,20 +667,20 @@ }, { "type": "node", - "name": "x4 = 100000", + "name": "x2 = 0x0000000000001", "source_mapping": { - "start": 311, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 237, + "length": 25, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 13 + 11 ], "starting_column": 9, - "ending_column": 25 + "ending_column": 34 }, "type_specific_fields": { "parent": { @@ -693,7 +689,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -717,7 +713,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -772,10 +768,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x4 = 100000 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#13)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x4 = 100000](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L13)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#11)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L11)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15", - "id": "7e07e946fcdb14de3e3d3bc796f8f6aff17f22002129db4937e0d12767260d3d", + "id": "ae48ab82ba202c409ec056e498d7255162ef5ab54ddb9ced3b46feb51f4c5021", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -784,21 +780,23 @@ "elements": [ { "type": "function", - "name": "h", + "name": "f", "source_mapping": { - "start": 456, - "length": 113, - "filename_used": "/GENERIC_PATH", + "start": 177, + "length": 195, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 9, + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -810,7 +808,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -859,44 +857,46 @@ "ending_column": 2 } }, - "signature": "h()" + "signature": "f()" } }, { "type": "node", - "name": "x2 = 100000", + "name": "x3 = 1000000000000000000", "source_mapping": { - "start": 512, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 272, + "length": 29, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 22 + 12 ], "starting_column": 9, - "ending_column": 25 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "h", + "name": "f", "source_mapping": { - "start": 456, - "length": 113, - "filename_used": "/GENERIC_PATH", + "start": 177, + "length": 195, + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 9, + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -908,7 +908,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", @@ -957,16 +957,16 @@ "ending_column": 2 } }, - "signature": "h()" + "signature": "f()" } } } } ], - "description": "C.h() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#20-24) uses literals with too many digits:\n\t- x2 = 100000 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#22)\n", - "markdown": "[C.h()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L20-L24) uses literals with too many digits:\n\t- [x2 = 100000](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L22)\n", - "first_markdown_element": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L20-L24", - "id": "2ca6b97b24a0e595f484c9a0090c3b17b654c167be300e04d9c2cc9a44406d10", + "description": "C.f() (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#12)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L12)\n", + "first_markdown_element": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol#L9-L15", + "id": "c295b48b8aece38cfd41bceca05ef1953bf5bf0018073076809087a4580ff086", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" diff --git a/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json b/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json index c49da46de..4e96d8149 100644 --- a/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json +++ b/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json @@ -86,20 +86,20 @@ }, { "type": "node", - "name": "x1 = 0x000001", + "name": "x2 = 0x0000000000001", "source_mapping": { - "start": 209, - "length": 18, + "start": 237, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 10 + 11 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 34 }, "type_specific_fields": { "parent": { @@ -187,10 +187,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x1 = 0x000001 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#10)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x1 = 0x000001](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L10)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#11)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L11)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15", - "id": "d467d1c664634fc17c861de567ef53f0ce8964e9b337127308dad5d3cb0bc343", + "id": "302b9a771b1009999d212d50adb2b938ccf41f2c26880fe17060a8922ea4836a", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -199,23 +199,21 @@ "elements": [ { "type": "function", - "name": "f", + "name": "h", "source_mapping": { - "start": 177, - "length": 195, + "start": 456, + "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 5, "ending_column": 6 @@ -276,46 +274,44 @@ "ending_column": 2 } }, - "signature": "f()" + "signature": "h()" } }, { "type": "node", - "name": "x2 = 0x0000000000001", + "name": "x2 = 100000", "source_mapping": { - "start": 237, - "length": 25, + "start": 512, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 11 + 22 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "h", "source_mapping": { - "start": 177, - "length": 195, + "start": 456, + "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15 + 20, + 21, + 22, + 23, + 24 ], "starting_column": 5, "ending_column": 6 @@ -376,16 +372,16 @@ "ending_column": 2 } }, - "signature": "f()" + "signature": "h()" } } } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#11)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L11)\n", - "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15", - "id": "302b9a771b1009999d212d50adb2b938ccf41f2c26880fe17060a8922ea4836a", + "description": "C.h() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#20-24) uses literals with too many digits:\n\t- x2 = 100000 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#22)\n", + "markdown": "[C.h()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L20-L24) uses literals with too many digits:\n\t- [x2 = 100000](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L22)\n", + "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L20-L24", + "id": "7cd1e51c89ae28bc9bf2c7e406b39f97a648cde765fc2a05c14697648ad27e92", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -476,20 +472,20 @@ }, { "type": "node", - "name": "x3 = 1000000000000000000", + "name": "x4 = 100000", "source_mapping": { - "start": 272, - "length": 29, + "start": 311, + "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 12 + 13 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 25 }, "type_specific_fields": { "parent": { @@ -577,10 +573,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#12)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L12)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x4 = 100000 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#13)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x4 = 100000](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L13)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15", - "id": "ed4cd26212cad644e275c3784912d9fe2d0789a9cb731a1a20bfdb30554f6f3a", + "id": "b8986c1b09fc9896372df90e6b43a08dfb3e3a920bd002ab5ee9eb4a29f92d95", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -671,20 +667,20 @@ }, { "type": "node", - "name": "x4 = 100000", + "name": "x1 = 0x000001", "source_mapping": { - "start": 311, - "length": 16, + "start": 209, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 13 + 10 ], "starting_column": 9, - "ending_column": 25 + "ending_column": 27 }, "type_specific_fields": { "parent": { @@ -772,10 +768,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x4 = 100000 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#13)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x4 = 100000](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L13)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x1 = 0x000001 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#10)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x1 = 0x000001](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L10)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15", - "id": "b8986c1b09fc9896372df90e6b43a08dfb3e3a920bd002ab5ee9eb4a29f92d95", + "id": "d467d1c664634fc17c861de567ef53f0ce8964e9b337127308dad5d3cb0bc343", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -784,21 +780,23 @@ "elements": [ { "type": "function", - "name": "h", + "name": "f", "source_mapping": { - "start": 456, - "length": 113, + "start": 177, + "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 9, + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -859,44 +857,46 @@ "ending_column": 2 } }, - "signature": "h()" + "signature": "f()" } }, { "type": "node", - "name": "x2 = 100000", + "name": "x3 = 1000000000000000000", "source_mapping": { - "start": 512, - "length": 16, + "start": 272, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 22 + 12 ], "starting_column": 9, - "ending_column": 25 + "ending_column": 38 }, "type_specific_fields": { "parent": { "type": "function", - "name": "h", + "name": "f", "source_mapping": { - "start": 456, - "length": 113, + "start": 177, + "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24 + 9, + 10, + 11, + 12, + 13, + 14, + 15 ], "starting_column": 5, "ending_column": 6 @@ -957,16 +957,16 @@ "ending_column": 2 } }, - "signature": "h()" + "signature": "f()" } } } } ], - "description": "C.h() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#20-24) uses literals with too many digits:\n\t- x2 = 100000 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#22)\n", - "markdown": "[C.h()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L20-L24) uses literals with too many digits:\n\t- [x2 = 100000](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L22)\n", - "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L20-L24", - "id": "7cd1e51c89ae28bc9bf2c7e406b39f97a648cde765fc2a05c14697648ad27e92", + "description": "C.f() (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#12)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L12)\n", + "first_markdown_element": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol#L9-L15", + "id": "ed4cd26212cad644e275c3784912d9fe2d0789a9cb731a1a20bfdb30554f6f3a", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" diff --git a/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol.0.7.6.TooManyDigits.json b/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol.0.7.6.TooManyDigits.json index b62da518b..eb97dc505 100644 --- a/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol.0.7.6.TooManyDigits.json +++ b/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol.0.7.6.TooManyDigits.json @@ -85,20 +85,20 @@ }, { "type": "node", - "name": "x1 = 0x000001", + "name": "x2 = 0x0000000000001", "source_mapping": { - "start": 209, - "length": 18, + "start": 237, + "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "is_dependency": false, "lines": [ - 10 + 11 ], "starting_column": 9, - "ending_column": 27 + "ending_column": 34 }, "type_specific_fields": { "parent": { @@ -185,10 +185,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x1 = 0x000001 (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#10)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x1 = 0x000001](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L10)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#11)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L11)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15", - "id": "a053c2f439e1e4ac84469e1aab54f4403d4ab14bf81bae6e7a3d2e489b3514bd", + "id": "41a60e2fb1f3a88adafd67ca77db4633849be26e1b8b9973b8bf9e8ea5a9d024", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -278,20 +278,20 @@ }, { "type": "node", - "name": "x2 = 0x0000000000001", + "name": "x3 = 1000000000000000000", "source_mapping": { - "start": 237, - "length": 25, + "start": 272, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "is_dependency": false, "lines": [ - 11 + 12 ], "starting_column": 9, - "ending_column": 34 + "ending_column": 38 }, "type_specific_fields": { "parent": { @@ -378,10 +378,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x2 = 0x0000000000001 (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#11)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x2 = 0x0000000000001](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L11)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#12)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L12)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15", - "id": "41a60e2fb1f3a88adafd67ca77db4633849be26e1b8b9973b8bf9e8ea5a9d024", + "id": "4876b33b2a9fb13f6def960f7f9060cbf858f117079526017b1b35a928771680", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" @@ -471,20 +471,20 @@ }, { "type": "node", - "name": "x3 = 1000000000000000000", + "name": "x1 = 0x000001", "source_mapping": { - "start": 272, - "length": 29, + "start": 209, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "is_dependency": false, "lines": [ - 12 + 10 ], "starting_column": 9, - "ending_column": 38 + "ending_column": 27 }, "type_specific_fields": { "parent": { @@ -571,10 +571,10 @@ } } ], - "description": "C.f() (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x3 = 1000000000000000000 (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#12)\n", - "markdown": "[C.f()](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x3 = 1000000000000000000](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L12)\n", + "description": "C.f() (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#9-15) uses literals with too many digits:\n\t- x1 = 0x000001 (tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#10)\n", + "markdown": "[C.f()](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15) uses literals with too many digits:\n\t- [x1 = 0x000001](tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L10)\n", "first_markdown_element": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol#L9-L15", - "id": "4876b33b2a9fb13f6def960f7f9060cbf858f117079526017b1b35a928771680", + "id": "a053c2f439e1e4ac84469e1aab54f4403d4ab14bf81bae6e7a3d2e489b3514bd", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium" diff --git a/tests/detectors/tx-origin/0.4.25/tx_origin.sol.0.4.25.TxOrigin.json b/tests/detectors/tx-origin/0.4.25/tx_origin.sol.0.4.25.TxOrigin.json index d201f65cf..38bae8b69 100644 --- a/tests/detectors/tx-origin/0.4.25/tx_origin.sol.0.4.25.TxOrigin.json +++ b/tests/detectors/tx-origin/0.4.25/tx_origin.sol.0.4.25.TxOrigin.json @@ -4,19 +4,21 @@ "elements": [ { "type": "function", - "name": "bug0", + "name": "bug2", "source_mapping": { - "start": 116, - "length": 60, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 89, + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 13, + 14, + 15, + 16, + 17 ], "starting_column": 5, "ending_column": 6 @@ -28,7 +30,7 @@ "source_mapping": { "start": 28, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", @@ -63,42 +65,44 @@ "ending_column": 2 } }, - "signature": "bug0()" + "signature": "bug2()" } }, { "type": "node", - "name": "require(bool)(tx.origin == owner)", + "name": "tx.origin != owner", "source_mapping": { - "start": 142, - "length": 27, - "filename_used": "/GENERIC_PATH", + "start": 212, + "length": 18, + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "is_dependency": false, "lines": [ - 10 + 14 ], - "starting_column": 9, - "ending_column": 36 + "starting_column": 13, + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bug0", + "name": "bug2", "source_mapping": { - "start": 116, - "length": 60, - "filename_used": "/GENERIC_PATH", + "start": 182, + "length": 89, + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 13, + 14, + 15, + 16, + 17 ], "starting_column": 5, "ending_column": 6 @@ -110,7 +114,7 @@ "source_mapping": { "start": 28, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", @@ -145,16 +149,16 @@ "ending_column": 2 } }, - "signature": "bug0()" + "signature": "bug2()" } } } } ], - "description": "TxOrigin.bug0() (tests/detectors/tx-origin/0.4.25/tx_origin.sol#9-11) uses tx.origin for authorization: require(bool)(tx.origin == owner) (tests/detectors/tx-origin/0.4.25/tx_origin.sol#10)\n", - "markdown": "[TxOrigin.bug0()](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L9-L11) uses tx.origin for authorization: [require(bool)(tx.origin == owner)](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L10)\n", - "first_markdown_element": "tests/detectors/tx-origin/0.4.25/tx_origin.sol#L9-L11", - "id": "b8173796b90a23f4587ed67d7100dfd3c890bf9f96910e177630bb8a6f1703fe", + "description": "TxOrigin.bug2() (tests/detectors/tx-origin/0.4.25/tx_origin.sol#13-17) uses tx.origin for authorization: tx.origin != owner (tests/detectors/tx-origin/0.4.25/tx_origin.sol#14)\n", + "markdown": "[TxOrigin.bug2()](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L13-L17) uses tx.origin for authorization: [tx.origin != owner](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L14)\n", + "first_markdown_element": "tests/detectors/tx-origin/0.4.25/tx_origin.sol#L13-L17", + "id": "7abecda0c73eb43dadcd93458222d0848b1dee58af66887f81b9381c90e656f6", "check": "tx-origin", "impact": "Medium", "confidence": "Medium" @@ -163,21 +167,19 @@ "elements": [ { "type": "function", - "name": "bug2", + "name": "bug0", "source_mapping": { - "start": 182, - "length": 89, - "filename_used": "/GENERIC_PATH", + "start": 116, + "length": 60, + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15, - 16, - 17 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -189,7 +191,7 @@ "source_mapping": { "start": 28, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", @@ -224,44 +226,42 @@ "ending_column": 2 } }, - "signature": "bug2()" + "signature": "bug0()" } }, { "type": "node", - "name": "tx.origin != owner", + "name": "require(bool)(tx.origin == owner)", "source_mapping": { - "start": 212, - "length": 18, - "filename_used": "/GENERIC_PATH", + "start": 142, + "length": 27, + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "is_dependency": false, "lines": [ - 14 + 10 ], - "starting_column": 13, - "ending_column": 31 + "starting_column": 9, + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bug2", + "name": "bug0", "source_mapping": { - "start": 182, - "length": 89, - "filename_used": "/GENERIC_PATH", + "start": 116, + "length": 60, + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15, - 16, - 17 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -273,7 +273,7 @@ "source_mapping": { "start": 28, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.4.25/tx_origin.sol", @@ -308,16 +308,16 @@ "ending_column": 2 } }, - "signature": "bug2()" + "signature": "bug0()" } } } } ], - "description": "TxOrigin.bug2() (tests/detectors/tx-origin/0.4.25/tx_origin.sol#13-17) uses tx.origin for authorization: tx.origin != owner (tests/detectors/tx-origin/0.4.25/tx_origin.sol#14)\n", - "markdown": "[TxOrigin.bug2()](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L13-L17) uses tx.origin for authorization: [tx.origin != owner](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L14)\n", - "first_markdown_element": "tests/detectors/tx-origin/0.4.25/tx_origin.sol#L13-L17", - "id": "7abecda0c73eb43dadcd93458222d0848b1dee58af66887f81b9381c90e656f6", + "description": "TxOrigin.bug0() (tests/detectors/tx-origin/0.4.25/tx_origin.sol#9-11) uses tx.origin for authorization: require(bool)(tx.origin == owner) (tests/detectors/tx-origin/0.4.25/tx_origin.sol#10)\n", + "markdown": "[TxOrigin.bug0()](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L9-L11) uses tx.origin for authorization: [require(bool)(tx.origin == owner)](tests/detectors/tx-origin/0.4.25/tx_origin.sol#L10)\n", + "first_markdown_element": "tests/detectors/tx-origin/0.4.25/tx_origin.sol#L9-L11", + "id": "b8173796b90a23f4587ed67d7100dfd3c890bf9f96910e177630bb8a6f1703fe", "check": "tx-origin", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/tx-origin/0.5.16/tx_origin.sol.0.5.16.TxOrigin.json b/tests/detectors/tx-origin/0.5.16/tx_origin.sol.0.5.16.TxOrigin.json index 5f6c7ef12..5399896d9 100644 --- a/tests/detectors/tx-origin/0.5.16/tx_origin.sol.0.5.16.TxOrigin.json +++ b/tests/detectors/tx-origin/0.5.16/tx_origin.sol.0.5.16.TxOrigin.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 127, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 25, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -72,7 +72,7 @@ "source_mapping": { "start": 159, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 127, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -110,7 +110,7 @@ "source_mapping": { "start": 25, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -167,7 +167,7 @@ "source_mapping": { "start": 199, "length": 95, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -189,7 +189,7 @@ "source_mapping": { "start": 25, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -233,7 +233,7 @@ "source_mapping": { "start": 235, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -251,7 +251,7 @@ "source_mapping": { "start": 199, "length": 95, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", @@ -273,7 +273,7 @@ "source_mapping": { "start": 25, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.5.16/tx_origin.sol", diff --git a/tests/detectors/tx-origin/0.7.6/tx_origin.sol.0.7.6.TxOrigin.json b/tests/detectors/tx-origin/0.7.6/tx_origin.sol.0.7.6.TxOrigin.json index 2a8ec6848..ba4dcbb61 100644 --- a/tests/detectors/tx-origin/0.7.6/tx_origin.sol.0.7.6.TxOrigin.json +++ b/tests/detectors/tx-origin/0.7.6/tx_origin.sol.0.7.6.TxOrigin.json @@ -4,19 +4,21 @@ "elements": [ { "type": "function", - "name": "bug0", + "name": "bug2", "source_mapping": { - "start": 130, - "length": 66, + "start": 202, + "length": 95, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 13, + 14, + 15, + 16, + 17 ], "starting_column": 5, "ending_column": 6 @@ -63,42 +65,44 @@ "ending_column": 2 } }, - "signature": "bug0()" + "signature": "bug2()" } }, { "type": "node", - "name": "require(bool)(tx.origin == owner)", + "name": "tx.origin != owner", "source_mapping": { - "start": 162, - "length": 27, + "start": 238, + "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "is_dependency": false, "lines": [ - 10 + 14 ], - "starting_column": 9, - "ending_column": 36 + "starting_column": 13, + "ending_column": 31 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bug0", + "name": "bug2", "source_mapping": { - "start": 130, - "length": 66, + "start": 202, + "length": 95, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 13, + 14, + 15, + 16, + 17 ], "starting_column": 5, "ending_column": 6 @@ -145,16 +149,16 @@ "ending_column": 2 } }, - "signature": "bug0()" + "signature": "bug2()" } } } } ], - "description": "TxOrigin.bug0() (tests/detectors/tx-origin/0.7.6/tx_origin.sol#9-11) uses tx.origin for authorization: require(bool)(tx.origin == owner) (tests/detectors/tx-origin/0.7.6/tx_origin.sol#10)\n", - "markdown": "[TxOrigin.bug0()](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L9-L11) uses tx.origin for authorization: [require(bool)(tx.origin == owner)](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L10)\n", - "first_markdown_element": "tests/detectors/tx-origin/0.7.6/tx_origin.sol#L9-L11", - "id": "d3d9d4cb2307781870af54ebca528052197b021adcabf4d0c3a897e96affece3", + "description": "TxOrigin.bug2() (tests/detectors/tx-origin/0.7.6/tx_origin.sol#13-17) uses tx.origin for authorization: tx.origin != owner (tests/detectors/tx-origin/0.7.6/tx_origin.sol#14)\n", + "markdown": "[TxOrigin.bug2()](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L13-L17) uses tx.origin for authorization: [tx.origin != owner](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L14)\n", + "first_markdown_element": "tests/detectors/tx-origin/0.7.6/tx_origin.sol#L13-L17", + "id": "1c195c6a3ea5b7e77c12b7580544ef2320699359862c22961726f112ab27b3a5", "check": "tx-origin", "impact": "Medium", "confidence": "Medium" @@ -163,21 +167,19 @@ "elements": [ { "type": "function", - "name": "bug2", + "name": "bug0", "source_mapping": { - "start": 202, - "length": 95, + "start": 130, + "length": 66, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15, - 16, - 17 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -224,44 +226,42 @@ "ending_column": 2 } }, - "signature": "bug2()" + "signature": "bug0()" } }, { "type": "node", - "name": "tx.origin != owner", + "name": "require(bool)(tx.origin == owner)", "source_mapping": { - "start": 238, - "length": 18, + "start": 162, + "length": 27, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "is_dependency": false, "lines": [ - 14 + 10 ], - "starting_column": 13, - "ending_column": 31 + "starting_column": 9, + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bug2", + "name": "bug0", "source_mapping": { - "start": 202, - "length": 95, + "start": 130, + "length": 66, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.7.6/tx_origin.sol", "is_dependency": false, "lines": [ - 13, - 14, - 15, - 16, - 17 + 9, + 10, + 11 ], "starting_column": 5, "ending_column": 6 @@ -308,16 +308,16 @@ "ending_column": 2 } }, - "signature": "bug2()" + "signature": "bug0()" } } } } ], - "description": "TxOrigin.bug2() (tests/detectors/tx-origin/0.7.6/tx_origin.sol#13-17) uses tx.origin for authorization: tx.origin != owner (tests/detectors/tx-origin/0.7.6/tx_origin.sol#14)\n", - "markdown": "[TxOrigin.bug2()](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L13-L17) uses tx.origin for authorization: [tx.origin != owner](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L14)\n", - "first_markdown_element": "tests/detectors/tx-origin/0.7.6/tx_origin.sol#L13-L17", - "id": "1c195c6a3ea5b7e77c12b7580544ef2320699359862c22961726f112ab27b3a5", + "description": "TxOrigin.bug0() (tests/detectors/tx-origin/0.7.6/tx_origin.sol#9-11) uses tx.origin for authorization: require(bool)(tx.origin == owner) (tests/detectors/tx-origin/0.7.6/tx_origin.sol#10)\n", + "markdown": "[TxOrigin.bug0()](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L9-L11) uses tx.origin for authorization: [require(bool)(tx.origin == owner)](tests/detectors/tx-origin/0.7.6/tx_origin.sol#L10)\n", + "first_markdown_element": "tests/detectors/tx-origin/0.7.6/tx_origin.sol#L9-L11", + "id": "d3d9d4cb2307781870af54ebca528052197b021adcabf4d0c3a897e96affece3", "check": "tx-origin", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json b/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json index 973f772d7..86b4e5f87 100644 --- a/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json +++ b/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -97,7 +97,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", diff --git a/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json b/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json index c9fb260fd..3a0a0db85 100644 --- a/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json +++ b/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -97,7 +97,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", diff --git a/tests/detectors/unchecked-send/0.4.25/unchecked_send.sol.0.4.25.UncheckedSend.json b/tests/detectors/unchecked-send/0.4.25/unchecked_send.sol.0.4.25.UncheckedSend.json index e863e38ee..a14f35220 100644 --- a/tests/detectors/unchecked-send/0.4.25/unchecked_send.sol.0.4.25.UncheckedSend.json +++ b/tests/detectors/unchecked-send/0.4.25/unchecked_send.sol.0.4.25.UncheckedSend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 395, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", @@ -66,7 +66,7 @@ "source_mapping": { "start": 73, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", @@ -84,7 +84,7 @@ "source_mapping": { "start": 21, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", @@ -104,7 +104,7 @@ "source_mapping": { "start": 0, "length": 395, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.4.25/unchecked_send.sol", diff --git a/tests/detectors/unchecked-send/0.6.11/unchecked_send.sol.0.6.11.UncheckedSend.json b/tests/detectors/unchecked-send/0.6.11/unchecked_send.sol.0.6.11.UncheckedSend.json index b1fb56f70..fe188c5bd 100644 --- a/tests/detectors/unchecked-send/0.6.11/unchecked_send.sol.0.6.11.UncheckedSend.json +++ b/tests/detectors/unchecked-send/0.6.11/unchecked_send.sol.0.6.11.UncheckedSend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 419, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", @@ -66,7 +66,7 @@ "source_mapping": { "start": 81, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", @@ -84,7 +84,7 @@ "source_mapping": { "start": 21, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", @@ -104,7 +104,7 @@ "source_mapping": { "start": 0, "length": 419, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.6.11/unchecked_send.sol", diff --git a/tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol.0.7.6.UncheckedTransfer.json b/tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol.0.7.6.UncheckedTransfer.json index 174bf3b41..5fda7c85e 100644 --- a/tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol.0.7.6.UncheckedTransfer.json +++ b/tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol.0.7.6.UncheckedTransfer.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 461, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 330, "length": 1456, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -101,7 +101,7 @@ "source_mapping": { "start": 493, "length": 31, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -119,7 +119,7 @@ "source_mapping": { "start": 461, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -139,7 +139,7 @@ "source_mapping": { "start": 330, "length": 1456, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -225,7 +225,7 @@ "source_mapping": { "start": 1043, "length": 90, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -245,7 +245,7 @@ "source_mapping": { "start": 330, "length": 1456, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -318,7 +318,7 @@ "source_mapping": { "start": 1076, "length": 50, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -336,7 +336,7 @@ "source_mapping": { "start": 1043, "length": 90, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", @@ -356,7 +356,7 @@ "source_mapping": { "start": 330, "length": 1456, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_relative": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-transfer/0.7.6/unused_return_transfers.sol", diff --git a/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json b/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json index 86616d80a..db2e09b5b 100644 --- a/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json +++ b/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json @@ -4,21 +4,23 @@ "elements": [ { "type": "contract", - "name": "DerivedContract_bad0", + "name": "DerivedContract_good", "source_mapping": { - "start": 185, - "length": 133, + "start": 775, + "length": 243, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 10, - 11, - 12, - 13, - 14 + 35, + 36, + 37, + 38, + 39, + 40, + 41 ], "starting_column": 1, "ending_column": 2 @@ -26,92 +28,126 @@ }, { "type": "function", - "name": "f2", + "name": "get", "source_mapping": { - "start": 72, - "length": 37, + "start": 495, + "length": 42, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 3 + 24 ], "starting_column": 5, - "ending_column": 42 + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseInterface", + "name": "BaseInterface3", "source_mapping": { - "start": 0, - "length": 111, + "start": 465, + "length": 74, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 1, - 2, - 3, - 4 + 23, + 24, + 25 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "f2()" + "signature": "get(uint256)" + } + } + ], + "description": "DerivedContract_good (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#35-41) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#24)\n", + "markdown": "[DerivedContract_good](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L35-L41) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L24)\n", + "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L35-L41", + "id": "08d3e8a72b5da6d189acb46ecd36f00787a87812727526a0cae248a2bac348fc", + "check": "unimplemented-functions", + "impact": "Informational", + "confidence": "High" + }, + { + "elements": [ + { + "type": "contract", + "name": "DerivedContract_bad2", + "source_mapping": { + "start": 541, + "length": 232, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", + "is_dependency": false, + "lines": [ + 27, + 28, + 29, + 30, + 31, + 32, + 33 + ], + "starting_column": 1, + "ending_column": 2 } }, { "type": "function", - "name": "f3", + "name": "get", "source_mapping": { - "start": 144, - "length": 37, + "start": 495, + "length": 42, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 7 + 24 ], "starting_column": 5, - "ending_column": 42 + "ending_column": 47 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseInterface2", + "name": "BaseInterface3", "source_mapping": { - "start": 113, - "length": 70, + "start": 465, + "length": 74, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 6, - 7, - 8 + 23, + 24, + 25 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "f3()" + "signature": "get(uint256)" } } ], - "description": "DerivedContract_bad0 (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#10-14) does not implement functions:\n\t- BaseInterface.f2() (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#3)\n\t- BaseInterface2.f3() (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#7)\n", - "markdown": "[DerivedContract_bad0](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L10-L14) does not implement functions:\n\t- [BaseInterface.f2()](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L3)\n\t- [BaseInterface2.f3()](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L7)\n", - "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L10-L14", - "id": "8614d351f7aac0c05e8df6ef7c89c6b46a2b8acf6295c9d5a886ff6489c74a41", + "description": "DerivedContract_bad2 (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#27-33) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#24)\n", + "markdown": "[DerivedContract_bad2](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L27-L33) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L24)\n", + "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L27-L33", + "id": "31915d2f480e24ddd054de973440a02abdac0ccd6332c47cd4eb8d836d3fddda", "check": "unimplemented-functions", "impact": "Informational", "confidence": "High" @@ -120,22 +156,21 @@ "elements": [ { "type": "contract", - "name": "AbstractContract_bad1", + "name": "DerivedContract_bad0", "source_mapping": { - "start": 320, - "length": 143, + "start": 185, + "length": 133, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 16, - 17, - 18, - 19, - 20, - 21 + 10, + 11, + 12, + 13, + 14 ], "starting_column": 1, "ending_column": 2 @@ -143,9 +178,9 @@ }, { "type": "function", - "name": "f1", + "name": "f2", "source_mapping": { - "start": 357, + "start": 72, "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -153,7 +188,7 @@ "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 17 + 3 ], "starting_column": 5, "ending_column": 42 @@ -161,111 +196,74 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "AbstractContract_bad1", + "name": "BaseInterface", "source_mapping": { - "start": 320, - "length": 143, + "start": 0, + "length": 111, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 16, - 17, - 18, - 19, - 20, - 21 + 1, + 2, + 3, + 4 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "f1()" - } - } - ], - "description": "AbstractContract_bad1 (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#16-21) does not implement functions:\n\t- AbstractContract_bad1.f1() (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#17)\n", - "markdown": "[AbstractContract_bad1](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L16-L21) does not implement functions:\n\t- [AbstractContract_bad1.f1()](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L17)\n", - "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L16-L21", - "id": "adc202df4717efc4e19b549c0e623a79fac759a36bffb5d5e4aac401e33375d7", - "check": "unimplemented-functions", - "impact": "Informational", - "confidence": "High" - }, - { - "elements": [ - { - "type": "contract", - "name": "DerivedContract_bad2", - "source_mapping": { - "start": 541, - "length": 232, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", - "is_dependency": false, - "lines": [ - 27, - 28, - 29, - 30, - 31, - 32, - 33 - ], - "starting_column": 1, - "ending_column": 2 + "signature": "f2()" } }, { "type": "function", - "name": "get", + "name": "f3", "source_mapping": { - "start": 495, - "length": 42, + "start": 144, + "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 24 + 7 ], "starting_column": 5, - "ending_column": 47 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseInterface3", + "name": "BaseInterface2", "source_mapping": { - "start": 465, - "length": 74, + "start": 113, + "length": 70, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25 + 6, + 7, + 8 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "get(uint256)" + "signature": "f3()" } } ], - "description": "DerivedContract_bad2 (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#27-33) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#24)\n", - "markdown": "[DerivedContract_bad2](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L27-L33) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L24)\n", - "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L27-L33", - "id": "31915d2f480e24ddd054de973440a02abdac0ccd6332c47cd4eb8d836d3fddda", + "description": "DerivedContract_bad0 (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#10-14) does not implement functions:\n\t- BaseInterface.f2() (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#3)\n\t- BaseInterface2.f3() (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#7)\n", + "markdown": "[DerivedContract_bad0](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L10-L14) does not implement functions:\n\t- [BaseInterface.f2()](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L3)\n\t- [BaseInterface2.f3()](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L7)\n", + "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L10-L14", + "id": "8614d351f7aac0c05e8df6ef7c89c6b46a2b8acf6295c9d5a886ff6489c74a41", "check": "unimplemented-functions", "impact": "Informational", "confidence": "High" @@ -274,23 +272,22 @@ "elements": [ { "type": "contract", - "name": "DerivedContract_good", + "name": "AbstractContract_bad1", "source_mapping": { - "start": 775, - "length": 243, + "start": 320, + "length": 143, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 35, - 36, - 37, - 38, - 39, - 40, - 41 + 16, + 17, + 18, + 19, + 20, + 21 ], "starting_column": 1, "ending_column": 2 @@ -298,50 +295,53 @@ }, { "type": "function", - "name": "get", + "name": "f1", "source_mapping": { - "start": 495, - "length": 42, + "start": 357, + "length": 37, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 24 + 17 ], "starting_column": 5, - "ending_column": 47 + "ending_column": 42 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "BaseInterface3", + "name": "AbstractContract_bad1", "source_mapping": { - "start": 465, - "length": 74, + "start": 320, + "length": 143, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "is_dependency": false, "lines": [ - 23, - 24, - 25 + 16, + 17, + 18, + 19, + 20, + 21 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "get(uint256)" + "signature": "f1()" } } ], - "description": "DerivedContract_good (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#35-41) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#24)\n", - "markdown": "[DerivedContract_good](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L35-L41) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L24)\n", - "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L35-L41", - "id": "08d3e8a72b5da6d189acb46ecd36f00787a87812727526a0cae248a2bac348fc", + "description": "AbstractContract_bad1 (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#16-21) does not implement functions:\n\t- AbstractContract_bad1.f1() (tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#17)\n", + "markdown": "[AbstractContract_bad1](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L16-L21) does not implement functions:\n\t- [AbstractContract_bad1.f1()](tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L17)\n", + "first_markdown_element": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol#L16-L21", + "id": "adc202df4717efc4e19b549c0e623a79fac759a36bffb5d5e4aac401e33375d7", "check": "unimplemented-functions", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json b/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json index 418279203..830484b23 100644 --- a/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json +++ b/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json @@ -1,5 +1,81 @@ [ [ + { + "elements": [ + { + "type": "contract", + "name": "DerivedContract_bad2", + "source_mapping": { + "start": 593, + "length": 344, + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "is_dependency": false, + "lines": [ + 27, + 28, + 29, + 30, + 31, + 32, + 33 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + { + "type": "function", + "name": "get", + "source_mapping": { + "start": 539, + "length": 50, + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "is_dependency": false, + "lines": [ + 24 + ], + "starting_column": 5, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "BaseInterface3", + "source_mapping": { + "start": 500, + "length": 91, + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "is_dependency": false, + "lines": [ + 23, + 24, + 25 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "get(uint256)" + } + } + ], + "description": "DerivedContract_bad2 (tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#27-33) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#24)\n", + "markdown": "[DerivedContract_bad2](tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#L27-L33) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#L24)\n", + "first_markdown_element": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#L27-L33", + "id": "31915d2f480e24ddd054de973440a02abdac0ccd6332c47cd4eb8d836d3fddda", + "check": "unimplemented-functions", + "impact": "Informational", + "confidence": "High" + }, { "elements": [ { @@ -8,7 +84,7 @@ "source_mapping": { "start": 185, "length": 151, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -30,7 +106,7 @@ "source_mapping": { "start": 72, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -48,7 +124,7 @@ "source_mapping": { "start": 0, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -72,7 +148,7 @@ "source_mapping": { "start": 144, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -90,7 +166,7 @@ "source_mapping": { "start": 113, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -124,7 +200,7 @@ "source_mapping": { "start": 338, "length": 160, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -147,7 +223,7 @@ "source_mapping": { "start": 384, "length": 45, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -165,7 +241,7 @@ "source_mapping": { "start": 338, "length": 160, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -193,82 +269,6 @@ "check": "unimplemented-functions", "impact": "Informational", "confidence": "High" - }, - { - "elements": [ - { - "type": "contract", - "name": "DerivedContract_bad2", - "source_mapping": { - "start": 593, - "length": 344, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", - "is_dependency": false, - "lines": [ - 27, - 28, - 29, - 30, - 31, - 32, - 33 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - { - "type": "function", - "name": "get", - "source_mapping": { - "start": 539, - "length": 50, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", - "is_dependency": false, - "lines": [ - 24 - ], - "starting_column": 5, - "ending_column": 55 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "BaseInterface3", - "source_mapping": { - "start": 500, - "length": 91, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", - "is_dependency": false, - "lines": [ - 23, - 24, - 25 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "get(uint256)" - } - } - ], - "description": "DerivedContract_bad2 (tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#27-33) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#24)\n", - "markdown": "[DerivedContract_bad2](tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#L27-L33) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#L24)\n", - "first_markdown_element": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol#L27-L33", - "id": "31915d2f480e24ddd054de973440a02abdac0ccd6332c47cd4eb8d836d3fddda", - "check": "unimplemented-functions", - "impact": "Informational", - "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol.0.7.6.UnimplementedFunctionDetection.json b/tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol.0.7.6.UnimplementedFunctionDetection.json index e3074383a..96ba9c152 100644 --- a/tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol.0.7.6.UnimplementedFunctionDetection.json +++ b/tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol.0.7.6.UnimplementedFunctionDetection.json @@ -1,5 +1,81 @@ [ [ + { + "elements": [ + { + "type": "contract", + "name": "DerivedContract_bad2", + "source_mapping": { + "start": 593, + "length": 344, + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "is_dependency": false, + "lines": [ + 27, + 28, + 29, + 30, + 31, + 32, + 33 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + { + "type": "function", + "name": "get", + "source_mapping": { + "start": 539, + "length": 50, + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "is_dependency": false, + "lines": [ + 24 + ], + "starting_column": 5, + "ending_column": 55 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "BaseInterface3", + "source_mapping": { + "start": 500, + "length": 91, + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", + "is_dependency": false, + "lines": [ + 23, + 24, + 25 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "get(uint256)" + } + } + ], + "description": "DerivedContract_bad2 (tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#27-33) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#24)\n", + "markdown": "[DerivedContract_bad2](tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#L27-L33) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#L24)\n", + "first_markdown_element": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#L27-L33", + "id": "31915d2f480e24ddd054de973440a02abdac0ccd6332c47cd4eb8d836d3fddda", + "check": "unimplemented-functions", + "impact": "Informational", + "confidence": "High" + }, { "elements": [ { @@ -8,7 +84,7 @@ "source_mapping": { "start": 185, "length": 151, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -30,7 +106,7 @@ "source_mapping": { "start": 72, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -48,7 +124,7 @@ "source_mapping": { "start": 0, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -72,7 +148,7 @@ "source_mapping": { "start": 144, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -90,7 +166,7 @@ "source_mapping": { "start": 113, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -124,7 +200,7 @@ "source_mapping": { "start": 338, "length": 160, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -147,7 +223,7 @@ "source_mapping": { "start": 384, "length": 45, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -165,7 +241,7 @@ "source_mapping": { "start": 338, "length": 160, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", @@ -193,82 +269,6 @@ "check": "unimplemented-functions", "impact": "Informational", "confidence": "High" - }, - { - "elements": [ - { - "type": "contract", - "name": "DerivedContract_bad2", - "source_mapping": { - "start": 593, - "length": 344, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", - "is_dependency": false, - "lines": [ - 27, - 28, - 29, - 30, - 31, - 32, - 33 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - { - "type": "function", - "name": "get", - "source_mapping": { - "start": 539, - "length": 50, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", - "is_dependency": false, - "lines": [ - 24 - ], - "starting_column": 5, - "ending_column": 55 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "BaseInterface3", - "source_mapping": { - "start": 500, - "length": 91, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol", - "is_dependency": false, - "lines": [ - 23, - 24, - 25 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "get(uint256)" - } - } - ], - "description": "DerivedContract_bad2 (tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#27-33) does not implement functions:\n\t- BaseInterface3.get(uint256) (tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#24)\n", - "markdown": "[DerivedContract_bad2](tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#L27-L33) does not implement functions:\n\t- [BaseInterface3.get(uint256)](tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#L24)\n", - "first_markdown_element": "tests/detectors/unimplemented-functions/0.7.6/unimplemented.sol#L27-L33", - "id": "31915d2f480e24ddd054de973440a02abdac0ccd6332c47cd4eb8d836d3fddda", - "check": "unimplemented-functions", - "impact": "Informational", - "confidence": "High" } ] ] \ No newline at end of file diff --git a/tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol.0.4.25.UninitializedFunctionPtrsConstructor.json b/tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol.0.4.25.UninitializedFunctionPtrsConstructor.json index 83bc555c0..42f3c9091 100644 --- a/tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol.0.4.25.UninitializedFunctionPtrsConstructor.json +++ b/tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol.0.4.25.UninitializedFunctionPtrsConstructor.json @@ -4,23 +4,26 @@ "elements": [ { "type": "contract", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 27, - "length": 149, + "start": 486, + "length": 199, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 1, "ending_column": 2 @@ -28,39 +31,38 @@ }, { "type": "node", - "name": "a(10)", + "name": "s.a(10)", "source_mapping": { - "start": 164, - "length": 5, + "start": 671, + "length": 7, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 7 + 27 ], "starting_column": 5, - "ending_column": 10 + "ending_column": 12 }, "type_specific_fields": { "parent": { "type": "function", "name": "constructor", "source_mapping": { - "start": 45, - "length": 129, + "start": 628, + "length": 55, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6, - 7, - 8 + 25, + 26, + 27, + 28 ], "starting_column": 3, "ending_column": 4 @@ -68,23 +70,26 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 27, - "length": 149, + "start": 486, + "length": 199, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9 + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29 ], "starting_column": 1, "ending_column": 2 @@ -96,10 +101,10 @@ } } ], - "description": "Contract bad0 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#3-9) \n\t a(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#7) is an unintialized function pointer call in a constructor\n", - "markdown": "Contract [bad0](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L3-L9) \n\t [a(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L7) is an unintialized function pointer call in a constructor\n", - "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L3-L9", - "id": "38a85244054f0e06f1d3b476742113d0cf1cbe82b6c2a16f6abfa8cb7611aa2d", + "description": "Contract bad2 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#20-29) \n\t s.a(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#27) is an unintialized function pointer call in a constructor\n", + "markdown": "Contract [bad2](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L20-L29) \n\t [s.a(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L27) is an unintialized function pointer call in a constructor\n", + "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L20-L29", + "id": "1b01aa44445395d800ebe53b807c6884d1c5fc96d38f255bc402e1b339a8a6f2", "check": "uninitialized-fptr-cst", "impact": "Low", "confidence": "High" @@ -108,24 +113,23 @@ "elements": [ { "type": "contract", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 178, - "length": 306, + "start": 27, + "length": 149, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18 + 3, + 4, + 5, + 6, + 7, + 8, + 9 ], "starting_column": 1, "ending_column": 2 @@ -133,9 +137,9 @@ }, { "type": "node", - "name": "b(10)", + "name": "a(10)", "source_mapping": { - "start": 472, + "start": 164, "length": 5, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", @@ -143,7 +147,7 @@ "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 16 + 7 ], "starting_column": 5, "ending_column": 10 @@ -153,20 +157,19 @@ "type": "function", "name": "constructor", "source_mapping": { - "start": 196, - "length": 286, + "start": 45, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14, - 15, - 16, - 17 + 4, + 5, + 6, + 7, + 8 ], "starting_column": 3, "ending_column": 4 @@ -174,24 +177,23 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 178, - "length": 306, + "start": 27, + "length": 149, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18 + 3, + 4, + 5, + 6, + 7, + 8, + 9 ], "starting_column": 1, "ending_column": 2 @@ -203,10 +205,10 @@ } } ], - "description": "Contract bad1 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#11-18) \n\t b(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#16) is an unintialized function pointer call in a constructor\n", - "markdown": "Contract [bad1](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L11-L18) \n\t [b(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L16) is an unintialized function pointer call in a constructor\n", - "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L11-L18", - "id": "eca46630e741d928b03312539f0e9ddfb182cb16b0425b5ff881a7800a50511e", + "description": "Contract bad0 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#3-9) \n\t a(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#7) is an unintialized function pointer call in a constructor\n", + "markdown": "Contract [bad0](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L3-L9) \n\t [a(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L7) is an unintialized function pointer call in a constructor\n", + "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L3-L9", + "id": "38a85244054f0e06f1d3b476742113d0cf1cbe82b6c2a16f6abfa8cb7611aa2d", "check": "uninitialized-fptr-cst", "impact": "Low", "confidence": "High" @@ -215,26 +217,28 @@ "elements": [ { "type": "contract", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 486, - "length": 199, + "start": 687, + "length": 269, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -242,38 +246,38 @@ }, { "type": "node", - "name": "s.a(10)", + "name": "a(10)", "source_mapping": { - "start": 671, - "length": 7, + "start": 858, + "length": 5, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 27 + 36 ], "starting_column": 5, - "ending_column": 12 + "ending_column": 10 }, "type_specific_fields": { "parent": { "type": "function", "name": "constructor", "source_mapping": { - "start": 628, - "length": 55, + "start": 831, + "length": 50, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 25, - 26, - 27, - 28 + 35, + 36, + 37, + 38 ], "starting_column": 3, "ending_column": 4 @@ -281,26 +285,28 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 486, - "length": 199, + "start": 687, + "length": 269, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -312,10 +318,10 @@ } } ], - "description": "Contract bad2 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#20-29) \n\t s.a(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#27) is an unintialized function pointer call in a constructor\n", - "markdown": "Contract [bad2](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L20-L29) \n\t [s.a(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L27) is an unintialized function pointer call in a constructor\n", - "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L20-L29", - "id": "1b01aa44445395d800ebe53b807c6884d1c5fc96d38f255bc402e1b339a8a6f2", + "description": "Contract bad3 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#31-42) \n\t a(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#36) is an unintialized function pointer call in a constructor\n", + "markdown": "Contract [bad3](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L31-L42) \n\t [a(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L36) is an unintialized function pointer call in a constructor\n", + "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L31-L42", + "id": "4bfb037a7504ad1a677e70cdba68b2b4d47f485e4c0d039ac0a6364465b4e56e", "check": "uninitialized-fptr-cst", "impact": "Low", "confidence": "High" @@ -324,28 +330,24 @@ "elements": [ { "type": "contract", - "name": "bad3", + "name": "bad1", "source_mapping": { - "start": 687, - "length": 269, + "start": 178, + "length": 306, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42 + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -353,9 +355,9 @@ }, { "type": "node", - "name": "a(10)", + "name": "b(10)", "source_mapping": { - "start": 858, + "start": 472, "length": 5, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", @@ -363,7 +365,7 @@ "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 36 + 16 ], "starting_column": 5, "ending_column": 10 @@ -373,18 +375,20 @@ "type": "function", "name": "constructor", "source_mapping": { - "start": 831, - "length": 50, + "start": 196, + "length": 286, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 35, - 36, - 37, - 38 + 12, + 13, + 14, + 15, + 16, + 17 ], "starting_column": 3, "ending_column": 4 @@ -392,28 +396,24 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "bad3", + "name": "bad1", "source_mapping": { - "start": 687, - "length": 269, + "start": 178, + "length": 306, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol", "is_dependency": false, "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42 + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 ], "starting_column": 1, "ending_column": 2 @@ -425,10 +425,10 @@ } } ], - "description": "Contract bad3 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#31-42) \n\t a(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#36) is an unintialized function pointer call in a constructor\n", - "markdown": "Contract [bad3](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L31-L42) \n\t [a(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L36) is an unintialized function pointer call in a constructor\n", - "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L31-L42", - "id": "4bfb037a7504ad1a677e70cdba68b2b4d47f485e4c0d039ac0a6364465b4e56e", + "description": "Contract bad1 (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#11-18) \n\t b(10) (tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#16) is an unintialized function pointer call in a constructor\n", + "markdown": "Contract [bad1](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L11-L18) \n\t [b(10)](tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L16) is an unintialized function pointer call in a constructor\n", + "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.4.25/uninitialized_function_ptr_constructor.sol#L11-L18", + "id": "eca46630e741d928b03312539f0e9ddfb182cb16b0425b5ff881a7800a50511e", "check": "uninitialized-fptr-cst", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json b/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json index 3c3591c5d..7935b85b3 100644 --- a/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json +++ b/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json @@ -1,109 +1,5 @@ [ [ - { - "elements": [ - { - "type": "contract", - "name": "bad0", - "source_mapping": { - "start": 27, - "length": 149, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - { - "type": "node", - "name": "a(10)", - "source_mapping": { - "start": 164, - "length": 5, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "is_dependency": false, - "lines": [ - 7 - ], - "starting_column": 5, - "ending_column": 10 - }, - "type_specific_fields": { - "parent": { - "type": "function", - "name": "constructor", - "source_mapping": { - "start": 45, - "length": 129, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "is_dependency": false, - "lines": [ - 4, - 5, - 6, - 7, - 8 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "bad0", - "source_mapping": { - "start": 27, - "length": 149, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "constructor()" - } - } - } - } - ], - "description": "Contract bad0 (tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#3-9) \n\t a(10) (tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#7) is an unintialized function pointer call in a constructor\n", - "markdown": "Contract [bad0](tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#L3-L9) \n\t [a(10)](tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#L7) is an unintialized function pointer call in a constructor\n", - "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#L3-L9", - "id": "e1e469fcf69ffbf93884287be133945396a1a363e77db02f241c90027f19bf48", - "check": "uninitialized-fptr-cst", - "impact": "Low", - "confidence": "High" - }, { "elements": [ { @@ -320,6 +216,110 @@ "impact": "Low", "confidence": "High" }, + { + "elements": [ + { + "type": "contract", + "name": "bad0", + "source_mapping": { + "start": 27, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + { + "type": "node", + "name": "a(10)", + "source_mapping": { + "start": 164, + "length": 5, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "is_dependency": false, + "lines": [ + 7 + ], + "starting_column": 5, + "ending_column": 10 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "constructor", + "source_mapping": { + "start": 45, + "length": 129, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "is_dependency": false, + "lines": [ + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 3, + "ending_column": 4 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "bad0", + "source_mapping": { + "start": 27, + "length": 149, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "constructor()" + } + } + } + } + ], + "description": "Contract bad0 (tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#3-9) \n\t a(10) (tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#7) is an unintialized function pointer call in a constructor\n", + "markdown": "Contract [bad0](tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#L3-L9) \n\t [a(10)](tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#L7) is an unintialized function pointer call in a constructor\n", + "first_markdown_element": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol#L3-L9", + "id": "e1e469fcf69ffbf93884287be133945396a1a363e77db02f241c90027f19bf48", + "check": "uninitialized-fptr-cst", + "impact": "Low", + "confidence": "High" + }, { "elements": [ { diff --git a/tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol.0.4.25.UninitializedLocalVars.json b/tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol.0.4.25.UninitializedLocalVars.json index f28259a77..202b93232 100644 --- a/tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol.0.4.25.UninitializedLocalVars.json +++ b/tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol.0.4.25.UninitializedLocalVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 77, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 0, "length": 179, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.4.25/uninitialized_local_variable.sol", diff --git a/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json b/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json index 81ecc20fc..672a61c7f 100644 --- a/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json +++ b/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 77, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 0, "length": 179, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", diff --git a/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json b/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json index 5e51267d9..37c4fae5a 100644 --- a/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json +++ b/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 77, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 0, "length": 179, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_relative": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", diff --git a/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json b/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json index 7cffff3a3..90dd94c8d 100644 --- a/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json +++ b/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json @@ -4,43 +4,51 @@ "elements": [ { "type": "variable", - "name": "destination", + "name": "st", "source_mapping": { - "start": 58, - "length": 19, + "start": 698, + "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 5 + 45 ], "starting_column": 5, - "ending_column": 24 + "ending_column": 20 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 29, - "length": 140, + "start": 644, + "length": 354, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 @@ -50,19 +58,20 @@ }, { "type": "function", - "name": "transfer", + "name": "use", "source_mapping": { - "start": 84, - "length": 82, + "start": 878, + "length": 117, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9 + 53, + 54, + 55, + 56 ], "starting_column": 5, "ending_column": 6 @@ -70,38 +79,46 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 29, - "length": 140, + "start": 644, + "length": 354, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "transfer()" + "signature": "use()" } } ], - "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#7-9)\n", - "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L7-L9)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L5", - "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", + "description": "Test2.st (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#53-56)\n", + "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L53-L56)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L45", + "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -227,20 +244,20 @@ "elements": [ { "type": "variable", - "name": "st", + "name": "v", "source_mapping": { - "start": 698, - "length": 15, + "start": 751, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 45 + 47 ], "starting_column": 5, - "ending_column": 20 + "ending_column": 11 }, "type_specific_fields": { "parent": { @@ -281,20 +298,19 @@ }, { "type": "function", - "name": "use", + "name": "init", "source_mapping": { - "start": 878, - "length": 117, + "start": 820, + "length": 52, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 53, - 54, - 55, - 56 + 49, + 50, + 51 ], "starting_column": 5, "ending_column": 6 @@ -334,14 +350,14 @@ "ending_column": 2 } }, - "signature": "use()" + "signature": "init()" } } ], - "description": "Test2.st (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#53-56)\n", - "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L53-L56)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L45", - "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", + "description": "Test2.v (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#49-51)\n", + "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L49-L51)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L47", + "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -350,51 +366,43 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "destination", "source_mapping": { - "start": 751, - "length": 6, + "start": 58, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 47 + 5 ], "starting_column": 5, - "ending_column": 11 + "ending_column": 24 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 644, - "length": 354, + "start": 29, + "length": 140, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 @@ -404,19 +412,19 @@ }, { "type": "function", - "name": "init", + "name": "transfer", "source_mapping": { - "start": 820, - "length": 52, + "start": 84, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 49, - 50, - 51 + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -424,46 +432,38 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 644, - "length": 354, + "start": 29, + "length": 140, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "init()" + "signature": "transfer()" } } ], - "description": "Test2.v (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#49-51)\n", - "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L49-L51)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L47", - "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", + "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#7-9)\n", + "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L7-L9)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol#L5", + "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", "check": "uninitialized-state", "impact": "High", "confidence": "High" diff --git a/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json b/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json index b57293e93..0c996ec25 100644 --- a/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json +++ b/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json @@ -4,43 +4,51 @@ "elements": [ { "type": "variable", - "name": "destination", + "name": "st", "source_mapping": { - "start": 57, - "length": 27, + "start": 729, + "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 5 + 45 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 20 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 28, - "length": 148, + "start": 675, + "length": 373, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 @@ -50,19 +58,20 @@ }, { "type": "function", - "name": "transfer", + "name": "use", "source_mapping": { - "start": 91, - "length": 82, + "start": 916, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9 + 53, + 54, + 55, + 56 ], "starting_column": 5, "ending_column": 6 @@ -70,38 +79,46 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 28, - "length": 148, + "start": 675, + "length": 373, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "transfer()" + "signature": "use()" } } ], - "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#7-9)\n", - "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L7-L9)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L5", - "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", + "description": "Test2.st (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#53-56)\n", + "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L53-L56)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L45", + "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -227,20 +244,20 @@ "elements": [ { "type": "variable", - "name": "st", + "name": "v", "source_mapping": { - "start": 729, - "length": 15, + "start": 782, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 45 + 47 ], "starting_column": 5, - "ending_column": 20 + "ending_column": 11 }, "type_specific_fields": { "parent": { @@ -281,20 +298,19 @@ }, { "type": "function", - "name": "use", + "name": "init", "source_mapping": { - "start": 916, - "length": 129, + "start": 851, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 53, - 54, - 55, - 56 + 49, + 50, + 51 ], "starting_column": 5, "ending_column": 6 @@ -334,14 +350,14 @@ "ending_column": 2 } }, - "signature": "use()" + "signature": "init()" } } ], - "description": "Test2.st (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#53-56)\n", - "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L53-L56)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L45", - "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", + "description": "Test2.v (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#49-51)\n", + "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L49-L51)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L47", + "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -350,51 +366,43 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "destination", "source_mapping": { - "start": 782, - "length": 6, + "start": 57, + "length": 27, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 47 + 5 ], "starting_column": 5, - "ending_column": 11 + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 675, - "length": 373, + "start": 28, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 @@ -404,19 +412,19 @@ }, { "type": "function", - "name": "init", + "name": "transfer", "source_mapping": { - "start": 851, - "length": 59, + "start": 91, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 49, - 50, - 51 + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -424,46 +432,38 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 675, - "length": 373, + "start": 28, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "init()" + "signature": "transfer()" } } ], - "description": "Test2.v (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#49-51)\n", - "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L49-L51)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L47", - "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", + "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#7-9)\n", + "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L7-L9)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol#L5", + "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", "check": "uninitialized-state", "impact": "High", "confidence": "High" diff --git a/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol.0.6.11.UninitializedStateVarsDetection.json b/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol.0.6.11.UninitializedStateVarsDetection.json index e82e93548..63c5067ce 100644 --- a/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol.0.6.11.UninitializedStateVarsDetection.json +++ b/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol.0.6.11.UninitializedStateVarsDetection.json @@ -4,43 +4,51 @@ "elements": [ { "type": "variable", - "name": "destination", + "name": "st", "source_mapping": { - "start": 57, - "length": 27, + "start": 729, + "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 5 + 45 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 20 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 28, - "length": 148, + "start": 675, + "length": 373, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 @@ -50,19 +58,20 @@ }, { "type": "function", - "name": "transfer", + "name": "use", "source_mapping": { - "start": 91, - "length": 82, + "start": 916, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9 + 53, + 54, + 55, + 56 ], "starting_column": 5, "ending_column": 6 @@ -70,38 +79,46 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 28, - "length": 148, + "start": 675, + "length": 373, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "transfer()" + "signature": "use()" } } ], - "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#7-9)\n", - "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L7-L9)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L5", - "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", + "description": "Test2.st (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#53-56)\n", + "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L53-L56)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L45", + "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -227,20 +244,20 @@ "elements": [ { "type": "variable", - "name": "st", + "name": "v", "source_mapping": { - "start": 729, - "length": 15, + "start": 782, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 45 + 47 ], "starting_column": 5, - "ending_column": 20 + "ending_column": 11 }, "type_specific_fields": { "parent": { @@ -281,20 +298,19 @@ }, { "type": "function", - "name": "use", + "name": "init", "source_mapping": { - "start": 916, - "length": 129, + "start": 851, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 53, - 54, - 55, - 56 + 49, + 50, + 51 ], "starting_column": 5, "ending_column": 6 @@ -334,14 +350,14 @@ "ending_column": 2 } }, - "signature": "use()" + "signature": "init()" } } ], - "description": "Test2.st (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#53-56)\n", - "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L53-L56)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L45", - "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", + "description": "Test2.v (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#49-51)\n", + "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L49-L51)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L47", + "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -350,51 +366,43 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "destination", "source_mapping": { - "start": 782, - "length": 6, + "start": 57, + "length": 27, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 47 + 5 ], "starting_column": 5, - "ending_column": 11 + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 675, - "length": 373, + "start": 28, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 @@ -404,19 +412,19 @@ }, { "type": "function", - "name": "init", + "name": "transfer", "source_mapping": { - "start": 851, - "length": 59, + "start": 91, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 49, - 50, - 51 + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -424,46 +432,38 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 675, - "length": 373, + "start": 28, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "init()" + "signature": "transfer()" } } ], - "description": "Test2.v (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#49-51)\n", - "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L49-L51)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L47", - "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", + "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#7-9)\n", + "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L7-L9)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.6.11/uninitialized.sol#L5", + "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", "check": "uninitialized-state", "impact": "High", "confidence": "High" diff --git a/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol.0.7.6.UninitializedStateVarsDetection.json b/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol.0.7.6.UninitializedStateVarsDetection.json index a35c50194..c27eb6c1e 100644 --- a/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol.0.7.6.UninitializedStateVarsDetection.json +++ b/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol.0.7.6.UninitializedStateVarsDetection.json @@ -4,43 +4,51 @@ "elements": [ { "type": "variable", - "name": "destination", + "name": "st", "source_mapping": { - "start": 57, - "length": 27, + "start": 729, + "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 5 + 45 ], "starting_column": 5, - "ending_column": 32 + "ending_column": 20 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 28, - "length": 148, + "start": 675, + "length": 373, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 @@ -50,19 +58,20 @@ }, { "type": "function", - "name": "transfer", + "name": "use", "source_mapping": { - "start": 91, - "length": 82, + "start": 916, + "length": 129, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 7, - 8, - 9 + 53, + 54, + 55, + 56 ], "starting_column": 5, "ending_column": 6 @@ -70,38 +79,46 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Uninitialized", + "name": "Test2", "source_mapping": { - "start": 28, - "length": 148, + "start": 675, + "length": 373, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11 + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "transfer()" + "signature": "use()" } } ], - "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#7-9)\n", - "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L7-L9)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L5", - "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", + "description": "Test2.st (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#53-56)\n", + "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L53-L56)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L45", + "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -227,20 +244,20 @@ "elements": [ { "type": "variable", - "name": "st", + "name": "v", "source_mapping": { - "start": 729, - "length": 15, + "start": 782, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 45 + 47 ], "starting_column": 5, - "ending_column": 20 + "ending_column": 11 }, "type_specific_fields": { "parent": { @@ -281,20 +298,19 @@ }, { "type": "function", - "name": "use", + "name": "init", "source_mapping": { - "start": 916, - "length": 129, + "start": 851, + "length": 59, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 53, - 54, - 55, - 56 + 49, + 50, + 51 ], "starting_column": 5, "ending_column": 6 @@ -334,14 +350,14 @@ "ending_column": 2 } }, - "signature": "use()" + "signature": "init()" } } ], - "description": "Test2.st (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#45) is never initialized. It is used in:\n\t- Test2.use() (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#53-56)\n", - "markdown": "[Test2.st](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L45) is never initialized. It is used in:\n\t- [Test2.use()](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L53-L56)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L45", - "id": "427f100397f455d8000eff7b1d2463763ca8e452d5d98f7b7de693fd5e625a32", + "description": "Test2.v (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#49-51)\n", + "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L49-L51)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L47", + "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", "check": "uninitialized-state", "impact": "High", "confidence": "High" @@ -350,51 +366,43 @@ "elements": [ { "type": "variable", - "name": "v", + "name": "destination", "source_mapping": { - "start": 782, - "length": 6, + "start": 57, + "length": 27, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 47 + 5 ], "starting_column": 5, - "ending_column": 11 + "ending_column": 32 }, "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 675, - "length": 373, + "start": 28, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 @@ -404,19 +412,19 @@ }, { "type": "function", - "name": "init", + "name": "transfer", "source_mapping": { - "start": 851, - "length": 59, + "start": 91, + "length": 82, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 49, - 50, - 51 + 7, + 8, + 9 ], "starting_column": 5, "ending_column": 6 @@ -424,46 +432,38 @@ "type_specific_fields": { "parent": { "type": "contract", - "name": "Test2", + "name": "Uninitialized", "source_mapping": { - "start": 675, - "length": 373, + "start": 28, + "length": 148, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol", "is_dependency": false, "lines": [ - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58 + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 ], "starting_column": 1, "ending_column": 2 } }, - "signature": "init()" + "signature": "transfer()" } } ], - "description": "Test2.v (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#47) is never initialized. It is used in:\n\t- Test2.init() (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#49-51)\n", - "markdown": "[Test2.v](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L47) is never initialized. It is used in:\n\t- [Test2.init()](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L49-L51)\n", - "first_markdown_element": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L47", - "id": "bf96eee949943a12926cf1407a2df2b07e99b30a6fc2e78aebf088cdefcf77a7", + "description": "Uninitialized.destination (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#5) is never initialized. It is used in:\n\t- Uninitialized.transfer() (tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#7-9)\n", + "markdown": "[Uninitialized.destination](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L5) is never initialized. It is used in:\n\t- [Uninitialized.transfer()](tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L7-L9)\n", + "first_markdown_element": "tests/detectors/uninitialized-state/0.7.6/uninitialized.sol#L5", + "id": "e4711aebbd53922a9fe1e728917bf8e98eac065305e20d766b6b552debe79e44", "check": "uninitialized-state", "impact": "High", "confidence": "High" diff --git a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json index d5452021e..dc8030465 100644 --- a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -38,7 +38,7 @@ "source_mapping": { "start": 96, "length": 115, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 216, "length": 98, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", diff --git a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json index b0fe359e4..a98d91818 100644 --- a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -38,7 +38,7 @@ "source_mapping": { "start": 96, "length": 115, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 216, "length": 98, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", diff --git a/tests/detectors/unused-return/0.4.25/unused_return.sol.0.4.25.UnusedReturnValues.json b/tests/detectors/unused-return/0.4.25/unused_return.sol.0.4.25.UnusedReturnValues.json index 91aed0691..520599b12 100644 --- a/tests/detectors/unused-return/0.4.25/unused_return.sol.0.4.25.UnusedReturnValues.json +++ b/tests/detectors/unused-return/0.4.25/unused_return.sol.0.4.25.UnusedReturnValues.json @@ -72,20 +72,20 @@ }, { "type": "node", - "name": "t.f()", + "name": "a.add(0)", "source_mapping": { - "start": 279, - "length": 5, + "start": 353, + "length": 8, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-return/0.4.25/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.4.25/unused_return.sol", "is_dependency": false, "lines": [ - 18 + 22 ], "starting_column": 9, - "ending_column": 14 + "ending_column": 17 }, "type_specific_fields": { "parent": { @@ -159,10 +159,10 @@ } } ], - "description": "User.test(Target) (tests/detectors/unused-return/0.4.25/unused_return.sol#17-29) ignores return value by t.f() (tests/detectors/unused-return/0.4.25/unused_return.sol#18)\n", - "markdown": "[User.test(Target)](tests/detectors/unused-return/0.4.25/unused_return.sol#L17-L29) ignores return value by [t.f()](tests/detectors/unused-return/0.4.25/unused_return.sol#L18)\n", + "description": "User.test(Target) (tests/detectors/unused-return/0.4.25/unused_return.sol#17-29) ignores return value by a.add(0) (tests/detectors/unused-return/0.4.25/unused_return.sol#22)\n", + "markdown": "[User.test(Target)](tests/detectors/unused-return/0.4.25/unused_return.sol#L17-L29) ignores return value by [a.add(0)](tests/detectors/unused-return/0.4.25/unused_return.sol#L22)\n", "first_markdown_element": "tests/detectors/unused-return/0.4.25/unused_return.sol#L17-L29", - "id": "73c54c292f1f2fb8a8d88b230cd0bf2da3bc8fff0d758b009839ca883b36c84e", + "id": "619bba0a79919e4f53e583a88cd4e32f204489c8d86e365a20bf3f9ce4c0f542", "check": "unused-return", "impact": "Medium", "confidence": "Medium" @@ -239,20 +239,20 @@ }, { "type": "node", - "name": "a.add(0)", + "name": "t.f()", "source_mapping": { - "start": 353, - "length": 8, + "start": 279, + "length": 5, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-return/0.4.25/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.4.25/unused_return.sol", "is_dependency": false, "lines": [ - 22 + 18 ], "starting_column": 9, - "ending_column": 17 + "ending_column": 14 }, "type_specific_fields": { "parent": { @@ -326,10 +326,10 @@ } } ], - "description": "User.test(Target) (tests/detectors/unused-return/0.4.25/unused_return.sol#17-29) ignores return value by a.add(0) (tests/detectors/unused-return/0.4.25/unused_return.sol#22)\n", - "markdown": "[User.test(Target)](tests/detectors/unused-return/0.4.25/unused_return.sol#L17-L29) ignores return value by [a.add(0)](tests/detectors/unused-return/0.4.25/unused_return.sol#L22)\n", + "description": "User.test(Target) (tests/detectors/unused-return/0.4.25/unused_return.sol#17-29) ignores return value by t.f() (tests/detectors/unused-return/0.4.25/unused_return.sol#18)\n", + "markdown": "[User.test(Target)](tests/detectors/unused-return/0.4.25/unused_return.sol#L17-L29) ignores return value by [t.f()](tests/detectors/unused-return/0.4.25/unused_return.sol#L18)\n", "first_markdown_element": "tests/detectors/unused-return/0.4.25/unused_return.sol#L17-L29", - "id": "619bba0a79919e4f53e583a88cd4e32f204489c8d86e365a20bf3f9ce4c0f542", + "id": "73c54c292f1f2fb8a8d88b230cd0bf2da3bc8fff0d758b009839ca883b36c84e", "check": "unused-return", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/unused-return/0.5.16/unused_return.sol.0.5.16.UnusedReturnValues.json b/tests/detectors/unused-return/0.5.16/unused_return.sol.0.5.16.UnusedReturnValues.json index 99bbf612b..a15114e55 100644 --- a/tests/detectors/unused-return/0.5.16/unused_return.sol.0.5.16.UnusedReturnValues.json +++ b/tests/detectors/unused-return/0.5.16/unused_return.sol.0.5.16.UnusedReturnValues.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 239, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -38,7 +38,7 @@ "source_mapping": { "start": 189, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 279, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -94,7 +94,7 @@ "source_mapping": { "start": 239, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 189, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -175,7 +175,7 @@ "source_mapping": { "start": 239, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -205,7 +205,7 @@ "source_mapping": { "start": 189, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -243,7 +243,7 @@ "source_mapping": { "start": 353, "length": 8, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 239, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", @@ -291,7 +291,7 @@ "source_mapping": { "start": 189, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.5.16/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.5.16/unused_return.sol", diff --git a/tests/detectors/unused-return/0.7.6/unused_return.sol.0.7.6.UnusedReturnValues.json b/tests/detectors/unused-return/0.7.6/unused_return.sol.0.7.6.UnusedReturnValues.json index 37152b359..32dec25a6 100644 --- a/tests/detectors/unused-return/0.7.6/unused_return.sol.0.7.6.UnusedReturnValues.json +++ b/tests/detectors/unused-return/0.7.6/unused_return.sol.0.7.6.UnusedReturnValues.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 256, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -38,7 +38,7 @@ "source_mapping": { "start": 206, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -72,20 +72,20 @@ }, { "type": "node", - "name": "t.f()", + "name": "a.add(0)", "source_mapping": { - "start": 296, - "length": 5, - "filename_used": "/GENERIC_PATH", + "start": 370, + "length": 8, + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", "is_dependency": false, "lines": [ - 18 + 22 ], "starting_column": 9, - "ending_column": 14 + "ending_column": 17 }, "type_specific_fields": { "parent": { @@ -94,7 +94,7 @@ "source_mapping": { "start": 256, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 206, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -159,10 +159,10 @@ } } ], - "description": "User.test(Target) (tests/detectors/unused-return/0.7.6/unused_return.sol#17-29) ignores return value by t.f() (tests/detectors/unused-return/0.7.6/unused_return.sol#18)\n", - "markdown": "[User.test(Target)](tests/detectors/unused-return/0.7.6/unused_return.sol#L17-L29) ignores return value by [t.f()](tests/detectors/unused-return/0.7.6/unused_return.sol#L18)\n", + "description": "User.test(Target) (tests/detectors/unused-return/0.7.6/unused_return.sol#17-29) ignores return value by a.add(0) (tests/detectors/unused-return/0.7.6/unused_return.sol#22)\n", + "markdown": "[User.test(Target)](tests/detectors/unused-return/0.7.6/unused_return.sol#L17-L29) ignores return value by [a.add(0)](tests/detectors/unused-return/0.7.6/unused_return.sol#L22)\n", "first_markdown_element": "tests/detectors/unused-return/0.7.6/unused_return.sol#L17-L29", - "id": "d5027a5d25ac3528c0d03d48a3bbd9ef6ea582b2a286b47e8e7f741c26c35634", + "id": "3774dfb7de028a13f2945c0e19a075ffb1fb27a7785aaaf79dff863f7f1bbec7", "check": "unused-return", "impact": "Medium", "confidence": "Medium" @@ -175,7 +175,7 @@ "source_mapping": { "start": 256, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -205,7 +205,7 @@ "source_mapping": { "start": 206, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -239,20 +239,20 @@ }, { "type": "node", - "name": "a.add(0)", + "name": "t.f()", "source_mapping": { - "start": 370, - "length": 8, - "filename_used": "/GENERIC_PATH", + "start": 296, + "length": 5, + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", "is_dependency": false, "lines": [ - 22 + 18 ], "starting_column": 9, - "ending_column": 17 + "ending_column": 14 }, "type_specific_fields": { "parent": { @@ -261,7 +261,7 @@ "source_mapping": { "start": 256, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -291,7 +291,7 @@ "source_mapping": { "start": 206, "length": 406, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_relative": "tests/detectors/unused-return/0.7.6/unused_return.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-return/0.7.6/unused_return.sol", @@ -326,10 +326,10 @@ } } ], - "description": "User.test(Target) (tests/detectors/unused-return/0.7.6/unused_return.sol#17-29) ignores return value by a.add(0) (tests/detectors/unused-return/0.7.6/unused_return.sol#22)\n", - "markdown": "[User.test(Target)](tests/detectors/unused-return/0.7.6/unused_return.sol#L17-L29) ignores return value by [a.add(0)](tests/detectors/unused-return/0.7.6/unused_return.sol#L22)\n", + "description": "User.test(Target) (tests/detectors/unused-return/0.7.6/unused_return.sol#17-29) ignores return value by t.f() (tests/detectors/unused-return/0.7.6/unused_return.sol#18)\n", + "markdown": "[User.test(Target)](tests/detectors/unused-return/0.7.6/unused_return.sol#L17-L29) ignores return value by [t.f()](tests/detectors/unused-return/0.7.6/unused_return.sol#L18)\n", "first_markdown_element": "tests/detectors/unused-return/0.7.6/unused_return.sol#L17-L29", - "id": "3774dfb7de028a13f2945c0e19a075ffb1fb27a7785aaaf79dff863f7f1bbec7", + "id": "d5027a5d25ac3528c0d03d48a3bbd9ef6ea582b2a286b47e8e7f741c26c35634", "check": "unused-return", "impact": "Medium", "confidence": "Medium" diff --git a/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json b/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json index ba44c43a3..2356dda78 100644 --- a/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json +++ b/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json @@ -82,9 +82,9 @@ "elements": [ { "type": "variable", - "name": "unused2", + "name": "unused4", "source_mapping": { - "start": 64, + "start": 106, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -92,7 +92,7 @@ "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", "is_dependency": false, "lines": [ - 5 + 7 ], "starting_column": 5, "ending_column": 20 @@ -148,10 +148,10 @@ } } ], - "description": "A.unused2 (tests/detectors/unused-state/0.4.25/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.4.25/unused_state.sol#11-16)\n", - "markdown": "[A.unused2](tests/detectors/unused-state/0.4.25/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.4.25/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.4.25/unused_state.sol#L5", - "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", + "description": "A.unused4 (tests/detectors/unused-state/0.4.25/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.4.25/unused_state.sol#11-16)\n", + "markdown": "[A.unused4](tests/detectors/unused-state/0.4.25/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.4.25/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.4.25/unused_state.sol#L7", + "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -160,9 +160,9 @@ "elements": [ { "type": "variable", - "name": "unused3", + "name": "unused2", "source_mapping": { - "start": 85, + "start": 64, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -170,7 +170,7 @@ "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", "is_dependency": false, "lines": [ - 6 + 5 ], "starting_column": 5, "ending_column": 20 @@ -226,10 +226,10 @@ } } ], - "description": "A.unused3 (tests/detectors/unused-state/0.4.25/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.4.25/unused_state.sol#11-16)\n", - "markdown": "[A.unused3](tests/detectors/unused-state/0.4.25/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.4.25/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.4.25/unused_state.sol#L6", - "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", + "description": "A.unused2 (tests/detectors/unused-state/0.4.25/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.4.25/unused_state.sol#11-16)\n", + "markdown": "[A.unused2](tests/detectors/unused-state/0.4.25/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.4.25/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.4.25/unused_state.sol#L5", + "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -238,9 +238,9 @@ "elements": [ { "type": "variable", - "name": "unused4", + "name": "unused3", "source_mapping": { - "start": 106, + "start": 85, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -248,7 +248,7 @@ "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, "ending_column": 20 @@ -304,10 +304,10 @@ } } ], - "description": "A.unused4 (tests/detectors/unused-state/0.4.25/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.4.25/unused_state.sol#11-16)\n", - "markdown": "[A.unused4](tests/detectors/unused-state/0.4.25/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.4.25/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.4.25/unused_state.sol#L7", - "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", + "description": "A.unused3 (tests/detectors/unused-state/0.4.25/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.4.25/unused_state.sol#11-16)\n", + "markdown": "[A.unused3](tests/detectors/unused-state/0.4.25/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.4.25/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.4.25/unused_state.sol#L6", + "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", "check": "unused-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/unused-state/0.5.16/unused_state.sol.0.5.16.UnusedStateVars.json b/tests/detectors/unused-state/0.5.16/unused_state.sol.0.5.16.UnusedStateVars.json index 5f3f1b7d0..6858e129b 100644 --- a/tests/detectors/unused-state/0.5.16/unused_state.sol.0.5.16.UnusedStateVars.json +++ b/tests/detectors/unused-state/0.5.16/unused_state.sol.0.5.16.UnusedStateVars.json @@ -82,9 +82,9 @@ "elements": [ { "type": "variable", - "name": "unused2", + "name": "unused4", "source_mapping": { - "start": 64, + "start": 106, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.5.16/unused_state.sol", @@ -92,7 +92,7 @@ "filename_short": "tests/detectors/unused-state/0.5.16/unused_state.sol", "is_dependency": false, "lines": [ - 5 + 7 ], "starting_column": 5, "ending_column": 20 @@ -148,10 +148,10 @@ } } ], - "description": "A.unused2 (tests/detectors/unused-state/0.5.16/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.5.16/unused_state.sol#11-16)\n", - "markdown": "[A.unused2](tests/detectors/unused-state/0.5.16/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.5.16/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.5.16/unused_state.sol#L5", - "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", + "description": "A.unused4 (tests/detectors/unused-state/0.5.16/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.5.16/unused_state.sol#11-16)\n", + "markdown": "[A.unused4](tests/detectors/unused-state/0.5.16/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.5.16/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.5.16/unused_state.sol#L7", + "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -160,9 +160,9 @@ "elements": [ { "type": "variable", - "name": "unused3", + "name": "unused2", "source_mapping": { - "start": 85, + "start": 64, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.5.16/unused_state.sol", @@ -170,7 +170,7 @@ "filename_short": "tests/detectors/unused-state/0.5.16/unused_state.sol", "is_dependency": false, "lines": [ - 6 + 5 ], "starting_column": 5, "ending_column": 20 @@ -226,10 +226,10 @@ } } ], - "description": "A.unused3 (tests/detectors/unused-state/0.5.16/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.5.16/unused_state.sol#11-16)\n", - "markdown": "[A.unused3](tests/detectors/unused-state/0.5.16/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.5.16/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.5.16/unused_state.sol#L6", - "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", + "description": "A.unused2 (tests/detectors/unused-state/0.5.16/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.5.16/unused_state.sol#11-16)\n", + "markdown": "[A.unused2](tests/detectors/unused-state/0.5.16/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.5.16/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.5.16/unused_state.sol#L5", + "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -238,9 +238,9 @@ "elements": [ { "type": "variable", - "name": "unused4", + "name": "unused3", "source_mapping": { - "start": 106, + "start": 85, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.5.16/unused_state.sol", @@ -248,7 +248,7 @@ "filename_short": "tests/detectors/unused-state/0.5.16/unused_state.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, "ending_column": 20 @@ -304,10 +304,10 @@ } } ], - "description": "A.unused4 (tests/detectors/unused-state/0.5.16/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.5.16/unused_state.sol#11-16)\n", - "markdown": "[A.unused4](tests/detectors/unused-state/0.5.16/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.5.16/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.5.16/unused_state.sol#L7", - "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", + "description": "A.unused3 (tests/detectors/unused-state/0.5.16/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.5.16/unused_state.sol#11-16)\n", + "markdown": "[A.unused3](tests/detectors/unused-state/0.5.16/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.5.16/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.5.16/unused_state.sol#L6", + "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", "check": "unused-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/unused-state/0.6.11/unused_state.sol.0.6.11.UnusedStateVars.json b/tests/detectors/unused-state/0.6.11/unused_state.sol.0.6.11.UnusedStateVars.json index ee43e3df6..357b5d4f1 100644 --- a/tests/detectors/unused-state/0.6.11/unused_state.sol.0.6.11.UnusedStateVars.json +++ b/tests/detectors/unused-state/0.6.11/unused_state.sol.0.6.11.UnusedStateVars.json @@ -82,9 +82,9 @@ "elements": [ { "type": "variable", - "name": "unused2", + "name": "unused4", "source_mapping": { - "start": 64, + "start": 106, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.6.11/unused_state.sol", @@ -92,7 +92,7 @@ "filename_short": "tests/detectors/unused-state/0.6.11/unused_state.sol", "is_dependency": false, "lines": [ - 5 + 7 ], "starting_column": 5, "ending_column": 20 @@ -148,10 +148,10 @@ } } ], - "description": "A.unused2 (tests/detectors/unused-state/0.6.11/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.6.11/unused_state.sol#11-16)\n", - "markdown": "[A.unused2](tests/detectors/unused-state/0.6.11/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.6.11/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.6.11/unused_state.sol#L5", - "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", + "description": "A.unused4 (tests/detectors/unused-state/0.6.11/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.6.11/unused_state.sol#11-16)\n", + "markdown": "[A.unused4](tests/detectors/unused-state/0.6.11/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.6.11/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.6.11/unused_state.sol#L7", + "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -160,9 +160,9 @@ "elements": [ { "type": "variable", - "name": "unused3", + "name": "unused2", "source_mapping": { - "start": 85, + "start": 64, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.6.11/unused_state.sol", @@ -170,7 +170,7 @@ "filename_short": "tests/detectors/unused-state/0.6.11/unused_state.sol", "is_dependency": false, "lines": [ - 6 + 5 ], "starting_column": 5, "ending_column": 20 @@ -226,10 +226,10 @@ } } ], - "description": "A.unused3 (tests/detectors/unused-state/0.6.11/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.6.11/unused_state.sol#11-16)\n", - "markdown": "[A.unused3](tests/detectors/unused-state/0.6.11/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.6.11/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.6.11/unused_state.sol#L6", - "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", + "description": "A.unused2 (tests/detectors/unused-state/0.6.11/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.6.11/unused_state.sol#11-16)\n", + "markdown": "[A.unused2](tests/detectors/unused-state/0.6.11/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.6.11/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.6.11/unused_state.sol#L5", + "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -238,9 +238,9 @@ "elements": [ { "type": "variable", - "name": "unused4", + "name": "unused3", "source_mapping": { - "start": 106, + "start": 85, "length": 15, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unused-state/0.6.11/unused_state.sol", @@ -248,7 +248,7 @@ "filename_short": "tests/detectors/unused-state/0.6.11/unused_state.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, "ending_column": 20 @@ -304,10 +304,10 @@ } } ], - "description": "A.unused4 (tests/detectors/unused-state/0.6.11/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.6.11/unused_state.sol#11-16)\n", - "markdown": "[A.unused4](tests/detectors/unused-state/0.6.11/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.6.11/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.6.11/unused_state.sol#L7", - "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", + "description": "A.unused3 (tests/detectors/unused-state/0.6.11/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.6.11/unused_state.sol#11-16)\n", + "markdown": "[A.unused3](tests/detectors/unused-state/0.6.11/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.6.11/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.6.11/unused_state.sol#L6", + "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", "check": "unused-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/unused-state/0.7.6/unused_state.sol.0.7.6.UnusedStateVars.json b/tests/detectors/unused-state/0.7.6/unused_state.sol.0.7.6.UnusedStateVars.json index 7bf0db31b..363f2de1e 100644 --- a/tests/detectors/unused-state/0.7.6/unused_state.sol.0.7.6.UnusedStateVars.json +++ b/tests/detectors/unused-state/0.7.6/unused_state.sol.0.7.6.UnusedStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 44, "length": 14, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -52,7 +52,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -82,17 +82,17 @@ "elements": [ { "type": "variable", - "name": "unused2", + "name": "unused4", "source_mapping": { - "start": 64, + "start": 106, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", "is_dependency": false, "lines": [ - 5 + 7 ], "starting_column": 5, "ending_column": 20 @@ -104,7 +104,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -130,7 +130,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -148,10 +148,10 @@ } } ], - "description": "A.unused2 (tests/detectors/unused-state/0.7.6/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.7.6/unused_state.sol#11-16)\n", - "markdown": "[A.unused2](tests/detectors/unused-state/0.7.6/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.7.6/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.7.6/unused_state.sol#L5", - "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", + "description": "A.unused4 (tests/detectors/unused-state/0.7.6/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.7.6/unused_state.sol#11-16)\n", + "markdown": "[A.unused4](tests/detectors/unused-state/0.7.6/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.7.6/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.7.6/unused_state.sol#L7", + "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -160,17 +160,17 @@ "elements": [ { "type": "variable", - "name": "unused3", + "name": "unused2", "source_mapping": { - "start": 85, + "start": 64, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", "is_dependency": false, "lines": [ - 6 + 5 ], "starting_column": 5, "ending_column": 20 @@ -182,7 +182,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -208,7 +208,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -226,10 +226,10 @@ } } ], - "description": "A.unused3 (tests/detectors/unused-state/0.7.6/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.7.6/unused_state.sol#11-16)\n", - "markdown": "[A.unused3](tests/detectors/unused-state/0.7.6/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.7.6/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.7.6/unused_state.sol#L6", - "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", + "description": "A.unused2 (tests/detectors/unused-state/0.7.6/unused_state.sol#5) is never used in B (tests/detectors/unused-state/0.7.6/unused_state.sol#11-16)\n", + "markdown": "[A.unused2](tests/detectors/unused-state/0.7.6/unused_state.sol#L5) is never used in [B](tests/detectors/unused-state/0.7.6/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.7.6/unused_state.sol#L5", + "id": "886250d01813743573f3d311b742e0f818e0012ccbf8ad97738c029fd129d870", "check": "unused-state", "impact": "Informational", "confidence": "High" @@ -238,17 +238,17 @@ "elements": [ { "type": "variable", - "name": "unused4", + "name": "unused3", "source_mapping": { - "start": 106, + "start": 85, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", "is_dependency": false, "lines": [ - 7 + 6 ], "starting_column": 5, "ending_column": 20 @@ -260,7 +260,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -286,7 +286,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.7.6/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.7.6/unused_state.sol", @@ -304,10 +304,10 @@ } } ], - "description": "A.unused4 (tests/detectors/unused-state/0.7.6/unused_state.sol#7) is never used in B (tests/detectors/unused-state/0.7.6/unused_state.sol#11-16)\n", - "markdown": "[A.unused4](tests/detectors/unused-state/0.7.6/unused_state.sol#L7) is never used in [B](tests/detectors/unused-state/0.7.6/unused_state.sol#L11-L16)\n", - "first_markdown_element": "tests/detectors/unused-state/0.7.6/unused_state.sol#L7", - "id": "562d3e6a04f6f6068c3e4f0c074ecdbcff87929e43ec6fbeb6c088e715f63cf2", + "description": "A.unused3 (tests/detectors/unused-state/0.7.6/unused_state.sol#6) is never used in B (tests/detectors/unused-state/0.7.6/unused_state.sol#11-16)\n", + "markdown": "[A.unused3](tests/detectors/unused-state/0.7.6/unused_state.sol#L6) is never used in [B](tests/detectors/unused-state/0.7.6/unused_state.sol#L11-L16)\n", + "first_markdown_element": "tests/detectors/unused-state/0.7.6/unused_state.sol#L6", + "id": "e2ac51590509d97ff791ce50d9a711fc5ad01c20d23eacf6fb31939bd91b9f48", "check": "unused-state", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json b/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json index baa4240bc..217499938 100644 --- a/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json +++ b/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json @@ -4,20 +4,20 @@ "elements": [ { "type": "variable", - "name": "x", + "name": "i", "source_mapping": { - "start": 130, - "length": 10, + "start": 199, + "length": 11, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "is_dependency": false, "lines": [ - 5 + 8 ], - "starting_column": 9, - "ending_column": 19 + "starting_column": 18, + "ending_column": 29 }, "type_specific_fields": { "parent": { @@ -168,20 +168,20 @@ }, { "type": "node", - "name": "y = x + 9 + z", + "name": "i --", "source_mapping": { - "start": 69, - "length": 13, + "start": 417, + "length": 3, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "is_dependency": false, "lines": [ - 4 + 14 ], - "starting_column": 9, - "ending_column": 22 + "starting_column": 29, + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -259,10 +259,10 @@ } } ], - "description": "Variable 'C.f(uint256).x (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#5)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: y = x + 9 + z (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#4)\n", - "markdown": "Variable '[C.f(uint256).x](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L5)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [y = x + 9 + z](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L4)\n", - "first_markdown_element": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L5", - "id": "ede1e902fdfe70c5e7cf91f33df8540f1d15952d00f70a9a5dfb9edbcbe49cb6", + "description": "Variable 'C.f(uint256).i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#8)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: i -- (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#14)\n", + "markdown": "Variable '[C.f(uint256).i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [i --](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L14)\n", + "first_markdown_element": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8", + "id": "24ed055a29ee9bac066b9a99a36d40f7bd77314605d8f1a6440a5576a38b24fb", "check": "variable-scope", "impact": "Low", "confidence": "High" @@ -702,20 +702,20 @@ }, { "type": "node", - "name": "i > 0", + "name": "x += i", "source_mapping": { - "start": 410, - "length": 5, + "start": 436, + "length": 6, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "is_dependency": false, "lines": [ - 14 + 15 ], - "starting_column": 22, - "ending_column": 27 + "starting_column": 13, + "ending_column": 19 }, "type_specific_fields": { "parent": { @@ -793,10 +793,10 @@ } } ], - "description": "Variable 'C.f(uint256).i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#8)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: i > 0 (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#14)\n", - "markdown": "Variable '[C.f(uint256).i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [i > 0](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L14)\n", + "description": "Variable 'C.f(uint256).i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#8)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: x += i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#15)\n", + "markdown": "Variable '[C.f(uint256).i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [x += i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L15)\n", "first_markdown_element": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8", - "id": "ffb778e86e0b11beed38687c3abf9ffd0de948ec4ccc0109a78954741220de9e", + "id": "e346a217ae6931f9fa7ff70302d05db17c0422dd4272f87935b633950239b592", "check": "variable-scope", "impact": "Low", "confidence": "High" @@ -805,20 +805,20 @@ "elements": [ { "type": "variable", - "name": "i", + "name": "x", "source_mapping": { - "start": 199, - "length": 11, + "start": 130, + "length": 10, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "is_dependency": false, "lines": [ - 8 + 5 ], - "starting_column": 18, - "ending_column": 29 + "starting_column": 9, + "ending_column": 19 }, "type_specific_fields": { "parent": { @@ -969,20 +969,20 @@ }, { "type": "node", - "name": "x += i", + "name": "y = x + 9 + z", "source_mapping": { - "start": 436, - "length": 6, + "start": 69, + "length": 13, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "is_dependency": false, "lines": [ - 15 + 4 ], - "starting_column": 13, - "ending_column": 19 + "starting_column": 9, + "ending_column": 22 }, "type_specific_fields": { "parent": { @@ -1060,10 +1060,10 @@ } } ], - "description": "Variable 'C.f(uint256).i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#8)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: x += i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#15)\n", - "markdown": "Variable '[C.f(uint256).i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [x += i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L15)\n", - "first_markdown_element": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8", - "id": "e346a217ae6931f9fa7ff70302d05db17c0422dd4272f87935b633950239b592", + "description": "Variable 'C.f(uint256).x (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#5)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: y = x + 9 + z (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#4)\n", + "markdown": "Variable '[C.f(uint256).x](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L5)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [y = x + 9 + z](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L4)\n", + "first_markdown_element": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L5", + "id": "ede1e902fdfe70c5e7cf91f33df8540f1d15952d00f70a9a5dfb9edbcbe49cb6", "check": "variable-scope", "impact": "Low", "confidence": "High" @@ -1236,10 +1236,10 @@ }, { "type": "node", - "name": "i --", + "name": "i > 0", "source_mapping": { - "start": 417, - "length": 3, + "start": 410, + "length": 5, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", @@ -1248,8 +1248,8 @@ "lines": [ 14 ], - "starting_column": 29, - "ending_column": 32 + "starting_column": 22, + "ending_column": 27 }, "type_specific_fields": { "parent": { @@ -1327,10 +1327,10 @@ } } ], - "description": "Variable 'C.f(uint256).i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#8)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: i -- (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#14)\n", - "markdown": "Variable '[C.f(uint256).i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [i --](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L14)\n", + "description": "Variable 'C.f(uint256).i (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#8)' in C.f(uint256) (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#2-17) potentially used before declaration: i > 0 (tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#14)\n", + "markdown": "Variable '[C.f(uint256).i](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8)' in [C.f(uint256)](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L2-L17) potentially used before declaration: [i > 0](tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L14)\n", "first_markdown_element": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol#L8", - "id": "24ed055a29ee9bac066b9a99a36d40f7bd77314605d8f1a6440a5576a38b24fb", + "id": "ffb778e86e0b11beed38687c3abf9ffd0de948ec4ccc0109a78954741220de9e", "check": "variable-scope", "impact": "Low", "confidence": "High" diff --git a/tests/detectors/void-cst/0.5.16/void-cst.sol.0.5.16.VoidConstructor.json b/tests/detectors/void-cst/0.5.16/void-cst.sol.0.5.16.VoidConstructor.json index c6e5c8f95..ad323d548 100644 --- a/tests/detectors/void-cst/0.5.16/void-cst.sol.0.5.16.VoidConstructor.json +++ b/tests/detectors/void-cst/0.5.16/void-cst.sol.0.5.16.VoidConstructor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 41, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.5.16/void-cst.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 19, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.5.16/void-cst.sol", @@ -55,7 +55,7 @@ "source_mapping": { "start": 62, "length": 3, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.5.16/void-cst.sol", @@ -73,7 +73,7 @@ "source_mapping": { "start": 41, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.5.16/void-cst.sol", @@ -93,7 +93,7 @@ "source_mapping": { "start": 19, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.5.16/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.5.16/void-cst.sol", diff --git a/tests/detectors/void-cst/0.7.6/void-cst.sol.0.7.6.VoidConstructor.json b/tests/detectors/void-cst/0.7.6/void-cst.sol.0.7.6.VoidConstructor.json index 0288f25da..ecd5a999e 100644 --- a/tests/detectors/void-cst/0.7.6/void-cst.sol.0.7.6.VoidConstructor.json +++ b/tests/detectors/void-cst/0.7.6/void-cst.sol.0.7.6.VoidConstructor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 41, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.7.6/void-cst.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 19, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.7.6/void-cst.sol", @@ -55,7 +55,7 @@ "source_mapping": { "start": 62, "length": 3, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.7.6/void-cst.sol", @@ -73,7 +73,7 @@ "source_mapping": { "start": 41, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.7.6/void-cst.sol", @@ -93,7 +93,7 @@ "source_mapping": { "start": 19, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.7.6/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.7.6/void-cst.sol", diff --git a/tests/detectors/weak-prng/0.4.25/bad_prng.sol.0.4.25.BadPRNG.json b/tests/detectors/weak-prng/0.4.25/bad_prng.sol.0.4.25.BadPRNG.json index c1cb5e048..8c52d0c74 100644 --- a/tests/detectors/weak-prng/0.4.25/bad_prng.sol.0.4.25.BadPRNG.json +++ b/tests/detectors/weak-prng/0.4.25/bad_prng.sol.0.4.25.BadPRNG.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 45, - "length": 68, - "filename_used": "/GENERIC_PATH", + "start": 184, + "length": 78, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 12, + 13, + 14 ], "starting_column": 5, "ending_column": 6 @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -66,42 +66,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } }, { "type": "node", - "name": "i = block.timestamp % 10", + "name": "i = uint256(blockhash(uint256)(10000)) % 10", "source_mapping": { - "start": 77, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 216, + "length": 39, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 5 + 13 ], "starting_column": 7, - "ending_column": 36 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 45, - "length": 68, - "filename_used": "/GENERIC_PATH", + "start": 184, + "length": 78, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 12, + 13, + 14 ], "starting_column": 5, "ending_column": 6 @@ -113,7 +113,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -151,16 +151,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } } } } ], - "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#5)\" \n", - "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L5)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L4-L6", - "id": "fc717c512384a74aab058df35c032bca15e276f4e03446ad7b52f33acac1a556", + "description": "BadPRNG.bad2() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#12-14) uses a weak PRNG: \"i = uint256(blockhash(uint256)(10000)) % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#13)\" \n", + "markdown": "[BadPRNG.bad2()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L12-L14) uses a weak PRNG: \"[i = uint256(blockhash(uint256)(10000)) % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L13)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L12-L14", + "id": "4ac936f85dc1e903d3d6688aaea992d3a5b124bb90eb73eb372dffcc60ccd9dc", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -169,19 +169,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad3", "source_mapping": { - "start": 122, - "length": 56, - "filename_used": "/GENERIC_PATH", + "start": 363, + "length": 58, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -193,7 +193,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -231,42 +231,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad3()" } }, { "type": "node", - "name": "i = now % 10", + "name": "i = foo() % 10", "source_mapping": { - "start": 154, - "length": 17, - "filename_used": "/GENERIC_PATH", + "start": 395, + "length": 19, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 9 + 21 ], "starting_column": 7, - "ending_column": 24 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad3", "source_mapping": { - "start": 122, - "length": 56, - "filename_used": "/GENERIC_PATH", + "start": 363, + "length": 58, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -278,7 +278,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -316,16 +316,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad3()" } } } } ], - "description": "BadPRNG.bad1() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#8-10) uses a weak PRNG: \"i = now % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#9)\" \n", - "markdown": "[BadPRNG.bad1()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L8-L10) uses a weak PRNG: \"[i = now % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L9)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L8-L10", - "id": "b6c45323a90c31dea54db817de9a3d13e40431227ca6240465e43183004f6541", + "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#21)\" \n", + "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L21)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L20-L22", + "id": "9ea8ea8faa26193b33dc2b3be5a338350aa82a076a4b5ec387ad8f5c15b7181f", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -334,19 +334,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 184, - "length": 78, - "filename_used": "/GENERIC_PATH", + "start": 122, + "length": 56, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14 + 8, + 9, + 10 ], "starting_column": 5, "ending_column": 6 @@ -358,7 +358,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -396,42 +396,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } }, { "type": "node", - "name": "i = uint256(blockhash(uint256)(10000)) % 10", + "name": "i = now % 10", "source_mapping": { - "start": 216, - "length": 39, - "filename_used": "/GENERIC_PATH", + "start": 154, + "length": 17, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 13 + 9 ], "starting_column": 7, - "ending_column": 46 + "ending_column": 24 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad1", "source_mapping": { - "start": 184, - "length": 78, - "filename_used": "/GENERIC_PATH", + "start": 122, + "length": 56, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14 + 8, + 9, + 10 ], "starting_column": 5, "ending_column": 6 @@ -443,7 +443,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -481,16 +481,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad1()" } } } } ], - "description": "BadPRNG.bad2() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#12-14) uses a weak PRNG: \"i = uint256(blockhash(uint256)(10000)) % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#13)\" \n", - "markdown": "[BadPRNG.bad2()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L12-L14) uses a weak PRNG: \"[i = uint256(blockhash(uint256)(10000)) % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L13)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L12-L14", - "id": "4ac936f85dc1e903d3d6688aaea992d3a5b124bb90eb73eb372dffcc60ccd9dc", + "description": "BadPRNG.bad1() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#8-10) uses a weak PRNG: \"i = now % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#9)\" \n", + "markdown": "[BadPRNG.bad1()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L8-L10) uses a weak PRNG: \"[i = now % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L9)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L8-L10", + "id": "b6c45323a90c31dea54db817de9a3d13e40431227ca6240465e43183004f6541", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -499,19 +499,19 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad0", "source_mapping": { - "start": 363, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 45, + "length": 68, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -523,7 +523,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -561,42 +561,42 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad0()" } }, { "type": "node", - "name": "i = foo() % 10", + "name": "i = block.timestamp % 10", "source_mapping": { - "start": 395, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 29, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 21 + 5 ], "starting_column": 7, - "ending_column": 26 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad0", "source_mapping": { - "start": 363, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 45, + "length": 68, + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -608,7 +608,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.4.25/bad_prng.sol", @@ -646,16 +646,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad0()" } } } } ], - "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#21)\" \n", - "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L21)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L20-L22", - "id": "9ea8ea8faa26193b33dc2b3be5a338350aa82a076a4b5ec387ad8f5c15b7181f", + "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.4.25/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.4.25/bad_prng.sol#5)\" \n", + "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.4.25/bad_prng.sol#L5)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.4.25/bad_prng.sol#L4-L6", + "id": "fc717c512384a74aab058df35c032bca15e276f4e03446ad7b52f33acac1a556", "check": "weak-prng", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json b/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json index 06344769b..83e527ab7 100644 --- a/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json +++ b/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad3", "source_mapping": { - "start": 45, - "length": 68, + "start": 363, + "length": 58, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -66,42 +66,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad3()" } }, { "type": "node", - "name": "i = block.timestamp % 10", + "name": "i = foo() % 10", "source_mapping": { - "start": 77, - "length": 29, + "start": 395, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 5 + 21 ], "starting_column": 7, - "ending_column": 36 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad3", "source_mapping": { - "start": 45, - "length": 68, + "start": 363, + "length": 58, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -151,16 +151,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad3()" } } } } ], - "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#5)\" \n", - "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L5)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L4-L6", - "id": "5bb9fd5cdaccfeb6303fb8ea676c6aed0164ba2ce3fc8b5c2778cd280afe61b0", + "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#21)\" \n", + "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L21)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L20-L22", + "id": "342f1496b7a91c084d108fd76054672be5ac3a1a5481f907b93d3c72e32f70dc", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -169,19 +169,19 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 122, - "length": 56, + "start": 184, + "length": 78, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10 + 12, + 13, + 14 ], "starting_column": 5, "ending_column": 6 @@ -231,42 +231,42 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad2()" } }, { "type": "node", - "name": "i = now % 10", + "name": "i = uint256(blockhash(uint256)(10000)) % 10", "source_mapping": { - "start": 154, - "length": 17, + "start": 216, + "length": 39, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 9 + 13 ], "starting_column": 7, - "ending_column": 24 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad2", "source_mapping": { - "start": 122, - "length": 56, + "start": 184, + "length": 78, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10 + 12, + 13, + 14 ], "starting_column": 5, "ending_column": 6 @@ -316,16 +316,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad2()" } } } } ], - "description": "BadPRNG.bad1() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#8-10) uses a weak PRNG: \"i = now % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#9)\" \n", - "markdown": "[BadPRNG.bad1()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L8-L10) uses a weak PRNG: \"[i = now % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L9)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L8-L10", - "id": "963866d884f65c4552ae10288cc1f92de1050f5f6254d4d2df132c7fbb7ce773", + "description": "BadPRNG.bad2() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#12-14) uses a weak PRNG: \"i = uint256(blockhash(uint256)(10000)) % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#13)\" \n", + "markdown": "[BadPRNG.bad2()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L12-L14) uses a weak PRNG: \"[i = uint256(blockhash(uint256)(10000)) % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L13)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L12-L14", + "id": "4769d2b25e78345ad05fa046a989f5f5545739c20e8c2b93c2968cdca69a5501", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -334,19 +334,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 184, - "length": 78, + "start": 45, + "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -396,42 +396,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } }, { "type": "node", - "name": "i = uint256(blockhash(uint256)(10000)) % 10", + "name": "i = block.timestamp % 10", "source_mapping": { - "start": 216, - "length": 39, + "start": 77, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 13 + 5 ], "starting_column": 7, - "ending_column": 46 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad0", "source_mapping": { - "start": 184, - "length": 78, + "start": 45, + "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -481,16 +481,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad0()" } } } } ], - "description": "BadPRNG.bad2() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#12-14) uses a weak PRNG: \"i = uint256(blockhash(uint256)(10000)) % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#13)\" \n", - "markdown": "[BadPRNG.bad2()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L12-L14) uses a weak PRNG: \"[i = uint256(blockhash(uint256)(10000)) % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L13)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L12-L14", - "id": "4769d2b25e78345ad05fa046a989f5f5545739c20e8c2b93c2968cdca69a5501", + "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#5)\" \n", + "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L5)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L4-L6", + "id": "5bb9fd5cdaccfeb6303fb8ea676c6aed0164ba2ce3fc8b5c2778cd280afe61b0", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -499,19 +499,19 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad1", "source_mapping": { - "start": 363, - "length": 58, + "start": 122, + "length": 56, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 8, + 9, + 10 ], "starting_column": 5, "ending_column": 6 @@ -561,42 +561,42 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad1()" } }, { "type": "node", - "name": "i = foo() % 10", + "name": "i = now % 10", "source_mapping": { - "start": 395, - "length": 19, + "start": 154, + "length": 17, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 21 + 9 ], "starting_column": 7, - "ending_column": 26 + "ending_column": 24 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad1", "source_mapping": { - "start": 363, - "length": 58, + "start": 122, + "length": 56, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 8, + 9, + 10 ], "starting_column": 5, "ending_column": 6 @@ -646,16 +646,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad1()" } } } } ], - "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#21)\" \n", - "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L21)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L20-L22", - "id": "342f1496b7a91c084d108fd76054672be5ac3a1a5481f907b93d3c72e32f70dc", + "description": "BadPRNG.bad1() (tests/detectors/weak-prng/0.5.16/bad_prng.sol#8-10) uses a weak PRNG: \"i = now % 10 (tests/detectors/weak-prng/0.5.16/bad_prng.sol#9)\" \n", + "markdown": "[BadPRNG.bad1()](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L8-L10) uses a weak PRNG: \"[i = now % 10](tests/detectors/weak-prng/0.5.16/bad_prng.sol#L9)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.5.16/bad_prng.sol#L8-L10", + "id": "963866d884f65c4552ae10288cc1f92de1050f5f6254d4d2df132c7fbb7ce773", "check": "weak-prng", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json b/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json index acf094666..82c01c822 100644 --- a/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json +++ b/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad3", "source_mapping": { - "start": 45, - "length": 68, - "filename_used": "/GENERIC_PATH", + "start": 363, + "length": 58, + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -66,42 +66,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad3()" } }, { "type": "node", - "name": "i = block.timestamp % 10", + "name": "i = foo() % 10", "source_mapping": { - "start": 77, - "length": 29, - "filename_used": "/GENERIC_PATH", + "start": 395, + "length": 19, + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "is_dependency": false, "lines": [ - 5 + 21 ], "starting_column": 7, - "ending_column": 36 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad3", "source_mapping": { - "start": 45, - "length": 68, - "filename_used": "/GENERIC_PATH", + "start": 363, + "length": 58, + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -113,7 +113,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -151,16 +151,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad3()" } } } } ], - "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.6.11/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.6.11/bad_prng.sol#5)\" \n", - "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L5)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.6.11/bad_prng.sol#L4-L6", - "id": "bfdb804ad9a58c4a694182e0f4dff561ffe37a0680f850763136ac57af57cea6", + "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.6.11/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.6.11/bad_prng.sol#21)\" \n", + "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L21)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.6.11/bad_prng.sol#L20-L22", + "id": "211bbc7b73c90c6ae03f3e73c2b306c74699381229a4af6d4687891b024f2189", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -173,7 +173,7 @@ "source_mapping": { "start": 122, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -193,7 +193,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -240,7 +240,7 @@ "source_mapping": { "start": 154, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -258,7 +258,7 @@ "source_mapping": { "start": 122, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -278,7 +278,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -338,7 +338,7 @@ "source_mapping": { "start": 184, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -358,7 +358,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -405,7 +405,7 @@ "source_mapping": { "start": 216, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -423,7 +423,7 @@ "source_mapping": { "start": 184, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -443,7 +443,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -499,19 +499,19 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad0", "source_mapping": { - "start": 363, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 45, + "length": 68, + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -523,7 +523,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -561,42 +561,42 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad0()" } }, { "type": "node", - "name": "i = foo() % 10", + "name": "i = block.timestamp % 10", "source_mapping": { - "start": 395, - "length": 19, - "filename_used": "/GENERIC_PATH", + "start": 77, + "length": 29, + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "is_dependency": false, "lines": [ - 21 + 5 ], "starting_column": 7, - "ending_column": 26 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad0", "source_mapping": { - "start": 363, - "length": 58, - "filename_used": "/GENERIC_PATH", + "start": 45, + "length": 68, + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -608,7 +608,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -646,16 +646,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad0()" } } } } ], - "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.6.11/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.6.11/bad_prng.sol#21)\" \n", - "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L21)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.6.11/bad_prng.sol#L20-L22", - "id": "211bbc7b73c90c6ae03f3e73c2b306c74699381229a4af6d4687891b024f2189", + "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.6.11/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.6.11/bad_prng.sol#5)\" \n", + "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.6.11/bad_prng.sol#L5)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.6.11/bad_prng.sol#L4-L6", + "id": "bfdb804ad9a58c4a694182e0f4dff561ffe37a0680f850763136ac57af57cea6", "check": "weak-prng", "impact": "High", "confidence": "Medium" diff --git a/tests/detectors/weak-prng/0.7.6/bad_prng.sol.0.7.6.BadPRNG.json b/tests/detectors/weak-prng/0.7.6/bad_prng.sol.0.7.6.BadPRNG.json index 18a7add1c..3be19474d 100644 --- a/tests/detectors/weak-prng/0.7.6/bad_prng.sol.0.7.6.BadPRNG.json +++ b/tests/detectors/weak-prng/0.7.6/bad_prng.sol.0.7.6.BadPRNG.json @@ -4,19 +4,19 @@ "elements": [ { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 45, - "length": 68, + "start": 196, + "length": 78, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 12, + 13, + 14 ], "starting_column": 5, "ending_column": 6 @@ -66,42 +66,42 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } }, { "type": "node", - "name": "i = block.timestamp % 10", + "name": "i = uint256(blockhash(uint256)(10000)) % 10", "source_mapping": { - "start": 77, - "length": 29, + "start": 228, + "length": 39, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 5 + 13 ], "starting_column": 7, - "ending_column": 36 + "ending_column": 46 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad0", + "name": "bad2", "source_mapping": { - "start": 45, - "length": 68, + "start": 196, + "length": 78, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 4, - 5, - 6 + 12, + 13, + 14 ], "starting_column": 5, "ending_column": 6 @@ -151,16 +151,16 @@ "ending_column": 2 } }, - "signature": "bad0()" + "signature": "bad2()" } } } } ], - "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#5)\" \n", - "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L5)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L4-L6", - "id": "1699e708ab01560cde36ac92caaf0abd7c3de733431340f4719b1dfd3544a6ef", + "description": "BadPRNG.bad2() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#12-14) uses a weak PRNG: \"i = uint256(blockhash(uint256)(10000)) % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#13)\" \n", + "markdown": "[BadPRNG.bad2()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L12-L14) uses a weak PRNG: \"[i = uint256(blockhash(uint256)(10000)) % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L13)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L12-L14", + "id": "0afae786715bc7bc677a2525aec172999533a2bc1ee62d9b974c9f13a45755c6", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -169,9 +169,9 @@ "elements": [ { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 122, + "start": 45, "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", @@ -179,9 +179,9 @@ "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -231,14 +231,14 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } }, { "type": "node", "name": "i = block.timestamp % 10", "source_mapping": { - "start": 154, + "start": 77, "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", @@ -246,7 +246,7 @@ "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 9 + 5 ], "starting_column": 7, "ending_column": 36 @@ -254,9 +254,9 @@ "type_specific_fields": { "parent": { "type": "function", - "name": "bad1", + "name": "bad0", "source_mapping": { - "start": 122, + "start": 45, "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", @@ -264,9 +264,9 @@ "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 8, - 9, - 10 + 4, + 5, + 6 ], "starting_column": 5, "ending_column": 6 @@ -316,16 +316,16 @@ "ending_column": 2 } }, - "signature": "bad1()" + "signature": "bad0()" } } } } ], - "description": "BadPRNG.bad1() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#8-10) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#9)\" \n", - "markdown": "[BadPRNG.bad1()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L8-L10) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L9)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L8-L10", - "id": "e27e978d7016cb26d0d372e84c7f4e1bbd6e45af239e195823b3b138713430a6", + "description": "BadPRNG.bad0() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#4-6) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#5)\" \n", + "markdown": "[BadPRNG.bad0()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L4-L6) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L5)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L4-L6", + "id": "1699e708ab01560cde36ac92caaf0abd7c3de733431340f4719b1dfd3544a6ef", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -334,19 +334,19 @@ "elements": [ { "type": "function", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 196, - "length": 78, + "start": 375, + "length": 58, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -396,42 +396,42 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad3()" } }, { "type": "node", - "name": "i = uint256(blockhash(uint256)(10000)) % 10", + "name": "i = foo() % 10", "source_mapping": { - "start": 228, - "length": 39, + "start": 407, + "length": 19, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 13 + 21 ], "starting_column": 7, - "ending_column": 46 + "ending_column": 26 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad2", + "name": "bad3", "source_mapping": { - "start": 196, - "length": 78, + "start": 375, + "length": 58, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 12, - 13, - 14 + 20, + 21, + 22 ], "starting_column": 5, "ending_column": 6 @@ -481,16 +481,16 @@ "ending_column": 2 } }, - "signature": "bad2()" + "signature": "bad3()" } } } } ], - "description": "BadPRNG.bad2() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#12-14) uses a weak PRNG: \"i = uint256(blockhash(uint256)(10000)) % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#13)\" \n", - "markdown": "[BadPRNG.bad2()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L12-L14) uses a weak PRNG: \"[i = uint256(blockhash(uint256)(10000)) % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L13)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L12-L14", - "id": "0afae786715bc7bc677a2525aec172999533a2bc1ee62d9b974c9f13a45755c6", + "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#21)\" \n", + "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L21)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L20-L22", + "id": "b3e0dbd29c5e74eaae470dcfe1ff523c67da580b1ae0c07559c02ee67d9d4c86", "check": "weak-prng", "impact": "High", "confidence": "Medium" @@ -499,19 +499,19 @@ "elements": [ { "type": "function", - "name": "bad3", + "name": "bad1", "source_mapping": { - "start": 375, - "length": 58, + "start": 122, + "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 8, + 9, + 10 ], "starting_column": 5, "ending_column": 6 @@ -561,42 +561,42 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad1()" } }, { "type": "node", - "name": "i = foo() % 10", + "name": "i = block.timestamp % 10", "source_mapping": { - "start": 407, - "length": 19, + "start": 154, + "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 21 + 9 ], "starting_column": 7, - "ending_column": 26 + "ending_column": 36 }, "type_specific_fields": { "parent": { "type": "function", - "name": "bad3", + "name": "bad1", "source_mapping": { - "start": 375, - "length": 58, + "start": 122, + "length": 68, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.7.6/bad_prng.sol", "is_dependency": false, "lines": [ - 20, - 21, - 22 + 8, + 9, + 10 ], "starting_column": 5, "ending_column": 6 @@ -646,16 +646,16 @@ "ending_column": 2 } }, - "signature": "bad3()" + "signature": "bad1()" } } } } ], - "description": "BadPRNG.bad3() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#20-22) uses a weak PRNG: \"i = foo() % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#21)\" \n", - "markdown": "[BadPRNG.bad3()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L20-L22) uses a weak PRNG: \"[i = foo() % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L21)\" \n", - "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L20-L22", - "id": "b3e0dbd29c5e74eaae470dcfe1ff523c67da580b1ae0c07559c02ee67d9d4c86", + "description": "BadPRNG.bad1() (tests/detectors/weak-prng/0.7.6/bad_prng.sol#8-10) uses a weak PRNG: \"i = block.timestamp % 10 (tests/detectors/weak-prng/0.7.6/bad_prng.sol#9)\" \n", + "markdown": "[BadPRNG.bad1()](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L8-L10) uses a weak PRNG: \"[i = block.timestamp % 10](tests/detectors/weak-prng/0.7.6/bad_prng.sol#L9)\" \n", + "first_markdown_element": "tests/detectors/weak-prng/0.7.6/bad_prng.sol#L8-L10", + "id": "e27e978d7016cb26d0d372e84c7f4e1bbd6e45af239e195823b3b138713430a6", "check": "weak-prng", "impact": "High", "confidence": "Medium" diff --git a/tests/src_mapping/inheritance.sol b/tests/src_mapping/inheritance.sol new file mode 100644 index 000000000..4c3ff92ee --- /dev/null +++ b/tests/src_mapping/inheritance.sol @@ -0,0 +1,35 @@ +contract A{ + + function f() public virtual { + + } + + function test() public { + f(); + } + +} + +contract B is A{ + + function f() public override { + + } + +} + +contract C is A{ + + function f() public override { + + } + + function test2() public { + f(); + } + +} + +contract D is A{ + +} diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index a2950b0dd..5eedecd54 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -8,9 +8,9 @@ from distutils.version import StrictVersion from typing import List, Dict import pytest +from deepdiff import DeepDiff from crytic_compile import CryticCompile, save_to_zip from crytic_compile.utils.zip import load_from_zip -from deepdiff import DeepDiff from slither import Slither from slither.printers.guidance.echidna import Echidna diff --git a/tests/test_source_mapping.py b/tests/test_source_mapping.py new file mode 100644 index 000000000..3b0a13ff5 --- /dev/null +++ b/tests/test_source_mapping.py @@ -0,0 +1,83 @@ +from slither import Slither +from slither.core.declarations import Function + + +def test_source_mapping(): + slither = Slither("tests/src_mapping/inheritance.sol") + + # Check if A.f() is at the offset 27 + functions = slither.offset_to_objects("tests/src_mapping/inheritance.sol", 27) + print(functions) + assert len(functions) == 1 + function = functions.pop() + assert isinstance(function, Function) + assert function.canonical_name == "A.f()" + + # Only one definition for A.f() + assert { + (x.start, x.end) + for x in slither.offset_to_definitions("tests/src_mapping/inheritance.sol", 27) + } == {(26, 28)} + # Only one reference for A.f(), in A.test() + assert { + (x.start, x.end) + for x in slither.offset_to_references("tests/src_mapping/inheritance.sol", 27) + } == {(92, 93)} + # Only one implementation for A.f(), in A.test() + assert { + (x.start, x.end) + for x in slither.offset_to_implementations("tests/src_mapping/inheritance.sol", 27) + } == {(17, 53)} + + # Check if C.f() is at the offset 203 + functions = slither.offset_to_objects("tests/src_mapping/inheritance.sol", 203) + assert len(functions) == 1 + function = functions.pop() + assert isinstance(function, Function) + assert function.canonical_name == "C.f()" + + # Only one definition for C.f() + assert { + (x.start, x.end) + for x in slither.offset_to_definitions("tests/src_mapping/inheritance.sol", 203) + } == {(202, 204)} + # Two references for C.f(), in A.test() and C.test2() + assert { + (x.start, x.end) + for x in slither.offset_to_references("tests/src_mapping/inheritance.sol", 203) + } == {(270, 271), (92, 93)} + # Only one implementation for A.f(), in A.test() + assert { + (x.start, x.end) + for x in slither.offset_to_implementations("tests/src_mapping/inheritance.sol", 203) + } == {(193, 230)} + + # Offset 93 is the call to f() in A.test() + # This can lead to three differents functions, depending on the current contract's context + functions = slither.offset_to_objects("tests/src_mapping/inheritance.sol", 93) + print(functions) + assert len(functions) == 3 + for function in functions: + assert isinstance(function, Function) + assert function.canonical_name in ["A.f()", "B.f()", "C.f()"] + + # There are three definitions possible (in A, B or C) + assert { + (x.start, x.end) + for x in slither.offset_to_definitions("tests/src_mapping/inheritance.sol", 93) + } == {(26, 28), (202, 204), (138, 140)} + + # There are two references possible (in A.test() or C.test2() ) + assert { + (x.start, x.end) + for x in slither.offset_to_references("tests/src_mapping/inheritance.sol", 93) + } == {(92, 93), (270, 271)} + + # There are three implementations possible (in A, B or C) + assert { + (x.start, x.end) + for x in slither.offset_to_implementations("tests/src_mapping/inheritance.sol", 93) + } == {(17, 53), (193, 230), (129, 166)} + + +test_source_mapping() From f3e80902b4d23c4a80ba48db323ff418443c3bc3 Mon Sep 17 00:00:00 2001 From: Josselin Date: Wed, 23 Jun 2021 17:29:34 +0200 Subject: [PATCH 011/202] Minor --- .github/workflows/pytest.yml | 4 +- slither/printers/summary/declaration.py | 59 +++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 slither/printers/summary/declaration.py diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index d4a6ee2fe..185bcf325 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -1,5 +1,5 @@ --- -name: Parser tests +name: API tests defaults: run: @@ -29,7 +29,7 @@ jobs: - name: Install dependencies run: | - python setup.py inst + python setup.py install pip install pytest pip install solc-select solc-select install all diff --git a/slither/printers/summary/declaration.py b/slither/printers/summary/declaration.py new file mode 100644 index 000000000..fd664011a --- /dev/null +++ b/slither/printers/summary/declaration.py @@ -0,0 +1,59 @@ +from slither.printers.abstract_printer import AbstractPrinter +from slither.utils.source_mapping import get_definition, get_implementation, get_references + + +class Declaration(AbstractPrinter): + ARGUMENT = "decl" + HELP = "TODO" + + WIKI = "TODO" + + def output(self, _filename): + """ + _filename is not used + Args: + _filename(string) + """ + + txt = "" + for compilation_unit in self.slither.compilation_units: + txt += "\n# Contracts\n" + for contract in compilation_unit.contracts: + txt += f"# {contract.name}\n" + txt += f"\t- Declaration: {get_definition(contract, compilation_unit.core.crytic_compile).detailled_str()}\n" + txt += f"\t- Implementation: {get_implementation(contract).detailled_str()}\n" + txt += f"\t- References: {[x.detailled_str() for x in get_references(contract)]}\n" + + txt += "\n\t## Function\n" + + for func in contract.functions: + txt += f"\t\t- {func.canonical_name}\n" + txt += f"\t\t\t- Declaration: {get_definition(func, compilation_unit.core.crytic_compile).detailled_str()}\n" + txt += f"\t\t\t- Implementation: {get_implementation(func).detailled_str()}\n" + txt += ( + f"\t\t\t- References: {[x.detailled_str() for x in get_references(func)]}\n" + ) + + txt += "\n\t## State variables\n" + + for var in contract.state_variables: + txt += f"\t\t- {var.name}\n" + txt += f"\t\t\t- Declaration: {get_definition(var, compilation_unit.core.crytic_compile).detailled_str()}\n" + txt += f"\t\t\t- Implementation: {get_implementation(var).detailled_str()}\n" + txt += ( + f"\t\t\t- References: {[x.detailled_str() for x in get_references(var)]}\n" + ) + + txt += "\n\t## Structures\n" + + for st in contract.structures: + txt += f"\t\t- {st.name}\n" + txt += f"\t\t\t- Declaration: {get_definition(st, compilation_unit.core.crytic_compile).detailled_str()}\n" + txt += f"\t\t\t- Implementation: {get_implementation(st).detailled_str()}\n" + txt += ( + f"\t\t\t- References: {[x.detailled_str() for x in get_references(st)]}\n" + ) + + self.info(txt) + res = self.generate_output(txt) + return res From 58ae66abc3866a911002fc2523ba8f8d3cdabb5d Mon Sep 17 00:00:00 2001 From: Josselin Date: Wed, 23 Jun 2021 17:36:23 +0200 Subject: [PATCH 012/202] Update tests --- ...V2_array.sol.0.4.25.ABIEncoderV2Array.json | 60 ++-- ...bitrary_send.sol.0.5.16.ArbitrarySend.json | 20 +- ...bitrary_send.sol.0.6.11.ArbitrarySend.json | 20 +- ...rbitrary_send.sol.0.7.6.ArbitrarySend.json | 20 +- ...reference.sol.0.4.25.ArrayByReference.json | 76 ++--- ...reference.sol.0.6.11.ArrayByReference.json | 76 ++--- ..._reference.sol.0.7.6.ArrayByReference.json | 76 ++--- ...assembly_contract.sol.0.4.25.Assembly.json | 10 +- ..._assembly_library.sol.0.4.25.Assembly.json | 20 +- ...assembly_contract.sol.0.5.16.Assembly.json | 10 +- ..._assembly_contract.sol.0.7.6.Assembly.json | 10 +- ...e_assembly_library.sol.0.7.6.Assembly.json | 20 +- ...e_change.sol.0.6.11.AssertStateChange.json | 30 +- ...te_change.sol.0.7.6.AssertStateChange.json | 30 +- .../0.4.25/backdoor.sol.0.4.25.Backdoor.json | 4 +- .../0.5.16/backdoor.sol.0.5.16.Backdoor.json | 4 +- ...suse.sol.0.4.25.BooleanConstantMisuse.json | 10 +- ...isuse.sol.0.7.6.BooleanConstantMisuse.json | 10 +- ...t-equality.sol.0.4.25.BooleanEquality.json | 10 +- ...t-equality.sol.0.6.11.BooleanEquality.json | 10 +- ...nt-equality.sol.0.7.6.BooleanEquality.json | 10 +- ...n_loop.sol.0.6.11.MultipleCallsInLoop.json | 10 +- ...es.sol.0.4.25.ConstCandidateStateVars.json | 24 +- ...es.sol.0.6.11.ConstCandidateStateVars.json | 24 +- ...les.sol.0.7.6.ConstCandidateStateVars.json | 24 +- ...stant.sol.0.4.25.ConstantFunctionsAsm.json | 4 +- ...all.sol.0.4.25.ControlledDelegateCall.json | 20 +- ...all.sol.0.6.11.ControlledDelegateCall.json | 20 +- ...call.sol.0.7.6.ControlledDelegateCall.json | 20 +- ...oop.sol.0.4.25.CostlyOperationsInLoop.json | 10 +- ...l.0.7.6.UnindexedERC20EventParameters.json | 16 +- ...4.25.IncorrectERC20InterfaceDetection.json | 36 +-- ...6.11.IncorrectERC20InterfaceDetection.json | 36 +-- ....7.6.IncorrectERC20InterfaceDetection.json | 36 +-- ....16.IncorrectERC721InterfaceDetection.json | 60 ++-- ....11.IncorrectERC721InterfaceDetection.json | 60 ++-- ...7.6.IncorrectERC721InterfaceDetection.json | 60 ++-- ...sol.0.6.11.MissingEventsAccessControl.json | 30 +- ..._function.sol.0.5.16.ExternalFunction.json | 20 +- ..._function.sol.0.6.11.ExternalFunction.json | 20 +- ...l_function.sol.0.7.6.ExternalFunction.json | 20 +- ...s.sol.0.4.25.FunctionInitializedState.json | 20 +- ...ity.sol.0.7.6.IncorrectStrictEquality.json | 120 ++++---- ...t.sol.0.4.25.ModifierDefaultDetection.json | 12 +- ...t.sol.0.5.16.ModifierDefaultDetection.json | 12 +- ...t.sol.0.6.11.ModifierDefaultDetection.json | 12 +- ...lt.sol.0.7.6.ModifierDefaultDetection.json | 12 +- .../locked_ether.sol.0.4.25.LockedEther.json | 6 +- .../locked_ether.sol.0.5.16.LockedEther.json | 6 +- .../locked_ether.sol.0.6.11.LockedEther.json | 6 +- ..._level_calls.sol.0.4.25.LowLevelCalls.json | 10 +- ..._level_calls.sol.0.6.11.LowLevelCalls.json | 10 +- ...n.sol.0.5.16.MappingDeletionDetection.json | 28 +- ...n.sol.0.6.11.MappingDeletionDetection.json | 28 +- ...on.sol.0.7.6.MappingDeletionDetection.json | 28 +- ...l.0.4.25.MissingZeroAddressValidation.json | 66 ++--- ...l.0.6.11.MissingZeroAddressValidation.json | 66 ++--- ...onvention.sol.0.5.16.NamingConvention.json | 50 ++-- ...onvention.sol.0.6.11.NamingConvention.json | 50 ++-- ...convention.sol.0.7.6.NamingConvention.json | 50 ++-- ...agma.0.4.25.sol.0.4.25.ConstantPragma.json | 4 +- ...pragma.0.7.6.sol.0.7.6.ConstantPragma.json | 4 +- ...nested.sol.0.4.25.PublicMappingNested.json | 4 +- ...ements.sol.0.4.25.RedundantStatements.json | 48 +-- ...ements.sol.0.5.16.RedundantStatements.json | 48 +-- ...ements.sol.0.6.11.RedundantStatements.json | 48 +-- ...ncy-benign.sol.0.7.6.ReentrancyBenign.json | 210 ++++++------- .../0.4.25/DAO.sol.0.4.25.ReentrancyEth.json | 110 +++---- .../reentrancy.sol.0.4.25.ReentrancyEth.json | 32 +- .../reentrancy.sol.0.6.11.ReentrancyEth.json | 32 +- ...ncy_indirect.sol.0.6.11.ReentrancyEth.json | 28 +- .../reentrancy.sol.0.7.6.ReentrancyEth.json | 32 +- ...ncy-events.sol.0.5.16.ReentrancyEvent.json | 16 +- ...ncy-events.sol.0.6.11.ReentrancyEvent.json | 16 +- ...ol.0.4.25.ReentrancyReadBeforeWritten.json | 276 +++++++++--------- ...ctor.sol.0.4.21.ReusedBaseConstructor.json | 60 ++-- ...sol.0.5.16.ShadowingAbstractDetection.json | 8 +- ...ols.sol.0.4.25.BuiltinSymbolShadowing.json | 58 ++-- ...ols.sol.0.5.16.BuiltinSymbolShadowing.json | 54 ++-- ...cal_variable.sol.0.7.6.LocalShadowing.json | 50 ++-- ...te_variable.sol.0.4.25.StateShadowing.json | 8 +- ...te_variable.sol.0.5.16.StateShadowing.json | 8 +- .../static.sol.0.4.25.IncorrectSolc.json | 2 +- .../dynamic_1.sol.0.5.16.IncorrectSolc.json | 2 +- .../dynamic_1.sol.0.6.11.IncorrectSolc.json | 2 +- .../dynamic_1.sol.0.7.6.IncorrectSolc.json | 2 +- .../0.4.25/suicidal.sol.0.4.25.Suicidal.json | 4 +- .../0.5.16/suicidal.sol.0.5.16.Suicidal.json | 4 +- .../timestamp.sol.0.4.25.Timestamp.json | 30 +- .../timestamp.sol.0.6.11.Timestamp.json | 30 +- .../0.7.6/timestamp.sol.0.7.6.Timestamp.json | 30 +- ..._many_digits.sol.0.6.11.TooManyDigits.json | 50 ++-- .../0.6.11/tx_origin.sol.0.6.11.TxOrigin.json | 20 +- ...lowlevel.sol.0.4.25.UncheckedLowLevel.json | 10 +- ...lowlevel.sol.0.5.16.UncheckedLowLevel.json | 10 +- ...lowlevel.sol.0.6.11.UncheckedLowLevel.json | 10 +- ..._lowlevel.sol.0.7.6.UncheckedLowLevel.json | 10 +- ...checked_send.sol.0.5.16.UncheckedSend.json | 10 +- ...nchecked_send.sol.0.7.6.UncheckedSend.json | 10 +- ...0.4.25.UnimplementedFunctionDetection.json | 28 +- ...0.6.11.UnimplementedFunctionDetection.json | 22 +- ....UninitializedFunctionPtrsConstructor.json | 32 +- ...ble.sol.0.5.16.UninitializedLocalVars.json | 6 +- ...ble.sol.0.6.11.UninitializedLocalVars.json | 6 +- ....4.25.UninitializedStateVarsDetection.json | 32 +- ....5.16.UninitializedStateVarsDetection.json | 32 +- ...r.sol.0.4.25.UninitializedStorageVars.json | 6 +- ...ggy.sol.0.5.16.UnprotectedUpgradeable.json | 10 +- ...ggy.sol.0.6.11.UnprotectedUpgradeable.json | 10 +- ...used_state.sol.0.4.25.UnusedStateVars.json | 24 +- ...l.sol.0.4.25.PredeclarationUsageLocal.json | 80 ++--- .../void-cst.sol.0.4.25.VoidConstructor.json | 10 +- .../0.5.16/bad_prng.sol.0.5.16.BadPRNG.json | 40 +-- .../0.6.11/bad_prng.sol.0.6.11.BadPRNG.json | 40 +-- ...after-write.sol.0.8.0.WriteAfterWrite.json | 52 ++-- 115 files changed, 1749 insertions(+), 1749 deletions(-) diff --git a/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json b/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json index f85f42876..9f63212d8 100644 --- a/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json +++ b/tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol.0.4.25.ABIEncoderV2Array.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 1076, "length": 154, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -145,7 +145,7 @@ "source_mapping": { "start": 1195, "length": 30, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -163,7 +163,7 @@ "source_mapping": { "start": 1076, "length": 154, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -183,7 +183,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -313,7 +313,7 @@ "source_mapping": { "start": 1296, "length": 148, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -333,7 +333,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -450,7 +450,7 @@ "source_mapping": { "start": 1415, "length": 24, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -468,7 +468,7 @@ "source_mapping": { "start": 1296, "length": 148, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -488,7 +488,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -618,7 +618,7 @@ "source_mapping": { "start": 540, "length": 61, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -638,7 +638,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -755,7 +755,7 @@ "source_mapping": { "start": 569, "length": 27, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -773,7 +773,7 @@ "source_mapping": { "start": 540, "length": 61, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -793,7 +793,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -923,7 +923,7 @@ "source_mapping": { "start": 726, "length": 63, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -943,7 +943,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1060,7 +1060,7 @@ "source_mapping": { "start": 763, "length": 21, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1078,7 +1078,7 @@ "source_mapping": { "start": 726, "length": 63, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1098,7 +1098,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1228,7 +1228,7 @@ "source_mapping": { "start": 852, "length": 160, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1248,7 +1248,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1365,7 +1365,7 @@ "source_mapping": { "start": 971, "length": 36, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1383,7 +1383,7 @@ "source_mapping": { "start": 852, "length": 160, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1403,7 +1403,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1533,7 +1533,7 @@ "source_mapping": { "start": 1511, "length": 142, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1553,7 +1553,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1670,7 +1670,7 @@ "source_mapping": { "start": 1630, "length": 18, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1688,7 +1688,7 @@ "source_mapping": { "start": 1511, "length": 142, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", @@ -1708,7 +1708,7 @@ "source_mapping": { "start": 35, "length": 2982, - "filename_used": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/abiencoderv2-array/0.4.25/storage_ABIEncoderV2_array.sol", diff --git a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json index 77f96c966..cfb1bcc13 100644 --- a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -89,7 +89,7 @@ "source_mapping": { "start": 196, "length": 38, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -107,7 +107,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -127,7 +127,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -201,7 +201,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -221,7 +221,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -282,7 +282,7 @@ "source_mapping": { "start": 352, "length": 39, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -300,7 +300,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", @@ -320,7 +320,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "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", diff --git a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json index b534ea0c3..cde2f95aa 100644 --- a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -89,7 +89,7 @@ "source_mapping": { "start": 196, "length": 38, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -107,7 +107,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -127,7 +127,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -201,7 +201,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -221,7 +221,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -282,7 +282,7 @@ "source_mapping": { "start": 352, "length": 39, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -300,7 +300,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", @@ -320,7 +320,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "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", diff --git a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json b/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json index 0f0fe4d57..2cb7b5c3f 100644 --- a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -89,7 +89,7 @@ "source_mapping": { "start": 352, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -107,7 +107,7 @@ "source_mapping": { "start": 316, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -127,7 +127,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -201,7 +201,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -221,7 +221,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -282,7 +282,7 @@ "source_mapping": { "start": 196, "length": 38, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -300,7 +300,7 @@ "source_mapping": { "start": 162, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", @@ -320,7 +320,7 @@ "source_mapping": { "start": 0, "length": 884, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", diff --git a/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json b/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json index 26dab9b12..88f06571b 100644 --- a/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.4.25/array_by_reference.sol.0.4.25.ArrayByReference.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 855, "length": 269, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 688, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 822, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 688, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 571, "length": 113, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -154,7 +154,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -214,7 +214,7 @@ "source_mapping": { "start": 855, "length": 269, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -238,7 +238,7 @@ "source_mapping": { "start": 688, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 822, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -298,7 +298,7 @@ "source_mapping": { "start": 688, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -339,7 +339,7 @@ "source_mapping": { "start": 498, "length": 67, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -359,7 +359,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -419,7 +419,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -441,7 +441,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -490,7 +490,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -508,7 +508,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -556,7 +556,7 @@ "source_mapping": { "start": 498, "length": 67, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -576,7 +576,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -636,7 +636,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -658,7 +658,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -707,7 +707,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -725,7 +725,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -773,7 +773,7 @@ "source_mapping": { "start": 571, "length": 113, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -794,7 +794,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -854,7 +854,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -877,7 +877,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -926,7 +926,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -944,7 +944,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -967,7 +967,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1018,7 +1018,7 @@ "source_mapping": { "start": 571, "length": 113, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1039,7 +1039,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1099,7 +1099,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1122,7 +1122,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1171,7 +1171,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1189,7 +1189,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1212,7 +1212,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1263,7 +1263,7 @@ "source_mapping": { "start": 498, "length": 67, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", @@ -1283,7 +1283,7 @@ "source_mapping": { "start": 0, "length": 686, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.4.25/array_by_reference.sol", diff --git a/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json b/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json index 20fdaf675..309946dfd 100644 --- a/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.6.11/array_by_reference.sol.0.6.11.ArrayByReference.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 869, "length": 269, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 836, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 578, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -154,7 +154,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -214,7 +214,7 @@ "source_mapping": { "start": 869, "length": 269, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -238,7 +238,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 836, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -298,7 +298,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -339,7 +339,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -359,7 +359,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -419,7 +419,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -441,7 +441,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -490,7 +490,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -508,7 +508,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -556,7 +556,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -576,7 +576,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -636,7 +636,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -658,7 +658,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -707,7 +707,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -725,7 +725,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -773,7 +773,7 @@ "source_mapping": { "start": 578, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -794,7 +794,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -854,7 +854,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -877,7 +877,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -926,7 +926,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -944,7 +944,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -967,7 +967,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1018,7 +1018,7 @@ "source_mapping": { "start": 578, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1039,7 +1039,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1099,7 +1099,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1122,7 +1122,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1171,7 +1171,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1189,7 +1189,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1212,7 +1212,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1263,7 +1263,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", @@ -1283,7 +1283,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_relative": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.6.11/array_by_reference.sol", diff --git a/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json b/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json index 72ad9e8cf..bbf6688b3 100644 --- a/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json +++ b/tests/detectors/array-by-reference/0.7.6/array_by_reference.sol.0.7.6.ArrayByReference.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 869, "length": 269, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 836, "length": 9, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 578, "length": 120, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -154,7 +154,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -214,7 +214,7 @@ "source_mapping": { "start": 869, "length": 269, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -238,7 +238,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 836, "length": 9, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -298,7 +298,7 @@ "source_mapping": { "start": 702, "length": 440, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -339,7 +339,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -359,7 +359,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -419,7 +419,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -441,7 +441,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -490,7 +490,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -508,7 +508,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -556,7 +556,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -576,7 +576,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -636,7 +636,7 @@ "source_mapping": { "start": 40, "length": 167, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -658,7 +658,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -707,7 +707,7 @@ "source_mapping": { "start": 17, "length": 16, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -725,7 +725,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -773,7 +773,7 @@ "source_mapping": { "start": 578, "length": 120, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -794,7 +794,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -854,7 +854,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -877,7 +877,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -926,7 +926,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -944,7 +944,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -967,7 +967,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1018,7 +1018,7 @@ "source_mapping": { "start": 578, "length": 120, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1039,7 +1039,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1099,7 +1099,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1122,7 +1122,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1171,7 +1171,7 @@ "source_mapping": { "start": 243, "length": 21, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1189,7 +1189,7 @@ "source_mapping": { "start": 213, "length": 198, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1212,7 +1212,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1263,7 +1263,7 @@ "source_mapping": { "start": 498, "length": 74, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", @@ -1283,7 +1283,7 @@ "source_mapping": { "start": 0, "length": 700, - "filename_used": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/array-by-reference/0.7.6/array_by_reference.sol", diff --git a/tests/detectors/assembly/0.4.25/inline_assembly_contract.sol.0.4.25.Assembly.json b/tests/detectors/assembly/0.4.25/inline_assembly_contract.sol.0.4.25.Assembly.json index 8d725d86b..438bb86bd 100644 --- a/tests/detectors/assembly/0.4.25/inline_assembly_contract.sol.0.4.25.Assembly.json +++ b/tests/detectors/assembly/0.4.25/inline_assembly_contract.sol.0.4.25.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 119, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", @@ -40,7 +40,7 @@ "source_mapping": { "start": 97, "length": 724, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 191, "length": 628, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 119, "length": 700, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", @@ -140,7 +140,7 @@ "source_mapping": { "start": 97, "length": 724, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_contract.sol", diff --git a/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json b/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json index f52b31623..60e9aa8e6 100644 --- a/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json +++ b/tests/detectors/assembly/0.4.25/inline_assembly_library.sol.0.4.25.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 593, "length": 247, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 720, "length": 114, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -117,7 +117,7 @@ "source_mapping": { "start": 593, "length": 247, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -218,7 +218,7 @@ "source_mapping": { "start": 923, "length": 754, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -258,7 +258,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 1000, "length": 677, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -361,7 +361,7 @@ "source_mapping": { "start": 923, "length": 754, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", @@ -401,7 +401,7 @@ "source_mapping": { "start": 98, "length": 1581, - "filename_used": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.4.25/inline_assembly_library.sol", diff --git a/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json b/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json index fd074b2a2..6f8367251 100644 --- a/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json +++ b/tests/detectors/assembly/0.5.16/inline_assembly_contract.sol.0.5.16.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 119, "length": 707, - "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -40,7 +40,7 @@ "source_mapping": { "start": 97, "length": 731, - "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 198, "length": 622, - "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -107,7 +107,7 @@ "source_mapping": { "start": 119, "length": 707, - "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", @@ -139,7 +139,7 @@ "source_mapping": { "start": 97, "length": 731, - "filename_used": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assembly/0.5.16/inline_assembly_contract.sol", diff --git a/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json b/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json index 2fb0835f7..fd697b12c 100644 --- a/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json +++ b/tests/detectors/assembly/0.7.6/inline_assembly_contract.sol.0.7.6.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 94, "length": 707, - "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", + "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", @@ -40,7 +40,7 @@ "source_mapping": { "start": 72, "length": 731, - "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", + "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", @@ -77,7 +77,7 @@ "source_mapping": { "start": 173, "length": 622, - "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", + "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", @@ -107,7 +107,7 @@ "source_mapping": { "start": 94, "length": 707, - "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", + "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", @@ -139,7 +139,7 @@ "source_mapping": { "start": 72, "length": 731, - "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_contract.sol", + "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", diff --git a/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json b/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json index be646d7e6..78bcc9547 100644 --- a/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json +++ b/tests/detectors/assembly/0.7.6/inline_assembly_library.sol.0.7.6.Assembly.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 911, "length": 761, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -48,7 +48,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -112,7 +112,7 @@ "source_mapping": { "start": 995, "length": 671, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -150,7 +150,7 @@ "source_mapping": { "start": 911, "length": 761, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -190,7 +190,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -267,7 +267,7 @@ "source_mapping": { "start": 574, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -291,7 +291,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -355,7 +355,7 @@ "source_mapping": { "start": 708, "length": 104, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -375,7 +375,7 @@ "source_mapping": { "start": 574, "length": 254, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", @@ -399,7 +399,7 @@ "source_mapping": { "start": 72, "length": 1602, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assembly/0.7.6/inline_assembly_library.sol", "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", diff --git a/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json b/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json index 3c1e476b2..b9f46b133 100644 --- a/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json +++ b/tests/detectors/assert-state-change/0.6.11/assert_state_change.sol.0.6.11.AssertStateChange.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 77, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -87,7 +87,7 @@ "source_mapping": { "start": 106, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -105,7 +105,7 @@ "source_mapping": { "start": 77, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -125,7 +125,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -197,7 +197,7 @@ "source_mapping": { "start": 398, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -217,7 +217,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -276,7 +276,7 @@ "source_mapping": { "start": 427, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -294,7 +294,7 @@ "source_mapping": { "start": 398, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -314,7 +314,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -386,7 +386,7 @@ "source_mapping": { "start": 186, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -406,7 +406,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -465,7 +465,7 @@ "source_mapping": { "start": 224, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -483,7 +483,7 @@ "source_mapping": { "start": 186, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", @@ -503,7 +503,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.6.11/assert_state_change.sol", "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", diff --git a/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json b/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json index 98f36c0cd..a82160b58 100644 --- a/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json +++ b/tests/detectors/assert-state-change/0.7.6/assert_state_change.sol.0.7.6.AssertStateChange.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 398, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -87,7 +87,7 @@ "source_mapping": { "start": 427, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -105,7 +105,7 @@ "source_mapping": { "start": 398, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -125,7 +125,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -197,7 +197,7 @@ "source_mapping": { "start": 186, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -217,7 +217,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -276,7 +276,7 @@ "source_mapping": { "start": 224, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -294,7 +294,7 @@ "source_mapping": { "start": 186, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -314,7 +314,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -386,7 +386,7 @@ "source_mapping": { "start": 77, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -406,7 +406,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -465,7 +465,7 @@ "source_mapping": { "start": 106, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -483,7 +483,7 @@ "source_mapping": { "start": 77, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", @@ -503,7 +503,7 @@ "source_mapping": { "start": 0, "length": 759, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_relative": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/assert-state-change/0.7.6/assert_state_change.sol", diff --git a/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json b/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json index a3f46672d..95c5aed84 100644 --- a/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json +++ b/tests/detectors/backdoor/0.4.25/backdoor.sol.0.4.25.Backdoor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "tests/detectors/backdoor/0.4.25/backdoor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/backdoor/0.4.25/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.4.25/backdoor.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "tests/detectors/backdoor/0.4.25/backdoor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/backdoor/0.4.25/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.4.25/backdoor.sol", diff --git a/tests/detectors/backdoor/0.5.16/backdoor.sol.0.5.16.Backdoor.json b/tests/detectors/backdoor/0.5.16/backdoor.sol.0.5.16.Backdoor.json index 472b893c3..c0faaffb7 100644 --- a/tests/detectors/backdoor/0.5.16/backdoor.sol.0.5.16.Backdoor.json +++ b/tests/detectors/backdoor/0.5.16/backdoor.sol.0.5.16.Backdoor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/backdoor/0.5.16/backdoor.sol", "filename_relative": "tests/detectors/backdoor/0.5.16/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.5.16/backdoor.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/backdoor/0.5.16/backdoor.sol", "filename_relative": "tests/detectors/backdoor/0.5.16/backdoor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/backdoor/0.5.16/backdoor.sol", diff --git a/tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol.0.4.25.BooleanConstantMisuse.json b/tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol.0.4.25.BooleanConstantMisuse.json index 32bf74925..def1fc492 100644 --- a/tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol.0.4.25.BooleanConstantMisuse.json +++ b/tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol.0.4.25.BooleanConstantMisuse.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 923, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 221, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 162, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 0, "length": 923, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_relative": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.4.25/boolean-constant-misuse.sol", diff --git a/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json b/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json index c6b6305b4..579486229 100644 --- a/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json +++ b/tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol.0.7.6.BooleanConstantMisuse.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 162, "length": 84, - "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 923, - "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 221, "length": 18, - "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 162, "length": 84, - "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 0, "length": 923, - "filename_used": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-cst/0.7.6/boolean-constant-misuse.sol", diff --git a/tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol.0.4.25.BooleanEquality.json b/tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol.0.4.25.BooleanEquality.json index 350f4d9d0..08df1af28 100644 --- a/tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol.0.4.25.BooleanEquality.json +++ b/tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol.0.4.25.BooleanEquality.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 198, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", @@ -94,7 +94,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", @@ -114,7 +114,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.4.25/boolean-constant-equality.sol", diff --git a/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json b/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json index e74b3efd7..51d66946a 100644 --- a/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json +++ b/tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol.0.6.11.BooleanEquality.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 198, "length": 18, - "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -94,7 +94,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", @@ -114,7 +114,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.6.11/boolean-constant-equality.sol", diff --git a/tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol.0.7.6.BooleanEquality.json b/tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol.0.7.6.BooleanEquality.json index 22041adaa..3d1e9358c 100644 --- a/tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol.0.7.6.BooleanEquality.json +++ b/tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol.0.7.6.BooleanEquality.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 198, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", @@ -94,7 +94,7 @@ "source_mapping": { "start": 139, "length": 84, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", @@ -114,7 +114,7 @@ "source_mapping": { "start": 0, "length": 578, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_relative": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/boolean-equal/0.7.6/boolean-constant-equality.sol", diff --git a/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json b/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json index d84cc743f..4e078cabd 100644 --- a/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json +++ b/tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol.0.6.11.MultipleCallsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 160, "length": 153, - "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", + "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", @@ -30,7 +30,7 @@ "source_mapping": { "start": 0, "length": 316, - "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", + "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", @@ -65,7 +65,7 @@ "source_mapping": { "start": 251, "length": 45, - "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", + "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", @@ -83,7 +83,7 @@ "source_mapping": { "start": 160, "length": 153, - "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", + "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", @@ -105,7 +105,7 @@ "source_mapping": { "start": 0, "length": 316, - "filename_used": "tests/detectors/calls-loop/0.6.11/multiple_calls_in_loop.sol", + "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", diff --git a/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json index 8f6ef570b..08a1efb40 100644 --- a/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.4.25/const_state_variables.sol.0.4.25.ConstCandidateStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 132, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 237, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -140,7 +140,7 @@ "source_mapping": { "start": 841, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -158,7 +158,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -202,7 +202,7 @@ "source_mapping": { "start": 496, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -220,7 +220,7 @@ "source_mapping": { "start": 473, "length": 271, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -264,7 +264,7 @@ "source_mapping": { "start": 793, "length": 42, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -282,7 +282,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -326,7 +326,7 @@ "source_mapping": { "start": 333, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", @@ -344,7 +344,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_relative": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.4.25/const_state_variables.sol", diff --git a/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json index 8caff3fd7..0400ec6bd 100644 --- a/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.6.11/const_state_variables.sol.0.6.11.ConstCandidateStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 132, "length": 76, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -74,7 +74,7 @@ "source_mapping": { "start": 237, "length": 20, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -92,7 +92,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -140,7 +140,7 @@ "source_mapping": { "start": 841, "length": 33, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -158,7 +158,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -202,7 +202,7 @@ "source_mapping": { "start": 496, "length": 76, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -220,7 +220,7 @@ "source_mapping": { "start": 473, "length": 271, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -264,7 +264,7 @@ "source_mapping": { "start": 793, "length": 42, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -282,7 +282,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -326,7 +326,7 @@ "source_mapping": { "start": 333, "length": 20, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", @@ -344,7 +344,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "tests/detectors/constable-states/0.6.11/const_state_variables.sol", + "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", diff --git a/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json b/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json index 98f77ccbe..a55359c4e 100644 --- a/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json +++ b/tests/detectors/constable-states/0.7.6/const_state_variables.sol.0.7.6.ConstCandidateStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 132, "length": 76, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 237, "length": 20, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -140,7 +140,7 @@ "source_mapping": { "start": 841, "length": 33, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -158,7 +158,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -202,7 +202,7 @@ "source_mapping": { "start": 496, "length": 76, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -220,7 +220,7 @@ "source_mapping": { "start": 473, "length": 271, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -264,7 +264,7 @@ "source_mapping": { "start": 793, "length": 42, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -282,7 +282,7 @@ "source_mapping": { "start": 746, "length": 342, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -326,7 +326,7 @@ "source_mapping": { "start": 333, "length": 20, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", @@ -344,7 +344,7 @@ "source_mapping": { "start": 29, "length": 441, - "filename_used": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constable-states/0.7.6/const_state_variables.sol", diff --git a/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json b/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json index 310add2c9..d3073b6c2 100644 --- a/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json +++ b/tests/detectors/constant-function-asm/0.4.25/constant.sol.0.4.25.ConstantFunctionsAsm.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 324, "length": 66, - "filename_used": "tests/detectors/constant-function-asm/0.4.25/constant.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constant-function-asm/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-asm/0.4.25/constant.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 392, - "filename_used": "tests/detectors/constant-function-asm/0.4.25/constant.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/constant-function-asm/0.4.25/constant.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/constant-function-asm/0.4.25/constant.sol", diff --git a/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json b/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json index e87a535ad..2416b6981 100644 --- a/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json +++ b/tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol.0.4.25.ControlledDelegateCall.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 337, "length": 118, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -73,7 +73,7 @@ "source_mapping": { "start": 400, "length": 48, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -91,7 +91,7 @@ "source_mapping": { "start": 337, "length": 118, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -111,7 +111,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 101, "length": 134, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -190,7 +190,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -235,7 +235,7 @@ "source_mapping": { "start": 201, "length": 27, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 101, "length": 134, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", @@ -274,7 +274,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.4.25/controlled_delegatecall.sol", diff --git a/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json b/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json index edc0ffc58..499f7eca4 100644 --- a/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json +++ b/tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol.0.6.11.ControlledDelegateCall.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 337, "length": 118, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -73,7 +73,7 @@ "source_mapping": { "start": 400, "length": 48, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -91,7 +91,7 @@ "source_mapping": { "start": 337, "length": 118, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -111,7 +111,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 101, "length": 134, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -190,7 +190,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -235,7 +235,7 @@ "source_mapping": { "start": 201, "length": 27, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 101, "length": 134, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", @@ -274,7 +274,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.6.11/controlled_delegatecall.sol", diff --git a/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json b/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json index f916269e2..1ec75f762 100644 --- a/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json +++ b/tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol.0.7.6.ControlledDelegateCall.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 337, "length": 118, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -73,7 +73,7 @@ "source_mapping": { "start": 400, "length": 48, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -91,7 +91,7 @@ "source_mapping": { "start": 337, "length": 118, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -111,7 +111,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 101, "length": 134, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -190,7 +190,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -235,7 +235,7 @@ "source_mapping": { "start": 201, "length": 27, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 101, "length": 134, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", @@ -274,7 +274,7 @@ "source_mapping": { "start": 0, "length": 585, - "filename_used": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/controlled-delegatecall/0.7.6/controlled_delegatecall.sol", diff --git a/tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol.0.4.25.CostlyOperationsInLoop.json b/tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol.0.4.25.CostlyOperationsInLoop.json index caf160443..506f664b1 100644 --- a/tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol.0.4.25.CostlyOperationsInLoop.json +++ b/tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol.0.4.25.CostlyOperationsInLoop.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 252, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", @@ -30,7 +30,7 @@ "source_mapping": { "start": 26, "length": 1081, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", @@ -83,7 +83,7 @@ "source_mapping": { "start": 410, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", @@ -101,7 +101,7 @@ "source_mapping": { "start": 252, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", @@ -123,7 +123,7 @@ "source_mapping": { "start": 26, "length": 1081, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_relative": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/costly-loop/0.4.25/multiple_costly_operations_in_loop.sol", diff --git a/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json b/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json index b9930721b..ad9e2d44b 100644 --- a/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json +++ b/tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol.0.7.6.UnindexedERC20EventParameters.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 1204, "length": 53, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 679, "length": 644, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -70,7 +70,7 @@ "source_mapping": { "start": 1262, "length": 59, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -88,7 +88,7 @@ "source_mapping": { "start": 679, "length": 644, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -132,7 +132,7 @@ "source_mapping": { "start": 1204, "length": 53, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -150,7 +150,7 @@ "source_mapping": { "start": 679, "length": 644, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -194,7 +194,7 @@ "source_mapping": { "start": 1262, "length": 59, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 679, "length": 644, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_relative": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-indexed/0.7.6/erc20_indexed.sol", diff --git a/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json index de19c0391..6e73759c1 100644 --- a/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol.0.4.25.IncorrectERC20InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 102, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -51,7 +51,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -115,7 +115,7 @@ "source_mapping": { "start": 319, "length": 60, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -172,7 +172,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -197,7 +197,7 @@ "source_mapping": { "start": 273, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -215,7 +215,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -254,7 +254,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 162, "length": 69, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -297,7 +297,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -336,7 +336,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -361,7 +361,7 @@ "source_mapping": { "start": 236, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -379,7 +379,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -418,7 +418,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -443,7 +443,7 @@ "source_mapping": { "start": 46, "length": 51, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", @@ -461,7 +461,7 @@ "source_mapping": { "start": 26, "length": 355, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.4.25/incorrect_erc20_interface.sol", diff --git a/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json index 36af91bc5..fc5ca5ff1 100644 --- a/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol.0.6.11.IncorrectERC20InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 122, "length": 63, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -51,7 +51,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -115,7 +115,7 @@ "source_mapping": { "start": 371, "length": 68, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -172,7 +172,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -197,7 +197,7 @@ "source_mapping": { "start": 317, "length": 49, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -215,7 +215,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -254,7 +254,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 190, "length": 77, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -297,7 +297,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -336,7 +336,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -361,7 +361,7 @@ "source_mapping": { "start": 272, "length": 40, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -379,7 +379,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -418,7 +418,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -443,7 +443,7 @@ "source_mapping": { "start": 58, "length": 59, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", @@ -461,7 +461,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.6.11/incorrect_erc20_interface.sol", diff --git a/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json b/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json index 5bf734be6..e93d2fb51 100644 --- a/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json +++ b/tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol.0.7.6.IncorrectERC20InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 122, "length": 63, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -51,7 +51,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -115,7 +115,7 @@ "source_mapping": { "start": 371, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -172,7 +172,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -197,7 +197,7 @@ "source_mapping": { "start": 317, "length": 49, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -215,7 +215,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -254,7 +254,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 190, "length": 77, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -297,7 +297,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -336,7 +336,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -361,7 +361,7 @@ "source_mapping": { "start": 272, "length": 40, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -379,7 +379,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -418,7 +418,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -443,7 +443,7 @@ "source_mapping": { "start": 58, "length": 59, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", @@ -461,7 +461,7 @@ "source_mapping": { "start": 29, "length": 412, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_relative": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc20-interface/0.7.6/incorrect_erc20_interface.sol", diff --git a/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json index b6304e255..a13a1c586 100644 --- a/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol.0.5.16.IncorrectERC721InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -36,7 +36,7 @@ "source_mapping": { "start": 735, "length": 48, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -54,7 +54,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 561, "length": 78, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -184,7 +184,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 363, "length": 96, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -230,7 +230,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -272,7 +272,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -300,7 +300,7 @@ "source_mapping": { "start": 143, "length": 44, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -318,7 +318,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -360,7 +360,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -388,7 +388,7 @@ "source_mapping": { "start": 192, "length": 44, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -406,7 +406,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -448,7 +448,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -476,7 +476,7 @@ "source_mapping": { "start": 464, "length": 92, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -494,7 +494,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -536,7 +536,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -564,7 +564,7 @@ "source_mapping": { "start": 53, "length": 56, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -582,7 +582,7 @@ "source_mapping": { "start": 29, "length": 82, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -616,7 +616,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -644,7 +644,7 @@ "source_mapping": { "start": 644, "length": 86, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -732,7 +732,7 @@ "source_mapping": { "start": 241, "length": 117, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -750,7 +750,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -792,7 +792,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -820,7 +820,7 @@ "source_mapping": { "start": 788, "length": 70, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", @@ -838,7 +838,7 @@ "source_mapping": { "start": 112, "length": 748, - "filename_used": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.5.16/incorrect_erc721_interface.sol", diff --git a/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json index 94c8a39aa..4ff50f733 100644 --- a/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol.0.6.11.IncorrectERC721InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -36,7 +36,7 @@ "source_mapping": { "start": 800, "length": 56, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -54,7 +54,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 610, "length": 86, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -184,7 +184,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 396, "length": 104, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -230,7 +230,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -272,7 +272,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -300,7 +300,7 @@ "source_mapping": { "start": 152, "length": 52, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -318,7 +318,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -360,7 +360,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -388,7 +388,7 @@ "source_mapping": { "start": 209, "length": 52, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -406,7 +406,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -448,7 +448,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -476,7 +476,7 @@ "source_mapping": { "start": 505, "length": 100, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -494,7 +494,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -536,7 +536,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -564,7 +564,7 @@ "source_mapping": { "start": 53, "length": 56, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -582,7 +582,7 @@ "source_mapping": { "start": 29, "length": 82, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -616,7 +616,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -644,7 +644,7 @@ "source_mapping": { "start": 701, "length": 94, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -732,7 +732,7 @@ "source_mapping": { "start": 266, "length": 125, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -750,7 +750,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -792,7 +792,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -820,7 +820,7 @@ "source_mapping": { "start": 861, "length": 78, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", @@ -838,7 +838,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.6.11/incorrect_erc721_interface.sol", diff --git a/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json b/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json index 3932e5fa2..5a1caae62 100644 --- a/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json +++ b/tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol.0.7.6.IncorrectERC721InterfaceDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -36,7 +36,7 @@ "source_mapping": { "start": 800, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -54,7 +54,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 610, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -184,7 +184,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 396, "length": 104, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -230,7 +230,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -272,7 +272,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -300,7 +300,7 @@ "source_mapping": { "start": 152, "length": 52, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -318,7 +318,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -360,7 +360,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -388,7 +388,7 @@ "source_mapping": { "start": 209, "length": 52, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -406,7 +406,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -448,7 +448,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -476,7 +476,7 @@ "source_mapping": { "start": 505, "length": 100, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -494,7 +494,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -536,7 +536,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -564,7 +564,7 @@ "source_mapping": { "start": 53, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -582,7 +582,7 @@ "source_mapping": { "start": 29, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -616,7 +616,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -644,7 +644,7 @@ "source_mapping": { "start": 701, "length": 94, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -732,7 +732,7 @@ "source_mapping": { "start": 266, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -750,7 +750,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -792,7 +792,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -820,7 +820,7 @@ "source_mapping": { "start": 861, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", @@ -838,7 +838,7 @@ "source_mapping": { "start": 112, "length": 829, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_relative": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/erc721-interface/0.7.6/incorrect_erc721_interface.sol", diff --git a/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json b/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json index 6065b5f9c..d8548b7dd 100644 --- a/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json +++ b/tests/detectors/events-access/0.6.11/missing_events_access_control.sol.0.6.11.MissingEventsAccessControl.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 364, "length": 90, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 1309, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -100,7 +100,7 @@ "source_mapping": { "start": 421, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -118,7 +118,7 @@ "source_mapping": { "start": 364, "length": 90, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -138,7 +138,7 @@ "source_mapping": { "start": 0, "length": 1309, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -223,7 +223,7 @@ "source_mapping": { "start": 284, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -243,7 +243,7 @@ "source_mapping": { "start": 0, "length": 1309, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -315,7 +315,7 @@ "source_mapping": { "start": 325, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -333,7 +333,7 @@ "source_mapping": { "start": 284, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -353,7 +353,7 @@ "source_mapping": { "start": 0, "length": 1309, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -438,7 +438,7 @@ "source_mapping": { "start": 458, "length": 127, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -459,7 +459,7 @@ "source_mapping": { "start": 0, "length": 1309, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -531,7 +531,7 @@ "source_mapping": { "start": 552, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -549,7 +549,7 @@ "source_mapping": { "start": 458, "length": 127, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", @@ -570,7 +570,7 @@ "source_mapping": { "start": 0, "length": 1309, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_relative": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/events-access/0.6.11/missing_events_access_control.sol", diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 4d947de06..b286291ec 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 259, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -78,7 +78,7 @@ "source_mapping": { "start": 306, "length": 41, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -98,7 +98,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 353, "length": 40, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -168,7 +168,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -218,7 +218,7 @@ "source_mapping": { "start": 1420, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -238,7 +238,7 @@ "source_mapping": { "start": 1381, "length": 234, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 554, "length": 325, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", @@ -305,7 +305,7 @@ "source_mapping": { "start": 473, "length": 408, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", diff --git a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json index 6bffedf78..7f600c37d 100644 --- a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json +++ b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 259, "length": 41, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -78,7 +78,7 @@ "source_mapping": { "start": 306, "length": 41, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -98,7 +98,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 353, "length": 40, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -168,7 +168,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -218,7 +218,7 @@ "source_mapping": { "start": 1420, "length": 81, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -238,7 +238,7 @@ "source_mapping": { "start": 1381, "length": 234, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 554, "length": 325, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", @@ -305,7 +305,7 @@ "source_mapping": { "start": 473, "length": 408, - "filename_used": "tests/detectors/external-function/0.6.11/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", diff --git a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json index 97eba4835..dc3662a91 100644 --- a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json +++ b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 259, "length": 41, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -78,7 +78,7 @@ "source_mapping": { "start": 306, "length": 41, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -98,7 +98,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 353, "length": 40, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -168,7 +168,7 @@ "source_mapping": { "start": 213, "length": 258, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -218,7 +218,7 @@ "source_mapping": { "start": 1420, "length": 81, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -238,7 +238,7 @@ "source_mapping": { "start": 1381, "length": 234, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 554, "length": 325, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", @@ -305,7 +305,7 @@ "source_mapping": { "start": 473, "length": 408, - "filename_used": "tests/detectors/external-function/0.7.6/external_function.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", diff --git a/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json b/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json index 00772a400..cf71e9f09 100644 --- a/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json +++ b/tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol.0.4.25.FunctionInitializedState.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 157, "length": 21, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -101,7 +101,7 @@ "source_mapping": { "start": 842, "length": 23, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -119,7 +119,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -194,7 +194,7 @@ "source_mapping": { "start": 268, "length": 21, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -287,7 +287,7 @@ "source_mapping": { "start": 357, "length": 26, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -305,7 +305,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -380,7 +380,7 @@ "source_mapping": { "start": 453, "length": 35, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", @@ -398,7 +398,7 @@ "source_mapping": { "start": 116, "length": 1567, - "filename_used": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/function-init-state/0.4.25/function_init_state_variables.sol", diff --git a/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json b/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json index bc86f2c05..e499975d0 100644 --- a/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json +++ b/tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol.0.7.6.IncorrectStrictEquality.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 804, "length": 133, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -117,7 +117,7 @@ "source_mapping": { "start": 839, "length": 51, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -135,7 +135,7 @@ "source_mapping": { "start": 804, "length": 133, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -156,7 +156,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -257,7 +257,7 @@ "source_mapping": { "start": 1203, "length": 170, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -280,7 +280,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -368,7 +368,7 @@ "source_mapping": { "start": 1291, "length": 19, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -386,7 +386,7 @@ "source_mapping": { "start": 1203, "length": 170, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -409,7 +409,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -510,7 +510,7 @@ "source_mapping": { "start": 528, "length": 97, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -530,7 +530,7 @@ "source_mapping": { "start": 182, "length": 445, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -569,7 +569,7 @@ "source_mapping": { "start": 579, "length": 39, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -587,7 +587,7 @@ "source_mapping": { "start": 528, "length": 97, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -607,7 +607,7 @@ "source_mapping": { "start": 182, "length": 445, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -659,7 +659,7 @@ "source_mapping": { "start": 2964, "length": 71, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -679,7 +679,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -736,7 +736,7 @@ "source_mapping": { "start": 2998, "length": 30, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -754,7 +754,7 @@ "source_mapping": { "start": 2964, "length": 71, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -774,7 +774,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -844,7 +844,7 @@ "source_mapping": { "start": 1555, "length": 179, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -867,7 +867,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -955,7 +955,7 @@ "source_mapping": { "start": 1652, "length": 19, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -973,7 +973,7 @@ "source_mapping": { "start": 1555, "length": 179, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -996,7 +996,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1097,7 +1097,7 @@ "source_mapping": { "start": 1379, "length": 170, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1120,7 +1120,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1208,7 +1208,7 @@ "source_mapping": { "start": 1467, "length": 19, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1226,7 +1226,7 @@ "source_mapping": { "start": 1379, "length": 170, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1249,7 +1249,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1350,7 +1350,7 @@ "source_mapping": { "start": 1073, "length": 124, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1371,7 +1371,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1459,7 +1459,7 @@ "source_mapping": { "start": 1108, "length": 42, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1477,7 +1477,7 @@ "source_mapping": { "start": 1073, "length": 124, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1498,7 +1498,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1599,7 +1599,7 @@ "source_mapping": { "start": 3113, "length": 67, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1619,7 +1619,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1676,7 +1676,7 @@ "source_mapping": { "start": 3147, "length": 26, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1694,7 +1694,7 @@ "source_mapping": { "start": 3113, "length": 67, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1714,7 +1714,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1784,7 +1784,7 @@ "source_mapping": { "start": 421, "length": 101, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1804,7 +1804,7 @@ "source_mapping": { "start": 182, "length": 445, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1843,7 +1843,7 @@ "source_mapping": { "start": 472, "length": 43, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1861,7 +1861,7 @@ "source_mapping": { "start": 421, "length": 101, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1881,7 +1881,7 @@ "source_mapping": { "start": 182, "length": 445, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1933,7 +1933,7 @@ "source_mapping": { "start": 3041, "length": 66, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -1953,7 +1953,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2010,7 +2010,7 @@ "source_mapping": { "start": 3075, "length": 25, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2028,7 +2028,7 @@ "source_mapping": { "start": 3041, "length": 66, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2048,7 +2048,7 @@ "source_mapping": { "start": 2385, "length": 798, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2118,7 +2118,7 @@ "source_mapping": { "start": 665, "length": 133, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2139,7 +2139,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2227,7 +2227,7 @@ "source_mapping": { "start": 700, "length": 51, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2245,7 +2245,7 @@ "source_mapping": { "start": 665, "length": 133, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2266,7 +2266,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2367,7 +2367,7 @@ "source_mapping": { "start": 943, "length": 124, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2388,7 +2388,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2476,7 +2476,7 @@ "source_mapping": { "start": 978, "length": 42, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2494,7 +2494,7 @@ "source_mapping": { "start": 943, "length": 124, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", @@ -2515,7 +2515,7 @@ "source_mapping": { "start": 629, "length": 1754, - "filename_used": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-equality/0.7.6/incorrect_equality.sol", diff --git a/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json index e1a63acfc..13906812e 100644 --- a/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol.0.4.25.ModifierDefaultDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 496, "length": 251, - "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -37,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -120,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -225,7 +225,7 @@ "source_mapping": { "start": 20, "length": 103, - "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.4.25/modifier_default.sol", diff --git a/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json index 416f0e236..5f9d1a535 100644 --- a/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol.0.5.16.ModifierDefaultDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 496, "length": 251, - "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -37,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -120,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -225,7 +225,7 @@ "source_mapping": { "start": 20, "length": 103, - "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.5.16/modifier_default.sol", diff --git a/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json index d2f7ec560..07d3ce059 100644 --- a/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol.0.6.11.ModifierDefaultDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 496, "length": 251, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", @@ -37,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", @@ -120,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", @@ -225,7 +225,7 @@ "source_mapping": { "start": 20, "length": 103, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_relative": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.6.11/modifier_default.sol", diff --git a/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json b/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json index 592b4dde0..2b032eacc 100644 --- a/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json +++ b/tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol.0.7.6.ModifierDefaultDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 496, "length": 251, - "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -37,7 +37,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -120,7 +120,7 @@ "source_mapping": { "start": 277, "length": 111, - "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -225,7 +225,7 @@ "source_mapping": { "start": 20, "length": 103, - "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", @@ -247,7 +247,7 @@ "source_mapping": { "start": 0, "length": 901, - "filename_used": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-modifier/0.7.6/modifier_default.sol", diff --git a/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json b/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json index d68289725..d2fdadabe 100644 --- a/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json +++ b/tests/detectors/locked-ether/0.4.25/locked_ether.sol.0.4.25.LockedEther.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 368, "length": 32, - "filename_used": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 47, "length": 72, - "filename_used": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 25, "length": 97, - "filename_used": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.4.25/locked_ether.sol", diff --git a/tests/detectors/locked-ether/0.5.16/locked_ether.sol.0.5.16.LockedEther.json b/tests/detectors/locked-ether/0.5.16/locked_ether.sol.0.5.16.LockedEther.json index 8d477d9bb..46d05ff7b 100644 --- a/tests/detectors/locked-ether/0.5.16/locked_ether.sol.0.5.16.LockedEther.json +++ b/tests/detectors/locked-ether/0.5.16/locked_ether.sol.0.5.16.LockedEther.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 375, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 46, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 24, "length": 97, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.5.16/locked_ether.sol", diff --git a/tests/detectors/locked-ether/0.6.11/locked_ether.sol.0.6.11.LockedEther.json b/tests/detectors/locked-ether/0.6.11/locked_ether.sol.0.6.11.LockedEther.json index 246fff976..984bb98e1 100644 --- a/tests/detectors/locked-ether/0.6.11/locked_ether.sol.0.6.11.LockedEther.json +++ b/tests/detectors/locked-ether/0.6.11/locked_ether.sol.0.6.11.LockedEther.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 401, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 49, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 27, "length": 101, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", "filename_relative": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/locked-ether/0.6.11/locked_ether.sol", diff --git a/tests/detectors/low-level-calls/0.4.25/low_level_calls.sol.0.4.25.LowLevelCalls.json b/tests/detectors/low-level-calls/0.4.25/low_level_calls.sol.0.4.25.LowLevelCalls.json index 4da4eb671..ffab6e209 100644 --- a/tests/detectors/low-level-calls/0.4.25/low_level_calls.sol.0.4.25.LowLevelCalls.json +++ b/tests/detectors/low-level-calls/0.4.25/low_level_calls.sol.0.4.25.LowLevelCalls.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 51, "length": 112, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 29, "length": 136, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", @@ -53,7 +53,7 @@ "source_mapping": { "start": 111, "length": 45, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", @@ -71,7 +71,7 @@ "source_mapping": { "start": 51, "length": 112, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", @@ -91,7 +91,7 @@ "source_mapping": { "start": 29, "length": 136, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.4.25/low_level_calls.sol", diff --git a/tests/detectors/low-level-calls/0.6.11/low_level_calls.sol.0.6.11.LowLevelCalls.json b/tests/detectors/low-level-calls/0.6.11/low_level_calls.sol.0.6.11.LowLevelCalls.json index 2cdf61055..e04746655 100644 --- a/tests/detectors/low-level-calls/0.6.11/low_level_calls.sol.0.6.11.LowLevelCalls.json +++ b/tests/detectors/low-level-calls/0.6.11/low_level_calls.sol.0.6.11.LowLevelCalls.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 51, "length": 112, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 29, "length": 136, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", @@ -53,7 +53,7 @@ "source_mapping": { "start": 111, "length": 45, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", @@ -71,7 +71,7 @@ "source_mapping": { "start": 51, "length": 112, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", @@ -91,7 +91,7 @@ "source_mapping": { "start": 29, "length": 136, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_relative": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/low-level-calls/0.6.11/low_level_calls.sol", diff --git a/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json index 594297e67..5ea22de8f 100644 --- a/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol.0.5.16.MappingDeletionDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -79,7 +79,7 @@ "source_mapping": { "start": 228, "length": 94, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -100,7 +100,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -149,7 +149,7 @@ "source_mapping": { "start": 701, "length": 24, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -167,7 +167,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -188,7 +188,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -251,7 +251,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -302,7 +302,7 @@ "source_mapping": { "start": 47, "length": 61, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -352,7 +352,7 @@ "source_mapping": { "start": 175, "length": 12, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -370,7 +370,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", @@ -390,7 +390,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.5.16/MappingDeletion.sol", diff --git a/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json index a6d50caef..f6e59ae14 100644 --- a/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol.0.6.11.MappingDeletionDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 47, "length": 61, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -79,7 +79,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -109,7 +109,7 @@ "source_mapping": { "start": 175, "length": 12, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -127,7 +127,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -147,7 +147,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -191,7 +191,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -262,7 +262,7 @@ "source_mapping": { "start": 228, "length": 94, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -283,7 +283,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -332,7 +332,7 @@ "source_mapping": { "start": 701, "length": 24, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -350,7 +350,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", @@ -371,7 +371,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.6.11/MappingDeletion.sol", diff --git a/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json b/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json index db419dad9..16d2dcd94 100644 --- a/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json +++ b/tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol.0.7.6.MappingDeletionDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -79,7 +79,7 @@ "source_mapping": { "start": 228, "length": 94, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -100,7 +100,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -149,7 +149,7 @@ "source_mapping": { "start": 701, "length": 24, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -167,7 +167,7 @@ "source_mapping": { "start": 595, "length": 137, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -188,7 +188,7 @@ "source_mapping": { "start": 199, "length": 866, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -251,7 +251,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -302,7 +302,7 @@ "source_mapping": { "start": 47, "length": 61, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -352,7 +352,7 @@ "source_mapping": { "start": 175, "length": 12, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -370,7 +370,7 @@ "source_mapping": { "start": 114, "length": 80, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", @@ -390,7 +390,7 @@ "source_mapping": { "start": 29, "length": 168, - "filename_used": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/mapping-deletion/0.7.6/MappingDeletion.sol", diff --git a/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json b/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json index a6a4f75fd..a39c65b67 100644 --- a/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json +++ b/tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol.0.4.25.MissingZeroAddressValidation.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 393, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 370, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -139,7 +139,7 @@ "source_mapping": { "start": 427, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -157,7 +157,7 @@ "source_mapping": { "start": 370, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -177,7 +177,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -281,7 +281,7 @@ "source_mapping": { "start": 511, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -299,7 +299,7 @@ "source_mapping": { "start": 488, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -320,7 +320,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -413,7 +413,7 @@ "source_mapping": { "start": 545, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -431,7 +431,7 @@ "source_mapping": { "start": 488, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -452,7 +452,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -556,7 +556,7 @@ "source_mapping": { "start": 706, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -574,7 +574,7 @@ "source_mapping": { "start": 687, "length": 112, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -594,7 +594,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -687,7 +687,7 @@ "source_mapping": { "start": 740, "length": 30, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -705,7 +705,7 @@ "source_mapping": { "start": 687, "length": 112, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -725,7 +725,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -829,7 +829,7 @@ "source_mapping": { "start": 149, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -847,7 +847,7 @@ "source_mapping": { "start": 125, "length": 108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -867,7 +867,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -960,7 +960,7 @@ "source_mapping": { "start": 188, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -978,7 +978,7 @@ "source_mapping": { "start": 125, "length": 108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -998,7 +998,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1102,7 +1102,7 @@ "source_mapping": { "start": 256, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1120,7 +1120,7 @@ "source_mapping": { "start": 237, "length": 129, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1141,7 +1141,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1234,7 +1234,7 @@ "source_mapping": { "start": 290, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1252,7 +1252,7 @@ "source_mapping": { "start": 237, "length": 129, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1273,7 +1273,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1366,7 +1366,7 @@ "source_mapping": { "start": 340, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1384,7 +1384,7 @@ "source_mapping": { "start": 237, "length": 129, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", @@ -1405,7 +1405,7 @@ "source_mapping": { "start": 0, "length": 1977, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.4.25/missing_zero_address_validation.sol", diff --git a/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json b/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json index 3cba59cdc..5481c0fd4 100644 --- a/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json +++ b/tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol.0.6.11.MissingZeroAddressValidation.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 730, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 711, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -46,7 +46,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -139,7 +139,7 @@ "source_mapping": { "start": 772, "length": 30, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -157,7 +157,7 @@ "source_mapping": { "start": 711, "length": 120, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -177,7 +177,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -281,7 +281,7 @@ "source_mapping": { "start": 149, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -299,7 +299,7 @@ "source_mapping": { "start": 125, "length": 108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -319,7 +319,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -412,7 +412,7 @@ "source_mapping": { "start": 188, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -430,7 +430,7 @@ "source_mapping": { "start": 125, "length": 108, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -450,7 +450,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -554,7 +554,7 @@ "source_mapping": { "start": 256, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -572,7 +572,7 @@ "source_mapping": { "start": 237, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -593,7 +593,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -686,7 +686,7 @@ "source_mapping": { "start": 298, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 237, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -725,7 +725,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -818,7 +818,7 @@ "source_mapping": { "start": 348, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -836,7 +836,7 @@ "source_mapping": { "start": 237, "length": 137, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -857,7 +857,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -961,7 +961,7 @@ "source_mapping": { "start": 401, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -979,7 +979,7 @@ "source_mapping": { "start": 378, "length": 122, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -999,7 +999,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1092,7 +1092,7 @@ "source_mapping": { "start": 443, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1110,7 +1110,7 @@ "source_mapping": { "start": 378, "length": 122, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1130,7 +1130,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1234,7 +1234,7 @@ "source_mapping": { "start": 527, "length": 20, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1252,7 +1252,7 @@ "source_mapping": { "start": 504, "length": 203, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1273,7 +1273,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1366,7 +1366,7 @@ "source_mapping": { "start": 569, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1384,7 +1384,7 @@ "source_mapping": { "start": 504, "length": 203, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", @@ -1405,7 +1405,7 @@ "source_mapping": { "start": 0, "length": 2049, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_relative": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-zero-check/0.6.11/missing_zero_address_validation.sol", diff --git a/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json b/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json index 09cd87912..d446e363d 100644 --- a/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json +++ b/tests/detectors/naming-convention/0.5.16/naming_convention.sol.0.5.16.NamingConvention.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 185, "length": 16, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -126,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -206,7 +206,7 @@ "source_mapping": { "start": 143, "length": 35, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -224,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -382,7 +382,7 @@ "source_mapping": { "start": 79, "length": 23, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -400,7 +400,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -480,7 +480,7 @@ "source_mapping": { "start": 794, "length": 10, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -498,7 +498,7 @@ "source_mapping": { "start": 766, "length": 84, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -517,7 +517,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -569,7 +569,7 @@ "source_mapping": { "start": 741, "length": 17, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -587,7 +587,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -636,7 +636,7 @@ "source_mapping": { "start": 335, "length": 19, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -654,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -735,7 +735,7 @@ "source_mapping": { "start": 900, "length": 10, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -753,7 +753,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -802,7 +802,7 @@ "source_mapping": { "start": 591, "length": 36, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -822,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -903,7 +903,7 @@ "source_mapping": { "start": 440, "length": 75, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -924,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -1005,7 +1005,7 @@ "source_mapping": { "start": 551, "length": 12, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -1023,7 +1023,7 @@ "source_mapping": { "start": 521, "length": 63, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", @@ -1044,7 +1044,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.5.16/naming_convention.sol", diff --git a/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json b/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json index 01a96650a..7c9d51cce 100644 --- a/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json +++ b/tests/detectors/naming-convention/0.6.11/naming_convention.sol.0.6.11.NamingConvention.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 185, "length": 16, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -126,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -206,7 +206,7 @@ "source_mapping": { "start": 143, "length": 35, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -224,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -382,7 +382,7 @@ "source_mapping": { "start": 79, "length": 23, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -400,7 +400,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -480,7 +480,7 @@ "source_mapping": { "start": 794, "length": 10, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -498,7 +498,7 @@ "source_mapping": { "start": 766, "length": 84, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -517,7 +517,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -569,7 +569,7 @@ "source_mapping": { "start": 741, "length": 17, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -587,7 +587,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -636,7 +636,7 @@ "source_mapping": { "start": 335, "length": 19, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -654,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -735,7 +735,7 @@ "source_mapping": { "start": 900, "length": 10, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -753,7 +753,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -802,7 +802,7 @@ "source_mapping": { "start": 591, "length": 36, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -822,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -903,7 +903,7 @@ "source_mapping": { "start": 440, "length": 75, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -924,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -1005,7 +1005,7 @@ "source_mapping": { "start": 551, "length": 12, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -1023,7 +1023,7 @@ "source_mapping": { "start": 521, "length": 63, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", @@ -1044,7 +1044,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.6.11/naming_convention.sol", diff --git a/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json b/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json index 54016136d..fd6d92790 100644 --- a/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json +++ b/tests/detectors/naming-convention/0.7.6/naming_convention.sol.0.7.6.NamingConvention.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 229, "length": 35, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 185, "length": 16, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -126,7 +126,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -206,7 +206,7 @@ "source_mapping": { "start": 143, "length": 35, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -224,7 +224,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -382,7 +382,7 @@ "source_mapping": { "start": 79, "length": 23, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -400,7 +400,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -480,7 +480,7 @@ "source_mapping": { "start": 794, "length": 10, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -498,7 +498,7 @@ "source_mapping": { "start": 766, "length": 84, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -517,7 +517,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -569,7 +569,7 @@ "source_mapping": { "start": 741, "length": 17, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -587,7 +587,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -636,7 +636,7 @@ "source_mapping": { "start": 335, "length": 19, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -654,7 +654,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -735,7 +735,7 @@ "source_mapping": { "start": 900, "length": 10, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -753,7 +753,7 @@ "source_mapping": { "start": 692, "length": 221, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -802,7 +802,7 @@ "source_mapping": { "start": 591, "length": 36, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -822,7 +822,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -903,7 +903,7 @@ "source_mapping": { "start": 440, "length": 75, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -924,7 +924,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -1005,7 +1005,7 @@ "source_mapping": { "start": 551, "length": 12, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -1023,7 +1023,7 @@ "source_mapping": { "start": 521, "length": 63, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", @@ -1044,7 +1044,7 @@ "source_mapping": { "start": 28, "length": 642, - "filename_used": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/naming-convention/0.7.6/naming_convention.sol", diff --git a/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json b/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json index 20ccd7127..8f20cf0eb 100644 --- a/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json +++ b/tests/detectors/pragma/0.4.25/pragma.0.4.25.sol.0.4.25.ConstantPragma.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/pragma/0.4.25/pragma.0.4.24.sol", "filename_relative": "tests/detectors/pragma/0.4.25/pragma.0.4.24.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.4.25/pragma.0.4.24.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "tests/detectors/pragma/0.4.25/pragma.0.4.25.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/pragma/0.4.25/pragma.0.4.25.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.4.25/pragma.0.4.25.sol", diff --git a/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json b/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json index 8b3ccf4ea..4f4fea023 100644 --- a/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json +++ b/tests/detectors/pragma/0.7.6/pragma.0.7.6.sol.0.7.6.ConstantPragma.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "tests/detectors/pragma/0.7.6/pragma.0.7.5.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/pragma/0.7.6/pragma.0.7.5.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.7.6/pragma.0.7.5.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "tests/detectors/pragma/0.7.6/pragma.0.7.6.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/pragma/0.7.6/pragma.0.7.6.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/pragma/0.7.6/pragma.0.7.6.sol", diff --git a/tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol.0.4.25.PublicMappingNested.json b/tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol.0.4.25.PublicMappingNested.json index 92d62c12c..72731cbd8 100644 --- a/tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol.0.4.25.PublicMappingNested.json +++ b/tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol.0.4.25.PublicMappingNested.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 265, "length": 47, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol", "filename_relative": "tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 138, "length": 345, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol", "filename_relative": "tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/public-mappings-nested/0.4.25/public_mappings_nested.sol", diff --git a/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json b/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json index 5045588d4..8c69a53b3 100644 --- a/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.4.25/redundant_statements.sol.0.4.25.RedundantStatements.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 141, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -130,7 +130,7 @@ "source_mapping": { "start": 257, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -171,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -209,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 287, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -294,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -332,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -376,7 +376,7 @@ "source_mapping": { "start": 169, "length": 27, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -394,7 +394,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -416,7 +416,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -454,7 +454,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -498,7 +498,7 @@ "source_mapping": { "start": 155, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -516,7 +516,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -538,7 +538,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -576,7 +576,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -620,7 +620,7 @@ "source_mapping": { "start": 271, "length": 6, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -638,7 +638,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.4.25/redundant_statements.sol", diff --git a/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json b/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json index c971759c6..8e17b5fb2 100644 --- a/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.5.16/redundant_statements.sol.0.5.16.RedundantStatements.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 271, "length": 6, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -49,7 +49,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -87,7 +87,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -131,7 +131,7 @@ "source_mapping": { "start": 141, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -149,7 +149,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -171,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -209,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 287, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -294,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -332,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -376,7 +376,7 @@ "source_mapping": { "start": 257, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -394,7 +394,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -417,7 +417,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -455,7 +455,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -499,7 +499,7 @@ "source_mapping": { "start": 155, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -517,7 +517,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -539,7 +539,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -577,7 +577,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -621,7 +621,7 @@ "source_mapping": { "start": 169, "length": 27, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -639,7 +639,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.5.16/redundant_statements.sol", diff --git a/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json b/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json index 478d1eba6..24f517567 100644 --- a/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json +++ b/tests/detectors/redundant-statements/0.6.11/redundant_statements.sol.0.6.11.RedundantStatements.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 169, "length": 27, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -130,7 +130,7 @@ "source_mapping": { "start": 287, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -171,7 +171,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -209,7 +209,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 257, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -294,7 +294,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -332,7 +332,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -376,7 +376,7 @@ "source_mapping": { "start": 141, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -394,7 +394,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -416,7 +416,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -454,7 +454,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -498,7 +498,7 @@ "source_mapping": { "start": 155, "length": 4, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -516,7 +516,7 @@ "source_mapping": { "start": 110, "length": 93, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -538,7 +538,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -576,7 +576,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -620,7 +620,7 @@ "source_mapping": { "start": 271, "length": 6, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -638,7 +638,7 @@ "source_mapping": { "start": 209, "length": 109, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", @@ -699,7 +699,7 @@ "source_mapping": { "start": 66, "length": 254, - "filename_used": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/redundant-statements/0.6.11/redundant_statements.sol", diff --git a/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json b/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json index b0f060bbb..7e0abcd49 100644 --- a/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json +++ b/tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol.0.7.6.ReentrancyBenign.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 979, "length": 128, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -30,7 +30,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -111,7 +111,7 @@ "source_mapping": { "start": 1026, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -129,7 +129,7 @@ "source_mapping": { "start": 979, "length": 128, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -151,7 +151,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -237,7 +237,7 @@ "source_mapping": { "start": 1261, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -255,7 +255,7 @@ "source_mapping": { "start": 1208, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -275,7 +275,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -361,7 +361,7 @@ "source_mapping": { "start": 1057, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -379,7 +379,7 @@ "source_mapping": { "start": 979, "length": 128, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -401,7 +401,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -488,7 +488,7 @@ "source_mapping": { "start": 1347, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -506,7 +506,7 @@ "source_mapping": { "start": 1307, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -526,7 +526,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -624,7 +624,7 @@ "source_mapping": { "start": 801, "length": 172, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -647,7 +647,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -728,7 +728,7 @@ "source_mapping": { "start": 848, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -746,7 +746,7 @@ "source_mapping": { "start": 801, "length": 172, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -769,7 +769,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -855,7 +855,7 @@ "source_mapping": { "start": 1171, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -873,7 +873,7 @@ "source_mapping": { "start": 1113, "length": 89, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -893,7 +893,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -979,7 +979,7 @@ "source_mapping": { "start": 880, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -997,7 +997,7 @@ "source_mapping": { "start": 801, "length": 172, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1020,7 +1020,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1106,7 +1106,7 @@ "source_mapping": { "start": 1261, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1124,7 +1124,7 @@ "source_mapping": { "start": 1208, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1144,7 +1144,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1230,7 +1230,7 @@ "source_mapping": { "start": 848, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1248,7 +1248,7 @@ "source_mapping": { "start": 801, "length": 172, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1271,7 +1271,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1357,7 +1357,7 @@ "source_mapping": { "start": 1171, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1375,7 +1375,7 @@ "source_mapping": { "start": 1113, "length": 89, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1395,7 +1395,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1481,7 +1481,7 @@ "source_mapping": { "start": 880, "length": 21, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1499,7 +1499,7 @@ "source_mapping": { "start": 801, "length": 172, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1522,7 +1522,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1608,7 +1608,7 @@ "source_mapping": { "start": 1261, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1626,7 +1626,7 @@ "source_mapping": { "start": 1208, "length": 93, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1646,7 +1646,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1732,7 +1732,7 @@ "source_mapping": { "start": 911, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1750,7 +1750,7 @@ "source_mapping": { "start": 801, "length": 172, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1773,7 +1773,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1860,7 +1860,7 @@ "source_mapping": { "start": 1347, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1878,7 +1878,7 @@ "source_mapping": { "start": 1307, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1898,7 +1898,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -1996,7 +1996,7 @@ "source_mapping": { "start": 421, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2023,7 +2023,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2104,7 +2104,7 @@ "source_mapping": { "start": 468, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2122,7 +2122,7 @@ "source_mapping": { "start": 421, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2149,7 +2149,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2235,7 +2235,7 @@ "source_mapping": { "start": 538, "length": 36, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2253,7 +2253,7 @@ "source_mapping": { "start": 421, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2280,7 +2280,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2366,7 +2366,7 @@ "source_mapping": { "start": 468, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2384,7 +2384,7 @@ "source_mapping": { "start": 421, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2411,7 +2411,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2497,7 +2497,7 @@ "source_mapping": { "start": 538, "length": 36, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2515,7 +2515,7 @@ "source_mapping": { "start": 421, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2542,7 +2542,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2628,7 +2628,7 @@ "source_mapping": { "start": 588, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2646,7 +2646,7 @@ "source_mapping": { "start": 421, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2673,7 +2673,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2771,7 +2771,7 @@ "source_mapping": { "start": 119, "length": 155, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2795,7 +2795,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2876,7 +2876,7 @@ "source_mapping": { "start": 152, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2894,7 +2894,7 @@ "source_mapping": { "start": 119, "length": 155, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -2918,7 +2918,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3004,7 +3004,7 @@ "source_mapping": { "start": 152, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3022,7 +3022,7 @@ "source_mapping": { "start": 119, "length": 155, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3046,7 +3046,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3132,7 +3132,7 @@ "source_mapping": { "start": 255, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3150,7 +3150,7 @@ "source_mapping": { "start": 119, "length": 155, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3174,7 +3174,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3272,7 +3272,7 @@ "source_mapping": { "start": 280, "length": 135, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3294,7 +3294,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3375,7 +3375,7 @@ "source_mapping": { "start": 327, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3393,7 +3393,7 @@ "source_mapping": { "start": 280, "length": 135, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3415,7 +3415,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3501,7 +3501,7 @@ "source_mapping": { "start": 327, "length": 33, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3519,7 +3519,7 @@ "source_mapping": { "start": 280, "length": 135, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3541,7 +3541,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3627,7 +3627,7 @@ "source_mapping": { "start": 396, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3645,7 +3645,7 @@ "source_mapping": { "start": 280, "length": 135, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3667,7 +3667,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3765,7 +3765,7 @@ "source_mapping": { "start": 670, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3787,7 +3787,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3868,7 +3868,7 @@ "source_mapping": { "start": 717, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3886,7 +3886,7 @@ "source_mapping": { "start": 670, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3908,7 +3908,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -3994,7 +3994,7 @@ "source_mapping": { "start": 1171, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4012,7 +4012,7 @@ "source_mapping": { "start": 1113, "length": 89, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4032,7 +4032,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4118,7 +4118,7 @@ "source_mapping": { "start": 717, "length": 22, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4136,7 +4136,7 @@ "source_mapping": { "start": 670, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4158,7 +4158,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4244,7 +4244,7 @@ "source_mapping": { "start": 1171, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4262,7 +4262,7 @@ "source_mapping": { "start": 1113, "length": 89, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4282,7 +4282,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4368,7 +4368,7 @@ "source_mapping": { "start": 749, "length": 12, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4386,7 +4386,7 @@ "source_mapping": { "start": 670, "length": 125, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4408,7 +4408,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4495,7 +4495,7 @@ "source_mapping": { "start": 1347, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4513,7 +4513,7 @@ "source_mapping": { "start": 1307, "length": 72, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", @@ -4533,7 +4533,7 @@ "source_mapping": { "start": 28, "length": 1353, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_relative": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-benign/0.7.6/reentrancy-benign.sol", diff --git a/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json index c92dbd48b..4505f3fc8 100644 --- a/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.4.25/DAO.sol.0.4.25.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 11531, "length": 635, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -40,7 +40,7 @@ "source_mapping": { "start": 10437, "length": 2342, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -122,7 +122,7 @@ "source_mapping": { "start": 11704, "length": 55, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -140,7 +140,7 @@ "source_mapping": { "start": 11531, "length": 635, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -172,7 +172,7 @@ "source_mapping": { "start": 10437, "length": 2342, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -259,7 +259,7 @@ "source_mapping": { "start": 11777, "length": 67, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -277,7 +277,7 @@ "source_mapping": { "start": 11531, "length": 635, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -309,7 +309,7 @@ "source_mapping": { "start": 10437, "length": 2342, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -396,7 +396,7 @@ "source_mapping": { "start": 11893, "length": 45, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -414,7 +414,7 @@ "source_mapping": { "start": 11531, "length": 635, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -446,7 +446,7 @@ "source_mapping": { "start": 10437, "length": 2342, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -533,7 +533,7 @@ "source_mapping": { "start": 11893, "length": 45, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -551,7 +551,7 @@ "source_mapping": { "start": 11531, "length": 635, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -583,7 +583,7 @@ "source_mapping": { "start": 10437, "length": 2342, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -670,7 +670,7 @@ "source_mapping": { "start": 12111, "length": 24, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -688,7 +688,7 @@ "source_mapping": { "start": 11531, "length": 635, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -720,7 +720,7 @@ "source_mapping": { "start": 10437, "length": 2342, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -819,7 +819,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -921,7 +921,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -1471,7 +1471,7 @@ "source_mapping": { "start": 33981, "length": 32, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -1489,7 +1489,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -1591,7 +1591,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -2146,7 +2146,7 @@ "source_mapping": { "start": 43091, "length": 289, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -2168,7 +2168,7 @@ "source_mapping": { "start": 42994, "length": 457, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -2195,7 +2195,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -2750,7 +2750,7 @@ "source_mapping": { "start": 35109, "length": 51, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -2768,7 +2768,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -2870,7 +2870,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -3425,7 +3425,7 @@ "source_mapping": { "start": 34718, "length": 34, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -3443,7 +3443,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -3545,7 +3545,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4100,7 +4100,7 @@ "source_mapping": { "start": 35109, "length": 51, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4118,7 +4118,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4220,7 +4220,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4775,7 +4775,7 @@ "source_mapping": { "start": 35198, "length": 23, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4793,7 +4793,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -4895,7 +4895,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -5451,7 +5451,7 @@ "source_mapping": { "start": 35817, "length": 26, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -5469,7 +5469,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -5571,7 +5571,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6127,7 +6127,7 @@ "source_mapping": { "start": 36121, "length": 14, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6145,7 +6145,7 @@ "source_mapping": { "start": 35940, "length": 202, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6168,7 +6168,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6724,7 +6724,7 @@ "source_mapping": { "start": 35698, "length": 38, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6742,7 +6742,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -6844,7 +6844,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -7400,7 +7400,7 @@ "source_mapping": { "start": 35817, "length": 26, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -7418,7 +7418,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -7520,7 +7520,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8076,7 +8076,7 @@ "source_mapping": { "start": 36069, "length": 42, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8094,7 +8094,7 @@ "source_mapping": { "start": 35940, "length": 202, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8117,7 +8117,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8673,7 +8673,7 @@ "source_mapping": { "start": 35754, "length": 28, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8691,7 +8691,7 @@ "source_mapping": { "start": 32955, "length": 2978, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", @@ -8793,7 +8793,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/DAO.sol", diff --git a/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json index 1a4c53840..e31dd873a 100644 --- a/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol.0.4.25.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 299, "length": 314, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -123,7 +123,7 @@ "source_mapping": { "start": 482, "length": 53, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 299, "length": 314, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -166,7 +166,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 579, "length": 27, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 299, "length": 314, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -411,7 +411,7 @@ "source_mapping": { "start": 2108, "length": 246, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -435,7 +435,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -525,7 +525,7 @@ "source_mapping": { "start": 2263, "length": 33, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -543,7 +543,7 @@ "source_mapping": { "start": 2108, "length": 246, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -567,7 +567,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -662,7 +662,7 @@ "source_mapping": { "start": 2310, "length": 27, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -680,7 +680,7 @@ "source_mapping": { "start": 2108, "length": 246, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", @@ -704,7 +704,7 @@ "source_mapping": { "start": 26, "length": 2334, - "filename_used": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.4.25/reentrancy.sol", diff --git a/tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol.0.6.11.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol.0.6.11.ReentrancyEth.json index 85a45bfbb..06f934c5a 100644 --- a/tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol.0.6.11.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol.0.6.11.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -106,7 +106,7 @@ "source_mapping": { "start": 480, "length": 81, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -150,7 +150,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -227,7 +227,7 @@ "source_mapping": { "start": 624, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -245,7 +245,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -360,7 +360,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -387,7 +387,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -459,7 +459,7 @@ "source_mapping": { "start": 1682, "length": 64, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -477,7 +477,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -504,7 +504,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -581,7 +581,7 @@ "source_mapping": { "start": 1781, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -599,7 +599,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", @@ -626,7 +626,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy.sol", diff --git a/tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol.0.6.11.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol.0.6.11.ReentrancyEth.json index 30b2b6cd5..4ca64362a 100644 --- a/tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol.0.6.11.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol.0.6.11.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 807, "length": 76, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -120,7 +120,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -169,7 +169,7 @@ "source_mapping": { "start": 746, "length": 51, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -187,7 +187,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -212,7 +212,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 894, "length": 34, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -304,7 +304,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -354,7 +354,7 @@ "source_mapping": { "start": 938, "length": 36, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -372,7 +372,7 @@ "source_mapping": { "start": 696, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", @@ -397,7 +397,7 @@ "source_mapping": { "start": 227, "length": 758, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_relative": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.6.11/reentrancy_indirect.sol", diff --git a/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json b/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json index d7cc02619..b7aa05148 100644 --- a/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json +++ b/tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol.0.7.6.ReentrancyEth.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -34,7 +34,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -106,7 +106,7 @@ "source_mapping": { "start": 480, "length": 81, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -150,7 +150,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -227,7 +227,7 @@ "source_mapping": { "start": 624, "length": 27, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -245,7 +245,7 @@ "source_mapping": { "start": 301, "length": 357, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -271,7 +271,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -360,7 +360,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -387,7 +387,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -459,7 +459,7 @@ "source_mapping": { "start": 1682, "length": 64, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -477,7 +477,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -504,7 +504,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -581,7 +581,7 @@ "source_mapping": { "start": 1781, "length": 32, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -599,7 +599,7 @@ "source_mapping": { "start": 1437, "length": 393, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", @@ -626,7 +626,7 @@ "source_mapping": { "start": 28, "length": 1807, - "filename_used": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-eth/0.7.6/reentrancy.sol", diff --git a/tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol.0.5.16.ReentrancyEvent.json b/tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol.0.5.16.ReentrancyEvent.json index 00f9427e6..38326563d 100644 --- a/tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol.0.5.16.ReentrancyEvent.json +++ b/tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol.0.5.16.ReentrancyEvent.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -63,7 +63,7 @@ "source_mapping": { "start": 120, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -81,7 +81,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -102,7 +102,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 135, "length": 8, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -159,7 +159,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", @@ -180,7 +180,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_relative": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.5.16/reentrancy-events.sol", diff --git a/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json b/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json index 13ff8c285..d56617523 100644 --- a/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json +++ b/tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol.0.6.11.ReentrancyEvent.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -63,7 +63,7 @@ "source_mapping": { "start": 120, "length": 5, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -81,7 +81,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -102,7 +102,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -141,7 +141,7 @@ "source_mapping": { "start": 135, "length": 8, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -159,7 +159,7 @@ "source_mapping": { "start": 86, "length": 68, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", @@ -180,7 +180,7 @@ "source_mapping": { "start": 51, "length": 193, - "filename_used": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-events/0.6.11/reentrancy-events.sol", diff --git a/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json b/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json index 156859a5c..eb1b1c5de 100644 --- a/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json +++ b/tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol.0.4.25.ReentrancyReadBeforeWritten.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -99,7 +99,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -649,7 +649,7 @@ "source_mapping": { "start": 37159, "length": 49, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -667,7 +667,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -758,7 +758,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1313,7 +1313,7 @@ "source_mapping": { "start": 44544, "length": 74, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1331,7 +1331,7 @@ "source_mapping": { "start": 44427, "length": 198, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1352,7 +1352,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1907,7 +1907,7 @@ "source_mapping": { "start": 38796, "length": 29, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -1925,7 +1925,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -2016,7 +2016,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -2571,7 +2571,7 @@ "source_mapping": { "start": 40461, "length": 90, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -2589,7 +2589,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -2617,7 +2617,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3172,7 +3172,7 @@ "source_mapping": { "start": 40581, "length": 116, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3191,7 +3191,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3219,7 +3219,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3774,7 +3774,7 @@ "source_mapping": { "start": 40711, "length": 39, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3792,7 +3792,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -3820,7 +3820,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -4375,7 +4375,7 @@ "source_mapping": { "start": 38912, "length": 24, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -4393,7 +4393,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -4484,7 +4484,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5040,7 +5040,7 @@ "source_mapping": { "start": 38946, "length": 23, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5058,7 +5058,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5149,7 +5149,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5705,7 +5705,7 @@ "source_mapping": { "start": 38867, "length": 35, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5723,7 +5723,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -5814,7 +5814,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6381,7 +6381,7 @@ "source_mapping": { "start": 41743, "length": 247, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6408,7 +6408,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6958,7 +6958,7 @@ "source_mapping": { "start": 41890, "length": 25, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -6976,7 +6976,7 @@ "source_mapping": { "start": 41743, "length": 247, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -7003,7 +7003,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -7558,7 +7558,7 @@ "source_mapping": { "start": 40461, "length": 90, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -7576,7 +7576,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -7604,7 +7604,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -8159,7 +8159,7 @@ "source_mapping": { "start": 40581, "length": 116, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -8178,7 +8178,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -8206,7 +8206,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -8761,7 +8761,7 @@ "source_mapping": { "start": 40711, "length": 39, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -8779,7 +8779,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -8807,7 +8807,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -9362,7 +9362,7 @@ "source_mapping": { "start": 41944, "length": 39, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -9380,7 +9380,7 @@ "source_mapping": { "start": 41743, "length": 247, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -9407,7 +9407,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -9963,7 +9963,7 @@ "source_mapping": { "start": 4393, "length": 24, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -9981,7 +9981,7 @@ "source_mapping": { "start": 4127, "length": 509, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10017,7 +10017,7 @@ "source_mapping": { "start": 3440, "length": 1550, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10093,7 +10093,7 @@ "source_mapping": { "start": 4431, "length": 26, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10111,7 +10111,7 @@ "source_mapping": { "start": 4127, "length": 509, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10147,7 +10147,7 @@ "source_mapping": { "start": 3440, "length": 1550, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10223,7 +10223,7 @@ "source_mapping": { "start": 41944, "length": 39, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10241,7 +10241,7 @@ "source_mapping": { "start": 41743, "length": 247, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10268,7 +10268,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10824,7 +10824,7 @@ "source_mapping": { "start": 42279, "length": 33, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10842,7 +10842,7 @@ "source_mapping": { "start": 41997, "length": 384, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -10872,7 +10872,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -11428,7 +11428,7 @@ "source_mapping": { "start": 42322, "length": 31, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -11446,7 +11446,7 @@ "source_mapping": { "start": 41997, "length": 384, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -11476,7 +11476,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -12043,7 +12043,7 @@ "source_mapping": { "start": 41191, "length": 175, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -12065,7 +12065,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -12615,7 +12615,7 @@ "source_mapping": { "start": 41288, "length": 14, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -12633,7 +12633,7 @@ "source_mapping": { "start": 41191, "length": 175, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -12655,7 +12655,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13210,7 +13210,7 @@ "source_mapping": { "start": 40461, "length": 90, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13228,7 +13228,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13256,7 +13256,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13811,7 +13811,7 @@ "source_mapping": { "start": 40581, "length": 116, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13830,7 +13830,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -13858,7 +13858,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -14413,7 +14413,7 @@ "source_mapping": { "start": 40711, "length": 39, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -14431,7 +14431,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -14459,7 +14459,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15014,7 +15014,7 @@ "source_mapping": { "start": 41331, "length": 28, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15032,7 +15032,7 @@ "source_mapping": { "start": 41191, "length": 175, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15054,7 +15054,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15610,7 +15610,7 @@ "source_mapping": { "start": 3920, "length": 31, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15628,7 +15628,7 @@ "source_mapping": { "start": 3765, "length": 356, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15655,7 +15655,7 @@ "source_mapping": { "start": 3440, "length": 1550, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15731,7 +15731,7 @@ "source_mapping": { "start": 3965, "length": 24, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15749,7 +15749,7 @@ "source_mapping": { "start": 3765, "length": 356, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15776,7 +15776,7 @@ "source_mapping": { "start": 3440, "length": 1550, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15852,7 +15852,7 @@ "source_mapping": { "start": 41331, "length": 28, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15870,7 +15870,7 @@ "source_mapping": { "start": 41191, "length": 175, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -15892,7 +15892,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16448,7 +16448,7 @@ "source_mapping": { "start": 42279, "length": 33, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16466,7 +16466,7 @@ "source_mapping": { "start": 41997, "length": 384, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -16496,7 +16496,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17052,7 +17052,7 @@ "source_mapping": { "start": 42322, "length": 31, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17070,7 +17070,7 @@ "source_mapping": { "start": 41997, "length": 384, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17100,7 +17100,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17667,7 +17667,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -17758,7 +17758,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18308,7 +18308,7 @@ "source_mapping": { "start": 37159, "length": 49, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18326,7 +18326,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18417,7 +18417,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18972,7 +18972,7 @@ "source_mapping": { "start": 44544, "length": 74, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -18990,7 +18990,7 @@ "source_mapping": { "start": 44427, "length": 198, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19011,7 +19011,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19566,7 +19566,7 @@ "source_mapping": { "start": 37456, "length": 45, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19584,7 +19584,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -19675,7 +19675,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20231,7 +20231,7 @@ "source_mapping": { "start": 37515, "length": 55, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20249,7 +20249,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20340,7 +20340,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20896,7 +20896,7 @@ "source_mapping": { "start": 37584, "length": 40, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -20914,7 +20914,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -21005,7 +21005,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -21561,7 +21561,7 @@ "source_mapping": { "start": 37638, "length": 23, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -21579,7 +21579,7 @@ "source_mapping": { "start": 36148, "length": 2849, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -21670,7 +21670,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22237,7 +22237,7 @@ "source_mapping": { "start": 39505, "length": 735, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22275,7 +22275,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22825,7 +22825,7 @@ "source_mapping": { "start": 39789, "length": 145, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22845,7 +22845,7 @@ "source_mapping": { "start": 39505, "length": 735, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -22883,7 +22883,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -23438,7 +23438,7 @@ "source_mapping": { "start": 39977, "length": 53, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -23456,7 +23456,7 @@ "source_mapping": { "start": 39505, "length": 735, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -23494,7 +23494,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24049,7 +24049,7 @@ "source_mapping": { "start": 40100, "length": 37, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24067,7 +24067,7 @@ "source_mapping": { "start": 39505, "length": 735, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24105,7 +24105,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24660,7 +24660,7 @@ "source_mapping": { "start": 40180, "length": 32, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24678,7 +24678,7 @@ "source_mapping": { "start": 39505, "length": 735, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -24716,7 +24716,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25283,7 +25283,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25311,7 +25311,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25861,7 +25861,7 @@ "source_mapping": { "start": 40581, "length": 116, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25880,7 +25880,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -25908,7 +25908,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -26463,7 +26463,7 @@ "source_mapping": { "start": 40711, "length": 39, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -26481,7 +26481,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -26509,7 +26509,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -27064,7 +27064,7 @@ "source_mapping": { "start": 40779, "length": 27, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -27082,7 +27082,7 @@ "source_mapping": { "start": 40361, "length": 473, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", @@ -27110,7 +27110,7 @@ "source_mapping": { "start": 28296, "length": 17108, - "filename_used": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reentrancy-no-eth/0.4.25/DAO.sol", diff --git a/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json b/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json index 8b56e09e4..1e3ee1354 100644 --- a/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json +++ b/tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol.0.4.21.ReusedBaseConstructor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 295, "length": 77, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -30,7 +30,7 @@ "source_mapping": { "start": 176, "length": 42, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -50,7 +50,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -75,7 +75,7 @@ "source_mapping": { "start": 295, "length": 77, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -97,7 +97,7 @@ "source_mapping": { "start": 222, "length": 71, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -130,7 +130,7 @@ "source_mapping": { "start": 295, "length": 77, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -152,7 +152,7 @@ "source_mapping": { "start": 34, "length": 50, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -172,7 +172,7 @@ "source_mapping": { "start": 0, "length": 86, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -198,7 +198,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -220,7 +220,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -253,7 +253,7 @@ "source_mapping": { "start": 375, "length": 57, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -276,7 +276,7 @@ "source_mapping": { "start": 34, "length": 50, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -296,7 +296,7 @@ "source_mapping": { "start": 0, "length": 86, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 375, "length": 57, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -345,7 +345,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -378,7 +378,7 @@ "source_mapping": { "start": 222, "length": 71, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -400,7 +400,7 @@ "source_mapping": { "start": 34, "length": 50, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -420,7 +420,7 @@ "source_mapping": { "start": 0, "length": 86, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -446,7 +446,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -468,7 +468,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -501,7 +501,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -523,7 +523,7 @@ "source_mapping": { "start": 34, "length": 50, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -543,7 +543,7 @@ "source_mapping": { "start": 0, "length": 86, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -569,7 +569,7 @@ "source_mapping": { "start": 155, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -591,7 +591,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -624,7 +624,7 @@ "source_mapping": { "start": 295, "length": 77, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -646,7 +646,7 @@ "source_mapping": { "start": 109, "length": 42, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -666,7 +666,7 @@ "source_mapping": { "start": 88, "length": 65, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -691,7 +691,7 @@ "source_mapping": { "start": 295, "length": 77, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", @@ -713,7 +713,7 @@ "source_mapping": { "start": 222, "length": 71, - "filename_used": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/reused-constructor/0.4.21/reused_base_constructor.sol", diff --git a/tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol.0.5.16.ShadowingAbstractDetection.json b/tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol.0.5.16.ShadowingAbstractDetection.json index 0ae629ca5..6fcaef153 100644 --- a/tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol.0.5.16.ShadowingAbstractDetection.json +++ b/tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol.0.5.16.ShadowingAbstractDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 92, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_relative": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 46, "length": 63, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_relative": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", @@ -49,7 +49,7 @@ "source_mapping": { "start": 27, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_relative": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", @@ -67,7 +67,7 @@ "source_mapping": { "start": 0, "length": 44, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_relative": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.5.16/shadowing_abstract.sol", diff --git a/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json b/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json index d93bb2e3f..7c0bd82fa 100644 --- a/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json +++ b/tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol.0.4.25.BuiltinSymbolShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 527, "length": 15, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 504, "length": 42, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -60,7 +60,7 @@ "source_mapping": { "start": 170, "length": 18, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -78,7 +78,7 @@ "source_mapping": { "start": 122, "length": 139, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -115,7 +115,7 @@ "source_mapping": { "start": 449, "length": 14, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 380, "length": 120, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -156,7 +156,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -201,7 +201,7 @@ "source_mapping": { "start": 365, "length": 8, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -219,7 +219,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 54, "length": 14, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -279,7 +279,7 @@ "source_mapping": { "start": 26, "length": 94, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -315,7 +315,7 @@ "source_mapping": { "start": 346, "length": 13, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -333,7 +333,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -375,7 +375,7 @@ "source_mapping": { "start": 74, "length": 8, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -393,7 +393,7 @@ "source_mapping": { "start": 26, "length": 94, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -429,7 +429,7 @@ "source_mapping": { "start": 89, "length": 29, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -447,7 +447,7 @@ "source_mapping": { "start": 26, "length": 94, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -484,7 +484,7 @@ "source_mapping": { "start": 244, "length": 8, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -502,7 +502,7 @@ "source_mapping": { "start": 195, "length": 64, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -522,7 +522,7 @@ "source_mapping": { "start": 122, "length": 139, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -562,7 +562,7 @@ "source_mapping": { "start": 195, "length": 64, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -582,7 +582,7 @@ "source_mapping": { "start": 122, "length": 139, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -620,7 +620,7 @@ "source_mapping": { "start": 473, "length": 9, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -638,7 +638,7 @@ "source_mapping": { "start": 380, "length": 120, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -661,7 +661,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -706,7 +706,7 @@ "source_mapping": { "start": 322, "length": 18, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -724,7 +724,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -766,7 +766,7 @@ "source_mapping": { "start": 380, "length": 120, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", @@ -789,7 +789,7 @@ "source_mapping": { "start": 263, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.4.25/shadowing_builtin_symbols.sol", diff --git a/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json b/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json index 4c4ccc2bd..167b72990 100644 --- a/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json +++ b/tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol.0.5.16.BuiltinSymbolShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 173, "length": 18, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 125, "length": 139, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -63,7 +63,7 @@ "source_mapping": { "start": 452, "length": 14, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -81,7 +81,7 @@ "source_mapping": { "start": 383, "length": 120, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -104,7 +104,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -149,7 +149,7 @@ "source_mapping": { "start": 368, "length": 8, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -167,7 +167,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -209,7 +209,7 @@ "source_mapping": { "start": 57, "length": 14, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -227,7 +227,7 @@ "source_mapping": { "start": 29, "length": 94, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -263,7 +263,7 @@ "source_mapping": { "start": 349, "length": 13, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -281,7 +281,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -323,7 +323,7 @@ "source_mapping": { "start": 77, "length": 8, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -341,7 +341,7 @@ "source_mapping": { "start": 29, "length": 94, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -377,7 +377,7 @@ "source_mapping": { "start": 92, "length": 29, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -395,7 +395,7 @@ "source_mapping": { "start": 29, "length": 94, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -432,7 +432,7 @@ "source_mapping": { "start": 247, "length": 8, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -450,7 +450,7 @@ "source_mapping": { "start": 198, "length": 64, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -470,7 +470,7 @@ "source_mapping": { "start": 125, "length": 139, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -510,7 +510,7 @@ "source_mapping": { "start": 198, "length": 64, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -530,7 +530,7 @@ "source_mapping": { "start": 125, "length": 139, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -568,7 +568,7 @@ "source_mapping": { "start": 476, "length": 9, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -586,7 +586,7 @@ "source_mapping": { "start": 383, "length": 120, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -609,7 +609,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -654,7 +654,7 @@ "source_mapping": { "start": 325, "length": 18, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -672,7 +672,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -714,7 +714,7 @@ "source_mapping": { "start": 383, "length": 120, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", @@ -737,7 +737,7 @@ "source_mapping": { "start": 266, "length": 239, - "filename_used": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-builtin/0.5.16/shadowing_builtin_symbols.sol", diff --git a/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json b/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json index 617ff661d..086e4ed2f 100644 --- a/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json +++ b/tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol.0.7.6.LocalShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 406, "length": 5, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -44,7 +44,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 73, "length": 10, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -95,7 +95,7 @@ "source_mapping": { "start": 29, "length": 57, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -129,7 +129,7 @@ "source_mapping": { "start": 429, "length": 6, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -147,7 +147,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -165,7 +165,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -198,7 +198,7 @@ "source_mapping": { "start": 187, "length": 10, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -216,7 +216,7 @@ "source_mapping": { "start": 88, "length": 111, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -254,7 +254,7 @@ "source_mapping": { "start": 421, "length": 6, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -272,7 +272,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -290,7 +290,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -323,7 +323,7 @@ "source_mapping": { "start": 280, "length": 71, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -344,7 +344,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -386,7 +386,7 @@ "source_mapping": { "start": 382, "length": 8, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -404,7 +404,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -422,7 +422,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -455,7 +455,7 @@ "source_mapping": { "start": 260, "length": 12, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -473,7 +473,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -514,7 +514,7 @@ "source_mapping": { "start": 413, "length": 6, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -532,7 +532,7 @@ "source_mapping": { "start": 357, "length": 81, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -550,7 +550,7 @@ "source_mapping": { "start": 201, "length": 239, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -583,7 +583,7 @@ "source_mapping": { "start": 154, "length": 27, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", @@ -601,7 +601,7 @@ "source_mapping": { "start": 88, "length": 111, - "filename_used": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-local/0.7.6/shadowing_local_variable.sol", diff --git a/tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol.0.4.25.StateShadowing.json b/tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol.0.4.25.StateShadowing.json index f610163ec..79ea91ea1 100644 --- a/tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol.0.4.25.StateShadowing.json +++ b/tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol.0.4.25.StateShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 172, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 126, "length": 210, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", @@ -56,7 +56,7 @@ "source_mapping": { "start": 27, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 0, "length": 124, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.4.25/shadowing_state_variable.sol", diff --git a/tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol.0.5.16.StateShadowing.json b/tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol.0.5.16.StateShadowing.json index 7965986a7..bab63300a 100644 --- a/tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol.0.5.16.StateShadowing.json +++ b/tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol.0.5.16.StateShadowing.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 172, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 126, "length": 227, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", @@ -56,7 +56,7 @@ "source_mapping": { "start": 27, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 0, "length": 124, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_relative": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.5.16/shadowing_state_variable.sol", diff --git a/tests/detectors/solc-version/0.4.25/static.sol.0.4.25.IncorrectSolc.json b/tests/detectors/solc-version/0.4.25/static.sol.0.4.25.IncorrectSolc.json index 30bd98c60..db9d1f0a7 100644 --- a/tests/detectors/solc-version/0.4.25/static.sol.0.4.25.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.4.25/static.sol.0.4.25.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/solc-version/0.4.25/static.sol", "filename_relative": "tests/detectors/solc-version/0.4.25/static.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.4.25/static.sol", diff --git a/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json b/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json index 8d174ce84..ed491e31c 100644 --- a/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.5.16/dynamic_1.sol.0.5.16.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "tests/detectors/solc-version/0.5.16/dynamic_1.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/solc-version/0.5.16/dynamic_1.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.5.16/dynamic_1.sol", diff --git a/tests/detectors/solc-version/0.6.11/dynamic_1.sol.0.6.11.IncorrectSolc.json b/tests/detectors/solc-version/0.6.11/dynamic_1.sol.0.6.11.IncorrectSolc.json index 2455fc39f..2c7353514 100644 --- a/tests/detectors/solc-version/0.6.11/dynamic_1.sol.0.6.11.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.6.11/dynamic_1.sol.0.6.11.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/solc-version/0.6.11/dynamic_1.sol", "filename_relative": "tests/detectors/solc-version/0.6.11/dynamic_1.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.6.11/dynamic_1.sol", diff --git a/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json b/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json index 03906c15f..3aacc95b3 100644 --- a/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json +++ b/tests/detectors/solc-version/0.7.6/dynamic_1.sol.0.7.6.IncorrectSolc.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 0, "length": 23, - "filename_used": "tests/detectors/solc-version/0.7.6/dynamic_1.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/solc-version/0.7.6/dynamic_1.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/solc-version/0.7.6/dynamic_1.sol", diff --git a/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json b/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json index b62912670..ca52a6c96 100644 --- a/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json +++ b/tests/detectors/suicidal/0.4.25/suicidal.sol.0.4.25.Suicidal.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "tests/detectors/suicidal/0.4.25/suicidal.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/suicidal/0.4.25/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.4.25/suicidal.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "tests/detectors/suicidal/0.4.25/suicidal.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/suicidal/0.4.25/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.4.25/suicidal.sol", diff --git a/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json b/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json index fa655a9c6..8905e2b86 100644 --- a/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json +++ b/tests/detectors/suicidal/0.5.16/suicidal.sol.0.5.16.Suicidal.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 18, "length": 74, - "filename_used": "tests/detectors/suicidal/0.5.16/suicidal.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/suicidal/0.5.16/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.5.16/suicidal.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 1, "length": 94, - "filename_used": "tests/detectors/suicidal/0.5.16/suicidal.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/suicidal/0.5.16/suicidal.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/suicidal/0.5.16/suicidal.sol", diff --git a/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json b/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json index 08e972fe3..eed88f44a 100644 --- a/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json +++ b/tests/detectors/timestamp/0.4.25/timestamp.sol.0.4.25.Timestamp.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 231, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -68,7 +68,7 @@ "source_mapping": { "start": 279, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 231, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -106,7 +106,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -159,7 +159,7 @@ "source_mapping": { "start": 47, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -179,7 +179,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -219,7 +219,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -237,7 +237,7 @@ "source_mapping": { "start": 47, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -257,7 +257,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -310,7 +310,7 @@ "source_mapping": { "start": 126, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -331,7 +331,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -371,7 +371,7 @@ "source_mapping": { "start": 197, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -389,7 +389,7 @@ "source_mapping": { "start": 126, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", @@ -410,7 +410,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.4.25/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.4.25/timestamp.sol", diff --git a/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json b/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json index db2cda014..cb39ae715 100644 --- a/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json +++ b/tests/detectors/timestamp/0.6.11/timestamp.sol.0.6.11.Timestamp.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 126, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -29,7 +29,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -69,7 +69,7 @@ "source_mapping": { "start": 197, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -87,7 +87,7 @@ "source_mapping": { "start": 126, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -161,7 +161,7 @@ "source_mapping": { "start": 231, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -181,7 +181,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -221,7 +221,7 @@ "source_mapping": { "start": 279, "length": 24, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -239,7 +239,7 @@ "source_mapping": { "start": 231, "length": 79, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -259,7 +259,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -312,7 +312,7 @@ "source_mapping": { "start": 47, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -332,7 +332,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -372,7 +372,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -390,7 +390,7 @@ "source_mapping": { "start": 47, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", @@ -410,7 +410,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_relative": "tests/detectors/timestamp/0.6.11/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.6.11/timestamp.sol", diff --git a/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json b/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json index 98c47cf31..37c8a90f7 100644 --- a/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json +++ b/tests/detectors/timestamp/0.7.6/timestamp.sol.0.7.6.Timestamp.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 231, "length": 79, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -68,7 +68,7 @@ "source_mapping": { "start": 279, "length": 24, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 231, "length": 79, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -106,7 +106,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -159,7 +159,7 @@ "source_mapping": { "start": 47, "length": 70, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -179,7 +179,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -219,7 +219,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -237,7 +237,7 @@ "source_mapping": { "start": 47, "length": 70, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -257,7 +257,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -310,7 +310,7 @@ "source_mapping": { "start": 126, "length": 96, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -331,7 +331,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -371,7 +371,7 @@ "source_mapping": { "start": 197, "length": 18, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -389,7 +389,7 @@ "source_mapping": { "start": 126, "length": 96, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", @@ -410,7 +410,7 @@ "source_mapping": { "start": 0, "length": 402, - "filename_used": "tests/detectors/timestamp/0.7.6/timestamp.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/timestamp/0.7.6/timestamp.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/timestamp/0.7.6/timestamp.sol", diff --git a/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json b/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json index 4e96d8149..eb09a614b 100644 --- a/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json +++ b/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol.0.6.11.TooManyDigits.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 237, "length": 25, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -132,7 +132,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -203,7 +203,7 @@ "source_mapping": { "start": 456, "length": 113, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -225,7 +225,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -283,7 +283,7 @@ "source_mapping": { "start": 512, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -301,7 +301,7 @@ "source_mapping": { "start": 456, "length": 113, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -323,7 +323,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -394,7 +394,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -418,7 +418,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -476,7 +476,7 @@ "source_mapping": { "start": 311, "length": 16, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -494,7 +494,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -518,7 +518,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -589,7 +589,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -613,7 +613,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -671,7 +671,7 @@ "source_mapping": { "start": 209, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -689,7 +689,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -713,7 +713,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -784,7 +784,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -808,7 +808,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -866,7 +866,7 @@ "source_mapping": { "start": 272, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -884,7 +884,7 @@ "source_mapping": { "start": 177, "length": 195, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", @@ -908,7 +908,7 @@ "source_mapping": { "start": 28, "length": 897, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", diff --git a/tests/detectors/tx-origin/0.6.11/tx_origin.sol.0.6.11.TxOrigin.json b/tests/detectors/tx-origin/0.6.11/tx_origin.sol.0.6.11.TxOrigin.json index 6acfcf385..2bdcb5f54 100644 --- a/tests/detectors/tx-origin/0.6.11/tx_origin.sol.0.6.11.TxOrigin.json +++ b/tests/detectors/tx-origin/0.6.11/tx_origin.sol.0.6.11.TxOrigin.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 130, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 28, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -72,7 +72,7 @@ "source_mapping": { "start": 162, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -90,7 +90,7 @@ "source_mapping": { "start": 130, "length": 66, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -110,7 +110,7 @@ "source_mapping": { "start": 28, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -167,7 +167,7 @@ "source_mapping": { "start": 202, "length": 95, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -189,7 +189,7 @@ "source_mapping": { "start": 28, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -233,7 +233,7 @@ "source_mapping": { "start": 238, "length": 18, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -251,7 +251,7 @@ "source_mapping": { "start": 202, "length": 95, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", @@ -273,7 +273,7 @@ "source_mapping": { "start": 28, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_relative": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tx-origin/0.6.11/tx_origin.sol", diff --git a/tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol.0.4.25.UncheckedLowLevel.json b/tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol.0.4.25.UncheckedLowLevel.json index 3a900f4e0..1e5716846 100644 --- a/tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol.0.4.25.UncheckedLowLevel.json +++ b/tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol.0.4.25.UncheckedLowLevel.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 88, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 214, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", @@ -58,7 +58,7 @@ "source_mapping": { "start": 73, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", @@ -76,7 +76,7 @@ "source_mapping": { "start": 21, "length": 88, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", @@ -96,7 +96,7 @@ "source_mapping": { "start": 0, "length": 214, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.4.25/unchecked_lowlevel.sol", diff --git a/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json b/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json index 86b4e5f87..973f772d7 100644 --- a/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json +++ b/tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol.0.5.16.UncheckedLowLevel.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", @@ -97,7 +97,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.5.16/unchecked_lowlevel.sol", diff --git a/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json b/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json index 3a0a0db85..c9fb260fd 100644 --- a/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json +++ b/tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol.0.6.11.UncheckedLowLevel.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", @@ -97,7 +97,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.6.11/unchecked_lowlevel.sol", diff --git a/tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol.0.7.6.UncheckedLowLevel.json b/tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol.0.7.6.UncheckedLowLevel.json index 3028fc9dd..719e8d4ac 100644 --- a/tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol.0.7.6.UncheckedLowLevel.json +++ b/tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol.0.7.6.UncheckedLowLevel.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 81, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", @@ -77,7 +77,7 @@ "source_mapping": { "start": 21, "length": 96, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", @@ -97,7 +97,7 @@ "source_mapping": { "start": 0, "length": 274, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_relative": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-lowlevel/0.7.6/unchecked_lowlevel.sol", diff --git a/tests/detectors/unchecked-send/0.5.16/unchecked_send.sol.0.5.16.UncheckedSend.json b/tests/detectors/unchecked-send/0.5.16/unchecked_send.sol.0.5.16.UncheckedSend.json index 415676bbb..abca0be01 100644 --- a/tests/detectors/unchecked-send/0.5.16/unchecked_send.sol.0.5.16.UncheckedSend.json +++ b/tests/detectors/unchecked-send/0.5.16/unchecked_send.sol.0.5.16.UncheckedSend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 419, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", @@ -66,7 +66,7 @@ "source_mapping": { "start": 81, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", @@ -84,7 +84,7 @@ "source_mapping": { "start": 21, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", @@ -104,7 +104,7 @@ "source_mapping": { "start": 0, "length": 419, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.5.16/unchecked_send.sol", diff --git a/tests/detectors/unchecked-send/0.7.6/unchecked_send.sol.0.7.6.UncheckedSend.json b/tests/detectors/unchecked-send/0.7.6/unchecked_send.sol.0.7.6.UncheckedSend.json index ff9c1ab2e..3c0ef0437 100644 --- a/tests/detectors/unchecked-send/0.7.6/unchecked_send.sol.0.7.6.UncheckedSend.json +++ b/tests/detectors/unchecked-send/0.7.6/unchecked_send.sol.0.7.6.UncheckedSend.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 21, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 419, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", @@ -66,7 +66,7 @@ "source_mapping": { "start": 81, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", @@ -84,7 +84,7 @@ "source_mapping": { "start": 21, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", @@ -104,7 +104,7 @@ "source_mapping": { "start": 0, "length": 419, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_relative": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unchecked-send/0.7.6/unchecked_send.sol", diff --git a/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json b/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json index db2e09b5b..c2aadc90a 100644 --- a/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json +++ b/tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol.0.4.25.UnimplementedFunctionDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 775, "length": 243, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 495, "length": 42, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -50,7 +50,7 @@ "source_mapping": { "start": 465, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -84,7 +84,7 @@ "source_mapping": { "start": 541, "length": 232, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -108,7 +108,7 @@ "source_mapping": { "start": 495, "length": 42, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -126,7 +126,7 @@ "source_mapping": { "start": 465, "length": 74, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -160,7 +160,7 @@ "source_mapping": { "start": 185, "length": 133, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -182,7 +182,7 @@ "source_mapping": { "start": 72, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -200,7 +200,7 @@ "source_mapping": { "start": 0, "length": 111, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -224,7 +224,7 @@ "source_mapping": { "start": 144, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -242,7 +242,7 @@ "source_mapping": { "start": 113, "length": 70, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -276,7 +276,7 @@ "source_mapping": { "start": 320, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -299,7 +299,7 @@ "source_mapping": { "start": 357, "length": 37, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", @@ -317,7 +317,7 @@ "source_mapping": { "start": 320, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_relative": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.4.25/unimplemented.sol", diff --git a/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json b/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json index 830484b23..638105ffb 100644 --- a/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json +++ b/tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol.0.6.11.UnimplementedFunctionDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 593, "length": 344, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -32,7 +32,7 @@ "source_mapping": { "start": 539, "length": 50, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -50,7 +50,7 @@ "source_mapping": { "start": 500, "length": 91, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -84,7 +84,7 @@ "source_mapping": { "start": 185, "length": 151, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -106,7 +106,7 @@ "source_mapping": { "start": 72, "length": 37, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -124,7 +124,7 @@ "source_mapping": { "start": 0, "length": 111, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -148,7 +148,7 @@ "source_mapping": { "start": 144, "length": 37, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -166,7 +166,7 @@ "source_mapping": { "start": 113, "length": 70, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -200,7 +200,7 @@ "source_mapping": { "start": 338, "length": 160, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -223,7 +223,7 @@ "source_mapping": { "start": 384, "length": 45, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", @@ -241,7 +241,7 @@ "source_mapping": { "start": 338, "length": 160, - "filename_used": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unimplemented-functions/0.6.11/unimplemented.sol", diff --git a/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json b/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json index 7935b85b3..a304d1f14 100644 --- a/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json +++ b/tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol.0.5.8.UninitializedFunctionPtrsConstructor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 178, "length": 306, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -33,7 +33,7 @@ "source_mapping": { "start": 472, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -51,7 +51,7 @@ "source_mapping": { "start": 196, "length": 286, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -74,7 +74,7 @@ "source_mapping": { "start": 178, "length": 306, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -115,7 +115,7 @@ "source_mapping": { "start": 486, "length": 199, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 671, "length": 7, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -160,7 +160,7 @@ "source_mapping": { "start": 628, "length": 55, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -181,7 +181,7 @@ "source_mapping": { "start": 486, "length": 199, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -224,7 +224,7 @@ "source_mapping": { "start": 27, "length": 149, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -248,7 +248,7 @@ "source_mapping": { "start": 164, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -266,7 +266,7 @@ "source_mapping": { "start": 45, "length": 129, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -288,7 +288,7 @@ "source_mapping": { "start": 27, "length": 149, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -328,7 +328,7 @@ "source_mapping": { "start": 687, "length": 269, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -357,7 +357,7 @@ "source_mapping": { "start": 858, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -375,7 +375,7 @@ "source_mapping": { "start": 831, "length": 50, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", @@ -396,7 +396,7 @@ "source_mapping": { "start": 687, "length": 269, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_relative": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-fptr-cst/0.5.8/uninitialized_function_ptr_constructor.sol", diff --git a/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json b/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json index 672a61c7f..81ecc20fc 100644 --- a/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json +++ b/tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol.0.5.16.UninitializedLocalVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 77, "length": 18, - "filename_used": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 143, - "filename_used": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 0, "length": 179, - "filename_used": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.5.16/uninitialized_local_variable.sol", diff --git a/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json b/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json index 37c4fae5a..5e51267d9 100644 --- a/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json +++ b/tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol.0.6.11.UninitializedLocalVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 77, "length": 18, - "filename_used": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 29, "length": 143, - "filename_used": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", @@ -48,7 +48,7 @@ "source_mapping": { "start": 0, "length": 179, - "filename_used": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-local/0.6.11/uninitialized_local_variable.sol", diff --git a/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json b/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json index 90dd94c8d..116519e44 100644 --- a/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json +++ b/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol.0.4.25.UninitializedStateVarsDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 698, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 644, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -62,7 +62,7 @@ "source_mapping": { "start": 878, "length": 117, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -83,7 +83,7 @@ "source_mapping": { "start": 644, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -131,7 +131,7 @@ "source_mapping": { "start": 192, "length": 34, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -149,7 +149,7 @@ "source_mapping": { "start": 172, "length": 332, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -182,7 +182,7 @@ "source_mapping": { "start": 359, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -203,7 +203,7 @@ "source_mapping": { "start": 172, "length": 332, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -248,7 +248,7 @@ "source_mapping": { "start": 751, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -266,7 +266,7 @@ "source_mapping": { "start": 644, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -302,7 +302,7 @@ "source_mapping": { "start": 820, "length": 52, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 644, "length": 354, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -370,7 +370,7 @@ "source_mapping": { "start": 58, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -388,7 +388,7 @@ "source_mapping": { "start": 29, "length": 140, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -416,7 +416,7 @@ "source_mapping": { "start": 84, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", @@ -436,7 +436,7 @@ "source_mapping": { "start": 29, "length": 140, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.4.25/uninitialized.sol", diff --git a/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json b/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json index 0c996ec25..7eac03b9a 100644 --- a/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json +++ b/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol.0.5.16.UninitializedStateVarsDetection.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 729, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 675, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -62,7 +62,7 @@ "source_mapping": { "start": 916, "length": 129, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -83,7 +83,7 @@ "source_mapping": { "start": 675, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -131,7 +131,7 @@ "source_mapping": { "start": 199, "length": 34, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -149,7 +149,7 @@ "source_mapping": { "start": 179, "length": 349, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -182,7 +182,7 @@ "source_mapping": { "start": 372, "length": 154, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -203,7 +203,7 @@ "source_mapping": { "start": 179, "length": 349, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -248,7 +248,7 @@ "source_mapping": { "start": 782, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -266,7 +266,7 @@ "source_mapping": { "start": 675, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -302,7 +302,7 @@ "source_mapping": { "start": 851, "length": 59, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -322,7 +322,7 @@ "source_mapping": { "start": 675, "length": 373, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -370,7 +370,7 @@ "source_mapping": { "start": 57, "length": 27, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -388,7 +388,7 @@ "source_mapping": { "start": 28, "length": 148, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -416,7 +416,7 @@ "source_mapping": { "start": 91, "length": 82, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", @@ -436,7 +436,7 @@ "source_mapping": { "start": 28, "length": 148, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_relative": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-state/0.5.16/uninitialized.sol", diff --git a/tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol.0.4.25.UninitializedStorageVars.json b/tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol.0.4.25.UninitializedStorageVars.json index 26ae1fba0..2169e82af 100644 --- a/tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol.0.4.25.UninitializedStorageVars.json +++ b/tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol.0.4.25.UninitializedStorageVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 171, "length": 9, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", "filename_relative": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 67, "length": 143, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", "filename_relative": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", @@ -49,7 +49,7 @@ "source_mapping": { "start": 0, "length": 217, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", "filename_relative": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/uninitialized-storage/0.4.25/uninitialized_storage_pointer.sol", diff --git a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json index dc8030465..d5452021e 100644 --- a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -38,7 +38,7 @@ "source_mapping": { "start": 96, "length": 115, - "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 216, "length": 98, - "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol", diff --git a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json index a98d91818..b0fe359e4 100644 --- a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -38,7 +38,7 @@ "source_mapping": { "start": 96, "length": 115, - "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -92,7 +92,7 @@ "source_mapping": { "start": 216, "length": 98, - "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 31, "length": 285, - "filename_used": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol", diff --git a/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json b/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json index 2356dda78..0e14e7d31 100644 --- a/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json +++ b/tests/detectors/unused-state/0.4.25/unused_state.sol.0.4.25.UnusedStateVars.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 44, "length": 14, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -52,7 +52,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -86,7 +86,7 @@ "source_mapping": { "start": 106, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -104,7 +104,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -130,7 +130,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -164,7 +164,7 @@ "source_mapping": { "start": 64, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -182,7 +182,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -208,7 +208,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -242,7 +242,7 @@ "source_mapping": { "start": 85, "length": 15, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -260,7 +260,7 @@ "source_mapping": { "start": 28, "length": 114, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", @@ -286,7 +286,7 @@ "source_mapping": { "start": 144, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_relative": "tests/detectors/unused-state/0.4.25/unused_state.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/unused-state/0.4.25/unused_state.sol", diff --git a/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json b/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json index 217499938..cb71d8d2d 100644 --- a/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json +++ b/tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol.0.4.25.PredeclarationUsageLocal.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 199, "length": 11, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -59,7 +59,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -100,7 +100,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -133,7 +133,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -172,7 +172,7 @@ "source_mapping": { "start": 417, "length": 3, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -190,7 +190,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -223,7 +223,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -275,7 +275,7 @@ "source_mapping": { "start": 199, "length": 11, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -293,7 +293,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -326,7 +326,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -367,7 +367,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -400,7 +400,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -439,7 +439,7 @@ "source_mapping": { "start": 402, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -457,7 +457,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -490,7 +490,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -542,7 +542,7 @@ "source_mapping": { "start": 199, "length": 11, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -560,7 +560,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -593,7 +593,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -634,7 +634,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -667,7 +667,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -706,7 +706,7 @@ "source_mapping": { "start": 436, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -724,7 +724,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -757,7 +757,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -809,7 +809,7 @@ "source_mapping": { "start": 130, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -827,7 +827,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -860,7 +860,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -901,7 +901,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -934,7 +934,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -973,7 +973,7 @@ "source_mapping": { "start": 69, "length": 13, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -991,7 +991,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1024,7 +1024,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1076,7 +1076,7 @@ "source_mapping": { "start": 199, "length": 11, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1094,7 +1094,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1127,7 +1127,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1168,7 +1168,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1201,7 +1201,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1240,7 +1240,7 @@ "source_mapping": { "start": 410, "length": 5, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1258,7 +1258,7 @@ "source_mapping": { "start": 17, "length": 442, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", @@ -1291,7 +1291,7 @@ "source_mapping": { "start": 0, "length": 461, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_relative": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/variable-scope/0.4.25/predeclaration_usage_local.sol", diff --git a/tests/detectors/void-cst/0.4.25/void-cst.sol.0.4.25.VoidConstructor.json b/tests/detectors/void-cst/0.4.25/void-cst.sol.0.4.25.VoidConstructor.json index 62b547d5b..f10354cf2 100644 --- a/tests/detectors/void-cst/0.4.25/void-cst.sol.0.4.25.VoidConstructor.json +++ b/tests/detectors/void-cst/0.4.25/void-cst.sol.0.4.25.VoidConstructor.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 41, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.4.25/void-cst.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 19, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.4.25/void-cst.sol", @@ -55,7 +55,7 @@ "source_mapping": { "start": 62, "length": 3, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.4.25/void-cst.sol", @@ -73,7 +73,7 @@ "source_mapping": { "start": 41, "length": 32, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.4.25/void-cst.sol", @@ -93,7 +93,7 @@ "source_mapping": { "start": 19, "length": 57, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_relative": "tests/detectors/void-cst/0.4.25/void-cst.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/void-cst/0.4.25/void-cst.sol", diff --git a/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json b/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json index 83e527ab7..3c7801e1c 100644 --- a/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json +++ b/tests/detectors/weak-prng/0.5.16/bad_prng.sol.0.5.16.BadPRNG.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 363, "length": 58, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -75,7 +75,7 @@ "source_mapping": { "start": 395, "length": 19, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -93,7 +93,7 @@ "source_mapping": { "start": 363, "length": 58, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -173,7 +173,7 @@ "source_mapping": { "start": 184, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -193,7 +193,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -240,7 +240,7 @@ "source_mapping": { "start": 216, "length": 39, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -258,7 +258,7 @@ "source_mapping": { "start": 184, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -278,7 +278,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -338,7 +338,7 @@ "source_mapping": { "start": 45, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -358,7 +358,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -405,7 +405,7 @@ "source_mapping": { "start": 77, "length": 29, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -423,7 +423,7 @@ "source_mapping": { "start": 45, "length": 68, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -443,7 +443,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -503,7 +503,7 @@ "source_mapping": { "start": 122, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -523,7 +523,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -570,7 +570,7 @@ "source_mapping": { "start": 154, "length": 17, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -588,7 +588,7 @@ "source_mapping": { "start": 122, "length": 56, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", @@ -608,7 +608,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_relative": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.5.16/bad_prng.sol", diff --git a/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json b/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json index 82c01c822..cd31e5f63 100644 --- a/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json +++ b/tests/detectors/weak-prng/0.6.11/bad_prng.sol.0.6.11.BadPRNG.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 363, "length": 58, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -28,7 +28,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -75,7 +75,7 @@ "source_mapping": { "start": 395, "length": 19, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -93,7 +93,7 @@ "source_mapping": { "start": 363, "length": 58, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -113,7 +113,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -173,7 +173,7 @@ "source_mapping": { "start": 122, "length": 56, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -193,7 +193,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -240,7 +240,7 @@ "source_mapping": { "start": 154, "length": 17, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -258,7 +258,7 @@ "source_mapping": { "start": 122, "length": 56, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -278,7 +278,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -338,7 +338,7 @@ "source_mapping": { "start": 184, "length": 78, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -358,7 +358,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -405,7 +405,7 @@ "source_mapping": { "start": 216, "length": 39, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -423,7 +423,7 @@ "source_mapping": { "start": 184, "length": 78, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -443,7 +443,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -503,7 +503,7 @@ "source_mapping": { "start": 45, "length": 68, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -523,7 +523,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -570,7 +570,7 @@ "source_mapping": { "start": 77, "length": 29, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -588,7 +588,7 @@ "source_mapping": { "start": 45, "length": 68, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", @@ -608,7 +608,7 @@ "source_mapping": { "start": 0, "length": 499, - "filename_used": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", + "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/weak-prng/0.6.11/bad_prng.sol", diff --git a/tests/detectors/write-after-write/0.8.0/write-after-write.sol.0.8.0.WriteAfterWrite.json b/tests/detectors/write-after-write/0.8.0/write-after-write.sol.0.8.0.WriteAfterWrite.json index 5a3af3059..032aea675 100644 --- a/tests/detectors/write-after-write/0.8.0/write-after-write.sol.0.8.0.WriteAfterWrite.json +++ b/tests/detectors/write-after-write/0.8.0/write-after-write.sol.0.8.0.WriteAfterWrite.json @@ -8,7 +8,7 @@ "source_mapping": { "start": 20, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -26,7 +26,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -103,7 +103,7 @@ "source_mapping": { "start": 157, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -121,7 +121,7 @@ "source_mapping": { "start": 116, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -142,7 +142,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -222,7 +222,7 @@ "source_mapping": { "start": 177, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -240,7 +240,7 @@ "source_mapping": { "start": 116, "length": 78, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -261,7 +261,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -352,7 +352,7 @@ "source_mapping": { "start": 351, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -370,7 +370,7 @@ "source_mapping": { "start": 310, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -392,7 +392,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -472,7 +472,7 @@ "source_mapping": { "start": 367, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -490,7 +490,7 @@ "source_mapping": { "start": 310, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -512,7 +512,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -592,7 +592,7 @@ "source_mapping": { "start": 383, "length": 6, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -610,7 +610,7 @@ "source_mapping": { "start": 310, "length": 86, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -632,7 +632,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -723,7 +723,7 @@ "source_mapping": { "start": 894, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -741,7 +741,7 @@ "source_mapping": { "start": 845, "length": 145, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -765,7 +765,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -845,7 +845,7 @@ "source_mapping": { "start": 914, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -863,7 +863,7 @@ "source_mapping": { "start": 845, "length": 145, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -887,7 +887,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -967,7 +967,7 @@ "source_mapping": { "start": 973, "length": 10, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -985,7 +985,7 @@ "source_mapping": { "start": 845, "length": 145, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", @@ -1009,7 +1009,7 @@ "source_mapping": { "start": 0, "length": 992, - "filename_used": "/GENERIC_PATH", + "filename_used": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_relative": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/write-after-write/0.8.0/write-after-write.sol", From 5b7a458e63948ce85ecd0065ef0c2082eca0b051 Mon Sep 17 00:00:00 2001 From: David Pokora Date: Wed, 7 Jul 2021 13:40:37 -0400 Subject: [PATCH 013/202] Updated calls to get_line_from_offset to get_line_and_character_from_offset, as it was renamed. --- slither/core/source_mapping/source_mapping.py | 4 ++-- slither/utils/source_mapping.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/slither/core/source_mapping/source_mapping.py b/slither/core/source_mapping/source_mapping.py index d23f4b28a..e271db2c6 100644 --- a/slither/core/source_mapping/source_mapping.py +++ b/slither/core/source_mapping/source_mapping.py @@ -94,10 +94,10 @@ def _compute_line( Not done in an efficient way """ - start_line, starting_column = compilation_unit.core.crytic_compile.get_line_from_offset( + start_line, starting_column = compilation_unit.core.crytic_compile.get_line_and_character_from_offset( filename, start ) - end_line, ending_column = compilation_unit.core.crytic_compile.get_line_from_offset( + end_line, ending_column = compilation_unit.core.crytic_compile.get_line_and_character_from_offset( filename, start + length ) return list(range(start_line, end_line + 1)), starting_column, ending_column diff --git a/slither/utils/source_mapping.py b/slither/utils/source_mapping.py index 3e2beb764..62f1c3374 100644 --- a/slither/utils/source_mapping.py +++ b/slither/utils/source_mapping.py @@ -27,11 +27,11 @@ def get_definition(target: SourceMapping, crytic_compile: CryticCompile) -> Sour start_offset = txt.find(pattern) + 1 # remove the space - starting_line, starting_column = crytic_compile.get_line_from_offset( + starting_line, starting_column = crytic_compile.get_line_and_character_from_offset( target.source_mapping.filename, target.source_mapping.start + start_offset ) - ending_line, ending_column = crytic_compile.get_line_from_offset( + ending_line, ending_column = crytic_compile.get_line_and_character_from_offset( target.source_mapping.filename, target.source_mapping.start + start_offset + len(pattern) ) From ace923595ccf9d0af5607ec918624be714bf5ace Mon Sep 17 00:00:00 2001 From: Josselin Date: Thu, 8 Jul 2021 10:35:37 +0200 Subject: [PATCH 014/202] Minor improvements to the function-id printer - Do not print shadowed functions - Do not printer slither's internal function --- setup.py | 6 +++--- slither/printers/summary/function_ids.py | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 7079af30d..7e88b57a7 100644 --- a/setup.py +++ b/setup.py @@ -11,10 +11,10 @@ setup( install_requires=[ "prettytable>=0.7.2", "pysha3>=1.0.2", - # "crytic-compile>=0.2.0", - "crytic-compile", + "crytic-compile>=0.2.0", + # "crytic-compile", ], - dependency_links=["git+https://github.com/crytic/crytic-compile.git@master#egg=crytic-compile"], + # dependency_links=["git+https://github.com/crytic/crytic-compile.git@master#egg=crytic-compile"], license="AGPL-3.0", long_description=open("README.md").read(), entry_points={ diff --git a/slither/printers/summary/function_ids.py b/slither/printers/summary/function_ids.py index 7152b74cf..9181b88c0 100644 --- a/slither/printers/summary/function_ids.py +++ b/slither/printers/summary/function_ids.py @@ -26,6 +26,8 @@ class FunctionIds(AbstractPrinter): txt += "\n{}:\n".format(contract.name) table = MyPrettyTable(["Name", "ID"]) for function in contract.functions: + if function.is_shadowed or function.is_constructor_variables: + continue if function.visibility in ["public", "external"]: function_id = get_function_id(function.solidity_signature) table.add_row([function.solidity_signature, f"{function_id:#0{10}x}"]) From d7c5809ea884878f558144dd547e2ba644e89b89 Mon Sep 17 00:00:00 2001 From: Illia Bobyr Date: Fri, 3 Sep 2021 17:55:29 -0700 Subject: [PATCH 015/202] Handle ignore markers when `exclude-dependencies` is set `valid_results` behaviour is described in terms of "results are valid, unless ...". A matching implementation would be to only return `True` a the end of the function, and have all the cases only return `False` if they detect an invalid result. `show-ignored-findings` is the only exception to the rule above. --- slither/core/slither_core.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 77f64ccd2..d43430c42 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -46,7 +46,7 @@ class SlitherCore(Context): self._previous_results_ids: Set[str] = set() # Every slither object has a list of result from detector # Because of the multiple compilation support, we might analyze - # Multiple time the same result, so we remove dupplicate + # Multiple time the same result, so we remove duplicates self._currently_seen_resuts: Set[str] = set() self._paths_to_filter: Set[str] = set() @@ -207,7 +207,7 @@ class SlitherCore(Context): - There is an ignore comment on the preceding line """ - # Remove dupplicate due to the multiple compilation support + # Remove duplicate due to the multiple compilation support if r["id"] in self._currently_seen_resuts: return False self._currently_seen_resuts.add(r["id"]) @@ -240,7 +240,8 @@ class SlitherCore(Context): if r["elements"] and matching: return False if r["elements"] and self._exclude_dependencies: - return not all(element["source_mapping"]["is_dependency"] for element in r["elements"]) + if all(element["source_mapping"]["is_dependency"] for element in r["elements"]): + return False if self._show_ignored_findings: return True if r["id"] in self._previous_results_ids: @@ -248,7 +249,10 @@ class SlitherCore(Context): if self.has_ignore_comment(r): return False # Conserve previous result filtering. This is conserved for compatibility, but is meant to be removed - return not r["description"] in [pr["description"] for pr in self._previous_results] + if r["description"] in [pr["description"] for pr in self._previous_results]: + return False + + return True def load_previous_results(self): filename = self._previous_results_filename From 38dcee37447c88ade22207779a97148ce530eaf8 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Mon, 24 Jan 2022 11:27:02 -0300 Subject: [PATCH 016/202] WIP: Filter external visibility recommendation for public functions to solc < 0.6.9 --- slither/detectors/functions/external_function.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index d68b0c31f..3f4c78f0c 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -20,9 +20,9 @@ class ExternalFunction(AbstractDetector): WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external" WIKI_TITLE = "Public function that could be declared external" - WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external` to save gas." + WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external` and its immutable parameters should be located in `calldata` to save gas." WIKI_RECOMMENDATION = ( - "Use the `external` attribute for functions never called from the contract." + "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." ) @staticmethod @@ -108,6 +108,10 @@ class ExternalFunction(AbstractDetector): def _detect(self): # pylint: disable=too-many-locals,too-many-branches results = [] + # After solc 0.6.9, calldata arguments are allowed in public functions + if self.compilation_unit.solc_version >= "0.6.9": + return [] + # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be # calling functions internally, and thus we can't assume any function in such contracts isn't called by them. dynamic_call_contracts = set() From aed9604c5e616053f9a062d00fb9c4cce5dcba82 Mon Sep 17 00:00:00 2001 From: Josselin Date: Fri, 11 Feb 2022 13:23:46 +0100 Subject: [PATCH 017/202] Minor --- slither/utils/source_mapping.py | 4 ++-- tests/test_ast_parsing.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/slither/utils/source_mapping.py b/slither/utils/source_mapping.py index 62f1c3374..3e2beb764 100644 --- a/slither/utils/source_mapping.py +++ b/slither/utils/source_mapping.py @@ -27,11 +27,11 @@ def get_definition(target: SourceMapping, crytic_compile: CryticCompile) -> Sour start_offset = txt.find(pattern) + 1 # remove the space - starting_line, starting_column = crytic_compile.get_line_and_character_from_offset( + starting_line, starting_column = crytic_compile.get_line_from_offset( target.source_mapping.filename, target.source_mapping.start + start_offset ) - ending_line, ending_column = crytic_compile.get_line_and_character_from_offset( + ending_line, ending_column = crytic_compile.get_line_from_offset( target.source_mapping.filename, target.source_mapping.start + start_offset + len(pattern) ) diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index a0ee17e38..959c82fe9 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -9,10 +9,10 @@ from typing import List, Dict from deepdiff import DeepDiff import pytest -from deepdiff import DeepDiff from crytic_compile import CryticCompile, save_to_zip from crytic_compile.utils.zip import load_from_zip + from slither import Slither from slither.printers.guidance.echidna import Echidna From 8da99e66c3b8ff8486080de93a5c4b09109a68ee Mon Sep 17 00:00:00 2001 From: Josselin Date: Fri, 11 Feb 2022 15:02:57 +0100 Subject: [PATCH 018/202] Minor --- slither/tools/flattening/flattening.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slither/tools/flattening/flattening.py b/slither/tools/flattening/flattening.py index 9e1369395..46b225a0e 100644 --- a/slither/tools/flattening/flattening.py +++ b/slither/tools/flattening/flattening.py @@ -88,9 +88,9 @@ class Flattening: :return: """ src_mapping = contract.source_mapping - content = self._slither.source_code[src_mapping["filename_absolute"]] - start = src_mapping["start"] - end = src_mapping["start"] + src_mapping["length"] + content = self._slither.source_code[src_mapping.filename.absolute] + start = src_mapping.start + end = src_mapping.start + src_mapping.length to_patch = [] # interface must use external From d18a3da3c2490d5bd2329b7c7b0fbaf476ea4385 Mon Sep 17 00:00:00 2001 From: Josselin Date: Fri, 11 Feb 2022 16:35:33 +0100 Subject: [PATCH 019/202] Clean up Source API Add --change-line-prefix flag (replace #1042) --- slither/__main__.py | 8 +++ slither/core/cfg/node.py | 2 +- slither/core/children/child_contract.py | 4 +- slither/core/slither_core.py | 5 ++ slither/core/source_mapping/source_mapping.py | 60 +++++++------------ slither/printers/summary/declaration.py | 30 +++++----- slither/slither.py | 5 ++ slither/solc_parsing/declarations/function.py | 2 +- slither/tools/flattening/flattening.py | 2 +- slither/utils/output.py | 24 ++++---- 10 files changed, 72 insertions(+), 70 deletions(-) diff --git a/slither/__main__.py b/slither/__main__.py index b92e727b7..d0788ef04 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -465,6 +465,14 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s default="slither.config.json", ) + group_misc.add_argument( + "--change-line-prefix", + help="Change the line prefix (default #) for the displayed source codes (i.e. file.sol#1).", + action="store", + dest="change_line_prefix", + default="#", + ) + group_misc.add_argument( "--solc-ast", help="Provide the contract as a json AST", diff --git a/slither/core/cfg/node.py b/slither/core/cfg/node.py index f5b801595..3ab88aaa2 100644 --- a/slither/core/cfg/node.py +++ b/slither/core/cfg/node.py @@ -913,7 +913,7 @@ class Node(SourceMapping, ChildFunction): # pylint: disable=too-many-public-met except AttributeError as error: # pylint: disable=raise-missing-from raise SlitherException( - f"Function not found on IR: {ir}.\nNode: {self} ({self.source_mapping_str})\nFunction: {self.function}\nPlease try compiling with a recent Solidity version. {error}" + f"Function not found on IR: {ir}.\nNode: {self} ({self.source_mapping})\nFunction: {self.function}\nPlease try compiling with a recent Solidity version. {error}" ) elif isinstance(ir, LibraryCall): assert isinstance(ir.destination, Contract) diff --git a/slither/core/children/child_contract.py b/slither/core/children/child_contract.py index 641ad4dca..285623b0e 100644 --- a/slither/core/children/child_contract.py +++ b/slither/core/children/child_contract.py @@ -1,10 +1,12 @@ from typing import TYPE_CHECKING +from slither.core.source_mapping.source_mapping import SourceMapping + if TYPE_CHECKING: from slither.core.declarations import Contract -class ChildContract: +class ChildContract(SourceMapping): def __init__(self): super().__init__() self._contract = None diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 2b484c160..a79622b5a 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -79,6 +79,11 @@ class SlitherCore(Context): self._offset_to_implementations: Optional[Dict[Filename, Dict[int, Set[Source]]]] = None self._offset_to_definitions: Optional[Dict[Filename, Dict[int, Set[Source]]]] = None + # Line prefix is used during the source mapping generation + # By default we generate file.sol#1 + # But we allow to alter this (ex: file.sol:1) for vscode integration + self.line_prefix: str = "#" + @property def compilation_units(self) -> List[SlitherCompilationUnit]: return list(self._compilation_units) diff --git a/slither/core/source_mapping/source_mapping.py b/slither/core/source_mapping/source_mapping.py index aa41af38a..7ceabd568 100644 --- a/slither/core/source_mapping/source_mapping.py +++ b/slither/core/source_mapping/source_mapping.py @@ -1,6 +1,6 @@ import re from abc import ABCMeta -from typing import Dict, Union, List, Tuple, TYPE_CHECKING +from typing import Dict, Union, List, Tuple, TYPE_CHECKING, Optional from crytic_compile.utils.naming import Filename @@ -27,6 +27,7 @@ class Source: self.starting_column: int = 0 self.ending_column: int = 0 self.end: int = 0 + self.compilation_unit: Optional["SlitherCompilationUnit"] = None def to_json(self) -> Dict: return { @@ -45,26 +46,33 @@ class Source: "ending_column": self.ending_column, } - def _get_lines_str(self, line_descr=""): - lines = self.lines - if not lines: - lines = "" - elif len(lines) == 1: - lines = "#{}{}".format(line_descr, lines[0]) - else: - lines = f"#{line_descr}{lines[0]}-{line_descr}{lines[-1]}" - return lines - - def source_mapping_to_markdown(self, markdown_root: str) -> str: + def to_markdown(self, markdown_root: str) -> str: lines = self._get_lines_str(line_descr="L") filename_relative: str = self.filename.relative if self.filename.relative else "" return f"{markdown_root}{filename_relative}{lines}" - def detailled_str(self) -> str: + def to_detailled_str(self) -> str: lines = self._get_lines_str() filename_short: str = self.filename.short if self.filename.short else "" return f"{filename_short}{lines} ({self.starting_column} - {self.ending_column})" + def _get_lines_str(self, line_descr=""): + + # If the compilation unit was not initialized, it means that the set_offset was never called + # on the corresponding object, which should not happen + assert self.compilation_unit is not None + + line_prefix = self.compilation_unit.core.line_prefix + + lines = self.lines + if not lines: + lines = "" + elif len(lines) == 1: + lines = f"{line_prefix}{line_descr}{lines[0]}" + else: + lines = f"{line_prefix}{line_descr}{lines[0]}-{line_descr}{lines[-1]}" + return lines + def __str__(self) -> str: lines = self._get_lines_str() filename_short: str = self.filename.short if self.filename.short else "" @@ -172,31 +180,7 @@ class SourceMapping(Context, metaclass=ABCMeta): self.source_mapping.end = offset.end else: self.source_mapping = _convert_source_mapping(offset, compilation_unit) - - def _get_lines_str(self, line_descr=""): - lines = self.source_mapping.lines - if not lines: - lines = "" - elif len(lines) == 1: - lines = "#{}{}".format(line_descr, lines[0]) - else: - lines = f"#{line_descr}{lines[0]}-{line_descr}{lines[-1]}" - return lines - - def source_mapping_to_markdown(self, markdown_root: str) -> str: - lines = self._get_lines_str(line_descr="L") - filename_relative: str = ( - self.source_mapping.filename.relative if self.source_mapping.filename.relative else "" - ) - return f"{markdown_root}{filename_relative}{lines}" - - @property - def source_mapping_str(self) -> str: - lines = self._get_lines_str() - filename_short: str = ( - self.source_mapping.filename.short if self.source_mapping.filename.short else "" - ) - return f"{filename_short}{lines}" + self.source_mapping.compilation_unit = compilation_unit def add_reference_from_raw_source( self, offset: str, compilation_unit: "SlitherCompilationUnit" diff --git a/slither/printers/summary/declaration.py b/slither/printers/summary/declaration.py index fd664011a..629844a05 100644 --- a/slither/printers/summary/declaration.py +++ b/slither/printers/summary/declaration.py @@ -20,39 +20,37 @@ class Declaration(AbstractPrinter): txt += "\n# Contracts\n" for contract in compilation_unit.contracts: txt += f"# {contract.name}\n" - txt += f"\t- Declaration: {get_definition(contract, compilation_unit.core.crytic_compile).detailled_str()}\n" - txt += f"\t- Implementation: {get_implementation(contract).detailled_str()}\n" - txt += f"\t- References: {[x.detailled_str() for x in get_references(contract)]}\n" + txt += f"\t- Declaration: {get_definition(contract, compilation_unit.core.crytic_compile).to_detailled_str()}\n" + txt += f"\t- Implementation: {get_implementation(contract).to_detailled_str()}\n" + txt += ( + f"\t- References: {[x.to_detailled_str() for x in get_references(contract)]}\n" + ) txt += "\n\t## Function\n" for func in contract.functions: txt += f"\t\t- {func.canonical_name}\n" - txt += f"\t\t\t- Declaration: {get_definition(func, compilation_unit.core.crytic_compile).detailled_str()}\n" - txt += f"\t\t\t- Implementation: {get_implementation(func).detailled_str()}\n" + txt += f"\t\t\t- Declaration: {get_definition(func, compilation_unit.core.crytic_compile).to_detailled_str()}\n" txt += ( - f"\t\t\t- References: {[x.detailled_str() for x in get_references(func)]}\n" + f"\t\t\t- Implementation: {get_implementation(func).to_detailled_str()}\n" ) + txt += f"\t\t\t- References: {[x.to_detailled_str() for x in get_references(func)]}\n" txt += "\n\t## State variables\n" for var in contract.state_variables: txt += f"\t\t- {var.name}\n" - txt += f"\t\t\t- Declaration: {get_definition(var, compilation_unit.core.crytic_compile).detailled_str()}\n" - txt += f"\t\t\t- Implementation: {get_implementation(var).detailled_str()}\n" - txt += ( - f"\t\t\t- References: {[x.detailled_str() for x in get_references(var)]}\n" - ) + txt += f"\t\t\t- Declaration: {get_definition(var, compilation_unit.core.crytic_compile).to_detailled_str()}\n" + txt += f"\t\t\t- Implementation: {get_implementation(var).to_detailled_str()}\n" + txt += f"\t\t\t- References: {[x.to_detailled_str() for x in get_references(var)]}\n" txt += "\n\t## Structures\n" for st in contract.structures: txt += f"\t\t- {st.name}\n" - txt += f"\t\t\t- Declaration: {get_definition(st, compilation_unit.core.crytic_compile).detailled_str()}\n" - txt += f"\t\t\t- Implementation: {get_implementation(st).detailled_str()}\n" - txt += ( - f"\t\t\t- References: {[x.detailled_str() for x in get_references(st)]}\n" - ) + txt += f"\t\t\t- Declaration: {get_definition(st, compilation_unit.core.crytic_compile).to_detailled_str()}\n" + txt += f"\t\t\t- Implementation: {get_implementation(st).to_detailled_str()}\n" + txt += f"\t\t\t- References: {[x.to_detailled_str() for x in get_references(st)]}\n" self.info(txt) res = self.generate_output(txt) diff --git a/slither/slither.py b/slither/slither.py index 13995f75d..ccf04a2e8 100644 --- a/slither/slither.py +++ b/slither/slither.py @@ -71,6 +71,9 @@ class Slither(SlitherCore): # pylint: disable=too-many-instance-attributes embark_ignore_compile (bool): do not run embark build (default False) embark_overwrite_config (bool): overwrite original config file (default false) + change_line_prefix (str): Change the line prefix (default #) + for the displayed source codes (i.e. file.sol#1). + """ super().__init__() @@ -78,6 +81,8 @@ class Slither(SlitherCore): # pylint: disable=too-many-instance-attributes self._skip_assembly: bool = kwargs.get("skip_assembly", False) self._show_ignored_findings: bool = kwargs.get("show_ignored_findings", False) + self.line_prefix = kwargs.get("change_line_prefix", "#") + self._parsers: List[SlitherCompilationUnitSolc] = [] try: if isinstance(target, CryticCompile): diff --git a/slither/solc_parsing/declarations/function.py b/slither/solc_parsing/declarations/function.py index 158c8e254..a9cb786d7 100644 --- a/slither/solc_parsing/declarations/function.py +++ b/slither/solc_parsing/declarations/function.py @@ -1348,7 +1348,7 @@ class FunctionSolc(CallerContextExpression): condition = st.condition if not condition: raise ParsingError( - f"Incorrect ternary conversion {node.expression} {node.source_mapping_str}" + f"Incorrect ternary conversion {node.expression} {node.source_mapping}" ) true_expr = st.true_expression false_expr = st.false_expression diff --git a/slither/tools/flattening/flattening.py b/slither/tools/flattening/flattening.py index 46b225a0e..dc017fd55 100644 --- a/slither/tools/flattening/flattening.py +++ b/slither/tools/flattening/flattening.py @@ -159,7 +159,7 @@ class Flattening: ): to_patch.append(Patch(node.source_mapping.start, "line_removal")) logger.info( - f"Code commented: {node.expression} ({node.source_mapping_str})" + f"Code commented: {node.expression} ({node.source_mapping})" ) to_patch.sort(key=lambda x: x.index, reverse=True) diff --git a/slither/utils/output.py b/slither/utils/output.py index 34d2557ed..2d89975a9 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -228,14 +228,14 @@ def _convert_to_description(d): if isinstance(d, Node): if d.expression: - return f"{d.expression} ({d.source_mapping_str})" - return f"{str(d)} ({d.source_mapping_str})" + return f"{d.expression} ({d.source_mapping})" + return f"{str(d)} ({d.source_mapping})" if hasattr(d, "canonical_name"): - return f"{d.canonical_name} ({d.source_mapping_str})" + return f"{d.canonical_name} ({d.source_mapping})" if hasattr(d, "name"): - return f"{d.name} ({d.source_mapping_str})" + return f"{d.name} ({d.source_mapping})" raise SlitherError(f"{type(d)} cannot be converted (no name, or canonical_name") @@ -249,14 +249,14 @@ def _convert_to_markdown(d, markdown_root): if isinstance(d, Node): if d.expression: - return f"[{d.expression}]({d.source_mapping_to_markdown(markdown_root)})" - return f"[{str(d)}]({d.source_mapping_to_markdown(markdown_root)})" + return f"[{d.expression}]({d.source_mapping.to_markdown(markdown_root)})" + return f"[{str(d)}]({d.source_mapping.to_markdown(markdown_root)})" if hasattr(d, "canonical_name"): - return f"[{d.canonical_name}]({d.source_mapping_to_markdown(markdown_root)})" + return f"[{d.canonical_name}]({d.source_mapping.to_markdown(markdown_root)})" if hasattr(d, "name"): - return f"[{d.name}]({d.source_mapping_to_markdown(markdown_root)})" + return f"[{d.name}]({d.source_mapping.to_markdown(markdown_root)})" raise SlitherError(f"{type(d)} cannot be converted (no name, or canonical_name") @@ -275,11 +275,11 @@ def _convert_to_id(d): if isinstance(d, Node): if d.expression: - return f"{d.expression} ({d.source_mapping_str})" - return f"{str(d)} ({d.source_mapping_str})" + return f"{d.expression} ({d.source_mapping})" + return f"{str(d)} ({d.source_mapping})" if isinstance(d, Pragma): - return f"{d} ({d.source_mapping_str})" + return f"{d} ({d.source_mapping})" if hasattr(d, "canonical_name"): return f"{d.canonical_name}" @@ -380,7 +380,7 @@ class Output: def add(self, add: SupportedOutput, additional_fields: Optional[Dict] = None): if not self._data["first_markdown_element"]: - self._data["first_markdown_element"] = add.source_mapping_to_markdown( + self._data["first_markdown_element"] = add.source_mapping.to_markdown( self._markdown_root ) if isinstance(add, Variable): From 312de4fc69e36fcd3259618fd8f9eacc80e2235d Mon Sep 17 00:00:00 2001 From: Josselin Date: Fri, 11 Feb 2022 16:46:17 +0100 Subject: [PATCH 020/202] Minor --- slither/utils/source_mapping.py | 1 + 1 file changed, 1 insertion(+) diff --git a/slither/utils/source_mapping.py b/slither/utils/source_mapping.py index 3e2beb764..26ad7c0d2 100644 --- a/slither/utils/source_mapping.py +++ b/slither/utils/source_mapping.py @@ -44,6 +44,7 @@ def get_definition(target: SourceMapping, crytic_compile: CryticCompile) -> Sour s.starting_column = starting_column s.ending_column = ending_column s.end = s.start + s.length + s.compilation_unit = target.compilation_unit return s From a5489f5b8376b604aae1e6144414487ee2bdda9a Mon Sep 17 00:00:00 2001 From: Josselin Date: Fri, 11 Feb 2022 16:47:33 +0100 Subject: [PATCH 021/202] improve printer help --- slither/printers/summary/declaration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slither/printers/summary/declaration.py b/slither/printers/summary/declaration.py index 629844a05..5888a1f00 100644 --- a/slither/printers/summary/declaration.py +++ b/slither/printers/summary/declaration.py @@ -3,8 +3,8 @@ from slither.utils.source_mapping import get_definition, get_implementation, get class Declaration(AbstractPrinter): - ARGUMENT = "decl" - HELP = "TODO" + ARGUMENT = "declaration" + HELP = "Prototype showing the source code declaration, implementation and references of the contracts objects" WIKI = "TODO" From 77a23a94484e6a4881300a5792844d5dd12545ab Mon Sep 17 00:00:00 2001 From: Tadashi Date: Sat, 19 Feb 2022 21:17:10 +0100 Subject: [PATCH 022/202] WIP: Fixed code for detecting solc version --- slither/detectors/functions/external_function.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 3f4c78f0c..c95191ad5 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -109,7 +109,7 @@ class ExternalFunction(AbstractDetector): results = [] # After solc 0.6.9, calldata arguments are allowed in public functions - if self.compilation_unit.solc_version >= "0.6.9": + if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in ["0.6.9","0.6.10","0.6.11"]: return [] # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be From aceab1243c895c0e3561be482c24125042298c20 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Sat, 19 Feb 2022 22:51:31 +0100 Subject: [PATCH 023/202] Added new tests and updated JSON artifacts --- .../0.4.25/external_function_3.sol | 11 + ...unction_3.sol.0.4.25.ExternalFunction.json | 130 +++++++ .../0.5.16/external_function_3.sol | 7 + ...unction_3.sol.0.5.16.ExternalFunction.json | 63 ++++ ..._function.sol.0.6.11.ExternalFunction.json | 341 +----------------- .../0.6.11/external_function_3.sol | 7 + ...unction_3.sol.0.6.11.ExternalFunction.json | 3 + ...l_function.sol.0.7.6.ExternalFunction.json | 341 +----------------- .../0.7.6/external_function_3.sol | 7 + ...function_3.sol.0.7.6.ExternalFunction.json | 3 + tests/test_detectors.py | 20 + 11 files changed, 253 insertions(+), 680 deletions(-) create mode 100644 tests/detectors/external-function/0.4.25/external_function_3.sol create mode 100644 tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json create mode 100644 tests/detectors/external-function/0.5.16/external_function_3.sol create mode 100644 tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json create mode 100644 tests/detectors/external-function/0.6.11/external_function_3.sol create mode 100644 tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json create mode 100644 tests/detectors/external-function/0.7.6/external_function_3.sol create mode 100644 tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol new file mode 100644 index 000000000..2ea376fcd --- /dev/null +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -0,0 +1,11 @@ +contract Test { + + function test(bytes x) public { + + } + + function test2(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json new file mode 100644 index 000000000..c7c7ae31e --- /dev/null +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json @@ -0,0 +1,130 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "test", + "source_mapping": { + "start": 21, + "length": 46, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 134, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "test(bytes)" + } + } + ], + "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#3-5)\n", + "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5", + "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "test2", + "source_mapping": { + "start": 73, + "length": 54, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 7, + 8, + 9 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 134, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "test2(bytes)" + } + } + ], + "description": "test2(bytes) should be declared external:\n\t- Test.test2(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#7-9)\n", + "markdown": "test2(bytes) should be declared external:\n\t- [Test.test2(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9", + "id": "a5b4753f43bb5a2a669ecbf4ce6ab1aaff060454657b16b5ed8cc9c34b521c79", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol new file mode 100644 index 000000000..641027603 --- /dev/null +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -0,0 +1,7 @@ +contract Test { + + function test(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json new file mode 100644 index 000000000..351921497 --- /dev/null +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json @@ -0,0 +1,63 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "test", + "source_mapping": { + "start": 21, + "length": 53, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 77, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "test(bytes)" + } + } + ], + "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.5.16/external_function_3.sol#3-5)\n", + "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5)\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5", + "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json index eee61a19f..5825bcacc 100644 --- a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json +++ b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json @@ -1,342 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.6.11/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.6.11/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.6.11/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.6.11/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.6.11/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.6.11/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.6.11/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.6.11/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.6.11/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.6.11/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol new file mode 100644 index 000000000..641027603 --- /dev/null +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -0,0 +1,7 @@ +contract Test { + + function test(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json b/tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json index 6e90c47ab..5825bcacc 100644 --- a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json +++ b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json @@ -1,342 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.7.6/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.7.6/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.7.6/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.7.6/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.7.6/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.7.6/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.7.6/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.7.6/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.7.6/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.7.6/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol new file mode 100644 index 000000000..641027603 --- /dev/null +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -0,0 +1,7 @@ +contract Test { + + function test(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json b/tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 8d26b12cb..29f143e19 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -487,6 +487,11 @@ ALL_TESTS = [ "external_function_2.sol", "0.4.25", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.4.25", + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -497,6 +502,11 @@ ALL_TESTS = [ "external_function_2.sol", "0.5.16", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.5.16", + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -507,6 +517,11 @@ ALL_TESTS = [ "external_function_2.sol", "0.6.11", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.6.11", + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -517,6 +532,11 @@ ALL_TESTS = [ "external_function_2.sol", "0.7.6", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.7.6", + ), Test( all_detectors.NamingConvention, "naming_convention.sol", From 666e8136c3f4f3e620eb9513f5ccec6da9237622 Mon Sep 17 00:00:00 2001 From: Alexander Remie Date: Fri, 18 Mar 2022 16:58:50 +0100 Subject: [PATCH 024/202] allow checking contract source against known OZ source hashes --- slither/utils/oz_hashes.py | 1571 +++++++++++++++++++++++++++ slither/utils/standard_libraries.py | 12 + 2 files changed, 1583 insertions(+) create mode 100644 slither/utils/oz_hashes.py diff --git a/slither/utils/oz_hashes.py b/slither/utils/oz_hashes.py new file mode 100644 index 000000000..d0f8ff9fd --- /dev/null +++ b/slither/utils/oz_hashes.py @@ -0,0 +1,1571 @@ +# pylint: disable=too-many-lines +oz_hashes = { + "16ad4eed535bc7e7ea4d1096618d68ffe5a02287": "Bounty", + "896a88e86ba21fe176d5e3de434af62ee531b1d5": "Target", + "ab36e566a3daf2aa0a8e129c150ed868a4902891": "DayLimit", + "07684a10bdf44d974020a0370e5ed7afbe1f9e44": "ECRecovery", + "0df8b61d53724353dff7ceb4948f99f4d5d0a558": "LimitBalance", + "a034f5999f05402616da9a54ed665d6196c6adee": "MerkleProof", + "7e2f3e9543ef140fb05e6cd5b67ee85f9e5c89e8": "ReentrancyGuard", + "1b983aa0e808ccb541f22f643011ee24e9eddc1e": "CappedCrowdsale", + "f48c976b3a18769596a181adc072c3266a232166": "Crowdsale", + "fc085749b4f49f6999c5cccd50c6a8b567b0ed5d": "FinalizableCrowdsale", + "2190fe74b4df2a58266ce573a1c09a047fec8b68": "RefundVault", + "06c26f4535dea69cdec2cf94d31f3a542430f692": "RefundableCrowdsale", + "e2e8a667511fa076aa2f4721a7b0476ded68f179": "SampleCrowdsaleToken", + "618409ffc0166d51eae7474a0e65db339c1a1a48": "SampleCrowdsale", + "4893616c2a59bcc5b391a85598145327f6c9b481": "SimpleToken", + "78d8f11bc1dd500ef6aa3bf95b516facd34ae97f": "Destructible", + "7c2320f840fb8175ef0338f82488b437bccb3a2d": "Migrations", + "20954e05e6a84d9d349f36b720d20057a5849126": "Pausable", + "98656c8719e36d1e018b5e7d907f84531d0cde71": "TokenDestructible", + "77c201c932c5fd7a11e30bb970afda5a5c1a0e6c": "Math", + "dcd94e653605571a4adaef30328837552088af90": "SafeMath", + "e102f7570918afe9b8a712ec7b8cf2ce2d7ccf06": "CanReclaimToken", + "18816a398c07b658ed4f84871d8afa1132ff2ea9": "Claimable", + "a51d83ec668c67ee7e3cb6744f207d7fba110ad8": "Contactable", + "ef49ebbffe424c8b829cf8d8fe07b0bdd4b6a32a": "DelayedClaimable", + "295a28a0cc845f398fd3f73fe7d7ebd3f217efb5": "HasNoContracts", + "0695e926e394b778337e14f8bbbdce3aee6756c9": "HasNoEther", + "e0d144a37d99136b64edec4bc0a7d5f003ca4eb5": "HasNoTokens", + "70334d1b91d44591475891c4a1462711d37a8990": "NoOwner", + "4bafe87e87f2f7924cebc0f210ffc504f62479ea": "Ownable", + "9f8caf856608726e48ee86370d866088590bf374": "PullPayment", + "a586769701d35125a8281597f0187c12eebf45d8": "BasicToken", + "1938eb4e2cdedd786c42fbace059fbe4591a3c11": "BurnableToken", + "7d6c8036444ef12c4293c12f6dac7ea09b009ccd": "ERC20", + "26cac836b179301d90c2fb814eda7f46c0a185ef": "ERC20Basic", + "9414672a30d64bb82b495245b0dd47ef4f9f626c": "LimitedTransferToken", + "0774060a7337641beb9a43a8c0bdcb1c3ae145bc": "MintableToken", + "b3ce90caedd7821ec2a6f1bcbcda81637501d52b": "PausableToken", + "3af6c4bebea1014a2a35abccc63a5fcba9be70ab": "SafeERC20", + "cc3aea9e2f2110e02913b2ce811c9ed4beecf465": "StandardToken", + "fa1616bdd4888c5d16500a3e407fa001ddd75df0": "TokenTimelock", + "09c671cd62433379e237d2fc5dc311af49cf1f5c": "VestedToken", + "7762232a812e8fa5f4cc1f41d0e8c647839bcf3f": "AddressUtils", + "9adc4ade8a73cef7a0494e49b3195491f2567630": "Bounty", + "dc527f7040995e42e07446f383fd40b293814e4c": "DayLimit", + "91c4da8fd04d8dc4678a741b7a553a7fc47bfc0c": "ECRecovery", + "e362496576b5ef824429b2aa0634a04e5e13864d": "LimitBalance", + "d2ad47f4ddb62fb8bcb3f4add161aeb0f3f5a4be": "MerkleProof", + "abe9489ed9de21737a43ab9698d131e7407620f6": "ReentrancyGuard", + "76fae86d089153d66e6e8402d43da9485c2113a8": "SignatureBouncer", + "20c12a01e1c64fa836c2569bb44eb852d44c7c5c": "Crowdsale", + "22465351d15ee5cd18d91ae8ab159129d4dcfb4d": "FinalizableCrowdsale", + "9774a38be6323299d069a8756b44179c880e7c1e": "PostDeliveryCrowdsale", + "e933560cd155790112d5685ed76df0e235c780ea": "RefundableCrowdsale", + "d7910b2369b470f77e0e14605a8b061d6e2bd46d": "RefundVault", + "2661d9bc3203d658e7ed5d29a47fa66e0fdac5ba": "AllowanceCrowdsale", + "eb321ffdfe7be1efaefc8bdd9e6acb46eca221f4": "MintedCrowdsale", + "09016aac11d32d3fda430c154c180afb2fb7732d": "IncreasingPriceCrowdsale", + "1ff28b511dec3f0515c96d659e10f6ef7c47ce0b": "CappedCrowdsale", + "e789d95184e0adabe7b5b79510d3f32c9d882cd3": "IndividuallyCappedCrowdsale", + "d062ebe0b22232bb1d8ac84cf09f10c3cbea5618": "TimedCrowdsale", + "7d396a8c6ff432ad5e51697af40baa20dbe97603": "WhitelistedCrowdsale", + "9e1ceee37e77060c7b13a87909cac0902e2ad81e": "SampleCrowdsaleToken", + "b1a63d12b5f88f0b4d8d0283aabcb052b03b9a6f": "SampleCrowdsale", + "4ffdf78526d08ef08faa67476631359f1f34d39c": "SimpleSavingsWallet", + "848e77f0c272c709d7df601a0a7dff1be871aa47": "SimpleToken", + "149e2bf2bf05ac0417a92de826b691e605375f87": "Destructible", + "9ec21dbeba82d8ffbb547ec3efc63e946e403433": "Pausable", + "0636e347e26d51691bbe203f326ed3a81c14893b": "TokenDestructible", + "8c43814c5d4144e7241ad3acf036831f72626f53": "Math", + "dcb0461fc135342c8335ec971c0fce948749fcad": "SafeMath", + "3c84335582613c4f61db5e2dba4a5bdf9a32647e": "AllowanceCrowdsaleImpl", + "f27124a3561a89f719110813c710df74b8852455": "BasicTokenMock", + "882c0e313871f9bdb3ade123cd21a06e80b9687b": "SignatureBouncerMock", + "767d1b9bea360813c53f074339dab44dba2be3e1": "BurnableTokenMock", + "c06b8492aa76d2b3e863e9cc21e56ea9220b6725": "CappedCrowdsaleImpl", + "5e4b5478ed4656e3e83cae78eeddca3ffdc77ce7": "DayLimitMock", + "c07480985ff1aef7516290b6e1c6eb0f5f428379": "DetailedERC20Mock", + "01478e8bf733ffd6b1f847f5406b6225c8b02f1c": "ECRecoveryMock", + "17b3d5a66300e613b33d994b29afae7826d66b15": "ERC223ContractInterface", + "02100ab471369f65ef7a811c4979da275426f021": "ERC223TokenMock", + "ed7ae160a58372fd8f7fd58b4138ff029dd27df1": "ERC721BasicTokenMock", + "c6c6e961e36c39df202768b8fd18f1f76cefd1ff": "ERC721ReceiverMock", + "400593f520c28ce9b68fb12bd4dd3f869f570f39": "ERC721TokenMock", + "2442a363e65369915bcde718b986a2143220fbfd": "ERC827TokenMock", + "59841830db8f308b717f22514cbc406dff101d0f": "FinalizableCrowdsaleImpl", + "2022504c8205da3c77517ffbc24ec595065050e0": "ForceEther", + "f0aac4a39cf1687f94c084250f2aadb75f9474b2": "HasNoEtherTest", + "aba043594e0651956d0ae8be33625f29883a0503": "IncreasingPriceCrowdsaleImpl", + "e04e7327bfe0b1c52d1c6ff340837d7752c6a1ef": "IndividuallyCappedCrowdsaleImpl", + "3860cb9cc1bcc675eabfc3fc498c012f97956f89": "InsecureTargetMock", + "0ae95f3ba71966844f02df90764349726fa5faa3": "InsecureTargetBounty", + "056f7fb47b260ca924e77d4bf345dcf67e62b732": "LimitBalanceMock", + "3c0eb7e3a1376c180c4afc060e6b02ff2dc0a12a": "MathMock", + "dc1cbbcf7506800281d7264f137d2d20e30c980a": "MerkleProofWrapper", + "bba58d62208bcee8307170a5dc002d5f0c0c1d2d": "MessageHelper", + "f5c9e9e324b4d6f1ef41008850e5dbb0e525c234": "MintedCrowdsaleImpl", + "8d93ca1addadb71893e2016bfa26db40fc2f4a2f": "PausableMock", + "36659de8c778859e75e98389e40f86261ca0becf": "PausableTokenMock", + "a297f3f1391501f49a3d8bb132e158faaa7249b6": "PostDeliveryCrowdsaleImpl", + "2695bb63d6fc96d972146f159cb17d2bdb7f1cd7": "PullPaymentMock", + "b087e928c74ce7d5adc14e9b484bb7de22f268d4": "RBACMock", + "0bddfeb265ff29d4c3d6ca38852747a1e21318ad": "ReentrancyAttack", + "a9a47c2b37110ab4c5a96948b848e823abb391b9": "ReentrancyMock", + "585bffaaba0b7bb6fd37817b94d373ec54c4d2c7": "RefundableCrowdsaleImpl", + "30d70d64a1416b8cead631c93b84ed113b5e18d7": "ERC20FailingMock", + "ae5f3e2f0996d8b0445e4890701f35389fd565c5": "ERC20SucceedingMock", + "b5703426566223d0c7e0079a8aded144192c330d": "SafeERC20Helper", + "378b31ac238e143f5f752834203492dd3980522f": "SafeMathMock", + "2f487c8b59cc0cb91ea2ee7aa7a2b7b9bbe22a02": "SecureTargetMock", + "78c3a5e7b0d5b58efe770c54a73b42bf1d242d9b": "SecureTargetBounty", + "c4cfaf59a49f506e31c3acd8d3ae8624613c2044": "StandardBurnableTokenMock", + "5a3481b0e8029747c9bf839d7a12b7f831513ba7": "StandardTokenMock", + "eded4e7da3e73140ba6fd5a80217c562c5922c47": "TimedCrowdsaleImpl", + "b8eaff3a88d6c9b87a050ae4e3caf8eb39c508f3": "WhitelistMock", + "2e295e4571f9f017638cd4b9e013ce502d4f2759": "WhitelistedCrowdsaleImpl", + "dd349689f6d497b6d60d18af598981c0c5ea5c43": "Claimable", + "b4c914658062b263ddd7bbad7a303f9aadb8edda": "Contactable", + "379f3940245b3bf07e3da0ba8bacb31a7b71837a": "DelayedClaimable", + "04a144226212c8093a72edac65132dfebf5cbc34": "HasNoEther", + "e581fe4461bda93a810cf8f56e985d7b17e5c57c": "HasNoTokens", + "adca50311c8c516281fae62e7bf8711b247dd1fe": "Heritable", + "bff7a458838d22f59d77dcb1e4c8f71ad9e6c6ad": "Ownable", + "b92612ef15ec3b9d6df30a8f7becdc945bde3d4b": "Whitelist", + "c9ee90b58cfe7db8fb2093a5dc6ac901e3560376": "RBAC", + "d07bdfe9e5c1197eaaeb8db19a60b2d7c8b08a88": "RBACWithAdmin", + "3bf165712333a39e76e159a3406fa49517afe215": "Roles", + "7e998f3b5ecb8820313c1bb24dfb0d6d99ace954": "PullPayment", + "74d3dda7f213a09504a9a9291a40a3dcd8365fbd": "SplitPayment", + "819441e9e704135b09b0b1f72db902159a737913": "BasicToken", + "27dea92802e715fa1863d34fdd4d5c9c07f2447a": "BurnableToken", + "cddbea62966149d6c6e6709ab8568b3c4f0ad494": "CappedToken", + "cf6e58a034f1418d57a0f1952afb136e82102f94": "DetailedERC20", + "8d2f3828797c3e84f29d2c8cdb6ed25ee69511f6": "ERC20", + "953db1b3480bf572e44ad6fa898f6c6bf2eee57c": "ERC20Basic", + "241b903da1f922131be0e2bdf10c4306082848ea": "MintableToken", + "b34956dcce7a77bd57b4fad7545ab5988bf8dbf1": "SafeERC20", + "de2af31e6fa1013b6f867fa12ccaa7696d9442d7": "StandardBurnableToken", + "50589279d9b57e6c0ad23388176dda20dc4c491e": "StandardToken", + "be03e255bc582a956bff757a7e1a8bad8bdc3361": "TokenTimelock", + "59d01319278f7765dd0e242d02c1ca82e6ba091a": "TokenVesting", + "012926dd9f55e8dfe9776b9f1df62546bca5ecc1": "DeprecatedERC721", + "30067e830dea40199578d0debf1d3d2c85b310df": "ERC721Enumerable", + "4a83cf38bff15fc12b16638f7844fc0f8980f9f3": "ERC721Metadata", + "2e8afdc67c556a384622e8f1518264a445a92b57": "ERC721", + "bb0256dd101e575fe0c2371482723f8e2c32c087": "ERC721Basic", + "a8eecb22ae520032234d75016dfcf803ba6fba82": "ERC721BasicToken", + "5ce55c0eca12e6589b4ccef66917574890fdf1af": "ERC721Holder", + "4646738364802bb2215ef7f4062cdc03bc33bc33": "ERC721Receiver", + "24749e32f3f9f241cbf61755cd27c4e1c33ec6ef": "ERC721Token", + "34e294455d0b633a92c85294e33391da976dfff2": "ERC827", + "5646047a82bc6b598f782b9ecfbe0ef37b1bde4b": "ERC827Token", + "ba598a71f86f1d7453d8d921680d7bd75d34a15d": "SignatureBouncer", + "af99a0bc53580c8d654923048cec891e61e24a6b": "Pausable", + "eaf939ca050feaf102dbd9835b6a67eb4b51e0b9": "SignatureBouncerMock", + "c998cfc7431ac0d0c66f70f0982b3e8659c6bfb9": "DetailedERC20Mock", + "a364bd1d78dd9528eb357f93c190db2652cbbd5c": "ERC721TokenMock", + "8b07a36751ac1e354baf93be047c852143a57119": "PausableMock", + "70b936df444e167029f22e8ef48b007bbe37d544": "PausableTokenMock", + "dc38f5ba7ca5eb5a8a85b7b0e9d8288a1e70e41d": "RBACMock", + "d1f6822833daab2b5c6521ee6aacc6303b946095": "ERC20FailingMock", + "87310193da0df53c2be5ff230d2704011a0806a5": "ERC20SucceedingMock", + "d1dd6a62116d8605377f70bb5de6f2c70ced3d81": "Ownable", + "be72653e125b02bb575d00a9a8db2b40aaa6bc9f": "RBACWithAdmin", + "7c353bddb33d9c15e9aebfb843a1e5d63645f267": "SplitPayment", + "a0b88b77efc2a12f98310d83fa335fa5564cca08": "DetailedERC20", + "feb56e7c42453ae5639cbbcae4b8d8e5c59447c2": "DetailedMintableToken", + "cea5d86a5cdca1d9dd226d199d740a3d3cd32d07": "DetailedPremintedToken", + "6bed3b69e3391bded476aabdd2c5f861819e73f8": "MintableToken", + "46ebd57a637d411818418140d0aa63dbf1cc2246": "PausableToken", + "5cc2a3e344df53e317dbe38e76ac94695a38e9e0": "TokenTimelock", + "3e7d8f34659881bc3b2ca951668372a47f79193d": "TokenVesting", + "e197b8a76f56af18f47f67a89005390e3bd55694": "ERC721Token", + "1b53bd5e5472c4a818e266b64d0f9e6fd49857cb": "MintableERC721Token", + "ec78d7ca528901ef6910c0f44ab705b870742c90": "Migratable", + "fc413be3907db5515f084a8fff63bcc8c5635400": "AddressUtils", + "31c153b4c6b900b16219cae11feef97ce4076143": "LimitBalance", + "962b05e5b0824201f5aedc58501637db05b154a3": "MerkleProof", + "b08f9ebec900e55ba7b20624dad0097bc243c12a": "Crowdsale", + "5124365778e24aa55c9e06bdf26149d4310d95d0": "PostDeliveryCrowdsale", + "57737cab20c3fada86461ebe4df4b14d7d515b7a": "RefundableCrowdsale", + "1fdb50fd86681dfa181c490bcdef28171be6e6f3": "RefundVault", + "cde035237ef2f07d69f3756cd9d1305cda39f749": "AllowanceCrowdsale", + "e7b6247a1c2be98eb8a1c56486c3f17dc60b98ed": "MintedCrowdsale", + "e318ca5d228fcbbd844491efd5fee829e32c53ac": "IncreasingPriceCrowdsale", + "e9b16e3a549af2c8cd56090702d269b432a80283": "CappedCrowdsale", + "bdaaf0e469b346ce4d51c3fe15d14a4b02bc990e": "IndividuallyCappedCrowdsale", + "eff0fd34b36c459c2d98f5a04a7b04fff08674e0": "TimedCrowdsale", + "8a1c7e2eda5d6444d767db6e960beb998e94e523": "WhitelistedCrowdsale", + "35690875b56b9ef06dc5c82640a067bd9132901c": "RBACWithAdmin", + "c5dfbb1d2f9641afa4f031f2f600f697e9a77b05": "SampleCrowdsaleToken", + "9f752a8cbc435f39d6c36760d3fff29d99d079c4": "SampleCrowdsale", + "edca9f3d7957cef23f6f3209af3eee94ea523194": "SimpleSavingsWallet", + "f844de78dd748876a43a33fa9a6caccbe3fb511a": "SimpleToken", + "0c02b9e264482b9501239880d508d2fc45a921c7": "Destructible", + "d66ff49a491298f7d0aadc302cce5b80e20397c1": "TokenDestructible", + "ee4d3ec37306122ceeec79f60680a632176509b0": "SafeMath", + "1e3619093d26ad06a7fd448a3e4db543de00d219": "AllowanceCrowdsaleImpl", + "565c175208220601b83adfeaca95bb41efe016c3": "BasicTokenMock", + "635c6422d4af70e8ffe48d54148f457329870eaa": "BurnableTokenMock", + "e7177cb6bde32587072093fece1269add34133cc": "CappedCrowdsaleImpl", + "63f108c805f519b16c8db619e7274d4937aad376": "DetailedERC20Mock", + "fb554453f065e88a35f0d412de76fe4e83686366": "ERC223TokenMock", + "e288225fc414795b7697952164f0e2a02fb89e97": "ERC721ReceiverMock", + "774d1a89a0f8fbb420f6a6586b9328e6853d5f7e": "ERC721TokenMock", + "8d29283dd9ef9bde0001ebf6a7c765a6af12bc68": "ERC827TokenMock", + "7449c745206ac15d5192ba7a16bed39819a50113": "FinalizableCrowdsaleImpl", + "60704a7554b0ad4ee9d0626bcbbadbac87d8d270": "ForceEther", + "b339de538541166e1bf3390a1b07fef171e03b00": "HasNoEtherTest", + "80198840976a3fdcdcf2fa5a8d9454b1e39004de": "IncreasingPriceCrowdsaleImpl", + "9628906154701c6e5306e6da622b4db92cc6f6ec": "IndividuallyCappedCrowdsaleImpl", + "cd5924adb9ef87e99bcd94ae9ae57b7a6897b1e0": "MerkleProofWrapper", + "1f6d4d30c38abd953fca5a89b5193e10df9d1751": "MessageHelper", + "0a1706f232f69f32bf2954b566c7c2c14d69392d": "MintedCrowdsaleImpl", + "c684d5ce1dd245aa8c912952594a373f977c76e7": "PausableMock", + "3be1ec9b4f338c96d86b894ba8ceb846fb647c23": "PausableTokenMock", + "b28308433da65d22476951196f1caeb41f26cf33": "PostDeliveryCrowdsaleImpl", + "559fa0817335651783601a27dde5faf21fc686b0": "PullPaymentMock", + "8107d16875287a7046493571b10dd5eab0d97976": "RBACMock", + "07e16eeb1ec64a6995695ed1816a95243000f8a8": "ReentrancyMock", + "f0bd68476f483619630828a8419d39ac57d0f49b": "RefundableCrowdsaleImpl", + "2b40af803f1243f59805beb75d2afadf5fdb84a7": "ERC20SucceedingMock", + "3c6b59e930edaae5e84ee9338017b301d7fc12b4": "SafeERC20Helper", + "695a35876abcaf66f60903ec69331e522a9001f8": "StandardBurnableTokenMock", + "07eb9f220d92b3b0a026d03abe31782e18b8a3aa": "StandardTokenMock", + "13a503e0871b386c82691937b1cdca7542f35bbd": "TimedCrowdsaleImpl", + "f401c66a3d208ecf85040784b4eb8bb14e20d0e7": "WhitelistedCrowdsaleImpl", + "93407117e15d8a7a63deaf473df32c73518a30ea": "HasNoEther", + "baa2d89bbdb2edb622a4c9c1fdc23a6642d899c4": "Heritable", + "211a4479365db5f0eaa4377da409e42db4a25b52": "Ownable", + "ff57312417ac31bd0332308e65ef44f4d4062111": "Superuser", + "2db796d1517717fca1dd3983832f3a45f390ab55": "Whitelist", + "2ee8d28f85d2697054414783e221260b9a7f6c97": "SplitPayment", + "cd31a5ef466eeb34195d244e35a3c87b253e9788": "CappedToken", + "405f965e67819b1bd2a94f8c121e66fccb198b8d": "DetailedERC20", + "1fafc8de20663f8ceaa7386a89b7c9e5dce82a3f": "ERC20", + "dfac014d93a70a21a3b8b97e3d1b57efd14fe545": "MintableToken", + "c9027d7b556e7e687bec0304ffaecf1d474eabfa": "PausableToken", + "968207fdc2ce386ab24cac2101d8d0e7f9eb7417": "RBACMintableToken", + "87f48da5d43ba18ca15d7347a5626cc37cf01dac": "SafeERC20", + "ab442d8dd4ecf1d472d9dce47ea1157c27d0a44e": "StandardToken", + "075e8adaeaed593aad3e14ca9820df4e55e364e2": "TokenTimelock", + "1fcb0b4c52970b0f395e2da5bc6595daa71daff2": "TokenVesting", + "ef375977e93dc6aeae3256bc5a0c0ed23a734df8": "ERC721Enumerable", + "15405a8487b11120873f75247b1ab5461f1ed8c7": "ERC721Basic", + "4a3380e9127e514a0630ea0656facdebfe716acc": "ERC721BasicToken", + "1c47823ad3c15275bfd34a4c1a66525fca5454bd": "ERC721Receiver", + "95a8f9396ea8cbc14f6cca9a8b6492fbf2437f18": "ERC721Token", + "9fcc86aa8a8ae5217bd10cce1a954c5cb7caac82": "ERC827", + "68b878162744df8ddb16479dd790341cafce251f": "ERC827Token", + "9c4ab3267a3dc0ce51b3baee28fae5006a3be725": "AddressUtils", + "452fe8fdaa7d15bbe79e9ab641f3307b1bece216": "Bounty", + "4b73fc34d4fe601e4c4065e08ec11fc8c3a1ad18": "ECRecovery", + "19ced19ab2d8edf9fe46282e242d8b52a09f7bd6": "MerkleProof", + "4e1211d90f62f0b3d59bb318ac744ac95e6f6317": "SignatureBouncer", + "48d836f14524ef04eccac96647887425545781c0": "Whitelist", + "ee718ffb3fe3609d882556704f41c62311effe27": "Crowdsale", + "6bea0f0c1a89ad2622afba8f47a0af62c2799629": "RefundableCrowdsale", + "8da34d0e919bf9d1a2b1da81e797a6c2c1ed60b4": "AllowanceCrowdsale", + "8bf8cb311ea7d15c8ddaf54454e60ce44a60bdf4": "WhitelistedCrowdsale", + "a1419a713627dbb2ffea8a68c616e0a051f1b606": "SimpleSavingsWallet", + "0b8d54f5efc4de837b7dd93996db086849cb14da": "SimpleToken", + "a7e1df3805ef75dc41a754ae5546f06fec8cb03f": "ERC165", + "5e7625321628749b31d4c4cc45e2d90b556d6409": "SupportsInterfaceWithLookup", + "c1351bcccd9852179bfd81b241caaa056de4be3b": "SignatureBouncerMock", + "cd6add9c23aeffa94971107e162281b260df91dd": "ConditionalEscrowMock", + "5b43908bda2ed2a2abd97bdc0c726f4e0a994686": "ERC20WithMetadataMock", + "afd20cd7880b7afcab66a1177bea6b85ba76ae80": "ERC721ReceiverMock", + "a53e6a8705e545971a03677411de3e3e2fa21104": "PullPaymentMock", + "66ac45d59afe1d96a3512f788c9f1742c8d6948e": "RBACCappedTokenMock", + "65022b9fefebb8d6c04e9d7c6869843a504cb607": "ReentrancyAttack", + "429c0d0af89af3652ab701919da11ce73a98d37d": "ReentrancyMock", + "b956eb0e6216174795f2ee06204c7da650e845b8": "SafeERC20Helper", + "c2ef9875134777ad5fb22ebdc123e383caafbd19": "SupportsInterfaceWithLookupMock", + "aaeffe18854cb829f1a400a2d89f0b625a5b345d": "WhitelistMock", + "ed2e1b404135b09fe5f0d79f95dbe33b78b587f0": "WhitelistedCrowdsaleImpl", + "319335756a88f45e8684a029ca1c8bc0a311da2a": "HasNoEther", + "5527c4a0bee8b4bb21e2b8f3aef283d724dc62f6": "Heritable", + "d2e619214bc724aeb273d48e420db453b3ffe31d": "Ownable", + "4ace23c2264121b28731efcf28cd3552e6fca588": "RBAC", + "2bfe51db8ee661f769d98f9ae45361a9b8f6e0ec": "ConditionalEscrow", + "627f53ee54bf4c94d1cad825b7ae55998a65bc9d": "Escrow", + "78f1f3f29386d9b09253ca23087eae02c2efedcd": "PullPayment", + "142c5a368e011d0578205a2fb5f776b4937605df": "RefundEscrow", + "392ccebdf4b62992e7460dc3f65064cb5d042a45": "ERC20TokenMetadata", + "4a35664713c0831432f0f44b72df33f7eed2248a": "ERC20WithMetadata", + "38c60461bba3a6795a0459e3de0c035ee1d1a53e": "BasicToken", + "917071f9daeb837c90acc2222568398b048b95f6": "CappedToken", + "2b6593f6ad447e65d848bc4bfec26e9a8b34557e": "StandardToken", + "3e6344b21675b204f35c12801cea0dfe18d4d298": "ERC721Metadata", + "ed3cce364a25058da857c468423935a1b5fde50d": "ERC721Basic", + "1a45edece56696e721cddc98e8f6703a1d8bbf9b": "ERC721BasicToken", + "cb15d8841ffa1b27b982e31901772957f6123aad": "ERC721Holder", + "715d07f7f060007413defdb6fd5c6934486f34f7": "ERC721Receiver", + "0144a17b7f1ed3cd662df4069296e2e1c32c8dd8": "ERC721Token", + "0450b83815a1e26a02b54c4233ac7aa4cf053ea9": "AddressUtils", + "d583f3e45f2c243e55ee47a107a29bb9e972fe68": "AutoIncrementing", + "a8144e43cf0c0c8b0bb54dcedb0531639e4d00d8": "Bounty", + "d3f87956fa5f05f54106216a9c4a8079ba8d086a": "ECRecovery", + "094905728bfb1ba7462642ae7ce245c709717531": "MerkleProof", + "3cb4bc1e9a9a34a46858922cba2f0af59d767054": "ReentrancyGuard", + "c00a7c93b18d897e6ebf868e0b093ed6ace719dd": "SignatureBouncer", + "a1b464a6a3a1bbbd2fe33b5c231eba11236fa92e": "Whitelist", + "12a2f840294d267c6950a1347b726222b416ed46": "RBAC", + "50dd834b3d24a0bab1361fb858cbc51cf67ccbcf": "Roles", + "e11c891ecfb38b3bc7f4cf1363aae79feb99cf12": "Crowdsale", + "8b5f8bc529ee24fd54869c1d3dcfc18990a59548": "FinalizableCrowdsale", + "2b6997bc5d0b3be1d0e2c1869353383a2fbd4993": "MintedCrowdsale", + "59ed05ce0be380f62d4a3999c32428497594e327": "IncreasingPriceCrowdsale", + "8a8a532f2e3ea4c08ff27af946fe20298a1e45ae": "IndividuallyCappedCrowdsale", + "8a9c055e3d1349a664caa802eb204cd198a0f539": "WhitelistedCrowdsale", + "230848a3836ccef1f4430b0bf203cd21f8052291": "RBACWithAdmin", + "0ce489b153032a7ee90ed0eddca2c52daef1abf3": "SimpleSavingsWallet", + "1a2d42f20aef6df99897db234b801340a423450c": "SimpleToken", + "90d9d40b3412f59732a2bb622a88a4bc36f6b821": "SupportsInterfaceWithLookup", + "2321441ae68a4e14b2306c7575958449a3c29b98": "Destructible", + "ad31f71ee52649c94cb438200fd1c1ed08094bf5": "Pausable", + "53f24a0ac15b157dbbc3f61d5c1408998c1db0ef": "TokenDestructible", + "2ff3848281b684d98af5b73bd62d933ad9795e1b": "Math", + "5b9701e018c1d6a97bc507e5c00433246ac7f025": "SafeMath", + "a03dbbc1c4f0ae5e64d672d84690dc48152e2650": "AutoIncrementingImpl", + "977f8bdafbecf36f639f00746a506a0665e14ee8": "BasicTokenMock", + "68cd257584aa39dab35cc08947cb4aabe9ce852f": "SignatureBouncerMock", + "f08f0cd0d441234b1b15fa1cc1aeed01d651523c": "BurnableTokenMock", + "482f4acdd6c3523e078f68f3905f8e9c0bd96f85": "DestructibleMock", + "e5b1031669b3bfd06fb12626a47888243c07c469": "ECRecoveryMock", + "d439e3f9b056d304aba764b34c2623b4600c55fb": "ERC20WithMetadataMock", + "22f1d1e0932e3558eef115f3e867619c135b5a26": "ERC223TokenMock", + "c37afaa6e4b7ab6775e3c9b3b2c1b848ee3e0548": "ERC721TokenMock", + "fa28e9b84c25de3655f8068c07f5ae030f00705c": "MathMock", + "41437f07fa0866525684129c46b107cf2a28d9dc": "MessageHelper", + "e781977728414ecb0dc389712cbaea2f3c1b2401": "PausableTokenMock", + "c5cbc9122a21b464aec57faf3e8b783f455f3175": "PullPaymentMock", + "10618dab995da34a38ef8e7d53b069a7b0bda621": "RBACCappedTokenMock", + "9fae112623b416c1c3a847d6de92967854f4e3ba": "RBACMock", + "84992bb16c0aa52e586c7ce43af9f8ef80d71382": "ReentrancyAttack", + "ec8922620cd3664ea34d9295aa85c64b77b61c0c": "ReentrancyMock", + "2cddebeab16c4e11f6457eae79615514d0467224": "SafeMathMock", + "ed5496d88df044b594a28d8b4e2b02aa8c5c98a9": "StandardBurnableTokenMock", + "4b79de8b6a7b868ac3db16c36c7caf1511dc4e9c": "StandardTokenMock", + "207467653a042b1e3f796be82daa00deae4be4e0": "WhitelistMock", + "3b64fac09338834e7f31e4a94857c405644ad27a": "CanReclaimToken", + "39458b20c5ba02b89578bdb4d0569fdedbb89449": "Claimable", + "30b2eb1b65dfd72e93c6370eec1b66cbc77514b6": "Contactable", + "d08d45bef636d729b4781cee2671f02dfc65cd46": "DelayedClaimable", + "733f7047e97a7426847cbc4176463ee020cf48d6": "HasNoContracts", + "4a4e894cd3cd3cfa4dcbcbd9568f81d20cd4e307": "HasNoEther", + "b025cfaf6f8e5da5efafe9883f25f18bab015a1f": "HasNoTokens", + "98a5d657fe6eb93bcdb660880496f6c163e654c1": "Heritable", + "8d77727ba855420961ee128de2676fec22402a03": "SplitPayment", + "55799f56ada0b8e0bcc75ecce38851eeb1332d8a": "ERC20WithMetadata", + "3c34d6a7f6c127303531d7e54e94a47fe0e30e82": "BasicToken", + "c784fa49f4c22ac28509c8b0d54381eabcc00a99": "ERC20", + "d89b847b33cf7f9529f426c6ed57e4b12cadda40": "ERC20Basic", + "c992e0acf64fafaea8a3158d8d80b84e22b3aaca": "MintableToken", + "bec3d2b20fa3b24ef5ac434c4a01b47b1e64a134": "RBACMintableToken", + "60e42b733ad56c03b8addc0df215791b1338c01e": "SafeERC20", + "ee8d24c22c925406ad22c22adab9654866eafdf3": "StandardToken", + "28a8c7bb0a04847910d3f9eead16d6d449620534": "TokenTimelock", + "1d8a3c508c18473083cb5db9961a36ba1a7f796e": "TokenVesting", + "c29ab0fd5418aa6c45a6e82f4d5a4f1477241875": "ERC721Basic", + "40d61fc659d2cba425f99f5b2656eb37b35731a4": "ERC721BasicToken", + "bb10ec6ee3cdd5386ecfd6de333f1eeb6a377689": "ERC721Holder", + "950c07b39c3ca854d94e48357f5d453e4c9c1965": "ERC721Receiver", + "6a9692e0a456886959918a48694dcd3dcb8baf5f": "ERC721Token", + "f0a61efe61df17f5559adaead1964139182d7dbf": "Roles", + "0d6fbe8089bfed5e4961f8bc56d5c8fb7be2dbda": "CapperRole", + "c7189a4af9a64378f15e69b14fc8e8b9cf99779a": "MinterRole", + "61a08e1edc53903eaeda23582b34825c0a67d23c": "PauserRole", + "d775bbc48440cc258eaa96091fcb81fa08bad123": "SignerRole", + "de16a5f2763080c0e057578a3cca2c570af9d066": "Crowdsale", + "567baa80771bce105326a8b76f150738e6a10db3": "FinalizableCrowdsale", + "ffd73415ed9b47f97e48f5b42212bb055b4d21ed": "PostDeliveryCrowdsale", + "ab93b46587fb58c1adb6cbd580ca17412917b74e": "RefundableCrowdsale", + "a3a1fa663a64dda4b8c95f50c518bad87f75541e": "AllowanceCrowdsale", + "656d0767acf97048298609648350fd1b019442a7": "MintedCrowdsale", + "9ab95e8d5b012575e490704b512ce4928dbee629": "IncreasingPriceCrowdsale", + "41f26f62f9f5227b1b6dbf65a6196c226e0939c8": "CappedCrowdsale", + "b8bd1ce8e8a33223abedb3548de7c2f989969ebc": "IndividuallyCappedCrowdsale", + "7b2a6e8e9aa71fb6a5d28b20399b0f5dccbd5463": "TimedCrowdsale", + "e6060cd66b2d3908f948ae9b850e85c3464ea305": "ECDSA", + "0260526f527ee9224774358021b9859015296518": "MerkleProof", + "1b7e98ea211e7445e5f678fa148ea775af49b6e1": "Counter", + "5be5fa4c91b2869c02f52a199e21be5806044560": "ERC20TokenMetadata", + "d769c77787738e2e01649f5b5b943fb06ed9b8a9": "ERC20WithMetadata", + "423800580427804d9eca8b706c43dc0297e37614": "ERC20Migrator", + "8d7f569e100340e8ba17eaedc939ff68b406b05e": "SignatureBouncer", + "b66a976d5f147079fb9c7f0a12415e008f585598": "TokenVesting", + "3f9165306b2f53880ed5096af1b4e74db56da9bf": "SampleCrowdsaleToken", + "1265d4f6bf6767e10033e733858ee6fa32a9073c": "SampleCrowdsale", + "3c7f94391a02d5dc6f8f262ec96b3bc2a4b25640": "SimpleToken", + "713380dc6ccc9d47f8d31a25eb0e446ebc4b4863": "ERC165", + "c281f8016ab3d891630a35bd07f11dff97431234": "ERC165Checker", + "1d4d0241d585c68fb08c1599437a4eea11eeab02": "IERC165", + "313e8327db21cc8aa166fe5721eb99a46e4fa19c": "Pausable", + "3d6ac03389ed6c835e26b7ebd8cd6f5bbc37934a": "Math", + "8580d3e0df2d45ed48cbd99d42c0934038129cf7": "SafeMath", + "113210a137c1be5187dcb3918a2a521d63f540cf": "AddressImpl", + "e09a6efec62a3a1d426fcf5bf0a6ef150cadb36d": "AllowanceCrowdsaleImpl", + "34f5dc1d6acd84e2efeba46c180527f251dadcca": "ArraysImpl", + "5fe750839b60d2691dfc55d926090028b5003043": "CappedCrowdsaleImpl", + "39412da7b5fdc81977acbda550e8dc71f6dba41b": "CapperRoleMock", + "717e4d2b812a14a6c4d5658cb94dcc835a0af6f9": "ConditionalEscrowMock", + "85e956ec45ece826f1c53505c1f035f3329fe0ad": "CounterImpl", + "7ab9fe5373ce944504f2893349ea086b216b71a8": "CrowdsaleMock", + "c321c20499e195867282851da42f2ccbbdb96167": "ERC20DetailedMock", + "5e0bcabbb2cfd18eb2d43ff6fd8d8e20dbeeb019": "ECDSAMock", + "a5da195613c182f94167d833dec5c7d4da0b5ba7": "SupportsInterfaceWithLookupMock", + "bc1a4e4cfd066ef11bc6e2465ddec0f3fd4d51c4": "ERC165InterfacesSupported", + "29cd8653e4b4504f0999a2454d9abf1f945de8f9": "ERC165NotSupported", + "ae16304dfc91c51729a425eaf772ae8d08593dae": "ERC165CheckerMock", + "aea815c696fff49c7fc52185b0523a33f7371b49": "ERC165Mock", + "b7b9d98b25d14185d4e3c2986c7a5a39b1f0781d": "ERC20BurnableMock", + "2399138dd71e45eaa2b5496aa7c751e39304ff91": "ERC20MintableMock", + "069f9a6dfd87e2586b4fab42ca29e826310646ea": "ERC20Mock", + "a5c6bf38e0fa04c8d470478a4bb8a3076e00e6e0": "ERC20PausableMock", + "9a8f6b3985ad17fe0cadbda553573df4e4731e7e": "ERC20WithMetadataMock", + "947e9e69d2016cebb10ee296f0f6495090671a21": "ERC721FullMock", + "3ca707c71f9022105f61b352c598c256703178f2": "ERC721MintableBurnableImpl", + "7c3cb25da3236a7c5738e31d410df75d16af096c": "ERC721Mock", + "cb9a0e0a90469cd5b4e5aca0a818330f486bc3f9": "ERC721PausableMock", + "13b19933bdd88840f5a617e14c9d736546ea8839": "ERC721ReceiverMock", + "53bfe5d6b4368228e985c1fe3f02b8534416b3a0": "EventEmitter", + "7057eb7b10d45a631cb5f442fc76bb7d5407a901": "FinalizableCrowdsaleImpl", + "2c959d10bff6c2909017efd20dc0e347da94e219": "IncreasingPriceCrowdsaleImpl", + "4a383b44bd773fe5ed6e84ff12070f60603c1eca": "IndividuallyCappedCrowdsaleImpl", + "15f79f51354210f3bf40a1555bd9e0f479292474": "MathMock", + "f1291dc03b8c8f52ebc9ebda49c5ec933f050fa2": "MerkleProofWrapper", + "f1cfdc773653bf69f5c277a60d81abd46029bebd": "MintedCrowdsaleImpl", + "cedf354f18ea2894c41fb93c79a08d07051846c4": "MinterRoleMock", + "43a5ef129162556fd38e9c4175c7dcbcf3213d22": "OwnableMock", + "59b3c7740b08088fb10e47d0d86fb6b7312e269a": "PausableMock", + "d2b11cbf3fca7f65ac31170f6e1533b639486478": "PauserRoleMock", + "4c25587eb2479ee3623ae6e168e3edf3f51914b7": "PostDeliveryCrowdsaleImpl", + "dc38502622bd92737566c51aba07ec48ed2c02ac": "PullPaymentMock", + "1c605d2812687edd646a5fde7d2fe7ccda137edb": "RefundableCrowdsaleImpl", + "03dfbef44fe5a4a75c99a3e995675f027f15b2d6": "RolesMock", + "938a3b0db268f2cefb5b7eb3ed792308f5865027": "ERC20FailingMock", + "45d60ab40be79c18dcb7a111ab02614c3e47db37": "ERC20SucceedingMock", + "2e88c135c98b395714739991d9072bdaf48b7cf0": "SafeERC20Helper", + "0dc70ec0c9017ae55f65d3473d5a44f0c093dcab": "SafeMathMock", + "337c1f8e999806aed78498d4372754b2344ccb2d": "SecondaryMock", + "3f228f7bf41c099970f6748488b9cd7d00afe7f6": "SignatureBouncerMock", + "caf3459749bb0264fa5a5d0a07f413f6991e0c41": "SignerRoleMock", + "a2df662c3e2a73f196b5067859545a352db2bdac": "TimedCrowdsaleImpl", + "e2ca5cd4923928c9f46de8e2e7df82ba01585738": "Ownable", + "a6c503a46f2f91f5fb01793e96c7cb9c5363069e": "Secondary", + "bb8f25ed8686742450daf6ba9b7cf99a2d20dacd": "PaymentSplitter", + "52b717d273b5bfb68c8630175990354fc172b4e6": "PullPayment", + "186ae2534c331ef59b6a86efc4a02d3b41cf1c8d": "ConditionalEscrow", + "e2af959beebe03963562c8e06b5eddbfe4e8b750": "Escrow", + "284f716f2501cfb02bee9357adc4c1eb840b0ac0": "RefundEscrow", + "8235160a08bafe5bcafad41567e3229bbc331839": "ERC20", + "4a97e9cbe78ad401ec19e46d114c71ea6f6f3d14": "ERC20Burnable", + "c098a863a8b795e46bd3c055ebf944190443f2be": "ERC20Capped", + "9dc5cc5b708cd1822f27baee4bc9c7d5f1b15d15": "ERC20Detailed", + "0222ab47eca4f760dd21963f230a5fb803c0b4db": "ERC20Mintable", + "23c0bd7b456d222b9d9625220eff56887fcff2ff": "ERC20Pausable", + "fc05cf3f16e6ed0739b635d0b79e115d53ab4d76": "IERC20", + "f05d94772232c941ce0bba7c06a494b3a0b0a217": "SafeERC20", + "5eba5fb2bcd1248ec673a99ce57e788601326cdb": "TokenTimelock", + "18adf8251b9db34a725031820ac989d18b6823f7": "ERC721", + "10c5c3d991ca543dc5cc61d85664c797a01dd473": "ERC721Burnable", + "beb061075916c16204b16cc18d4a3804df2aaeeb": "ERC721Enumerable", + "8c15a90797b67219f50776315045bdad8ebe7a87": "ERC721Full", + "f0ab234347570e7a9fc23f9d740b6784f31f2a58": "ERC721Holder", + "5769b699617659dc63abace9efab19a6bb17a22e": "ERC721Metadata", + "1f3d7d62ddc8d3c2b2a20255a4c40ee86432049e": "ERC721MetadataMintable", + "e9ea73c83db4303fb0a6556f2b37eee4441b73df": "ERC721Mintable", + "f82126eaeab8efc10723ee81a2f039d1baa7f6df": "ERC721Pausable", + "560f515efb7ed83cf9c09d5b79693343104260d4": "IERC721", + "67ad40b09e6d653e19421f7014f3e350d5cdd9ac": "IERC721Enumerable", + "90d70ae5ca5809d733d2e9fb28f817532cf2f0fb": "IERC721Full", + "51959c2d6c447821dd8897bda07dcb6c633282ba": "IERC721Metadata", + "e14b06d2c5031542140ef8bc33fd56fd99c2ecc6": "IERC721Receiver", + "03d71a566ea9225b43c66ae51dceebcd0da7e323": "Address", + "a41c0e26a104eac14adff7bfb2fbaa3e223883e5": "Arrays", + "d3ed07597d18babbd7344381e4e6d7b727795ca8": "ReentrancyGuard", + "8b179f92ca6c1e439bb544b4798c389b5c78687b": "ERC20SucceedingMock", + "ef0d299d4c858659f2b78e2ede4e089067ef911b": "SafeERC20", + "49d0b746a287d74cc714cbf2c174c231093fbf72": "Roles", + "e58c83075e53473844ccb571dde2cd30a4b82912": "CapperRole", + "da35a3d6d7d9d825fbb987d916b68fd32e348f47": "MinterRole", + "69fa5a584acfdc5b9a6d8e76882308aad31a31e4": "PauserRole", + "a81e3a3364183cd787d8e461c6df7daaf55586f2": "SignerRole", + "581f46692dcd9692ca67f5cc61a7bb1b3e712290": "WhitelistAdminRole", + "42d70f9fafd3ff7a27bedd0976b0905416bb0a4f": "WhitelistedRole", + "780a9ae4d9266ce7ec373260ffce87614258ca2f": "Crowdsale", + "0dbefc37cfbfcfe26099c488dadba4a66d6e9512": "FinalizableCrowdsale", + "60ff213d27e3d08e39d78629af2e0f57119d93e2": "PostDeliveryCrowdsale", + "487942e4eb8721d19908196bd30f897dc2c6db3e": "RefundableCrowdsale", + "fb65273ef381e17d86e898541acd1fba51e304a7": "RefundablePostDeliveryCrowdsale", + "961682e22bd8ffe0ffcc8111fd7e2ad1003d2189": "AllowanceCrowdsale", + "ebaedbafbdaa1cde24c257781d36ba931a2dd830": "MintedCrowdsale", + "e2c4d52950ae64e9f7a4f551972df02e1b099de5": "IncreasingPriceCrowdsale", + "f62969face2bdc7724d99bcd5046883288ecea52": "CappedCrowdsale", + "43b1d8a5e54c23dc212c7f199511a965a4fec5b7": "IndividuallyCappedCrowdsale", + "fb880cb8c46f68da6b53afca6fa8429b5bab3ade": "PausableCrowdsale", + "dd7b8f3a631856e81a5fd24beb58fa56417cd0fc": "TimedCrowdsale", + "3bf3e3bb72048132bff0717ef5dd2dd25d61f229": "WhitelistCrowdsale", + "8eac263edf76d56c747feb9a5a4e5529d920aa11": "ECDSA", + "d86f0bd36ed54800fbf5d094c0cd61680bd7fe22": "MerkleProof", + "d86f0434c7e803fa4e355f6bb78c5847d8e828e6": "Counter", + "3063a8a855ab9d8e1d31ac38179c32bd475a2aa1": "ERC20TokenMetadata", + "40b61fcc362b84b7b8f5b45403faaac2ded0048c": "ERC20WithMetadata", + "6f5320de16c71dbf2d08b478bcae89a7c8cfe0e0": "ERC20Migrator", + "163a9d74ebf7a2cc7f910697d513585918f276e7": "SignatureBouncer", + "bc64e7383ee9e61b613c0aa77c38e4173b727986": "SignedSafeMath", + "5bc207b44f8ed1bf37ed702d8785882f6eb3277a": "TokenVesting", + "63f538b47a22324fed11f97b993e48a18d32b522": "SampleCrowdsaleToken", + "18ac17a25a4dfe3748f013b5e1acd2e638495cd8": "SampleCrowdsale", + "858f334ed2c08da2e605ab04db4d526ede537cd9": "SimpleToken", + "b511b2fa36bea37c2840edc1be130612d949daed": "ERC165", + "ef087ed4bf42cc143bba6361e99f5d965c5209a3": "ERC165Checker", + "89b41dcad369ddf9289dd5bb640703e5e19805bf": "IERC165", + "8f78aa0fbc5f33696eba1aa5999f0367ccbe4b29": "Pausable", + "294fd705d0a1c8e94cce6774f9f0275538787670": "Math", + "ff5489b53ba0a4f650a926519ed6745ff910f7a8": "SafeMath", + "397b543dc2df14ccc410e0e472228aef1279e096": "Acknowledger", + "85458728ded749f7a0cb0417b4e6608c6fc04ca7": "AddressImpl", + "8b9f37cdbcfeb15a883ad849d9868379469b94b4": "AllowanceCrowdsaleImpl", + "65eb147c8b702f4742f2325c5774f1f87bca413d": "ArraysImpl", + "352bf73276ce2e422b715010bbb26a7dea1c060c": "CappedCrowdsaleImpl", + "2f63c91f090d3cf53ce96db8800692c34c53ba41": "CapperRoleMock", + "e43d3f784551e1eca9b046aff7dd1746ca1e53eb": "ConditionalEscrowMock", + "249d26fc0d08c342aedec0b9d92cc74e31d97db7": "CounterImpl", + "e063b808e89ecc3de5c4bbc9c919ffa7d7301b8b": "CrowdsaleMock", + "261bee63890ac92d183103eb06aa9e6468d00af7": "ERC20DetailedMock", + "a6d03a12f085621702ec2abe355799a5e60980fa": "ECDSAMock", + "97bcc379f499053394cb9b39baca0b5bd2c95f3b": "SupportsInterfaceWithLookupMock", + "e3f94dff17a0ddffe91cce083b0ab7da1ca407f8": "ERC165InterfacesSupported", + "ce2f042f44149297411c63b1656a7aed7c351281": "ERC165NotSupported", + "c8c6b08e59408716543fdf833bfdd2a46d5e9042": "ERC165CheckerMock", + "cc59e5ee83e2ac3c54a9faf63f95c3c7db171e66": "ERC165Mock", + "d9b73968b741d5cd53aaa7ac879f736785c91141": "ERC20BurnableMock", + "03703594ba3bb7a29f8c457c8485de1f768c430c": "ERC20MintableMock", + "06a59988de5e175074dfd61846655d8ceb6aabb0": "ERC20Mock", + "7c599fc3da0043e6e8a27890071a64e581e9491c": "ERC20PausableMock", + "cdf48b32e8a2040fa1785ff4006015ae3621620b": "ERC20WithMetadataMock", + "d1d60fd9b13a8685ab6f8aa87048c6e0a67d1c27": "ERC721FullMock", + "6944978f728b1665abaf2da7ba86b5428e99dba2": "ERC721MintableBurnableImpl", + "bb08f27cff0b19ef4adf183eb68d1e2ad2664ba7": "ERC721Mock", + "e51473b4de0d0cc41702f42d615f4d0e27789c60": "ERC721PausableMock", + "de3c52bb67df9b1e74f88dccf8ddacad748a91bc": "ERC721ReceiverMock", + "b9f98976e3f3bb053a1d6ac241b4e13dce74244d": "EventEmitter", + "ebb254073b372b3a28ea94e56212bb41ff372386": "IndirectEventEmitter", + "9dcc5fe734a4d420457384896568ef817dda942f": "Failer", + "06096854e33cbf52e2704e3f87d107c58f52d145": "FinalizableCrowdsaleImpl", + "f7a220e190e202e59e7ed83e8d93ebb8f676d3a5": "IncreasingPriceCrowdsaleImpl", + "48221c607b28f7ff67eb496dccaac552e2e4b80c": "IndividuallyCappedCrowdsaleImpl", + "a1780e67e3aeed1cb9493ffe00e2840fd85e5b52": "MathMock", + "811b3f5f798d1bd67cb4351ede94b40a96251450": "MerkleProofWrapper", + "f19bf654847043124db5ee412a4926fd45ece93c": "MintedCrowdsaleImpl", + "80c381c593821fb47db89d55e26bc66eb3b9815b": "MinterRoleMock", + "46c4d8c42833e483c06badecf3ef4870eeeef4c0": "OwnableInterfaceId", + "799e7db4e23a6cef4a8d9642ae4b5cd2d7eaa3c1": "OwnableMock", + "3f555df97ee448ff10299cb97da90b3f3b38a0d2": "PausableCrowdsaleImpl", + "351955623b3a5ba04402dc84132efe3bd36d81d6": "PausableMock", + "39f9b49623e98258a14b689f719e4c9e39960a58": "PauserRoleMock", + "df64a5fc7bb156be6d151d1853a4717c501fe981": "PostDeliveryCrowdsaleImpl", + "f2bc5891107b19ad4a9e2bcc9eb78651c23d8536": "PullPaymentMock", + "4cc249e1ae70127d1438dd7e52e00c76a0714e7a": "ReentrancyAttack", + "f9a7437047cc110b3d7c7886c537e63c88d58f77": "ReentrancyMock", + "9baeb425b432c40949ab0d772f3673356433e5fe": "RefundableCrowdsaleImpl", + "3a1327b39ea8686de5d4eae4488f464238196ba8": "RefundablePostDeliveryCrowdsaleImpl", + "7c102c2c0df13f6306a1491d1dab99216519efe4": "RolesMock", + "9172a3718949c08ec82487993301e25b4e988338": "ERC20FailingMock", + "05db7acd560f57643755be95bbbafe39db03db36": "ERC20SucceedingMock", + "e0f626fb634ae0401a38f07d5562a7e66339e42e": "SafeERC20Helper", + "5cb3f28de3e654931732a980fd663fecc4a1081a": "SafeMathMock", + "f8da5f69fc930b78d4d5ea2eac5147aa2b6ea5d4": "SecondaryMock", + "991f87c81fa1c7f853b0d77766c2d897e6f0f084": "SignatureBouncerMock", + "8ce412c8cd9286e85b7c28e3c3ed644bacaf39d8": "SignedSafeMathMock", + "47eee6b2d10bb21084c63f29a263bbe01173cac4": "SignerRoleMock", + "07b4e8cb7b3f12b92375f0a93c3eb2eb23aaaf60": "TimedCrowdsaleImpl", + "20f40b25fbd13c483becd042f5bf06e98b7bfe33": "WhitelistAdminRoleMock", + "148d4321f050aa8ff5724607bf13e1d4b55ca33c": "WhitelistCrowdsaleImpl", + "9986f2f41f56c43eb27b92c0547ac10e02d052fc": "WhitelistedRoleMock", + "d918cc9ba3b27a39e2e0a05c8be5b5fb07117521": "Ownable", + "f682e6ff4e928c190146ce6abc350197ee6dd9b2": "Secondary", + "015f648298c32f15f9b2e3dbda148e05c9f29ec1": "PaymentSplitter", + "feb2a352c4a8597f50e0c7f7caec4787e8a04571": "PullPayment", + "1236e7cc69efcf915b7ce81450fa7c8f013d66e3": "ConditionalEscrow", + "a1b2c0241d1f22d1d32c71415293e2357ce9754c": "Escrow", + "6e2e6ee47de4500756716fbf8943f13b29b2771e": "RefundEscrow", + "a08504b8c3c127e9f3a15cdd588573058a60acca": "ERC20", + "3bcfc9705f5bcab4583eebcaefd66a89e28e23c7": "ERC20Burnable", + "566bcf581eb9ed38c8c2b2e90cace8b78e7e2acb": "ERC20Capped", + "77ba7d78c25254fb6a22f0a92fa04b95a8ba4ef0": "ERC20Detailed", + "d602a9c5786af67ef6bb2d431651081d76dcdd89": "ERC20Mintable", + "563404ae3ad9decba0f1f12d78aff9234a84bab5": "ERC20Pausable", + "b3e5be0b3f985e92fe1f9146d8133f70c7370c9c": "IERC20", + "bdd10fc95fdb3e43dcb6f50c5a790526eb2339a5": "SafeERC20", + "1bc7268e369e6f66cae9a346a3be4200fb9ab2a2": "TokenTimelock", + "f5495923e256fc4aa541fe592c69f9c6a49d09b1": "ERC721", + "bff0ac152d4f9d6016939cc8a2f0abd3952a5cff": "ERC721Burnable", + "14d60ce0ee22fe6cc17a67f827f2d6405fde45fb": "ERC721Enumerable", + "1c5e388a06c8bc5e4ebbd264403d229c79cb538b": "ERC721Full", + "dc6488481efeb3f0a3fe4012e44cc9630de20454": "ERC721Holder", + "57d6282eac3ccb6f9934d1d2341098cd94888d34": "ERC721Metadata", + "bf266ddbcc0c703ec528a3589125187209ecfa0b": "ERC721MetadataMintable", + "feb0e24e8119875a567c7f63ae626229e989ba6b": "ERC721Mintable", + "4e7a7464f14927dcd4ac1c4c80c1416a532a1762": "ERC721Pausable", + "181645ad9bfe9ec844972ef6c3335fd0ea4a350e": "IERC721", + "5eeb659e05046a4f4fc1b998fca1960305af320d": "IERC721Enumerable", + "49a0645eb5f2c78e85729f78b6e46b5daba24d94": "IERC721Full", + "80912b3e9ab6eb4d3fc3d42d7a49810811a8067d": "IERC721Metadata", + "54be7bd4bad6dd7473376057523b9d49cb448688": "IERC721Receiver", + "7a16711320090635c8beb50e1328a501c188f888": "Address", + "5176d91de61a03d02be10f24b2a03fdbc6683a68": "Arrays", + "2b1f3555fce0551e87ee87794b27941844b305ed": "ReentrancyGuard", + "8bf62064d4d5f310f90c3b0260f35ed98a945899": "ERC20SucceedingMock", + "7fc61c5c87173431d88d59b7645b20b7a5a30a13": "SafeERC20", + "26d3b2bc6fb00cba01f3fc93926107bb8547dfca": "Crowdsale", + "dbbddfca9a9d822603879d0b26c9a87f896185e7": "IncreasingPriceCrowdsale", + "0b1275c2973bc9904a4719496518db986e75f0d9": "TimedCrowdsale", + "3181a686cc87d9773617f11e6e744a8ef4cd1485": "WhitelistCrowdsale", + "b44caa5b9a40b460428ea5145c3b516263196f9c": "ECDSA", + "a49a652a900af135636686be65e24c59b562f1f2": "Counters", + "24b08de6151fdf941a10bb1dec241f27958feee3": "ERC20Metadata", + "ced0258d0b0d50383252c1a10e11e72c54d8f854": "ERC20Migrator", + "d6493fab55286955839b4d6d279bda02b11c3644": "ERC20Snapshot", + "83dc70f4ffa7ca8b4bb744aafe520ca5813e5df5": "SignatureBouncer", + "df185ebc2fa12c378e5015bd475332756504f60d": "SignedSafeMath", + "4fb66323fe71536c1796582d32bfcabf6716ff65": "TokenVesting", + "bdfbcc3f8bc59328aa6ab0d4a20d24270492f9a2": "ERC165", + "2d2ca1d7fb9b959879a30f3a36a6ff381be7a50b": "ERC165Checker", + "d0b3500ec510385e5f14da45b3f72cbecf2d0e1a": "Math", + "a38f7d36cea19217092f7ee679308e368ec9a9bc": "SafeMath", + "b65922943e3104021a6f39825a9ad792d6c06202": "CountersImpl", + "0568279ce96d91ad7a4dbba12201003893a914a0": "SupportsInterfaceWithLookupMock", + "191327eebe6456d41be46d29262f424cb14cdaa4": "ERC20MetadataMock", + "ec24556da2b236f33be4263e76835c6f7b07c579": "ERC20Mock", + "b1f5209f1503fb7b95c1e274a4605961263658d6": "ERC20SnapshotMock", + "600c8541c63ee789fdef9c5c2901eabfcefc40c1": "ERC20ReturnFalseMock", + "375ddc80a306ac6fd622911e87a929e4317bc498": "ERC20ReturnTrueMock", + "5ff30663aecee0ab6ec3bc9342d9a21cb64e1ad3": "ERC20NoReturnMock", + "c6eeb63f9350a6293d3cd162768c72f84899efac": "SafeERC20Wrapper", + "5ec72a2da405c23f8b5610b9e7b0e4bb586a904c": "TimedCrowdsaleImpl", + "3086bc6470bdddb0bccf23d803130a76067fee7a": "Ownable", + "b83b3645b9107f5cbc95e2afbb57f6002e3e72d7": "PullPayment", + "9ab9c8709262c8ac99601051ce5c5d1ddd2950a6": "ConditionalEscrow", + "61dd244ce7b91aab023abcd5e64e90a7c2d363dd": "Escrow", + "4a5447519ca8bb2d82a79bd5b0b9b0792bba23a8": "RefundEscrow", + "c8df889cca25546f32a258b75f263fff3be529e9": "ERC20", + "21b260d15766f58e0590ea216fb5db31db4788e9": "ERC20Burnable", + "490f2847cf60a16df023549e03e6ff6a16f01f9e": "SafeERC20", + "67ec2c098cb4626d76ee8762f555edadeaf863c8": "ERC721", + "84f02d651f97b0225a3ad08eda8e51c73fca5eda": "ERC721Enumerable", + "b3f7f407fd76e2dc2ee39174a1f483e5864bb7b7": "ERC721Metadata", + "4e241f646d96f095386eae6a7a5f13e6dac682f1": "IERC721Receiver", + "5d932009fc8f204b32e2ff3b795b5a4016ba8856": "Arrays", + "97ad171eccfd6d686444cb1a096ca32c1e081173": "Roles", + "12d3a805c82a503a32584116eaa679c58663182e": "CapperRole", + "920fb014fdab17d9962e4a051ecb05e0346803c4": "MinterRole", + "0755ddb27f6aeb4095c5fa52223c6c321f634f37": "PauserRole", + "f2fdc6353650ca2a99350d5668fec6460865baf0": "SignerRole", + "a7420e74fc819c039143c4fc4060b3f8233aed23": "WhitelistAdminRole", + "7731004a855c8698643498ec733dfc528ab5e9af": "WhitelistedRole", + "362c8c4f6c21345efab16b43ac7a6dda826ef8bb": "Crowdsale", + "3a548446ff8b86dd7fc634446568f9549949d0aa": "FinalizableCrowdsale", + "4109c79f50836cd29d813afbeeed549745e579c9": "PostDeliveryCrowdsale", + "8d80a124fdfc163f1856b30d54475338d1995fa2": "__unstable__TokenVault", + "9dc3b6cc96b6bcf6dcdeb91ba4c732a8f7da0336": "RefundableCrowdsale", + "b123691e7215b1777026a26b72965372b355fc71": "RefundablePostDeliveryCrowdsale", + "18869bdf9d3a93150d1e0edcb1db4a85ee23e28c": "AllowanceCrowdsale", + "6e75e6262faa2337d43ec1066f50e2fd71409199": "MintedCrowdsale", + "33eb8c2e2ae6b95c6cf58d3c9c06587e7ca2bf3f": "IncreasingPriceCrowdsale", + "e8bfd676822015708c097b2064fc5d898f45c5fd": "CappedCrowdsale", + "8c2f617d1f49cb4fbef87748d2cf71aed74d515a": "IndividuallyCappedCrowdsale", + "9d143c684d3650ae76ef4cc89c043eb8c3680445": "TimedCrowdsale", + "6080c9c622f05b4a6439d1c98b67333b5edb9bb9": "WhitelistCrowdsale", + "791cc5d0ccd96d4d7cea297d4dd4282a2e03e30e": "ECDSA", + "4737e887fd1bc839b8b8cf2f10f02eaacda8294d": "MerkleProof", + "b7ed70197dc7c1b670f34cf2e3b4e58865383cd9": "ERC20Migrator", + "1b898dc4c40ad6e77b5e7600958f0675d6182077": "ERC20Snapshot", + "13b02c8c4a18591bc141c84d4f390a470699efee": "SignatureBouncer", + "e121f6ee965082a37437175f7f7de7327fc7f6ec": "SignedSafeMath", + "34333c9d9d0dd9cad48ced9b7ec9f16499d9e51f": "TokenVesting", + "0006db197a30a83123ae42b1412b9eb36e42a28a": "SampleCrowdsale", + "c09017218a635de03a5da5e72c0ca29453a3f119": "ERC165", + "65df18d3f80dc6e25c7b9261139254c041565eaa": "ERC165Checker", + "82aff27a106fe353c21f329d0884dba69a89e5f8": "ERC1820Implementer", + "7b1e6947bc70edd40153bcea559844c17eb80236": "IERC165", + "a4a4c4e1884a9ecff9a3be99eacc783c290bf7e5": "IERC1820Implementer", + "6fe4d6ebe9da8d97a48c7be4cb30aaabb3ff405c": "IERC1820Registry", + "ae0db82d81525d22cdc433cef124addd50430fc5": "Pausable", + "6b96a25ebec0776be5318fbff49d141d73f4f5de": "Math", + "2a829cf20030b8d3de8ac9873f0beaca3cad1f4e": "SafeMath", + "7c044669d66a8d69734c5f828a50d2ebd53f6bbd": "SupportsInterfaceWithLookupMock", + "7b97383d271f6b4cf1373d76ee256ba3028f24ea": "ERC1820ImplementerMock", + "95998f85eb3757d7b010f9d7c1480a92d9016d92": "ERC20Mock", + "30b598e64b3ea2b9915acaf629b2d0e4a2eb66ac": "ERC721ReceiverMock", + "e092e16bb0e17e23ca9e1b8c1521cfb386697e2a": "ERC777Mock", + "53a0001a2ebd03b5203549fa6c6c80cc9697187e": "ERC777SenderRecipientMock", + "ca4b8cacced7f06ec8ac865f7be0d5bf1b1957ff": "ReentrancyAttack", + "068676df02968b7b9e9b4d3b7f69155a9f70a13e": "ReentrancyMock", + "9124b8c0668411c9dfee424d0bb9ae6e8f7706e2": "ERC20ReturnFalseMock", + "257829241097f5fd720b48aa5025a7e972b0bb30": "Ownable", + "eefbd0e574c1afa621b60d5c0060ad123e094988": "Secondary", + "cf6cc9c70bb5ee318b5ba3588e9f2c4f34cca72d": "PaymentSplitter", + "f8d97ab19910043c2be57dfa599cd98b2e79c0e8": "ConditionalEscrow", + "cef9149e1ef5098f9600007ec477b01ea5f41140": "RefundEscrow", + "5e3eabc1f7f46c3375a3d8eb4ab618ea528254c4": "ERC20", + "9f0cfbf4cf9505829c19bf3698aa3a87660ce1d4": "ERC20Burnable", + "f6d6fbf05185ca026c9ccf4eab910054069c3f8f": "ERC20Capped", + "a9ef7428ed0d036ab79ddd21ae9b95da666634fb": "ERC20Detailed", + "cb12ca8d883bb3ad8317c61b2e7251221def665f": "ERC20Mintable", + "0f194824b2052c308c52ec5cae790adea7c64c57": "ERC20Pausable", + "3efeef33c00f8c7513b55015ee54e6235bb0b668": "IERC20", + "7f3606ceb7a5ca3d169607f28d825b7844d8f6ed": "SafeERC20", + "54bbee45e99d6502f0c9b5be1b80d4bbe3786d94": "TokenTimelock", + "11fc4d574650f2b1c58366124832c3409c78413a": "ERC721", + "205f8e867ab267c38e439b791c1e1bd1d8ca88c7": "ERC721Burnable", + "9b8256d1597bccaec572a77db88f059f58df9345": "ERC721Enumerable", + "66f22e50f77d448e975e59f871645e6abf6d1cf8": "ERC721Metadata", + "743b6405c190d6966e1284622dc0bade6c9cb40f": "ERC721MetadataMintable", + "628a4855f3a319fc3280111e4747b4faa9ac39a5": "ERC721Mintable", + "d5e1935a6ff55517a209f36ed99d5998837c9e4f": "IERC721", + "640289cb3557be343a7520230cd1c3d31961d3c2": "ERC777", + "532858b09be39df731d0f660c1c8df677d90663e": "IERC777", + "3c3e0a7eeab6fb60705ad74295fc20d947d4fd38": "IERC777Recipient", + "7c644be4848da35aed4b1b1358c79d273c5eb2c3": "IERC777Sender", + "862f5b1732442b00bc2bd40124ebbfc93e506b73": "Address", + "ffe0c2e7651f57976a4875cd95580dfc0a012a2a": "Arrays", + "00fd45355e275a2ed1c1eb0b3b2fc82786dcac5b": "ReentrancyGuard", + "f5f947f1c918d8d1ece09da651c3248f66cf7e4d": "Context", + "2e44800ce075b20ea3c20d1e62300384dfe2c517": "GSNRecipient", + "c5aee0ebb7cd74d8527a5db5954b364b863603d1": "GSNRecipientERC20Fee", + "99159b6dfffe5ffb4c973a9645385542d26aeaa4": "__unstable__ERC20PrimaryAdmin", + "a4073980c6f85544223a230d9dc9391f1b0dc311": "GSNRecipientSignature", + "d914062eb6557699da04d907e2b70c24de94bd12": "IRelayHub", + "3e206957fb817eb0ec41dc08053084c29a6a061b": "IRelayRecipient", + "43710cb6060b92e5f845d7c76ed4ab1f85f7cc86": "CapperRole", + "4a5a3fca54b8b8b1997614b1dd3b408a964c538d": "MinterRole", + "76bbbe6b0782ad22a92c56058b01b89ae789b599": "PauserRole", + "d4e83a7891c65c3ed3670a978bb76b634584af20": "SignerRole", + "6cc6766baef98a700e8e38821ae2aa15cbc31062": "WhitelistAdminRole", + "71c272ca2459bd2e5648c31cf3342109274dc265": "WhitelistedRole", + "bb5bc67bb08af53d6db7d3c6bfca4dfd34e5e574": "Crowdsale", + "c73846163f45573292c9e7281471658d480d83ba": "RefundableCrowdsale", + "041e87ca76fd2207ef3cf4936ec0205204be6b96": "ECDSA", + "0000d7516560f14246e909e2efa04fab08aa639c": "SignedSafeMath", + "b002d3ff71af2317f8c44c7098c5e12814bba92c": "Strings", + "cef172a9650a72ad1bbc8aa71d6c5e755f0b49bf": "SimpleToken", + "150947d54d2a71dae3b56af334766eb70e6253a4": "ERC165", + "a7c76ea626e3f0e494df9149c8e40ac8fb90d240": "ERC165Checker", + "0f2bb06c58e981260a4204795f24203a365c2737": "ERC1820Implementer", + "67b2092d07fad864c8fe808b9c3ca3e8749ef8a2": "IERC165", + "cf18bfd2ac9bb0e6f31e2e0169bcf7812b48d020": "IERC1820Implementer", + "c6d7a58fa8e4408d90bf4dba2251c7f384442e61": "IERC1820Registry", + "1d1a1e6a2b8373a0f9c12fecb97e9e9e2f5565bb": "Pausable", + "40c5df80b4b5cbba8434b7662078aa2f7bd11703": "SafeMath", + "7e7979f1b224b9a2f1521c2e7ee6269e86c192da": "AddressImpl", + "d2953944bb76616ec71f7ac0973f4a2c7735e3f5": "ContextMock", + "b9f88ead37062ca195d2a397eca7462b23377705": "ContextMockCaller", + "e4e81b34ffc158b871c398905044eaa407b53309": "ERC20PausableMock", + "1d5e75b5b0c6d5a5411479d0c5922cbc23b88935": "ERC721GSNRecipientMock", + "ccb9f10bcbdd9b08e3be1ddcea53285c2edfbbac": "ERC721Mock", + "f6dd2052f9728379c16000c51866baa667ae8ba4": "ERC777Mock", + "40c2c74b3acb1d4f2701bbc1726c54e7b93d879f": "ERC777SenderRecipientMock", + "a6ebcc719baf42b346ce99ce787a988dffafbe67": "EtherReceiverMock", + "31c735b3a0f5aca4dbcae3cd833d5327d77020e7": "GSNRecipientERC20FeeMock", + "f951aa42da5cb767b2d25af86911f06cd5558981": "GSNRecipientMock", + "35ec5d4c73fddcf8a5aaf5757ef1af99352b3e7f": "GSNRecipientSignatureMock", + "d3525012d52c3d06a22bb704ada33f21c0256dc8": "ReentrancyAttack", + "860bdd56a5ddf01ae3557917163d7c9dc8de8ee2": "ERC20ReturnFalseMock", + "ae01681cc37d58ab8052869e687f215e6cb8d0cf": "ERC20ReturnTrueMock", + "93af43acbe7d5b909433810d28f2ac6826dd1d91": "ERC20NoReturnMock", + "d09209d71a33bf114bf1adcec684c64deb010de4": "SafeERC20Wrapper", + "3d00f6d348841ae204c485cda3c4c2816af76957": "StringsMock", + "d1523aae49fb6f1896f49e590b6f51039e4bdd72": "Ownable", + "2fce93f9d6faa205cd88c0a09bd9f76fc5330932": "Secondary", + "0d32d5cabbfa9f420623b256dc5fb3494ed22769": "PaymentSplitter", + "99e22b366e81118ef4050f8f5f75962e73330c73": "PullPayment", + "4562c170bc9809fa46e6666f9728e8e61dd33f72": "Escrow", + "626414a459336b3ac497b8e49fa22f1f0abf1b92": "ERC20", + "950167661be5dc085fba4c584183bbd83a29eee7": "ERC20Burnable", + "38d0818e3e974224e2fbabbd73c57eda95034984": "ERC20Capped", + "e406b324425fe7c3f7c5589e06dbea4796503de1": "ERC20Detailed", + "3f15c8af26605011c8d5de1ce87ab8fd0ce60ea7": "ERC20Mintable", + "09071ee20d5607366d247ff1fa9aaaa46d606dd8": "ERC20Pausable", + "a8466bda6a100f8073131ee60f1f55f39cc79715": "IERC20", + "2c19d3f26dbfbf3d39f50dd735fe0fe5b5e6cb69": "SafeERC20", + "53de48de263bd917431b935fe6733716efaa53aa": "ERC721", + "f6798a7bd8cd9f0f9315ecf200035b4c1b27652b": "ERC721Burnable", + "5287c032e953f49cbead7d8e8dfb5013fdbea35a": "ERC721Enumerable", + "32a640d5908aa379be7abda1424894a0ed5cb389": "ERC721Metadata", + "0465da94cef491f15c1f0cf03ab35ba5f57c2e53": "ERC721Mintable", + "652b0218b8ce2fa84fc1489346eb4f8ba6be36fa": "ERC721Pausable", + "dbb96f95f55be6a05475b97ef7c35bd3e93ab4ed": "IERC721", + "f4b123f5b40878b70f02476c2e17a144bf88e1a2": "IERC721Receiver", + "fc247ca5c3f2ce5dfe65d307d34461c314f07225": "ERC777", + "70795fc39191bc51871b45a31c12b3bfb7a8d95f": "IERC777", + "923531fc7154edb1c04430faa466f2fc21be91b5": "IERC777Recipient", + "91df3b8cb635ee73d073bb41677b30cca16cdfaa": "IERC777Sender", + "671c527f68ac3d8c6793881d78179da4ad394eba": "Address", + "0bf7ab409d936c5f8868bfbcdcd40635b2d5975f": "Arrays", + "e6a65bea2d5d2b3629bebed655e5f99ba6b5cb62": "ReentrancyGuard", + "33fd40c136a0417ba1aca69c95440a6f6af396ee": "IRelayHub", + "e60e312ee7de5b97f6b691d2aa22a754139c0174": "IRelayRecipient", + "80635da095b81f3ac67980a810c197b175cd191a": "MerkleProof", + "2001957575c00b8d4f0d2e86da40374cc1f9b95c": "Counters", + "bee16f12e3d00612347f7716ac3dd919958f6ecd": "ERC165Checker", + "b7ffce9048179efef559653bd0fe78e3dbf3ccc9": "Create2Impl", + "ab5709072e811dc6892d9bea6dc2febc84c2eebb": "ERC721FullMock", + "8eebc80db69e1dc9feea6f06833983578d4b3780": "EnumerableSetMock", + "da3bb9482cc3fef975d4b940aa6a7a241620cddc": "SafeCastMock", + "418be7dc23fea0fb0685acfcd0924205d309da45": "Ownable", + "016a31280fdbbb2437d69d2d2077a7c6905c714d": "Secondary", + "e54799317dc440001a42e881955539c39216f20b": "ERC20", + "7f18034de8806b6e04a081d9139af0bafa7ebe28": "ERC721", + "a8e2e47304e89ec12edb4796701610ca0545f690": "ERC721Metadata", + "270b244803ef7871cc0ea9c7140c58b0cecc7121": "ERC777", + "46d949813bed5d0c28d461308d29b801440d4b5a": "Address", + "27cd94941b6e8368a47c3056f9881d9b777a12ee": "Create2", + "3f0be66d5ab109f6f063a2f621e2a27f598e9c75": "EnumerableSet", + "288ea0f7c464d6c209aedcb70702d40d055061a5": "ReentrancyGuard", + "96b9d4c39c132847fe9878012875a60be6815d6c": "SafeCast", + "d858e0f859c9a0007983f900e87377bc7b9db2d9": "ERC777Mock", + "c50d4a4bdb1ae07acba0c1808a395989814eb11c": "ERC777", + "b796dbdd6a4a193975d3e83a2705332b97d04c9e": "Context", + "26f098ad471cc55860f980fdb2a0e03e76124c5c": "GSNRecipient", + "df2e4c908e0f63db31a061d6b1a88aa3ac5e4259": "GSNRecipientERC20Fee", + "f6e0a568a7b389b06da90d094cff83cb479ea60d": "__unstable__ERC20Owned", + "250da0268e9484838d295b0a509683c70b9c2bcc": "GSNRecipientSignature", + "7db2684fb121525320f90ba363fb9d393c882c2a": "IRelayHub", + "b59618fd7459ca78735d140104a33f746c87ca23": "IRelayRecipient", + "f61364a0c94c546c2686fccf64fb00b7e6a238f5": "AccessControl", + "5d4b8f8c71145f3eea66f7436b857d639d294975": "Ownable", + "5ce37f6d78b690e78105d779c9c5f8b133b20713": "ECDSA", + "e2563eee26d163e13a84de12c231bad5bd9d07ef": "ERC165", + "bab56366523b8b4b46e5f4745d87d1c4925a4cd5": "ERC165Checker", + "e0902a009ac1aef60cb3f2396c3e0551cabe50e4": "ERC1820Implementer", + "8c1783f1553244438a69f197761338b573ea437a": "IERC1820Registry", + "299995a0dda5331bc9ee5b50a02caecae0ab2f47": "SafeMath", + "381c1c12d9d6ed7263d499568493801a2f9f6c98": "SignedSafeMath", + "b36bba5668b0585f8fd14a482b2b732245a71bbb": "AccessControlMock", + "ea494ccbabbb741ef48ad0ff5c085f91efcf3a3f": "AddressImpl", + "efab65e1bceef92614ebe4fbb8f9fb24482b6ed6": "ArraysImpl", + "3a520123de9cd4ca9a16c3f5b2d60d7d30aba9f7": "ConditionalEscrowMock", + "dfd11780fdbce9683363b9951c1736dd9c0a3479": "Create2Impl", + "039c37d37cd81934ed60f46f40e5b7c454e5c61e": "SupportsInterfaceWithLookupMock", + "945e934e278de6fd89f396f2cf47be09063ca054": "ERC165NotSupported", + "ea356c162ff728d39db8f4b1f8629294b7dc53c1": "ERC165CheckerMock", + "0a36b70b7c01ef2e9ad666db0b7c7815a2954bdc": "ERC20BurnableMock", + "44563df6fb78cc199c6afa99364a06e8b6bb1a8b": "ERC20CappedMock", + "065fda899fd387ce4fb161a544c6ca5c4d2cefe0": "ERC20DecimalsMock", + "0848d902f46092fd3cb28518efb3485754a176bd": "ERC20Mock", + "d3694a314c74d8e0061fd1ee4abe29265e333a8a": "ERC20PausableMock", + "b87497aeac600f01a5e99eef27004dba2b386db9": "ERC20SnapshotMock", + "801315f0005d984a6660bcc6a0980fd812f1c36a": "ERC721BurnableMock", + "7b7d05bbf487b7101f6d0b1b17d9775001297456": "ERC721GSNRecipientMock", + "b702ee7d010f646e049b5e6786395716a6c4e5de": "ERC721Mock", + "4265a7d8085494949939f615f62481d368c2ea2a": "ERC721PausableMock", + "153e1fe8ab29256f08340d4b68bb4d0e7bf31c1b": "ERC721ReceiverMock", + "9b9a5118eced1d02b1558076d4598e9e007ef161": "ERC777Mock", + "d4ab30adb57b13f8a100753fcbcc100b5b93c41f": "ERC777SenderRecipientMock", + "56edef128a9c6161b588e85b7e9f8a7c8719330c": "EnumerableMapMock", + "42492e1e3840893868cce13e052e73be0115a282": "EnumerableSetMock", + "8142f6d05936c535329a037a5982940423113d0d": "EtherReceiverMock", + "926923f5dda7a7fdefe2b298549b4c7c899d644d": "GSNRecipientERC20FeeMock", + "b25e72ff5f0838564ad1fef33a62269baa223e58": "GSNRecipientMock", + "08d9ca42c0b395de9866fdc89cf80baa79f3c544": "GSNRecipientSignatureMock", + "35bab91349a98ac9d37a0b0dea207ec66d9df1de": "OwnableMock", + "b598caa720703755d142c55313587b39afd98fed": "PausableMock", + "ee40626ef9ea1cda61726721063073150205a62d": "PullPaymentMock", + "9e583d7f7bb1a067f370d89b9fbe3761ec3e9667": "ReentrancyMock", + "b2abff56fa395cf30f6f70e37eca3d75afbba4fd": "SafeCastMock", + "bd3f6a5cf9aa93cca8f92896283807e732bf562f": "StringsMock", + "128b25a6695355f36790d5a10fd795b8bb27fa2d": "PaymentSplitter", + "86fd813a5a70b5d7233bc1dd53d2f794978e8bcd": "PullPayment", + "88a3718cebe06fc9da77d9678a2b6f0ed68ddba3": "ConditionalEscrow", + "69fb19ca610d79dbf1138608ac29096e7f1b5976": "Escrow", + "f2caea65705f8c4230984e0a8c7e764b2d87c29c": "RefundEscrow", + "54363b19c1cc14361dfea5510bff28f17a35e284": "ERC20PresetMinterPauser", + "38ca7b059432b97d9bd6ebb4dbfd3a8e7626c059": "ERC721PresetMinterPauserAutoId", + "01a31d70eac15ebc3e72762f3d9083e2ec58102f": "ERC20", + "b6e55d3df0d0552ed089b09f61be8bc6379ead02": "ERC20Burnable", + "32dab051731393e6bfb3688e8cfb871017bb917d": "ERC20Capped", + "33382c542643be96d197ace0347bc3ca0b450993": "ERC20Pausable", + "b1b3262a12fc93ad5fc3044f105688b26a8fc39c": "ERC20Snapshot", + "8ad28076b641582bd77b676374b81cfd0f2e1a16": "SafeERC20", + "b021a1cfeb77d1b2933aee2118525dec020d52e3": "TokenTimelock", + "876d34e7701f0b3ebefb39f5fa5c0fe434181466": "ERC721", + "a880a1b2738b3efcc5a95143d0a326ff227a45d0": "ERC721Burnable", + "562cd257f69b05c02c7e235fd3a6d3619c428006": "ERC721Holder", + "fa7968daf5e28907a8097cf716abe22a74102d2b": "ERC721Pausable", + "c05ee17be3c12e0d5062b147bbc85543ca5e57a0": "IERC721", + "2f8c54269c3eef1154da10fbe4cc8b9b988909d8": "IERC721Enumerable", + "c03c0409f543870410ebc74e33089d8bd8fe4d33": "IERC721Metadata", + "a4499a2caaf32ff3a48dfbb81587c3adf6adfae8": "IERC721Receiver", + "5899fda2e6c4c8cf2177cc7c078c78e6e5afd218": "ERC777", + "b9ef6216c31f8261423581d843bf14a333570560": "IERC777", + "b3b149c4a02c930e5f138a7bd4d1ed07e5742f36": "Address", + "61cc196dcfac4de6436deb8ec083d4aabf408a69": "Create2", + "a37fb5e05f9228dc03b7c50737be17949c276978": "EnumerableMap", + "ab23fb82ac99e05ad0a8697c1ad6b8eca4b9b6cf": "EnumerableSet", + "21547b61a2857572da1e51464899cdd52ebd5737": "Pausable", + "7e7fa83b0f54ef795991472b8e1d61d5cf98c7d9": "SafeCast", + "47fdeef8766861e816936156be77b55cb8e0d15d": "Strings", + "3ebd393dd34383ead311cc6a4ac498d0562fbeed": "ERC777Mock", + "08d677f4935acdd04f1939d6430d2d98ed95a8b8": "PullPayment", + "bcab2445fc6987740f10b1b48f5cc9f0a9dc628f": "ERC721PresetMinterPauserAutoId", + "391484feda2d514efcbd8ad05bf24925d6a71d9c": "IERC721", + "043402c29808063960b154297d4d949f81f27e38": "IERC721Enumerable", + "609c41e5ec3e7eda3fe7b20d5fdf8459da4741fe": "IERC721Metadata", + "fe18a97dfdc6f6805760ef16a3a6426fd4ca5742": "ERC777", + "59f0695316bfaf076e70940bb15f611ab18e7380": "Context", + "6ce10025cea27bb5e02ed9a0a849c592d991f9ba": "AccessControl", + "05fb43f68cd62715cd9537e2407662ffd80d1b14": "SafeMath", + "14bdd1cf1d91f81d608b9317df714bfdce5cc5c8": "SignedSafeMath", + "c387ffafae87632afcf8a61aa9a3046f74207337": "AddressImpl", + "77dbf870fb94cfd13fd3fd2cf4d40eed0e1b5fe5": "CallReceiverMock", + "2fbafc739e08a6e4f30468e02c422a0f46a44133": "ERC1155BurnableMock", + "edebb3dec4141dedd0e6486b38ae6d2f4a2750df": "ERC1155Mock", + "497e0d5e7016d8c029788a4612313a68b0dcac11": "ERC1155PausableMock", + "b63233a551c74f686b15f9d1e41ec9a511b216c9": "ERC1155ReceiverMock", + "4e0eb152c67034b43787e86dd9517e5acef04406": "EnumerableAddressSetMock", + "33031da76437b1311f45e835d07084449361c05e": "EnumerableUintSetMock", + "d58e3bc4a8dc2a667dfc6cd02e834693f8970d4f": "SafeCastMock", + "59444c98b67b5f88dfb7bc0165563cc10963cb54": "ERC1155PresetMinterPauser", + "57f1c230932cbfd9944efde495ece7b93961216c": "ERC20PresetMinterPauser", + "60a2b550bd5c41484cbb9d96840bde18080cc9e0": "ERC721PresetMinterPauserAutoId", + "271759a8472e5c3f9bd708d319334bc362f7ea28": "ERC1155", + "134643457f4b7b6f0e9e7e4d1a9dcc4490977b5b": "ERC1155Burnable", + "cdb13d40682488f9f0953066325cf069b44dbd1e": "ERC1155Holder", + "ad8f8fb3ef5b64079ea06b8a84f71961ca862b2c": "ERC1155Pausable", + "bd50c286a31a9281ae013970efdd8a2698f70a3d": "ERC1155Receiver", + "b51299123b2b7ac6f4473c4e9eeff2fae2527866": "IERC1155", + "ebbd8915f7e42b138f231d12a57aa3205648c228": "IERC1155MetadataURI", + "461f1b75562c952dc593e4b74fe5957247b47e96": "IERC1155Receiver", + "af36aa37efe07de73c75c3e3b2768abaf71d1f7e": "SafeERC20", + "76e26d8fe94c40bc65de0b949ba063aec0c8888d": "ERC721", + "8b36b4f8062eab95d4c7b88da93222c71ab4bc9a": "ERC721Burnable", + "8a49c9027bfd68a7406842fc38a54c1ffdb0f55c": "ERC721Holder", + "6bc0035b00df60df8ab929ad72f1c15907ead145": "IERC721", + "66c525cc867324229ddc289348a728c95abd8ac0": "IERC721Receiver", + "885e6164dd6b49a503e5a2a4ed16277b6eb23ca1": "ERC777", + "61c30616ec7a625371407d69c4f4287bef65465c": "Address", + "e55e6ff86a0622d2187303e42de5dbd1f8bd7577": "Create2", + "7253411ae52004badc4d7f7410ce466489d61649": "Pausable", + "26c0a8f218e277e2f800073ec1cf3d9e8589d369": "ReentrancyGuard", + "3bab9320873cd011466b2a6ab0dcac0f5dc1bc69": "SafeCast", + "4078d8de60d037cbbb1a421d03159750cef400d7": "GSNRecipientERC20Fee", + "05584150eb03bca28420d821f0d3079f3c392059": "__unstable__ERC20Owned", + "4821563b16a010649bd9fde1586e911f6c9c1841": "GSNRecipientSignature", + "15cacbe095318831e2b3e609d4018cf5d59bb7af": "IRelayHub", + "0453e5d14887ca74d7a9dd93ea24ffd21b33c0cc": "Ownable", + "1e0f45ff715be57f9424f5703cbaf1c7c0b4cdad": "ERC165", + "2dab2a74b7d92d977062dc109c47ca5ff6817564": "AccessControlMock", + "8caf6b0156b3bddcfbc8fdca0f640795d2dad50a": "ArraysImpl", + "a0dd84b48b5d2c1d88cf53ceb5e3f992edb33507": "ERC1155BurnableMock", + "b423c7c0aa88de46bbfd3d42fea4db2cda7733fe": "ERC1155Mock", + "85b3c12fd1d0ddd48e056e0b40f7407323376576": "ERC1155PausableMock", + "73e683d19ff414928daa00a6fced00488cb31307": "ERC1155ReceiverMock", + "83c038d09502c0d9a0315629e03aca228f6aeca7": "SupportsInterfaceWithLookupMock", + "32bbc7aff9562c2ae47502929375cd06c0e01aab": "ERC165InterfacesSupported", + "7d163c3d68597c146c14da4df3f451afed59a2f3": "ERC20BurnableMock", + "7214c953c5c6ec720257cd10340380687965941f": "ERC20CappedMock", + "8971a5f34be9083e20af4a06fb75050ff87cc784": "ERC20DecimalsMock", + "22cfcfc29d92bda4cca9a70b78b9ddefab727ccc": "ERC20Mock", + "db4e7558d868ae1b732167860c6d77e361f552fa": "ERC20PausableMock", + "4f7b8369f212124b124bbd4ff4d9809d1462f947": "ERC20SnapshotMock", + "a98e5e8ec5b8c839786c8b5fec95f1a8c0d76999": "ERC721BurnableMock", + "6bca38a21f8600f2c6e7ba24572beeeca15a7007": "ERC721GSNRecipientMock", + "27639747781f75ef1d11c3a8af9e7f9425b6595b": "ERC721Mock", + "f1e38a0757425bc9c416626fcf8f4a73a612264a": "ERC721PausableMock", + "4fa02f6cb2fe182533fe2c180323c8bdaf20472c": "ERC721ReceiverMock", + "01f24211871a64c439300003fc8b8dc76ddff4b6": "ERC777Mock", + "d286a08d1ddefa6a8fa5b8d6d8a52f4fdee2ce0c": "GSNRecipientERC20FeeMock", + "fec57f6d1902f7fbac554b0f375b3117e8e745eb": "GSNRecipientSignatureMock", + "ea7b7becb2c1cc0987b63d7cd3065b1819bb4b0a": "PausableMock", + "7d8fde97a41abf14faf73685794d849a4c3e0ac1": "PullPaymentMock", + "0c8d3622e8f5d7562ad37806f3d75b9290558a3a": "ReentrancyMock", + "0dbc8bb2fa7ae511f40ac5143ce8817dba57d89c": "SafeERC20Wrapper", + "9c68614788325a6129235a41228ca6d0d2ae806b": "PaymentSplitter", + "8084049564949219b37e12ecf91934ad62e5a94d": "PullPayment", + "1a5d2d9ad8b09f49594f516e1c1bd434264b6441": "RefundEscrow", + "7ef8bf14f12c46b04f4bb701ac6148af107d151e": "ERC1155PresetMinterPauser", + "4d3c1b8ff12cb6f53bfe559c4001aaae2ce5bfa9": "ERC20PresetMinterPauser", + "76e1b471738b29e9ad472002b299e6ca5c992583": "ERC721PresetMinterPauserAutoId", + "13032a5e6e8c053928c1a7079d1cec08a8f72545": "ERC1155", + "e9aeb04c7cf3cfe28278030bef8e6918e8822bd0": "ERC1155Receiver", + "1524e25dfd71e549c0927267e4cf939f87eb856c": "ERC20", + "ce38bf299cd7a12c71f467aab654930a323c8947": "ERC20Burnable", + "a093419c3b2483a11d550d411c12a40b4d2bc644": "ERC20Capped", + "c13eed0a07804745778304d7af258421bc4f2c50": "TokenTimelock", + "5553fa5d1dd434b4ff2f5631f89923d65a4156db": "ERC721", + "c97967b9b005fffa9ed4fc230cf48d48e34e71bc": "ERC777", + "c6c506954a6d5d6b55db67cc577e31e7da641ecd": "Pausable", + "aa82b2ee7d508dc438e8a7d3995278479076184e": "ReentrancyGuard", + "85e7ef332d5fc621ce63ccba93ee518591bf8c8b": "GSNRecipient", + "96d2749e41cfd4e833a6178779093d82efbb7d0b": "IRelayHub", + "ffe1a6c90aa2b5556371b3799d2c65380a257d0b": "IRelayRecipient", + "0d2073be4268aabd41cce88b3769748e23142750": "SignedSafeMath", + "c0bae1111dcdf923d9a02599ff8a04c00e2456ed": "ClashingImplementation", + "4f92b6c4dfa12c3081d1fe4007e48df4c8c82e5c": "Impl", + "299556791f944a3fdbb677e5940c9d6865822606": "DummyImplementation", + "0b65288765b06e6baaa610a1d42eaa2b4591d8cd": "DummyImplementationV2", + "36075e336521530913cca767578aac6f07a38909": "InitializableMock", + "2f0630fab703c0cfc42ae33caf06e886fc4e6969": "SampleHuman", + "0de21f8a03ee4c6f6a63c6b6bf8b4f72d72ceced": "SampleMother", + "62b03120ad8b165c812e68bfdbba23080bf441b2": "SampleGramps", + "0bb55179c7e2bafad38c05cdad4d7a4a6b82d90e": "SampleFather", + "dc4d51c37ecfb1e2967ef74f7a2559a6252a5272": "SampleChild", + "85d6460e3b0ac8447a7db9493a5ff396c5e9364a": "Implementation1", + "43af63388be018e6a4448b585ee2244486d266ff": "Implementation2", + "1b7890b0027cf8b10d871746f93c892d4b2e814c": "Implementation3", + "257829569899b91fcbbfbd6fe9660d7ed25f82b1": "Implementation4", + "e179e255d203b40b5e050148327a89a4db0274af": "MigratableMockV1", + "b74cf7f9f38e31bc2c4cc77a87569a094d157de0": "MigratableMockV2", + "97d9d9e61df537b9d68d8d94b363eb8f58f9c855": "MigratableMockV3", + "36ef2be3f4842ffce40b0baad7a38c98dca86627": "ERC721PresetMinterPauserAutoId", + "44346833a6bd65fe95c90748b5722a563f3dc3e1": "Initializable", + "c2f5c325aaa4ab9aa2c8def40e53cb2e7c38dd66": "Proxy", + "62927e48e0b61e131a6cfa67ebda7218969a6f3d": "ProxyAdmin", + "a312403c3feaf629c2900ce0f0d1434bc359d428": "TransparentUpgradeableProxy", + "2dc09dba2775be34524d45a25c6a12a6064b687e": "UpgradeableProxy", + "1451ecddce18800239ff93690b719b8a654a8b2e": "ERC1155", + "4635856f8449649c520428ead6e61d6f9b1e13a8": "IERC1155", + "12525308d365e1082fcf3ada1fb2d71db3972b16": "ERC20", + "0ea2181daa5c7e76ccbabf8a9999f9fbd1833820": "ERC20Snapshot", + "65ebeb77cd51d64c2e748bd176562b4e4b3766b7": "ERC721", + "365098499bb100597dd9267be4172eb9a51e49f7": "IERC721", + "aca21574c58b1e1387769de3b07df2bd8648fe2a": "Address", + "5e2433d4880abf2da08dc7bb2b1bed1ee89500dc": "ERC721PresetMinterPauserAutoId", + "060fa9715f285857c483f5f8aa8f283597b32a8e": "TransparentUpgradeableProxy", + "eeb1b0eb21f40d26aeaa5db59da4d89bdd78eb3a": "UpgradeableProxy", + "a6e8c979be5bb5af9fbb1e614b27b38839a5894d": "ERC1155", + "99b6d5df430ce23689a152c8438164c5de872197": "ERC20", + "c60a6be3f3fce5a3b3ef5122354fffa11cc2f04a": "ERC721", + "ac504766b532baf6b726e48a8e3c99f16b2453c2": "ERC777", + "f9fd0c5c9e330675fda7856b975b0fe6b02624d0": "GSNRecipientERC20Fee", + "f1fee8d515a2f71cfbbc450e793a2d2b17caca7a": "Ownable", + "b503decf7949df51f4ba6808c081792e70437c0d": "ERC165", + "761f89f6ffc7ca427b95c3f0101db6d1f271d0e8": "IERC1820Registry", + "7640634b8811549a807f0ba07f7acb29afbedf2d": "GSNRecipientMock", + "ef02f12e6402f08a97633ad225b6b312578ad132": "PaymentSplitter", + "248a8a1273db727248a7412571724b5707d2946b": "PullPayment", + "397958f6f4842504963dbd017cfb8bc64d4cc2f8": "RefundEscrow", + "84a1ee038830d25ac77a33ebe4b6d27360da022c": "TransparentUpgradeableProxy", + "bbc4789f86eff2f3a7f1da837ae6a85de7e2f803": "ERC1155", + "73606b13add74a0032c16e323d11c28d0a62fa05": "ERC20", + "c7e4c94e1c49864431de7e3b2dea4595757189d6": "ERC20Capped", + "ca4fe971d9d72558abd50f77b6cd8b3de2554b26": "TokenTimelock", + "eab2db3a101c13a594e8f1d140adf52c64242bf1": "ERC721", + "505e83265ba5e1b1939a2c199ec99b5beef596bb": "ERC777", + "ee5e60d9ed917eab36f085b0b128c2fff2caf10b": "Pausable", + "bc88ca03e46528a04853c32ebf121df42c4d9edd": "ReentrancyGuard", + "2cefc88832911d8f000cf1f853a8a1ec34a83869": "GSNRecipientERC20Fee", + "ff468e5fb020023b45058cd9d6baa684a07c169a": "Ownable", + "62e78f66a0dc5a7ad8b7f155a4a3c0bc056d37ed": "TimelockController", + "7661544d7b4503ae1db879c1b06335abe437eb43": "ECDSA", + "79f657470505cee15284ebf0afac69c26820b6bd": "ERC165", + "3a5cd51f0635a3fb082c4e761450b541cedd5e9f": "AddressImpl", + "780be56bedddc62c2722b13e5fe2e258e07da87e": "CallReceiverMock", + "eebcccd00f6a1385ea11f82064fe982637af2cd8": "Create2Impl", + "54279277126550e93cb4518ef5b0ec055915ec67": "DummyImplementation", + "0b1c723fb1caabd0949393e90cbb3a18af826a7b": "DummyImplementationV2", + "8f7732e30464761faf28ca7d986c979cb78b55ff": "EnumerableBytes32SetMock", + "08b973b9862e47b6cef3ae3540a9c798a2e3948a": "PaymentSplitter", + "3e2e2f659b27f72c72462d35a41afed6c71e1310": "PullPayment", + "36cbd240c302af1fc3f2bd00aa7f204ccbe1e051": "RefundEscrow", + "80b95e3cad825888ef85966822547e32c545d044": "Proxy", + "fb5050efb413c3776ec0c9ffa540df1a42d3ce2b": "TransparentUpgradeableProxy", + "93c13eddcfcd62395624270cde928e5d24d3b4b8": "ERC1155", + "61e358e538e2273e31fa7133009c7a3c4ff8b9dd": "ERC1155Receiver", + "0dc22cde3abaf6c0fa621b32f9f7934e22f4c1d1": "ERC20", + "63536d5bfe0f79c8ef6782baebe76002151cb22e": "ERC20Capped", + "dd756683800487b41064dd881e0b65a419862aa0": "TokenTimelock", + "818503b17c0db33bfe69b5cc461cbc061d0c65b9": "ERC721", + "04278f72bdb6c61d366aec038058a1212a4f07e9": "IERC721Receiver", + "5512c580e9da164446f6551a20486a35e1c08807": "ERC777", + "da934a25d30edfd91855d54555dc0144dbbfd7cb": "Address", + "179de8c468d36b2e51824b07136adedae7bcbdc3": "EnumerableSet", + "12cb21575ea5e6e30c37c9a7440fcc2b3adb0845": "Pausable", + "ffca07556d8e39845429a3b009980201301c5b6e": "ReentrancyGuard", + "be045cb6e49d12aa04b07af22ad6e600d472b78f": "TimelockController", + "6af4381b463ec0dcd9e2332bff9cf3ea9568ba29": "ERC20", + "33beec74bb53c2ee0e9e12f694e367258724e6b2": "GSNRecipient", + "32a14bea425dc2959b680187600942f4901efceb": "GSNRecipientERC20Fee", + "fa5e7908a5cb10013f735b6718ba6ef4fb41b794": "__unstable__ERC20Owned", + "5d07d72245331e4275c204db282ad3900383f778": "Ownable", + "5d26e032a554805a01aca59579417663de70f966": "TimelockController", + "63a2430e318736b284bccc524d6c619d329ce419": "ECDSA", + "2cf03d8347d7129c4de359dcaa4f0dc40f88684a": "EIP712", + "92215334770433b2add7c67ac51233591f7fe922": "ERC20Permit", + "e2f97eec1c3991924b7b1456696f87048be7d783": "IERC20Permit", + "f35d0cf20e1373848e42b706d4d6aa9fd46988c2": "ERC165", + "c8909db38edab0286eb1e83f45baad9b70ed6340": "ERC165Checker", + "dbf020d120894cffa01451b8caa8cac408122c47": "ERC1820Implementer", + "a1815b90bd687d3a96e0d4cc57bc8aa5acc126a9": "SafeMath", + "1eee0a26498f2e503cda12d7f0a3631e9256d11f": "AddressImpl", + "64ba98e0a7a3462e9a936a0744ed9d1f27f4efe2": "BadBeaconNoImpl", + "49252afe482c957eb4d0d4e1f61a70fae4534bbe": "BadBeaconNotContract", + "f21645963792a804fe46d24eae733ced9792325e": "ClonesMock", + "c312288ff11bbaa9f288b73efa4e89905b4b3e0c": "DummyImplementation", + "fba59a0ad823b65925d38fba35a9fb0acba4f11c": "EIP712External", + "3f41e938116aa300aad2aefadfbcaa6193c490ef": "ERC165CheckerMock", + "f5bc328483f38e40a88c2830fc7d26319aa9b5fb": "ERC20PermitMock", + "02d7d727adc8cb0dbc83f8e1803c172a0990296f": "ERC777Mock", + "7cdf827fe3a903fbcaa418bad074950ae9f8c8d2": "ERC777SenderRecipientMock", + "3a93528b96d70af4e872192f05dfc7ee25419517": "EnumerableMapMock", + "c68710ed96a182101e1024d3e1aa91cfd2a636d2": "SafeMathMock", + "5a91c81404f840fd7f9054fe06f3a1c5036d4343": "PaymentSplitter", + "e7ac2394f80e32ef8d86823bf3ab56e94543490f": "Escrow", + "46e54ddada38f2432fbbd672068ebc144fba6137": "RefundEscrow", + "222751ccf88f680c3c75ab80cfb80797d45b2651": "ERC20PresetFixedSupply", + "1a1081be6939302bfc77c7b3be6c5f874118297f": "ERC777PresetFixedSupply", + "ce7db6d05e7868e70e75528f1c0fbd9297bc6fcf": "BeaconProxy", + "4249e310139fbc623392ee676281a60d143c16da": "Clones", + "869d95b3589c7fa6b2ecb1dfeb9008c463c267bf": "IBeacon", + "0fbaee3e2bef583ef42cb3ed731b3e40b68aea33": "Initializable", + "3785f5c4f386559127baa5a185d2ec13ad4c53af": "Proxy", + "1c570dba696f08a170e92f985d839dbe0ecb4a91": "ProxyAdmin", + "a7386fcd820a2c66235bb3e835a30b553545812f": "TransparentUpgradeableProxy", + "870cdbd1d2ddaf132c3a1a6a1d48d6ea004b123a": "UpgradeableBeacon", + "9ce86a848977d6ebddddd293ea9e81836c488c6a": "UpgradeableProxy", + "3160f17274036d6719cd64c436b4167104e70bc1": "ERC1155", + "1c6dbf08eb3ea12cf8a55ba920f32971bf194e89": "ERC1155Pausable", + "b5611144434fe88f4b7fa065d3fe437178a770ce": "ERC1155Receiver", + "1c7854ebfeea3b6b4ada23aa0dec5cdd142d5524": "ERC20", + "54480a412d33bc4808a6f4626c12a186086c236b": "ERC20Capped", + "06ea9a75c96d6774e79699e85d93b2b2daf7e701": "ERC20Snapshot", + "7042e55c509ff3cbe7c149238e29fed880359381": "TokenTimelock", + "6146ecf60a2e9e538355b19cf9095a9723197adc": "ERC721", + "7e232aaf85bb00c9401b300972a3f6322faed39d": "IERC721", + "9fa1eca3807f9186d44ae941020d506dfe551adc": "ERC777", + "041cd09ad5b7832a451916a4eab7c14b9157f9bb": "Address", + "1c6caa372c1211fa570af1576c88d16cacb426c0": "Create2", + "cafd568a2be123baff9a85ba0d347a428fb5777e": "EnumerableMap", + "1690dfe17f8334a2a88203427ce601d9c6b25760": "EnumerableSet", + "3246d2bfdfc6dd0197a0fe1497632d66ae05fd58": "Pausable", + "b12a995aa8744db27ab0e367133c4cf01eb3a9de": "Strings", + "1dca314c082a2d86c4b13fc44d00ed3caf84660d": "GSNRecipientERC20Fee", + "507897800a5e8a472a426aebecc8e766854e20cd": "__unstable__ERC20Owned", + "e7f6d7ee5a886c88c0052fc24f06e83a3f3a08d1": "Ownable", + "b1eaec929a4492a5ab9c3ee0941f4d0ad4dae002": "TimelockController", + "050c8ca6f92fe1485057a1faa1293ac23af4e9ec": "EIP712", + "4fd1e1d5762c465c2779bb5062ab69c1c15df7b6": "ERC20Permit", + "8ebfa908d5afc1a43d6c42fb85da4d675ad2acaa": "ERC165", + "69db7dc4835bf134acaadee0aa2d3f51ab9e655b": "EIP712External", + "91dc025deeeb2e4dead2db739f04e2d00619a818": "ERC20PermitMock", + "f37b58e417ed7f71db679b2c2fa5c0ce14226133": "ERC777Mock", + "b052abe16f942be8a710a608a09f437476b8ca03": "PaymentSplitter", + "47f3ee26c503ec9c706f580520db5e78af9aeeef": "RefundEscrow", + "8a505d49e69fe65120a99979dbdca39b8efe22f5": "ERC20PresetFixedSupply", + "ea8b53fd468c496848babd2a0e108b002c94c3d7": "ERC777PresetFixedSupply", + "2bc90d97df0f2ee6653f0237130bdf57ca2437ab": "BeaconProxy", + "f1f156b98ccda98d19e894c141bc0317cc5eb9c0": "TransparentUpgradeableProxy", + "1ae15cdffe0ca9340174ae68cb8d2892fe831bc5": "UpgradeableBeacon", + "1c2989c2b4cad10ff8b0ed4f7cffce37d3f7a6dd": "UpgradeableProxy", + "51ad04dc5cdffc68238a1696f78d7672555ec7dd": "ERC1155", + "48ba59afc22a61b178aba0199a30340b43f9ba62": "ERC1155Receiver", + "7cf1a0c8c25eaa2edbfccc040d2942fbb7d7596e": "ERC20", + "12d077e4475d8cc3dd032a10fb2f97138c5c2bf4": "ERC20Capped", + "8846bad470e1c4a2177e3247c29c6604a2307157": "TokenTimelock", + "171ab805afaa2a3b05e4bdba9d9a8271c77db63a": "ERC721", + "a908082bdc2115f43aabea87e8c2897833bfda29": "ERC777", + "0424544a512fcdda8b090610916a0f7c5d375387": "Pausable", + "1321258244d9c40eff5a48ed1ecb88b2577a56b7": "ERC721", + "a0a26ed94d63bffb8f31246bdfce9867514cd672": "ERC721", + "b01a301a7d54e6d284e847eb9d9e24076112808c": "TimelockController", + "69d0e361a511bf3103d25a77dbe77048ee5e0115": "TimelockController", + "ef9cee4fc16302d9c2f27edb367db294c1b81f5f": "IAccessControl", + "dab86c163c575d30473cb3a5c0624b44334efc12": "AccessControl", + "2207123df93140cd294823148a2558be596e6495": "IAccessControlEnumerable", + "abbe8b6df781ca55c069fd98e85f817213835c6d": "AccessControlEnumerable", + "9565576e12fc40a6a8a79f663a4899ef55e80c5e": "PaymentSplitter", + "92411b430030f18396dc798bcf7d29c2d53b68eb": "TimelockController", + "259338440d397d3da2a4bf44649d51cc646c5aa0": "ERC2771Context", + "566d42bf0d67adb04c1e73658ef5802b61702c97": "MinimalForwarder", + "253248bcf8aaa75c515f000d674e69e3ad2dc67c": "AccessControlEnumerableMock", + "868d87ef0ff053e2007b9e9180f2d5daede6491a": "ClonesMock", + "e4ddf77999bc8a4befcd1d9428b77ec0156f1c82": "EIP712External", + "56a0750afc35891ff98a07f7c36aecbb2103c32e": "ERC1155ReceiverMock", + "8ac6ce7dd83fe6abaaea9e149de7fab285cb6f76": "ERC165MissingData", + "b33e2d44585e75d38aa904a4e210baf4350189da": "ERC165Mock", + "e89f235cccbc06e2bac7c41f6da38fd77d4de644": "ERC165StorageMock", + "8ab8d35fe19014b9066aa8ffc249623257072208": "ERC20DecimalsMock", + "67b9f92bb0f7ef4c509fd6db84af16f6a1dc95f8": "ERC20PermitMock", + "417a78c41729dfd05ac2baac8e6678dbb95f5a05": "ERC2771ContextMock", + "4e57221ebf4782201f0d1ca5b851e5bb12ec2b8b": "ERC721BurnableMock", + "e4bb74aec903fc8db95fad4c8192ff627923d2e9": "ERC721EnumerableMock", + "cef3ef778dd17371bf88d3a20cbdcc3c71298afa": "ERC721Mock", + "9e5a3684f1b44a48c73787f823a3d7898f922753": "ERC721PausableMock", + "947534cf69fa1bf1babb1d89e68fa2435d73f59b": "ERC721ReceiverMock", + "6fbee4f33e2aa55d513022b4b6629ef896f52db1": "ERC721URIStorageMock", + "d955f8e424d0b8531fcec97fd70d2eefa06daf04": "StringsMock", + "bf6d216501296a25f572b36b4ececf1e7f752b8e": "Clones", + "3caba018d8b811d7a9487df761635928bc7caf3f": "ERC1967Proxy", + "03f4e4dc310c6685debfa53240c8029d66d6a9d5": "TransparentUpgradeableProxy", + "db88ad8eb489e2e93a76e7f0d0843f442bb3e802": "Initializable", + "fcafd1a2198e83e29448c4961babe00d479a259e": "PullPayment", + "06a7146060ceeb791b34296ac3859ddf9924c8d9": "ERC1155", + "fc0e45a63f6c27366e72fba2e93045493a1d0fcc": "ERC1155PresetMinterPauser", + "991da8c1a4e38a69803a920b2ba6f04f3534ba90": "ERC1155Receiver", + "32f4baf24d04431b9f31d7fffbc14873db05910c": "ERC20", + "b8948a765f56a1cfae8a3b92033d3a7f583d266f": "ERC20Burnable", + "3ed786a6529d43a95101022d405252fbd955f7f6": "ERC20Capped", + "975df6aa796d442e90665e8639659a8da4d06175": "ERC20Snapshot", + "d6d1fc2391215c66cbe050ddb24066c54a8ec13f": "ERC20PresetMinterPauser", + "b923239c1bd5ce64cdd82b8a78585e70ce09a0b5": "SafeERC20", + "3cc2d212711b9aed654821263900fe101441e08e": "TokenTimelock", + "ade76f270c6838a189583a70457b1f34f547fa89": "ERC721", + "e32fa6056318ff4036b6b34ae3631d92cc2ea489": "ERC721Enumerable", + "174c62a690020e2cb1b08c2ed4ebf665a78e3bd9": "ERC721URIStorage", + "387defc33a85bd87dc92cf3e1b956407169ec624": "ERC721PresetMinterPauserAutoId", + "8a77655c684246218b9a58702a073110c1960c2a": "ERC777", + "fffccb2e4aaddd018bf1f74f424764d0d8f3ddcb": "Context", + "2a02aed9ef802a8544d18afe1df202a0fc9f22fc": "Counters", + "64e303670df935fe5d0a7e7bd932ae8850f6f201": "Strings", + "b1f1fd21fabeee2b3f8d781a3f7b61d2da0fa499": "ECDSA", + "53aa499a4c694653ffb7ad64295f7564c8d25f4e": "EIP712", + "fef23c7cba2fd6827ad096a963156b7122a5714d": "Escrow", + "c52d6d7307f32769c227bc90ff35f7ed9484a418": "RefundEscrow", + "27eb537f38f4e78bf50d746739387234f230a4db": "ERC165", + "e00b58223b3f1aebcc28924cdbf577f342709c68": "ERC165Checker", + "8ab170369493cd6ef28c81f35ec9fb0597632270": "ERC165Storage", + "01bd41c8fc215254e0fccc0f1937381becb83c93": "ERC1820Implementer", + "725b5b6b3cb30d120bdc97b353b214d7e0d5457d": "SafeCast", + "c3556d686a5da76a47d19d4e3c1aa5d53cc96011": "SafeMath", + "31f7a9169859955645a6b3b01225caa339e68a92": "SignedSafeMath", + "50b36c99d71a6f1e5bc74eb37305fb633ca745b1": "EnumerableMap", + "1eeccb2aba20ae782f788b591c1c73247a2f5710": "AccessControl", + "0d100f93955e406b8f4c64256fe2fac9f58feaa3": "TimelockController", + "03ad79036f06316b924f8e839e05f9f7418203d9": "IERC1271", + "32778f5dea953b5c71cda22b9034d3a99c80a260": "IERC3156FlashBorrower", + "7a7395520740c3e9ca99f25ac256918525d6947b": "IERC3156FlashLender", + "7b42fc0929549dded5a794ba5cbb6234482d5ae5": "AccessControlEnumerableMock", + "105af4b6cb195a355234adb0f75e29dc35fbfe58": "AccessControlMock", + "e69690c196421663cbeb3e40e3ec80db2419b7f8": "ERC1271WalletMock", + "400c8eb934cb0cc695a18678a58f974169150eeb": "ERC3156FlashBorrowerMock", + "d7d5ac3eeb3537f6007674f03f33da91b2a99606": "ERC20FlashMintMock", + "760696c2eddc1f804ccdd6ad139de35e315a8f5a": "ERC721Mock", + "1aed59d47401d84a7d52819e97f7efbb125604bd": "ERC777Mock", + "d4d4dc6d063c378fe8df00eba9ea1d3da940c6df": "MulticallTest", + "d51ce27019d1ba250fe0737caab014f9c51aefd3": "MulticallTokenMock", + "5ceef95f1a2229c02c5f838080b549fefa9d185e": "SignatureCheckerMock", + "d9969b56a2b7a0b53970600d4563508c1ca509e6": "StorageSlotMock", + "1859856bc5a07e18d8967ec00b4d89cd6ea11e0a": "UUPSUpgradeableMock", + "02306349e880c95b317f34313bf0d335bcb20711": "UUPSUpgradeableUnsafeMock", + "9d3be3ef2fe57b5f8345d6bb0b34500b94b3039f": "UUPSUpgradeableBrokenMock", + "ad0004727dde87f3bf6a518a02ccc9475c378edd": "ERC1967Proxy", + "e2bf5ece630b73ede3fa56a42a625ff79cf7a07b": "ERC1967Upgrade", + "775dad710f41a2629d9d5506682c1cd574eae0a6": "BeaconProxy", + "f1865b420ea4dee35a07e61461aa012d55131f33": "TransparentUpgradeableProxy", + "a1b5157f3148bf64bed9182b4d0617a8eadfd581": "UUPSUpgradeable", + "9d146a9046589ef5728295f53cb3fc9209f6f3e9": "ERC20", + "e3f871942e9365cc12cdb31ac4196e415579b5af": "IERC20Metadata", + "1b85965b7436f201b003472d4afba8ef1e2f0707": "ERC20FlashMint", + "2207444dc8582d69d9546a2434504f679dc50d9c": "ERC20Permit", + "6e83d64273b978f98df3e2379c388010ec2860f4": "IERC20Permit", + "1751dd56c4410e19af4980136ef1ba8e54000493": "ERC721", + "5714897c18afeeddd7dbe406d9878e22f5d751d1": "ERC777", + "63d1095e1fb56da130b614eeaa63f4803f99f7e5": "Multicall", + "fe5963116e1e943c56b62faf6875a3f8482cfe84": "StorageSlot", + "b06559b6a9527a4db570993b98327d1e16908ed2": "ECDSA", + "f6325fbfc5e1ff1f03992fba565321bbc17ed789": "SignatureChecker", + "6a11687f7b7fc1433b269fd4abac331c66fa8a77": "ERC1820Implementer", + "6eb9cd105fa9d0262ed7a11160b76381b39cebd5": "IERC1820Registry", + "e91a667e7a573e6eea5d853b468e8f3d60d81889": "EnumerableSet", + "5c61094952cd50d3802c31177357efd5d8964614": "IAccessControl", + "8694d4f12fbafeb16850afc3464c06ea0a548a0a": "AccessControl", + "28331601ee481fd4a956fdbe388c3abf54f3b65b": "IAccessControlEnumerable", + "64d6a3bb174631f086b16b5e8486a5f794d976b7": "AccessControlEnumerable", + "4d7c63c045201a4bb4b072b90c0ccb7e3da4f871": "Ownable", + "42b68abf0eec947d970be6ed8863108313d0af33": "PaymentSplitter", + "c1f9217c77f35c660dfb3d88d0406508c56488a6": "TimelockController", + "bc8959ed38c71118622ffefeebc4c039b892709b": "IERC1271", + "0b811309fd111891492fcc5d96a2cb3acd8d72e9": "IERC3156FlashLender", + "b6f84fda4cb8fdbaa97a02726fa37281f78e5c91": "ERC2771Context", + "42603ef9257bbe665bb87cffe0b376d7b67712ab": "MinimalForwarder", + "c2aec4893bc9a14ca843763da02fb355261d8a85": "AddressImpl", + "aa59563d28f55355429620d46a95f62807bf714c": "ArraysImpl", + "129786c0f640a54e1262bd0fa09c0402fa4f5310": "BadBeaconNoImpl", + "c7276d5682c391177c65742657733021762fde2e": "BitMapMock", + "da0acb035f001bc47226ca65e7805071ebcbc590": "ClashingImplementation", + "9a62fc52dfa77cec1a4fb20a17dc85c2b00165b0": "ClonesMock", + "e319f874c429173e1b901ab7fc2014f7acc17b54": "ContextMockCaller", + "46564e62cbf056df3d249a990973bdb709e83c2b": "CountersImpl", + "f89165a7467e5e4a909e2b013e8383263d133e18": "Create2Impl", + "5654add772b6dac7815ecc69eeb4c6da58f6ce7c": "Impl", + "9db5258aacf562685ca737ca2de3e42ab6d55a00": "DummyImplementation", + "e2170d2050cc953a0791202b11eb01c352a015b3": "DummyImplementationV2", + "75a5093a9fb3b7de904b13481d04f0570bf5a6ff": "EIP712External", + "369690b5196bce6039aaec5397827ac325a7b4f5": "ERC1155BurnableMock", + "ffc5443dbc5dd5285e2ded467043517e152a75cc": "ERC1155Mock", + "b3a1f1f5c11bb12f910ba0e8d951451eae1d0292": "ERC1155PausableMock", + "71fec413985069608d5a44630c2fdbd3b8418ccd": "ERC1155ReceiverMock", + "5cf44c06a1081d98ecd7e65cc1aae83995055909": "ERC1155SupplyMock", + "ad0b6a02674048a5e3a3d4d4a551934a2c897c74": "SupportsInterfaceWithLookupMock", + "070505611a17dcef9932ae5eb779350f79698235": "ERC165InterfacesSupported", + "93bb8c99dfe0581125332fb3ebd0e3955144df3e": "ERC165NotSupported", + "6b299c538b2c135312b0c72d8af712c821f831a2": "ERC165Mock", + "8fee474311bd35767aa7afb389d6e4799eb5b8cf": "ERC20BurnableMock", + "bf3af764a6c36127b5ff5e46f045291de91933ec": "ERC20CappedMock", + "21c4be0176e151069878b58aae5a1d165223e6ce": "ERC20DecimalsMock", + "cd2d838c0fb41e79aae2433e909abc6c0e8122bf": "ERC20FlashMintMock", + "f83b56148b0339522b662f03900cff6983c51850": "ERC20Mock", + "e28bdd635291e4e5aefef3245e353609f1515968": "ERC20PausableMock", + "9b65c5d1a96a1e41eb6182254c051eece2af5c54": "ERC20PermitMock", + "2ba8af8608e5448e4715cda8e571bcc6cfd48963": "ERC20VotesCompMock", + "0ab46f9bd08b5723b1d914e41725574517a12ad6": "ERC20VotesMock", + "b1c70a189722a29fdab6b49e27b040472f5a2e16": "ERC20WrapperMock", + "62a9a8199169e0de7117864ee9d256bb4b52083e": "ERC2771ContextMock", + "ae5f39a87a79311e6e4ad375b3ade2b5e03131ea": "ERC3156FlashBorrowerMock", + "e09d1048186c05d41f0015ba69aa70a86b243c00": "ERC721BurnableMock", + "7fae99c0b5530d32609982b4d533509b8674f0ee": "ERC721EnumerableMock", + "9578913f5871c5e1567c53da7d5675d75dc92747": "ERC721Mock", + "449cd793d9e4639b31812292d0319b59b0ca8e55": "ERC721PausableMock", + "b10cef059262dfabaeade8ff51fd80d2aaba7537": "ERC721ReceiverMock", + "85c61f773cca6fa57c335796e1ca1f5b98ea1485": "ERC721URIStorageMock", + "75e9ad33d99c316414a0d3506cab37488b722728": "ERC777Mock", + "2af1eabb238c84878673e589fd69defacb92e040": "ERC777SenderRecipientMock", + "4ce3c0c2f9d135ac50c7075651c9b930daecd603": "EnumerableMapMock", + "867d1f1aa9db24d77f5ecb83a38eb4a60b09dce9": "EtherReceiverMock", + "a8e715f4952f7265ec539aba50e8eea7a45f924e": "InitializableMock", + "e67f151ab39236b0419d7e8b0a583c10e549efb3": "MathMock", + "1f337a2bbb0e83495566c6cff4791828463f973c": "MerkleProofWrapper", + "c02597d82e217259e7d73000bd1f2789d1c7cd61": "MulticallTest", + "517131a8a0737e26e7be43853b9c24ff6a20552d": "MulticallTokenMock", + "7fadf3b05e77e38e5049e165344022d1e624b617": "SampleHuman", + "769bdb6cddb7c34bb955535a6f0f77f49e98f292": "SampleMother", + "a2b8b3961965b90f6c7b4ecaa477bd0d77f8c7d7": "SampleGramps", + "504d033dfcae64d76986dcb5cb8c5be4d1dded4d": "SampleFather", + "86e3593fee13c15d567cc136bacdca20ea1e6101": "SampleChild", + "cb6a1051fd2f5bc747c3f773fc3af72c484ab3a7": "OwnableMock", + "24cf84f54a22c4a772fe74d9f72853640e102262": "PausableMock", + "1167e7738408a66d3897f34aeef40c9ef438686e": "PullPaymentMock", + "a8fac5d6e42c033f8c2372dcb6ccdcfd37cc1437": "ReentrancyAttack", + "7b976c578c5adaf74bc18e387c7e12147609b8a7": "ReentrancyMock", + "e66dfe8c2da2a470c76b3d0a0cfe5e7a7580de9a": "Implementation1", + "a1226699bd48b90ff377b53c4a70f27c25a9a16b": "Implementation2", + "c9e618dc47d2ac5cc6dbce47d9b0130d4cc9377e": "Implementation3", + "3ce30a36b36ec42b787dd5be03a12341207a7fa6": "Implementation4", + "f29c76324fd21e33388b40bd77ace0ef9c5c0d41": "SafeCastMock", + "2689010b084a75537c8e662d0d4c1c82460a7661": "ERC20ReturnFalseMock", + "acc2c209743671f9c4e44c829247831bf350a0a0": "ERC20ReturnTrueMock", + "74fd9057d3dffcddeae355918b7644eaa8ef7244": "ERC20NoReturnMock", + "86229693a21d889433acfa056ae7db96ba4a6cef": "SafeERC20Wrapper", + "4823c60f1f994ca554eea1ecbfa81e5b83b5d561": "SafeMathMock", + "97db478067ab766d3fa0758aca22823b38c81327": "SignatureCheckerMock", + "e826f1b32cee3777ae3a3d0bef3cd8c20ac9cf7d": "MigratableMockV1", + "2e635423850dc52ed5a3b9afdec568a0519c6402": "MigratableMockV2", + "27932bcd6aeb679027157cf623195bd425b3d85b": "MigratableMockV3", + "2786cb54d7147fd4c067acd9bcd2ccb9cc57dbd8": "StorageSlotMock", + "b17d5f234e99981e2caad9c0f56ffaa53ad3e125": "StringsMock", + "5df1b89723d0bdcc5d517d4317b9c32184247a15": "UUPSUpgradeableBrokenMock", + "d90c57be785b0a21161e20792e434763a5617e42": "Clones", + "1a59f5b5a1457a6db4f0fde03cb7ae600702f205": "ERC1967Upgrade", + "3fb535ddf3bc10f6ee9803c6d0be51c32f15947c": "Proxy", + "dd95705feafaba2f8cf136c536916bc6e15679ce": "ProxyAdmin", + "4a8ef6e66df0839cd7aaab06e9e5101d0b427ab3": "TransparentUpgradeableProxy", + "04a6f67acb954ffe770a8a034c7b342ba53d470d": "Initializable", + "dc77065c6d2328495a7a5373a4384cdfa419b536": "UUPSUpgradeable", + "52cabe02daf5bc8b106eca66daf0d7a2af4a1c28": "Pausable", + "e087c5b92178714f1e90fa95c2eb7d96e584b267": "PullPayment", + "362780bb1082d2ee05b02fbf3586f2efdf55787d": "ReentrancyGuard", + "e0b83559902f4dbc79b69b31b5d5a55566f0a4d8": "ERC1155", + "26a7097a902c5d0ec06e9afe7a1b16e919e04f4d": "IERC1155", + "f7f86cc447e330c0f2fe6c75893393527f9f0b75": "IERC1155Receiver", + "dcc175b857019b96cc84b4b554e4078167fd8061": "ERC1155Burnable", + "6dbb111b0880293ce2d796b20c6a84f2b39b537d": "ERC1155Pausable", + "6c4f2cc4be0924e6b4ad2a9b3c46efb8054335ca": "ERC1155Supply", + "0ba967a226fd02a14a5e8da8780b72a207f642df": "ERC1155PresetMinterPauser", + "8f6be89b0ce95a5a8507d0473dd6bdc86fc05893": "ERC1155Holder", + "3eed534c118e1b55d8807ccdace65018f8e6cbfd": "ERC1155Receiver", + "5861a2fbfab58b39cbd32dfc63795083f43d1e65": "ERC20", + "eefc9e89d017a91a4ce1f87accc52538bb130e97": "IERC20", + "36c08003131ccd3493f61caa424d4ef45e40abef": "ERC20Burnable", + "d577838d7d5ecc6f5fca04d568956aaf48c13597": "ERC20Capped", + "4f57398877163b33c21ce35e9e43b94b72d943ab": "ERC20FlashMint", + "4a726b7b47a1ef62e108e4eabde5e35a24fd062e": "ERC20Pausable", + "aa54946245c2f1991404df914c8a529eece3f57d": "ERC20Snapshot", + "370ff7cbbbcefc8776065285a30cda977191d936": "ERC20Votes", + "6b887b5359c94e61da10ae9dbc82502becb4b45f": "ERC20VotesComp", + "a7bc491c206021ef00c4c58e34737ed6319ccf6e": "ERC20Wrapper", + "273d56d9e427a9c91ac82db0a87ecf5d1d4da973": "ERC20Permit", + "1d200e39cf5dd9bd315f3461c1a664558662d5e8": "IERC20Permit", + "d6bac8d6f8bff3ba4a2c45d3cf23101a81a093b3": "ERC20PresetMinterPauser", + "f1eefb4a9491a1ca4f3c88a9d8518d110f7ab8e8": "SafeERC20", + "d53bbb9fbcdf3ed1c0ff29350e7c813dabf9a5ac": "TokenTimelock", + "2caaed78e7c5899dfdfdc82812a31048d90f11d7": "ERC721", + "7899b986a2072f4ac72b129375c7eac5eee84c3e": "IERC721", + "15cb97070ec4da6593205c442a6fcae406e7af9a": "IERC721Receiver", + "ef9f288af616034ca45cbbfb70926273848a17c3": "ERC721Enumerable", + "06ee92df7f5d22b92b723b7fa47a7163a8bee826": "ERC721Pausable", + "29e0c18d75d521f4530bfd591cfea713a1f49e0c": "ERC721URIStorage", + "8f3477480c38a4dfda7d4192ea80511fd8eb063d": "IERC721Enumerable", + "7a4d553b1a0193fcf9fd4d9468bb5700c27db42b": "IERC721Metadata", + "f3c528e97bbb7f9aac27c721e2d17cbc75be7ce5": "ERC721PresetMinterPauserAutoId", + "0093e17405d73820432e8da360f33ddc23308530": "ERC721Holder", + "ec44444770bfb356bacc955d93d5237656af1390": "ERC777", + "e0bfb77c486769ad6acb629279feaf28455cccc4": "IERC777", + "14955bd29186d48ce191852b38f761ce1622fef1": "Address", + "5625fde14370990aa8d4d094ba822a866b36fbd3": "Arrays", + "4ac4dc8857640e049508901478e37e13576e9925": "Context", + "55cf39dc3f389da17665b6cff3c6b4c47ee5ae5f": "Counters", + "61ca214711b37f23de183403ef96eba568654e74": "Create2", + "abe82d145668c3c90d148f2ca2971ea0cdd3c9ed": "Multicall", + "3965655fb49d3d12cb7b48155c684401673fbb96": "Strings", + "db454d7154deefdcc0d1dea7d458b572c4a0a67b": "ECDSA", + "4fea412076493cc56d86c5296289f1ccc4bd2638": "MerkleProof", + "8c92fa340338deb4146af78038d2f8195df99ed0": "SignatureChecker", + "a94f50827517d3595fb4ea61c7357ef87858dd74": "EIP712", + "2de350f849494c8ac4872728cd696d77f879efea": "Escrow", + "fc0669b213fd21fcbf82b48b6a5834a0e8e4797f": "RefundEscrow", + "ffbe0135815bb9d107067eac054384ce9c559853": "ERC165Checker", + "6843b3e0971a80f76c78626e5fbd5816449c4891": "ERC1820Implementer", + "3ab18388a1564c59b08f34c40e49fba6ed2030fa": "IERC1820Registry", + "e4a7521c8dfccec8ef656905b09facaee8dfdb01": "Math", + "69e808bc327ca30cce6784a56944f386502da108": "SafeCast", + "e3d19a417652f39488237ae86f633fc55f37ddd8": "SafeMath", + "61d0bee3d53d397afc63ceb8f5aebb843ad4f58c": "BitMaps", + "f4e98a17d92c50528ac5512cf6d19c28381a671a": "EnumerableMap", + "034b7e7cc2490688bf19079ab52aca584c622a2d": "EnumerableSet", + "3ff259364b811ce55fbaf0b7d6e145fe32532877": "AccessControl", + "982c66e73b9fd3c148d7f157a38fb08a074922a9": "AccessControlEnumerable", + "47e570ba4dfb58e4d36d325ca74008a1ac3a25ef": "IAccessControl", + "d78d847dd07ed931c12f77b0f7626eb4e0100745": "IAccessControlEnumerable", + "1f9a441bb3f9991cf0d8db4a0f7338155dc1135e": "Governor", + "c802a401fe1793af47cb8b418684023cd4d5361b": "IGovernor", + "5fd29ee0161a032ec9a5e86f2d8cd71f53bc6ed1": "GovernorCompatibilityBravo", + "0d8b9df97940d08bb323a575ef0d7060676ed260": "IGovernorCompatibilityBravo", + "54543b187e4d9f29dc31c819093f48d9969d7d8a": "GovernorCountingSimple", + "dae38923cfdcb3de8c354a88b7b13fc2ecc26e12": "GovernorProposalThreshold", + "946bb0a46b5c75167f052528a401a12768de1f45": "ICompoundTimelock", + "6d6fc8587f4cc604ecc04de3ee0f8377c88c2e38": "GovernorTimelockCompound", + "8a58931413fa94e76f02d330097fcfa9c1c48bd9": "GovernorTimelockControl", + "2eb8af93a3b36609392bf643c72a9d03f0a6f398": "GovernorVotes", + "fb68a921152337bcb1e01376223f4c55de026197": "GovernorVotesComp", + "f5c1995c54bbbda556c0b279624eb88f03cdea3f": "GovernorVotesQuorumFraction", + "bce8f84c0ec1c03925f2478e3a3fccb33f60f35e": "IGovernorTimelock", + "9bd35ec7f53dbd0a4a87d1a93c424f09916497f6": "IERC1363", + "898275960fb383e8850df71e6e26dc86a5af34ee": "IERC1363Receiver", + "8e978b1851c28780339fc78c1095ef2e9844ee55": "IERC1363Spender", + "8794d872af0a539cdb093481e698677eff5e2745": "IERC2981", + "e72cca0e88cb8abd72845272eb6c90402063a578": "IERC2612", + "2bfb18e3d399cff65ab9b803c1e058868d26387a": "ERC2771Context", + "88fb8242a3f1c90475facda5a92901c903676ce3": "ECDSAMock", + "339f780618b8638444d16c9e43ee94e0dedbd4d8": "EnumerableBytes32SetMock", + "a32259aa2046b09ffc5dc8b1a89cd3bbdf4163a1": "EnumerableAddressSetMock", + "47212bb1a4a0679b281ef4d5d1ff20b1d8e152e4": "EnumerableUintSetMock", + "6892b367ba9dbfecaf18e5ec15291d334a2a67a2": "GovernorCompMock", + "fa5c7c49cb08c80190788a5f66c38869fae7ae51": "GovernorCompatibilityBravoMock", + "aa27e63eb1eda7556b559ae08ed141575a001370": "GovernorMock", + "bc7e434e2afd6cea41ec96110028e63c2c55db42": "GovernorTimelockCompoundMock", + "d8b5430cf0a55144e3ebfb8a06f882614dbb7718": "GovernorTimelockControlMock", + "cce92ebddff5d610dca62d66c72c9cb83c62700f": "TimersBlockNumberImpl", + "83786236d97273dfc27838a31c523b1d362bf105": "TimersTimestampImpl", + "8a04dcf69374c0eb397038120d6f3efdcc2ffd76": "CompTimelock", + "60dfa68371a6272fc626fd9aae7e556621402067": "ERC1155", + "f0766528233a6368c8539a4627387175feb32b94": "ERC20", + "91e9f927a20d0de07df4ea6e3c2060bcca716ea3": "ERC20FlashMint", + "b655b4fbbb49760010632cc8d0fc006b15f0c4ee": "ERC20Votes", + "e92b2feb6b8539d301c2c4c66b91fdf11ab3a691": "ERC721", + "1fde194446c5afd545cc902213afbec2c87a46bd": "Address", + "6ced0927362ad42d906b44d8616661c2da119c84": "Timers", + "14c1e71a34bcc6538f8de689211c51c0ec0a8d11": "ECDSA", + "b590e553b7df8030182c6ecb4721a9c5dad81c98": "SignatureChecker", + "eebebdb79c1b3e1f8ffcff988f929b6dc1eda7dc": "ERC165Checker", + "9f15868ec22f5af898a458488bc83dfe12bf8817": "Math", + "2d212d3ead2002233febe7e68c6851cb66449d97": "BitMaps", + "1896e438b057c94ccba383036112041dd7cbad62": "EnumerableSet", + "898b9a1a1bb87f2ca186905c385d3bca567eebb7": "TimelockController", + "2219a93edab7ad1455f89d93bc04bfd6799232a1": "UUPSUpgradeable", + "8b6ce0d7b4ad592774afeadd155078d4027ab95a": "ERC1155SupplyMock", + "dba518f42d643a2286c0bf8eacd3613c53d85ca4": "ERC1155Supply", + "a99091ffa64d372a750e960e401381eb95593793": "AccessControl", + "27faee4bc796dc15628234c0aff9f28e6a93eda9": "AccessControlEnumerable", + "bad3e51ef939deac2032e71376b598cdbfa12b14": "Ownable", + "5492770f5c3d20f1b82762f03356ef4fd6995126": "PaymentSplitter", + "c7fbf0739abbc9f1f60596b280bbd07bb4390681": "VestingWallet", + "f258a176329f89585b497b54a6c49c51dec02479": "Governor", + "13ef8f5e7fef9d50c289b20dc3b1ee35d9fc08a5": "IGovernor", + "84f5273d82b316b964e0094fedc4790215ae3f4a": "GovernorCompatibilityBravo", + "828f00113b4c019ae42020b90286d6c0d902bc08": "IGovernorCompatibilityBravo", + "d60a1b5753981b2f04d1b3e8fe01856bca55d895": "GovernorCountingSimple", + "7b5312b7e518b77b9ca1807058090a7f27908f75": "GovernorProposalThreshold", + "5caea9b7191c8bf8fe302e98f69d61efe4a626cf": "GovernorSettings", + "392943039111895161ca27cf1884863f7f9a96b9": "GovernorTimelockCompound", + "bc5e88dd5c3e739eea0b8f33568044dd0a04abf7": "ECDSAMock", + "96506e6a865793695afaa9ba6149baf8acca2f1c": "GovernorCompMock", + "920beda23e95dc26939587a933619dfae19492c2": "GovernorCompatibilityBravoMock", + "00d7d368e9e122f5d5162e42c6247685e5c94a7a": "GovernorMock", + "6ba6c91c65d91381889a327f62e600e48bab91b5": "GovernorTimelockCompoundMock", + "22674de544356a14664077d9598afc866e1e08d3": "GovernorTimelockControlMock", + "308abb0377baa296b93206b78e0f17a7eacd5dd0": "MerkleProofWrapper", + "d594afd3a1d8065b0999fab33b33ee98afbb1a9e": "MyGovernor1", + "a6e00d1c93dca6635da940320b7ca27b97aac5a9": "MyGovernor2", + "73feea0db74075f5757321a99d1602d8255eb17f": "MyGovernor", + "514e3afefce9342035a181c08c0ec2ee4ea03640": "ReentrancyGuard", + "d324c57106e8a29e644543f66c6466102c4cff4d": "ERC1155", + "cdcb56b1b4f8d6c2baa0aad1d5d293975be3b6b6": "ERC1155Supply", + "642fb791ce5f30f714a33b8eadf51e3cc183f353": "ERC20Votes", + "5ea292ebdd2f061e9379b500f2fceba49ef00761": "ERC721", + "61ac98a69d3dfd3c15232499e2315581004d8522": "ECDSA", + "461520eae9f1d49bd16c01cdd05800f72633691d": "MerkleProof", + "876796dde039fc6fe4b5d43d9ca6e411af135800": "EIP712", + "81903dc774a37209651c9c2e0b2ba85b56f381f1": "InitializableMock", + "a0ec129eecdccb3a692f9be3661a19f39d1312e2": "ConstructorInitializableMock", + "f0b9b893ca9aad442d6d92dca525a1c5332c474b": "SampleHuman", + "1c97276a55c8d0090fa15d4b99d27deaa955e3b7": "SampleMother", + "26b8494cd75563c4d5f0b141c27c59065421eaf9": "SampleGramps", + "4fad92aa7e239a5a470b35c3ab8d1101c69c23a0": "SampleFather", + "31fd7aee4912ba9ae36ba4a04a4a05d9d2690afb": "SampleChild", + "eec4af0ee55aba5b65b0ac375db706b2541e5653": "Initializable", + "94d8214a6855376d8fcde6f26316c8d848faeb6d": "GovernorCompatibilityBravo", + "2a8c112fa192928eae7c1e7b8f8322fa7766121e": "CallReceiverMock", + "f6b1a7502344283a76b1385153d5dbe17bd792ae": "AccessControl", + "a1d8fc054c5d73114421ce0f143b4fabf3568d42": "AccessControlEnumerable", + "7019d3d6e4cf90818adcc5d8f2034670cda85daf": "Governor", + "dbbf75e8914cd4f0946c52f98d04f493e94dd620": "IGovernor", + "c00e7da3dba00f6c11fdcbbf357b6dc18110e2b9": "GovernorPreventLateQuorum", + "1bc4aae7c1537cd679c7193f3f7652101d30a892": "GovernorTimelockCompound", + "58969c4290386e434b89e71174668703cec1ab45": "GovernorTimelockControl", + "29836afa63a7f71b8afb1d048e444b4b75cd822b": "GovernorVotes", + "800c4417f2601773c7bb90aaf81a1dea6f47485f": "GovernorVotesQuorumFraction", + "5235772d4436eccec983d7c5edbd240052c9ba22": "IVotes", + "563ff993a6b7d8def9f98ac8bbba2e0d260ceff0": "Votes", + "287623ca3a4ee8b95286d73ba6b2ed74b31aa56e": "IERC2981", + "2d3287e3ef37104daa848d29ba9e569939dfb421": "IERC1822Proxiable", + "55a1a0a2c8d2703791c32dbbe88d26107897fc53": "ERC2771Context", + "0f78a22d966157b538e172ee646c8b2aa2ddcce5": "MinimalForwarder", + "2ba4a77e01e137cab1d1ad573bae7e2bfef25b8f": "Base64Mock", + "9ad73f0552ac99d3e074b3c630658afda1049412": "CheckpointsImpl", + "660557bd64e5e8e21d5d45f4ee8fb6ad951d0452": "ERC2771ContextMock", + "ea0f405b0d5c246931e84d1375055083872f097c": "ERC721RoyaltyMock", + "e0e331829d37789f4c66f72174b609e65e382d54": "ERC721VotesMock", + "c67fdb73a1ebdc6f94bd34f84f7410d860b179d4": "GovernorMock", + "3d5d49916ab335e7e63e6ac8c6bbdde4ce91774a": "GovernorPreventLateQuorumMock", + "846f47565f55b3ce4e7e1991a4f76a0f6d257cae": "GovernorTimelockCompoundMock", + "d80b0d79f0062440f20d9cd7992ef3b6412d74ee": "GovernorTimelockControlMock", + "50fc19942debe7b63d6307cc2ad4f485739a4f6f": "GovernorVoteMocks", + "50c9c79167cff6cae0533e799ccb7da86cf72d90": "ERC20ReturnFalseMock", + "1306e3dd922f348e0ad76610cec7acfbb1363489": "SignedMathMock", + "fb165320294354e11a7e2d11e8c1b73000dac9c7": "UUPSUpgradeableLegacyMock", + "794af8bd5c3a40c9e038b52ec27b22abcb52c8bb": "VotesMock", + "a3dc30773372880a622a3577d2097f9976622b0b": "MyGovernor1", + "b154ab0518de330d71a343878580a2dd4130c6cd": "MyGovernor2", + "20d2a2d2701c4357b2abce38302a1caa427ae884": "MyGovernor", + "6bc0b1abdafe6cd09f3b89d0a2204361106cd29d": "ERC1967Upgrade", + "1cce6c0614504a6d6ee709651a1182a1cbba8e2e": "Proxy", + "dd05a2a306a051e1c4c381d967584d02c114038a": "UUPSUpgradeable", + "2f99143bf51f009a94948a12b8ee5b5af48743c6": "IERC1155Receiver", + "dfd6949ce9bb4cf1b409dec313064e123de4d18d": "ERC20", + "6fa24eddd6020e757903a86dd74f335e9d6d92ae": "IERC20", + "6137641e7029f78ccdb9ed7576394655140f1687": "ERC20Burnable", + "630204f30f220515a71dada488ef5e2b5f8cac65": "ERC20FlashMint", + "f132d224bf01c7af2adab4143b27eb01e3af3908": "ERC20Votes", + "c78fb00bcac30eac9c9f09370bfb134f1fb0dace": "ERC20VotesComp", + "73965f3b502d3eb2c7b119a1a3385dbbf61431e1": "TokenTimelock", + "d1216cfae4bd3a10f1d1875dfff6d645866adf43": "ERC721", + "bf9ad9a6de08088c645ff86bdf875c0beac8a3b5": "ERC721Royalty", + "a8385ddba748ac6b2d17f1c342aba1e9b5d6927d": "IERC721Enumerable", + "6f84eff1a9116fbf20abd5c4457e4897ab40a415": "ERC721Votes", + "b457774f9fc82764468c9438603124f1243e042f": "ERC777", + "89520f76f5c9a9c6bad97750f2e01377f76bad6f": "ERC2981", + "be306f01ae84e9a1a568f703b8bcc9b1a0c49898": "Address", + "3bc96067d15f810ae58d139dd854197d0c3be98a": "Base64", + "0802f0deda6bb9b59cdbe73a5e5c6a238ea5668b": "Checkpoints", + "fc9ecdcc8173f23d1db2eecc243d1ab3999dbe35": "Multicall", + "68081d1d7d71bcdbb1507f31b71fe09f66b5ad21": "ECDSA", + "33ea0fbdba5f8542328ddac5067b9384c8988296": "MerkleProof", + "1c3856f541a8333183cfecbed1f6034030f2dd2a": "SignatureChecker", + "29e09293303b76a688d81e63b7c3469ef5459b59": "SignedMath" +} diff --git a/slither/utils/standard_libraries.py b/slither/utils/standard_libraries.py index d4cbdbe5e..8062efacc 100644 --- a/slither/utils/standard_libraries.py +++ b/slither/utils/standard_libraries.py @@ -1,5 +1,7 @@ from pathlib import Path from typing import Optional, TYPE_CHECKING +from hashlib import sha1 +from slither.utils.oz_hashes import oz_hashes if TYPE_CHECKING: from slither.core.declarations import Contract @@ -65,6 +67,16 @@ def is_openzepellin(contract: "Contract") -> bool: return is_zep +def is_openzepellin_strict(contract: "Contract") -> bool: + start = contract.source_mapping['start'] + end = start + contract.source_mapping['length'] + + # we need a way to get the source code, from a Contract + # source_code = slither.source_code[contract.source_mapping['filename_absolute']][start:end] + # source_hash = sha1(source_code.encode('utf-8')).hexdigest() + # return source_hash in oz_hashes + + def is_zos(contract: "Contract") -> bool: if not contract.is_from_dependency(): return False From a8a584a0bf31f1ba0a748791396ed20f05acb40e Mon Sep 17 00:00:00 2001 From: Alexander Remie Date: Fri, 18 Mar 2022 18:45:13 +0100 Subject: [PATCH 025/202] add oz version info to hash and contract names --- slither/utils/oz_hashes.py | 7939 +++++++++++++++++++++------ slither/utils/standard_libraries.py | 14 +- 2 files changed, 6378 insertions(+), 1575 deletions(-) diff --git a/slither/utils/oz_hashes.py b/slither/utils/oz_hashes.py index d0f8ff9fd..1022986dc 100644 --- a/slither/utils/oz_hashes.py +++ b/slither/utils/oz_hashes.py @@ -1,1571 +1,6374 @@ +from typing import NamedTuple, List + + +class LibraryInfo(NamedTuple): + name: str + versons: List[str] + + # pylint: disable=too-many-lines oz_hashes = { - "16ad4eed535bc7e7ea4d1096618d68ffe5a02287": "Bounty", - "896a88e86ba21fe176d5e3de434af62ee531b1d5": "Target", - "ab36e566a3daf2aa0a8e129c150ed868a4902891": "DayLimit", - "07684a10bdf44d974020a0370e5ed7afbe1f9e44": "ECRecovery", - "0df8b61d53724353dff7ceb4948f99f4d5d0a558": "LimitBalance", - "a034f5999f05402616da9a54ed665d6196c6adee": "MerkleProof", - "7e2f3e9543ef140fb05e6cd5b67ee85f9e5c89e8": "ReentrancyGuard", - "1b983aa0e808ccb541f22f643011ee24e9eddc1e": "CappedCrowdsale", - "f48c976b3a18769596a181adc072c3266a232166": "Crowdsale", - "fc085749b4f49f6999c5cccd50c6a8b567b0ed5d": "FinalizableCrowdsale", - "2190fe74b4df2a58266ce573a1c09a047fec8b68": "RefundVault", - "06c26f4535dea69cdec2cf94d31f3a542430f692": "RefundableCrowdsale", - "e2e8a667511fa076aa2f4721a7b0476ded68f179": "SampleCrowdsaleToken", - "618409ffc0166d51eae7474a0e65db339c1a1a48": "SampleCrowdsale", - "4893616c2a59bcc5b391a85598145327f6c9b481": "SimpleToken", - "78d8f11bc1dd500ef6aa3bf95b516facd34ae97f": "Destructible", - "7c2320f840fb8175ef0338f82488b437bccb3a2d": "Migrations", - "20954e05e6a84d9d349f36b720d20057a5849126": "Pausable", - "98656c8719e36d1e018b5e7d907f84531d0cde71": "TokenDestructible", - "77c201c932c5fd7a11e30bb970afda5a5c1a0e6c": "Math", - "dcd94e653605571a4adaef30328837552088af90": "SafeMath", - "e102f7570918afe9b8a712ec7b8cf2ce2d7ccf06": "CanReclaimToken", - "18816a398c07b658ed4f84871d8afa1132ff2ea9": "Claimable", - "a51d83ec668c67ee7e3cb6744f207d7fba110ad8": "Contactable", - "ef49ebbffe424c8b829cf8d8fe07b0bdd4b6a32a": "DelayedClaimable", - "295a28a0cc845f398fd3f73fe7d7ebd3f217efb5": "HasNoContracts", - "0695e926e394b778337e14f8bbbdce3aee6756c9": "HasNoEther", - "e0d144a37d99136b64edec4bc0a7d5f003ca4eb5": "HasNoTokens", - "70334d1b91d44591475891c4a1462711d37a8990": "NoOwner", - "4bafe87e87f2f7924cebc0f210ffc504f62479ea": "Ownable", - "9f8caf856608726e48ee86370d866088590bf374": "PullPayment", - "a586769701d35125a8281597f0187c12eebf45d8": "BasicToken", - "1938eb4e2cdedd786c42fbace059fbe4591a3c11": "BurnableToken", - "7d6c8036444ef12c4293c12f6dac7ea09b009ccd": "ERC20", - "26cac836b179301d90c2fb814eda7f46c0a185ef": "ERC20Basic", - "9414672a30d64bb82b495245b0dd47ef4f9f626c": "LimitedTransferToken", - "0774060a7337641beb9a43a8c0bdcb1c3ae145bc": "MintableToken", - "b3ce90caedd7821ec2a6f1bcbcda81637501d52b": "PausableToken", - "3af6c4bebea1014a2a35abccc63a5fcba9be70ab": "SafeERC20", - "cc3aea9e2f2110e02913b2ce811c9ed4beecf465": "StandardToken", - "fa1616bdd4888c5d16500a3e407fa001ddd75df0": "TokenTimelock", - "09c671cd62433379e237d2fc5dc311af49cf1f5c": "VestedToken", - "7762232a812e8fa5f4cc1f41d0e8c647839bcf3f": "AddressUtils", - "9adc4ade8a73cef7a0494e49b3195491f2567630": "Bounty", - "dc527f7040995e42e07446f383fd40b293814e4c": "DayLimit", - "91c4da8fd04d8dc4678a741b7a553a7fc47bfc0c": "ECRecovery", - "e362496576b5ef824429b2aa0634a04e5e13864d": "LimitBalance", - "d2ad47f4ddb62fb8bcb3f4add161aeb0f3f5a4be": "MerkleProof", - "abe9489ed9de21737a43ab9698d131e7407620f6": "ReentrancyGuard", - "76fae86d089153d66e6e8402d43da9485c2113a8": "SignatureBouncer", - "20c12a01e1c64fa836c2569bb44eb852d44c7c5c": "Crowdsale", - "22465351d15ee5cd18d91ae8ab159129d4dcfb4d": "FinalizableCrowdsale", - "9774a38be6323299d069a8756b44179c880e7c1e": "PostDeliveryCrowdsale", - "e933560cd155790112d5685ed76df0e235c780ea": "RefundableCrowdsale", - "d7910b2369b470f77e0e14605a8b061d6e2bd46d": "RefundVault", - "2661d9bc3203d658e7ed5d29a47fa66e0fdac5ba": "AllowanceCrowdsale", - "eb321ffdfe7be1efaefc8bdd9e6acb46eca221f4": "MintedCrowdsale", - "09016aac11d32d3fda430c154c180afb2fb7732d": "IncreasingPriceCrowdsale", - "1ff28b511dec3f0515c96d659e10f6ef7c47ce0b": "CappedCrowdsale", - "e789d95184e0adabe7b5b79510d3f32c9d882cd3": "IndividuallyCappedCrowdsale", - "d062ebe0b22232bb1d8ac84cf09f10c3cbea5618": "TimedCrowdsale", - "7d396a8c6ff432ad5e51697af40baa20dbe97603": "WhitelistedCrowdsale", - "9e1ceee37e77060c7b13a87909cac0902e2ad81e": "SampleCrowdsaleToken", - "b1a63d12b5f88f0b4d8d0283aabcb052b03b9a6f": "SampleCrowdsale", - "4ffdf78526d08ef08faa67476631359f1f34d39c": "SimpleSavingsWallet", - "848e77f0c272c709d7df601a0a7dff1be871aa47": "SimpleToken", - "149e2bf2bf05ac0417a92de826b691e605375f87": "Destructible", - "9ec21dbeba82d8ffbb547ec3efc63e946e403433": "Pausable", - "0636e347e26d51691bbe203f326ed3a81c14893b": "TokenDestructible", - "8c43814c5d4144e7241ad3acf036831f72626f53": "Math", - "dcb0461fc135342c8335ec971c0fce948749fcad": "SafeMath", - "3c84335582613c4f61db5e2dba4a5bdf9a32647e": "AllowanceCrowdsaleImpl", - "f27124a3561a89f719110813c710df74b8852455": "BasicTokenMock", - "882c0e313871f9bdb3ade123cd21a06e80b9687b": "SignatureBouncerMock", - "767d1b9bea360813c53f074339dab44dba2be3e1": "BurnableTokenMock", - "c06b8492aa76d2b3e863e9cc21e56ea9220b6725": "CappedCrowdsaleImpl", - "5e4b5478ed4656e3e83cae78eeddca3ffdc77ce7": "DayLimitMock", - "c07480985ff1aef7516290b6e1c6eb0f5f428379": "DetailedERC20Mock", - "01478e8bf733ffd6b1f847f5406b6225c8b02f1c": "ECRecoveryMock", - "17b3d5a66300e613b33d994b29afae7826d66b15": "ERC223ContractInterface", - "02100ab471369f65ef7a811c4979da275426f021": "ERC223TokenMock", - "ed7ae160a58372fd8f7fd58b4138ff029dd27df1": "ERC721BasicTokenMock", - "c6c6e961e36c39df202768b8fd18f1f76cefd1ff": "ERC721ReceiverMock", - "400593f520c28ce9b68fb12bd4dd3f869f570f39": "ERC721TokenMock", - "2442a363e65369915bcde718b986a2143220fbfd": "ERC827TokenMock", - "59841830db8f308b717f22514cbc406dff101d0f": "FinalizableCrowdsaleImpl", - "2022504c8205da3c77517ffbc24ec595065050e0": "ForceEther", - "f0aac4a39cf1687f94c084250f2aadb75f9474b2": "HasNoEtherTest", - "aba043594e0651956d0ae8be33625f29883a0503": "IncreasingPriceCrowdsaleImpl", - "e04e7327bfe0b1c52d1c6ff340837d7752c6a1ef": "IndividuallyCappedCrowdsaleImpl", - "3860cb9cc1bcc675eabfc3fc498c012f97956f89": "InsecureTargetMock", - "0ae95f3ba71966844f02df90764349726fa5faa3": "InsecureTargetBounty", - "056f7fb47b260ca924e77d4bf345dcf67e62b732": "LimitBalanceMock", - "3c0eb7e3a1376c180c4afc060e6b02ff2dc0a12a": "MathMock", - "dc1cbbcf7506800281d7264f137d2d20e30c980a": "MerkleProofWrapper", - "bba58d62208bcee8307170a5dc002d5f0c0c1d2d": "MessageHelper", - "f5c9e9e324b4d6f1ef41008850e5dbb0e525c234": "MintedCrowdsaleImpl", - "8d93ca1addadb71893e2016bfa26db40fc2f4a2f": "PausableMock", - "36659de8c778859e75e98389e40f86261ca0becf": "PausableTokenMock", - "a297f3f1391501f49a3d8bb132e158faaa7249b6": "PostDeliveryCrowdsaleImpl", - "2695bb63d6fc96d972146f159cb17d2bdb7f1cd7": "PullPaymentMock", - "b087e928c74ce7d5adc14e9b484bb7de22f268d4": "RBACMock", - "0bddfeb265ff29d4c3d6ca38852747a1e21318ad": "ReentrancyAttack", - "a9a47c2b37110ab4c5a96948b848e823abb391b9": "ReentrancyMock", - "585bffaaba0b7bb6fd37817b94d373ec54c4d2c7": "RefundableCrowdsaleImpl", - "30d70d64a1416b8cead631c93b84ed113b5e18d7": "ERC20FailingMock", - "ae5f3e2f0996d8b0445e4890701f35389fd565c5": "ERC20SucceedingMock", - "b5703426566223d0c7e0079a8aded144192c330d": "SafeERC20Helper", - "378b31ac238e143f5f752834203492dd3980522f": "SafeMathMock", - "2f487c8b59cc0cb91ea2ee7aa7a2b7b9bbe22a02": "SecureTargetMock", - "78c3a5e7b0d5b58efe770c54a73b42bf1d242d9b": "SecureTargetBounty", - "c4cfaf59a49f506e31c3acd8d3ae8624613c2044": "StandardBurnableTokenMock", - "5a3481b0e8029747c9bf839d7a12b7f831513ba7": "StandardTokenMock", - "eded4e7da3e73140ba6fd5a80217c562c5922c47": "TimedCrowdsaleImpl", - "b8eaff3a88d6c9b87a050ae4e3caf8eb39c508f3": "WhitelistMock", - "2e295e4571f9f017638cd4b9e013ce502d4f2759": "WhitelistedCrowdsaleImpl", - "dd349689f6d497b6d60d18af598981c0c5ea5c43": "Claimable", - "b4c914658062b263ddd7bbad7a303f9aadb8edda": "Contactable", - "379f3940245b3bf07e3da0ba8bacb31a7b71837a": "DelayedClaimable", - "04a144226212c8093a72edac65132dfebf5cbc34": "HasNoEther", - "e581fe4461bda93a810cf8f56e985d7b17e5c57c": "HasNoTokens", - "adca50311c8c516281fae62e7bf8711b247dd1fe": "Heritable", - "bff7a458838d22f59d77dcb1e4c8f71ad9e6c6ad": "Ownable", - "b92612ef15ec3b9d6df30a8f7becdc945bde3d4b": "Whitelist", - "c9ee90b58cfe7db8fb2093a5dc6ac901e3560376": "RBAC", - "d07bdfe9e5c1197eaaeb8db19a60b2d7c8b08a88": "RBACWithAdmin", - "3bf165712333a39e76e159a3406fa49517afe215": "Roles", - "7e998f3b5ecb8820313c1bb24dfb0d6d99ace954": "PullPayment", - "74d3dda7f213a09504a9a9291a40a3dcd8365fbd": "SplitPayment", - "819441e9e704135b09b0b1f72db902159a737913": "BasicToken", - "27dea92802e715fa1863d34fdd4d5c9c07f2447a": "BurnableToken", - "cddbea62966149d6c6e6709ab8568b3c4f0ad494": "CappedToken", - "cf6e58a034f1418d57a0f1952afb136e82102f94": "DetailedERC20", - "8d2f3828797c3e84f29d2c8cdb6ed25ee69511f6": "ERC20", - "953db1b3480bf572e44ad6fa898f6c6bf2eee57c": "ERC20Basic", - "241b903da1f922131be0e2bdf10c4306082848ea": "MintableToken", - "b34956dcce7a77bd57b4fad7545ab5988bf8dbf1": "SafeERC20", - "de2af31e6fa1013b6f867fa12ccaa7696d9442d7": "StandardBurnableToken", - "50589279d9b57e6c0ad23388176dda20dc4c491e": "StandardToken", - "be03e255bc582a956bff757a7e1a8bad8bdc3361": "TokenTimelock", - "59d01319278f7765dd0e242d02c1ca82e6ba091a": "TokenVesting", - "012926dd9f55e8dfe9776b9f1df62546bca5ecc1": "DeprecatedERC721", - "30067e830dea40199578d0debf1d3d2c85b310df": "ERC721Enumerable", - "4a83cf38bff15fc12b16638f7844fc0f8980f9f3": "ERC721Metadata", - "2e8afdc67c556a384622e8f1518264a445a92b57": "ERC721", - "bb0256dd101e575fe0c2371482723f8e2c32c087": "ERC721Basic", - "a8eecb22ae520032234d75016dfcf803ba6fba82": "ERC721BasicToken", - "5ce55c0eca12e6589b4ccef66917574890fdf1af": "ERC721Holder", - "4646738364802bb2215ef7f4062cdc03bc33bc33": "ERC721Receiver", - "24749e32f3f9f241cbf61755cd27c4e1c33ec6ef": "ERC721Token", - "34e294455d0b633a92c85294e33391da976dfff2": "ERC827", - "5646047a82bc6b598f782b9ecfbe0ef37b1bde4b": "ERC827Token", - "ba598a71f86f1d7453d8d921680d7bd75d34a15d": "SignatureBouncer", - "af99a0bc53580c8d654923048cec891e61e24a6b": "Pausable", - "eaf939ca050feaf102dbd9835b6a67eb4b51e0b9": "SignatureBouncerMock", - "c998cfc7431ac0d0c66f70f0982b3e8659c6bfb9": "DetailedERC20Mock", - "a364bd1d78dd9528eb357f93c190db2652cbbd5c": "ERC721TokenMock", - "8b07a36751ac1e354baf93be047c852143a57119": "PausableMock", - "70b936df444e167029f22e8ef48b007bbe37d544": "PausableTokenMock", - "dc38f5ba7ca5eb5a8a85b7b0e9d8288a1e70e41d": "RBACMock", - "d1f6822833daab2b5c6521ee6aacc6303b946095": "ERC20FailingMock", - "87310193da0df53c2be5ff230d2704011a0806a5": "ERC20SucceedingMock", - "d1dd6a62116d8605377f70bb5de6f2c70ced3d81": "Ownable", - "be72653e125b02bb575d00a9a8db2b40aaa6bc9f": "RBACWithAdmin", - "7c353bddb33d9c15e9aebfb843a1e5d63645f267": "SplitPayment", - "a0b88b77efc2a12f98310d83fa335fa5564cca08": "DetailedERC20", - "feb56e7c42453ae5639cbbcae4b8d8e5c59447c2": "DetailedMintableToken", - "cea5d86a5cdca1d9dd226d199d740a3d3cd32d07": "DetailedPremintedToken", - "6bed3b69e3391bded476aabdd2c5f861819e73f8": "MintableToken", - "46ebd57a637d411818418140d0aa63dbf1cc2246": "PausableToken", - "5cc2a3e344df53e317dbe38e76ac94695a38e9e0": "TokenTimelock", - "3e7d8f34659881bc3b2ca951668372a47f79193d": "TokenVesting", - "e197b8a76f56af18f47f67a89005390e3bd55694": "ERC721Token", - "1b53bd5e5472c4a818e266b64d0f9e6fd49857cb": "MintableERC721Token", - "ec78d7ca528901ef6910c0f44ab705b870742c90": "Migratable", - "fc413be3907db5515f084a8fff63bcc8c5635400": "AddressUtils", - "31c153b4c6b900b16219cae11feef97ce4076143": "LimitBalance", - "962b05e5b0824201f5aedc58501637db05b154a3": "MerkleProof", - "b08f9ebec900e55ba7b20624dad0097bc243c12a": "Crowdsale", - "5124365778e24aa55c9e06bdf26149d4310d95d0": "PostDeliveryCrowdsale", - "57737cab20c3fada86461ebe4df4b14d7d515b7a": "RefundableCrowdsale", - "1fdb50fd86681dfa181c490bcdef28171be6e6f3": "RefundVault", - "cde035237ef2f07d69f3756cd9d1305cda39f749": "AllowanceCrowdsale", - "e7b6247a1c2be98eb8a1c56486c3f17dc60b98ed": "MintedCrowdsale", - "e318ca5d228fcbbd844491efd5fee829e32c53ac": "IncreasingPriceCrowdsale", - "e9b16e3a549af2c8cd56090702d269b432a80283": "CappedCrowdsale", - "bdaaf0e469b346ce4d51c3fe15d14a4b02bc990e": "IndividuallyCappedCrowdsale", - "eff0fd34b36c459c2d98f5a04a7b04fff08674e0": "TimedCrowdsale", - "8a1c7e2eda5d6444d767db6e960beb998e94e523": "WhitelistedCrowdsale", - "35690875b56b9ef06dc5c82640a067bd9132901c": "RBACWithAdmin", - "c5dfbb1d2f9641afa4f031f2f600f697e9a77b05": "SampleCrowdsaleToken", - "9f752a8cbc435f39d6c36760d3fff29d99d079c4": "SampleCrowdsale", - "edca9f3d7957cef23f6f3209af3eee94ea523194": "SimpleSavingsWallet", - "f844de78dd748876a43a33fa9a6caccbe3fb511a": "SimpleToken", - "0c02b9e264482b9501239880d508d2fc45a921c7": "Destructible", - "d66ff49a491298f7d0aadc302cce5b80e20397c1": "TokenDestructible", - "ee4d3ec37306122ceeec79f60680a632176509b0": "SafeMath", - "1e3619093d26ad06a7fd448a3e4db543de00d219": "AllowanceCrowdsaleImpl", - "565c175208220601b83adfeaca95bb41efe016c3": "BasicTokenMock", - "635c6422d4af70e8ffe48d54148f457329870eaa": "BurnableTokenMock", - "e7177cb6bde32587072093fece1269add34133cc": "CappedCrowdsaleImpl", - "63f108c805f519b16c8db619e7274d4937aad376": "DetailedERC20Mock", - "fb554453f065e88a35f0d412de76fe4e83686366": "ERC223TokenMock", - "e288225fc414795b7697952164f0e2a02fb89e97": "ERC721ReceiverMock", - "774d1a89a0f8fbb420f6a6586b9328e6853d5f7e": "ERC721TokenMock", - "8d29283dd9ef9bde0001ebf6a7c765a6af12bc68": "ERC827TokenMock", - "7449c745206ac15d5192ba7a16bed39819a50113": "FinalizableCrowdsaleImpl", - "60704a7554b0ad4ee9d0626bcbbadbac87d8d270": "ForceEther", - "b339de538541166e1bf3390a1b07fef171e03b00": "HasNoEtherTest", - "80198840976a3fdcdcf2fa5a8d9454b1e39004de": "IncreasingPriceCrowdsaleImpl", - "9628906154701c6e5306e6da622b4db92cc6f6ec": "IndividuallyCappedCrowdsaleImpl", - "cd5924adb9ef87e99bcd94ae9ae57b7a6897b1e0": "MerkleProofWrapper", - "1f6d4d30c38abd953fca5a89b5193e10df9d1751": "MessageHelper", - "0a1706f232f69f32bf2954b566c7c2c14d69392d": "MintedCrowdsaleImpl", - "c684d5ce1dd245aa8c912952594a373f977c76e7": "PausableMock", - "3be1ec9b4f338c96d86b894ba8ceb846fb647c23": "PausableTokenMock", - "b28308433da65d22476951196f1caeb41f26cf33": "PostDeliveryCrowdsaleImpl", - "559fa0817335651783601a27dde5faf21fc686b0": "PullPaymentMock", - "8107d16875287a7046493571b10dd5eab0d97976": "RBACMock", - "07e16eeb1ec64a6995695ed1816a95243000f8a8": "ReentrancyMock", - "f0bd68476f483619630828a8419d39ac57d0f49b": "RefundableCrowdsaleImpl", - "2b40af803f1243f59805beb75d2afadf5fdb84a7": "ERC20SucceedingMock", - "3c6b59e930edaae5e84ee9338017b301d7fc12b4": "SafeERC20Helper", - "695a35876abcaf66f60903ec69331e522a9001f8": "StandardBurnableTokenMock", - "07eb9f220d92b3b0a026d03abe31782e18b8a3aa": "StandardTokenMock", - "13a503e0871b386c82691937b1cdca7542f35bbd": "TimedCrowdsaleImpl", - "f401c66a3d208ecf85040784b4eb8bb14e20d0e7": "WhitelistedCrowdsaleImpl", - "93407117e15d8a7a63deaf473df32c73518a30ea": "HasNoEther", - "baa2d89bbdb2edb622a4c9c1fdc23a6642d899c4": "Heritable", - "211a4479365db5f0eaa4377da409e42db4a25b52": "Ownable", - "ff57312417ac31bd0332308e65ef44f4d4062111": "Superuser", - "2db796d1517717fca1dd3983832f3a45f390ab55": "Whitelist", - "2ee8d28f85d2697054414783e221260b9a7f6c97": "SplitPayment", - "cd31a5ef466eeb34195d244e35a3c87b253e9788": "CappedToken", - "405f965e67819b1bd2a94f8c121e66fccb198b8d": "DetailedERC20", - "1fafc8de20663f8ceaa7386a89b7c9e5dce82a3f": "ERC20", - "dfac014d93a70a21a3b8b97e3d1b57efd14fe545": "MintableToken", - "c9027d7b556e7e687bec0304ffaecf1d474eabfa": "PausableToken", - "968207fdc2ce386ab24cac2101d8d0e7f9eb7417": "RBACMintableToken", - "87f48da5d43ba18ca15d7347a5626cc37cf01dac": "SafeERC20", - "ab442d8dd4ecf1d472d9dce47ea1157c27d0a44e": "StandardToken", - "075e8adaeaed593aad3e14ca9820df4e55e364e2": "TokenTimelock", - "1fcb0b4c52970b0f395e2da5bc6595daa71daff2": "TokenVesting", - "ef375977e93dc6aeae3256bc5a0c0ed23a734df8": "ERC721Enumerable", - "15405a8487b11120873f75247b1ab5461f1ed8c7": "ERC721Basic", - "4a3380e9127e514a0630ea0656facdebfe716acc": "ERC721BasicToken", - "1c47823ad3c15275bfd34a4c1a66525fca5454bd": "ERC721Receiver", - "95a8f9396ea8cbc14f6cca9a8b6492fbf2437f18": "ERC721Token", - "9fcc86aa8a8ae5217bd10cce1a954c5cb7caac82": "ERC827", - "68b878162744df8ddb16479dd790341cafce251f": "ERC827Token", - "9c4ab3267a3dc0ce51b3baee28fae5006a3be725": "AddressUtils", - "452fe8fdaa7d15bbe79e9ab641f3307b1bece216": "Bounty", - "4b73fc34d4fe601e4c4065e08ec11fc8c3a1ad18": "ECRecovery", - "19ced19ab2d8edf9fe46282e242d8b52a09f7bd6": "MerkleProof", - "4e1211d90f62f0b3d59bb318ac744ac95e6f6317": "SignatureBouncer", - "48d836f14524ef04eccac96647887425545781c0": "Whitelist", - "ee718ffb3fe3609d882556704f41c62311effe27": "Crowdsale", - "6bea0f0c1a89ad2622afba8f47a0af62c2799629": "RefundableCrowdsale", - "8da34d0e919bf9d1a2b1da81e797a6c2c1ed60b4": "AllowanceCrowdsale", - "8bf8cb311ea7d15c8ddaf54454e60ce44a60bdf4": "WhitelistedCrowdsale", - "a1419a713627dbb2ffea8a68c616e0a051f1b606": "SimpleSavingsWallet", - "0b8d54f5efc4de837b7dd93996db086849cb14da": "SimpleToken", - "a7e1df3805ef75dc41a754ae5546f06fec8cb03f": "ERC165", - "5e7625321628749b31d4c4cc45e2d90b556d6409": "SupportsInterfaceWithLookup", - "c1351bcccd9852179bfd81b241caaa056de4be3b": "SignatureBouncerMock", - "cd6add9c23aeffa94971107e162281b260df91dd": "ConditionalEscrowMock", - "5b43908bda2ed2a2abd97bdc0c726f4e0a994686": "ERC20WithMetadataMock", - "afd20cd7880b7afcab66a1177bea6b85ba76ae80": "ERC721ReceiverMock", - "a53e6a8705e545971a03677411de3e3e2fa21104": "PullPaymentMock", - "66ac45d59afe1d96a3512f788c9f1742c8d6948e": "RBACCappedTokenMock", - "65022b9fefebb8d6c04e9d7c6869843a504cb607": "ReentrancyAttack", - "429c0d0af89af3652ab701919da11ce73a98d37d": "ReentrancyMock", - "b956eb0e6216174795f2ee06204c7da650e845b8": "SafeERC20Helper", - "c2ef9875134777ad5fb22ebdc123e383caafbd19": "SupportsInterfaceWithLookupMock", - "aaeffe18854cb829f1a400a2d89f0b625a5b345d": "WhitelistMock", - "ed2e1b404135b09fe5f0d79f95dbe33b78b587f0": "WhitelistedCrowdsaleImpl", - "319335756a88f45e8684a029ca1c8bc0a311da2a": "HasNoEther", - "5527c4a0bee8b4bb21e2b8f3aef283d724dc62f6": "Heritable", - "d2e619214bc724aeb273d48e420db453b3ffe31d": "Ownable", - "4ace23c2264121b28731efcf28cd3552e6fca588": "RBAC", - "2bfe51db8ee661f769d98f9ae45361a9b8f6e0ec": "ConditionalEscrow", - "627f53ee54bf4c94d1cad825b7ae55998a65bc9d": "Escrow", - "78f1f3f29386d9b09253ca23087eae02c2efedcd": "PullPayment", - "142c5a368e011d0578205a2fb5f776b4937605df": "RefundEscrow", - "392ccebdf4b62992e7460dc3f65064cb5d042a45": "ERC20TokenMetadata", - "4a35664713c0831432f0f44b72df33f7eed2248a": "ERC20WithMetadata", - "38c60461bba3a6795a0459e3de0c035ee1d1a53e": "BasicToken", - "917071f9daeb837c90acc2222568398b048b95f6": "CappedToken", - "2b6593f6ad447e65d848bc4bfec26e9a8b34557e": "StandardToken", - "3e6344b21675b204f35c12801cea0dfe18d4d298": "ERC721Metadata", - "ed3cce364a25058da857c468423935a1b5fde50d": "ERC721Basic", - "1a45edece56696e721cddc98e8f6703a1d8bbf9b": "ERC721BasicToken", - "cb15d8841ffa1b27b982e31901772957f6123aad": "ERC721Holder", - "715d07f7f060007413defdb6fd5c6934486f34f7": "ERC721Receiver", - "0144a17b7f1ed3cd662df4069296e2e1c32c8dd8": "ERC721Token", - "0450b83815a1e26a02b54c4233ac7aa4cf053ea9": "AddressUtils", - "d583f3e45f2c243e55ee47a107a29bb9e972fe68": "AutoIncrementing", - "a8144e43cf0c0c8b0bb54dcedb0531639e4d00d8": "Bounty", - "d3f87956fa5f05f54106216a9c4a8079ba8d086a": "ECRecovery", - "094905728bfb1ba7462642ae7ce245c709717531": "MerkleProof", - "3cb4bc1e9a9a34a46858922cba2f0af59d767054": "ReentrancyGuard", - "c00a7c93b18d897e6ebf868e0b093ed6ace719dd": "SignatureBouncer", - "a1b464a6a3a1bbbd2fe33b5c231eba11236fa92e": "Whitelist", - "12a2f840294d267c6950a1347b726222b416ed46": "RBAC", - "50dd834b3d24a0bab1361fb858cbc51cf67ccbcf": "Roles", - "e11c891ecfb38b3bc7f4cf1363aae79feb99cf12": "Crowdsale", - "8b5f8bc529ee24fd54869c1d3dcfc18990a59548": "FinalizableCrowdsale", - "2b6997bc5d0b3be1d0e2c1869353383a2fbd4993": "MintedCrowdsale", - "59ed05ce0be380f62d4a3999c32428497594e327": "IncreasingPriceCrowdsale", - "8a8a532f2e3ea4c08ff27af946fe20298a1e45ae": "IndividuallyCappedCrowdsale", - "8a9c055e3d1349a664caa802eb204cd198a0f539": "WhitelistedCrowdsale", - "230848a3836ccef1f4430b0bf203cd21f8052291": "RBACWithAdmin", - "0ce489b153032a7ee90ed0eddca2c52daef1abf3": "SimpleSavingsWallet", - "1a2d42f20aef6df99897db234b801340a423450c": "SimpleToken", - "90d9d40b3412f59732a2bb622a88a4bc36f6b821": "SupportsInterfaceWithLookup", - "2321441ae68a4e14b2306c7575958449a3c29b98": "Destructible", - "ad31f71ee52649c94cb438200fd1c1ed08094bf5": "Pausable", - "53f24a0ac15b157dbbc3f61d5c1408998c1db0ef": "TokenDestructible", - "2ff3848281b684d98af5b73bd62d933ad9795e1b": "Math", - "5b9701e018c1d6a97bc507e5c00433246ac7f025": "SafeMath", - "a03dbbc1c4f0ae5e64d672d84690dc48152e2650": "AutoIncrementingImpl", - "977f8bdafbecf36f639f00746a506a0665e14ee8": "BasicTokenMock", - "68cd257584aa39dab35cc08947cb4aabe9ce852f": "SignatureBouncerMock", - "f08f0cd0d441234b1b15fa1cc1aeed01d651523c": "BurnableTokenMock", - "482f4acdd6c3523e078f68f3905f8e9c0bd96f85": "DestructibleMock", - "e5b1031669b3bfd06fb12626a47888243c07c469": "ECRecoveryMock", - "d439e3f9b056d304aba764b34c2623b4600c55fb": "ERC20WithMetadataMock", - "22f1d1e0932e3558eef115f3e867619c135b5a26": "ERC223TokenMock", - "c37afaa6e4b7ab6775e3c9b3b2c1b848ee3e0548": "ERC721TokenMock", - "fa28e9b84c25de3655f8068c07f5ae030f00705c": "MathMock", - "41437f07fa0866525684129c46b107cf2a28d9dc": "MessageHelper", - "e781977728414ecb0dc389712cbaea2f3c1b2401": "PausableTokenMock", - "c5cbc9122a21b464aec57faf3e8b783f455f3175": "PullPaymentMock", - "10618dab995da34a38ef8e7d53b069a7b0bda621": "RBACCappedTokenMock", - "9fae112623b416c1c3a847d6de92967854f4e3ba": "RBACMock", - "84992bb16c0aa52e586c7ce43af9f8ef80d71382": "ReentrancyAttack", - "ec8922620cd3664ea34d9295aa85c64b77b61c0c": "ReentrancyMock", - "2cddebeab16c4e11f6457eae79615514d0467224": "SafeMathMock", - "ed5496d88df044b594a28d8b4e2b02aa8c5c98a9": "StandardBurnableTokenMock", - "4b79de8b6a7b868ac3db16c36c7caf1511dc4e9c": "StandardTokenMock", - "207467653a042b1e3f796be82daa00deae4be4e0": "WhitelistMock", - "3b64fac09338834e7f31e4a94857c405644ad27a": "CanReclaimToken", - "39458b20c5ba02b89578bdb4d0569fdedbb89449": "Claimable", - "30b2eb1b65dfd72e93c6370eec1b66cbc77514b6": "Contactable", - "d08d45bef636d729b4781cee2671f02dfc65cd46": "DelayedClaimable", - "733f7047e97a7426847cbc4176463ee020cf48d6": "HasNoContracts", - "4a4e894cd3cd3cfa4dcbcbd9568f81d20cd4e307": "HasNoEther", - "b025cfaf6f8e5da5efafe9883f25f18bab015a1f": "HasNoTokens", - "98a5d657fe6eb93bcdb660880496f6c163e654c1": "Heritable", - "8d77727ba855420961ee128de2676fec22402a03": "SplitPayment", - "55799f56ada0b8e0bcc75ecce38851eeb1332d8a": "ERC20WithMetadata", - "3c34d6a7f6c127303531d7e54e94a47fe0e30e82": "BasicToken", - "c784fa49f4c22ac28509c8b0d54381eabcc00a99": "ERC20", - "d89b847b33cf7f9529f426c6ed57e4b12cadda40": "ERC20Basic", - "c992e0acf64fafaea8a3158d8d80b84e22b3aaca": "MintableToken", - "bec3d2b20fa3b24ef5ac434c4a01b47b1e64a134": "RBACMintableToken", - "60e42b733ad56c03b8addc0df215791b1338c01e": "SafeERC20", - "ee8d24c22c925406ad22c22adab9654866eafdf3": "StandardToken", - "28a8c7bb0a04847910d3f9eead16d6d449620534": "TokenTimelock", - "1d8a3c508c18473083cb5db9961a36ba1a7f796e": "TokenVesting", - "c29ab0fd5418aa6c45a6e82f4d5a4f1477241875": "ERC721Basic", - "40d61fc659d2cba425f99f5b2656eb37b35731a4": "ERC721BasicToken", - "bb10ec6ee3cdd5386ecfd6de333f1eeb6a377689": "ERC721Holder", - "950c07b39c3ca854d94e48357f5d453e4c9c1965": "ERC721Receiver", - "6a9692e0a456886959918a48694dcd3dcb8baf5f": "ERC721Token", - "f0a61efe61df17f5559adaead1964139182d7dbf": "Roles", - "0d6fbe8089bfed5e4961f8bc56d5c8fb7be2dbda": "CapperRole", - "c7189a4af9a64378f15e69b14fc8e8b9cf99779a": "MinterRole", - "61a08e1edc53903eaeda23582b34825c0a67d23c": "PauserRole", - "d775bbc48440cc258eaa96091fcb81fa08bad123": "SignerRole", - "de16a5f2763080c0e057578a3cca2c570af9d066": "Crowdsale", - "567baa80771bce105326a8b76f150738e6a10db3": "FinalizableCrowdsale", - "ffd73415ed9b47f97e48f5b42212bb055b4d21ed": "PostDeliveryCrowdsale", - "ab93b46587fb58c1adb6cbd580ca17412917b74e": "RefundableCrowdsale", - "a3a1fa663a64dda4b8c95f50c518bad87f75541e": "AllowanceCrowdsale", - "656d0767acf97048298609648350fd1b019442a7": "MintedCrowdsale", - "9ab95e8d5b012575e490704b512ce4928dbee629": "IncreasingPriceCrowdsale", - "41f26f62f9f5227b1b6dbf65a6196c226e0939c8": "CappedCrowdsale", - "b8bd1ce8e8a33223abedb3548de7c2f989969ebc": "IndividuallyCappedCrowdsale", - "7b2a6e8e9aa71fb6a5d28b20399b0f5dccbd5463": "TimedCrowdsale", - "e6060cd66b2d3908f948ae9b850e85c3464ea305": "ECDSA", - "0260526f527ee9224774358021b9859015296518": "MerkleProof", - "1b7e98ea211e7445e5f678fa148ea775af49b6e1": "Counter", - "5be5fa4c91b2869c02f52a199e21be5806044560": "ERC20TokenMetadata", - "d769c77787738e2e01649f5b5b943fb06ed9b8a9": "ERC20WithMetadata", - "423800580427804d9eca8b706c43dc0297e37614": "ERC20Migrator", - "8d7f569e100340e8ba17eaedc939ff68b406b05e": "SignatureBouncer", - "b66a976d5f147079fb9c7f0a12415e008f585598": "TokenVesting", - "3f9165306b2f53880ed5096af1b4e74db56da9bf": "SampleCrowdsaleToken", - "1265d4f6bf6767e10033e733858ee6fa32a9073c": "SampleCrowdsale", - "3c7f94391a02d5dc6f8f262ec96b3bc2a4b25640": "SimpleToken", - "713380dc6ccc9d47f8d31a25eb0e446ebc4b4863": "ERC165", - "c281f8016ab3d891630a35bd07f11dff97431234": "ERC165Checker", - "1d4d0241d585c68fb08c1599437a4eea11eeab02": "IERC165", - "313e8327db21cc8aa166fe5721eb99a46e4fa19c": "Pausable", - "3d6ac03389ed6c835e26b7ebd8cd6f5bbc37934a": "Math", - "8580d3e0df2d45ed48cbd99d42c0934038129cf7": "SafeMath", - "113210a137c1be5187dcb3918a2a521d63f540cf": "AddressImpl", - "e09a6efec62a3a1d426fcf5bf0a6ef150cadb36d": "AllowanceCrowdsaleImpl", - "34f5dc1d6acd84e2efeba46c180527f251dadcca": "ArraysImpl", - "5fe750839b60d2691dfc55d926090028b5003043": "CappedCrowdsaleImpl", - "39412da7b5fdc81977acbda550e8dc71f6dba41b": "CapperRoleMock", - "717e4d2b812a14a6c4d5658cb94dcc835a0af6f9": "ConditionalEscrowMock", - "85e956ec45ece826f1c53505c1f035f3329fe0ad": "CounterImpl", - "7ab9fe5373ce944504f2893349ea086b216b71a8": "CrowdsaleMock", - "c321c20499e195867282851da42f2ccbbdb96167": "ERC20DetailedMock", - "5e0bcabbb2cfd18eb2d43ff6fd8d8e20dbeeb019": "ECDSAMock", - "a5da195613c182f94167d833dec5c7d4da0b5ba7": "SupportsInterfaceWithLookupMock", - "bc1a4e4cfd066ef11bc6e2465ddec0f3fd4d51c4": "ERC165InterfacesSupported", - "29cd8653e4b4504f0999a2454d9abf1f945de8f9": "ERC165NotSupported", - "ae16304dfc91c51729a425eaf772ae8d08593dae": "ERC165CheckerMock", - "aea815c696fff49c7fc52185b0523a33f7371b49": "ERC165Mock", - "b7b9d98b25d14185d4e3c2986c7a5a39b1f0781d": "ERC20BurnableMock", - "2399138dd71e45eaa2b5496aa7c751e39304ff91": "ERC20MintableMock", - "069f9a6dfd87e2586b4fab42ca29e826310646ea": "ERC20Mock", - "a5c6bf38e0fa04c8d470478a4bb8a3076e00e6e0": "ERC20PausableMock", - "9a8f6b3985ad17fe0cadbda553573df4e4731e7e": "ERC20WithMetadataMock", - "947e9e69d2016cebb10ee296f0f6495090671a21": "ERC721FullMock", - "3ca707c71f9022105f61b352c598c256703178f2": "ERC721MintableBurnableImpl", - "7c3cb25da3236a7c5738e31d410df75d16af096c": "ERC721Mock", - "cb9a0e0a90469cd5b4e5aca0a818330f486bc3f9": "ERC721PausableMock", - "13b19933bdd88840f5a617e14c9d736546ea8839": "ERC721ReceiverMock", - "53bfe5d6b4368228e985c1fe3f02b8534416b3a0": "EventEmitter", - "7057eb7b10d45a631cb5f442fc76bb7d5407a901": "FinalizableCrowdsaleImpl", - "2c959d10bff6c2909017efd20dc0e347da94e219": "IncreasingPriceCrowdsaleImpl", - "4a383b44bd773fe5ed6e84ff12070f60603c1eca": "IndividuallyCappedCrowdsaleImpl", - "15f79f51354210f3bf40a1555bd9e0f479292474": "MathMock", - "f1291dc03b8c8f52ebc9ebda49c5ec933f050fa2": "MerkleProofWrapper", - "f1cfdc773653bf69f5c277a60d81abd46029bebd": "MintedCrowdsaleImpl", - "cedf354f18ea2894c41fb93c79a08d07051846c4": "MinterRoleMock", - "43a5ef129162556fd38e9c4175c7dcbcf3213d22": "OwnableMock", - "59b3c7740b08088fb10e47d0d86fb6b7312e269a": "PausableMock", - "d2b11cbf3fca7f65ac31170f6e1533b639486478": "PauserRoleMock", - "4c25587eb2479ee3623ae6e168e3edf3f51914b7": "PostDeliveryCrowdsaleImpl", - "dc38502622bd92737566c51aba07ec48ed2c02ac": "PullPaymentMock", - "1c605d2812687edd646a5fde7d2fe7ccda137edb": "RefundableCrowdsaleImpl", - "03dfbef44fe5a4a75c99a3e995675f027f15b2d6": "RolesMock", - "938a3b0db268f2cefb5b7eb3ed792308f5865027": "ERC20FailingMock", - "45d60ab40be79c18dcb7a111ab02614c3e47db37": "ERC20SucceedingMock", - "2e88c135c98b395714739991d9072bdaf48b7cf0": "SafeERC20Helper", - "0dc70ec0c9017ae55f65d3473d5a44f0c093dcab": "SafeMathMock", - "337c1f8e999806aed78498d4372754b2344ccb2d": "SecondaryMock", - "3f228f7bf41c099970f6748488b9cd7d00afe7f6": "SignatureBouncerMock", - "caf3459749bb0264fa5a5d0a07f413f6991e0c41": "SignerRoleMock", - "a2df662c3e2a73f196b5067859545a352db2bdac": "TimedCrowdsaleImpl", - "e2ca5cd4923928c9f46de8e2e7df82ba01585738": "Ownable", - "a6c503a46f2f91f5fb01793e96c7cb9c5363069e": "Secondary", - "bb8f25ed8686742450daf6ba9b7cf99a2d20dacd": "PaymentSplitter", - "52b717d273b5bfb68c8630175990354fc172b4e6": "PullPayment", - "186ae2534c331ef59b6a86efc4a02d3b41cf1c8d": "ConditionalEscrow", - "e2af959beebe03963562c8e06b5eddbfe4e8b750": "Escrow", - "284f716f2501cfb02bee9357adc4c1eb840b0ac0": "RefundEscrow", - "8235160a08bafe5bcafad41567e3229bbc331839": "ERC20", - "4a97e9cbe78ad401ec19e46d114c71ea6f6f3d14": "ERC20Burnable", - "c098a863a8b795e46bd3c055ebf944190443f2be": "ERC20Capped", - "9dc5cc5b708cd1822f27baee4bc9c7d5f1b15d15": "ERC20Detailed", - "0222ab47eca4f760dd21963f230a5fb803c0b4db": "ERC20Mintable", - "23c0bd7b456d222b9d9625220eff56887fcff2ff": "ERC20Pausable", - "fc05cf3f16e6ed0739b635d0b79e115d53ab4d76": "IERC20", - "f05d94772232c941ce0bba7c06a494b3a0b0a217": "SafeERC20", - "5eba5fb2bcd1248ec673a99ce57e788601326cdb": "TokenTimelock", - "18adf8251b9db34a725031820ac989d18b6823f7": "ERC721", - "10c5c3d991ca543dc5cc61d85664c797a01dd473": "ERC721Burnable", - "beb061075916c16204b16cc18d4a3804df2aaeeb": "ERC721Enumerable", - "8c15a90797b67219f50776315045bdad8ebe7a87": "ERC721Full", - "f0ab234347570e7a9fc23f9d740b6784f31f2a58": "ERC721Holder", - "5769b699617659dc63abace9efab19a6bb17a22e": "ERC721Metadata", - "1f3d7d62ddc8d3c2b2a20255a4c40ee86432049e": "ERC721MetadataMintable", - "e9ea73c83db4303fb0a6556f2b37eee4441b73df": "ERC721Mintable", - "f82126eaeab8efc10723ee81a2f039d1baa7f6df": "ERC721Pausable", - "560f515efb7ed83cf9c09d5b79693343104260d4": "IERC721", - "67ad40b09e6d653e19421f7014f3e350d5cdd9ac": "IERC721Enumerable", - "90d70ae5ca5809d733d2e9fb28f817532cf2f0fb": "IERC721Full", - "51959c2d6c447821dd8897bda07dcb6c633282ba": "IERC721Metadata", - "e14b06d2c5031542140ef8bc33fd56fd99c2ecc6": "IERC721Receiver", - "03d71a566ea9225b43c66ae51dceebcd0da7e323": "Address", - "a41c0e26a104eac14adff7bfb2fbaa3e223883e5": "Arrays", - "d3ed07597d18babbd7344381e4e6d7b727795ca8": "ReentrancyGuard", - "8b179f92ca6c1e439bb544b4798c389b5c78687b": "ERC20SucceedingMock", - "ef0d299d4c858659f2b78e2ede4e089067ef911b": "SafeERC20", - "49d0b746a287d74cc714cbf2c174c231093fbf72": "Roles", - "e58c83075e53473844ccb571dde2cd30a4b82912": "CapperRole", - "da35a3d6d7d9d825fbb987d916b68fd32e348f47": "MinterRole", - "69fa5a584acfdc5b9a6d8e76882308aad31a31e4": "PauserRole", - "a81e3a3364183cd787d8e461c6df7daaf55586f2": "SignerRole", - "581f46692dcd9692ca67f5cc61a7bb1b3e712290": "WhitelistAdminRole", - "42d70f9fafd3ff7a27bedd0976b0905416bb0a4f": "WhitelistedRole", - "780a9ae4d9266ce7ec373260ffce87614258ca2f": "Crowdsale", - "0dbefc37cfbfcfe26099c488dadba4a66d6e9512": "FinalizableCrowdsale", - "60ff213d27e3d08e39d78629af2e0f57119d93e2": "PostDeliveryCrowdsale", - "487942e4eb8721d19908196bd30f897dc2c6db3e": "RefundableCrowdsale", - "fb65273ef381e17d86e898541acd1fba51e304a7": "RefundablePostDeliveryCrowdsale", - "961682e22bd8ffe0ffcc8111fd7e2ad1003d2189": "AllowanceCrowdsale", - "ebaedbafbdaa1cde24c257781d36ba931a2dd830": "MintedCrowdsale", - "e2c4d52950ae64e9f7a4f551972df02e1b099de5": "IncreasingPriceCrowdsale", - "f62969face2bdc7724d99bcd5046883288ecea52": "CappedCrowdsale", - "43b1d8a5e54c23dc212c7f199511a965a4fec5b7": "IndividuallyCappedCrowdsale", - "fb880cb8c46f68da6b53afca6fa8429b5bab3ade": "PausableCrowdsale", - "dd7b8f3a631856e81a5fd24beb58fa56417cd0fc": "TimedCrowdsale", - "3bf3e3bb72048132bff0717ef5dd2dd25d61f229": "WhitelistCrowdsale", - "8eac263edf76d56c747feb9a5a4e5529d920aa11": "ECDSA", - "d86f0bd36ed54800fbf5d094c0cd61680bd7fe22": "MerkleProof", - "d86f0434c7e803fa4e355f6bb78c5847d8e828e6": "Counter", - "3063a8a855ab9d8e1d31ac38179c32bd475a2aa1": "ERC20TokenMetadata", - "40b61fcc362b84b7b8f5b45403faaac2ded0048c": "ERC20WithMetadata", - "6f5320de16c71dbf2d08b478bcae89a7c8cfe0e0": "ERC20Migrator", - "163a9d74ebf7a2cc7f910697d513585918f276e7": "SignatureBouncer", - "bc64e7383ee9e61b613c0aa77c38e4173b727986": "SignedSafeMath", - "5bc207b44f8ed1bf37ed702d8785882f6eb3277a": "TokenVesting", - "63f538b47a22324fed11f97b993e48a18d32b522": "SampleCrowdsaleToken", - "18ac17a25a4dfe3748f013b5e1acd2e638495cd8": "SampleCrowdsale", - "858f334ed2c08da2e605ab04db4d526ede537cd9": "SimpleToken", - "b511b2fa36bea37c2840edc1be130612d949daed": "ERC165", - "ef087ed4bf42cc143bba6361e99f5d965c5209a3": "ERC165Checker", - "89b41dcad369ddf9289dd5bb640703e5e19805bf": "IERC165", - "8f78aa0fbc5f33696eba1aa5999f0367ccbe4b29": "Pausable", - "294fd705d0a1c8e94cce6774f9f0275538787670": "Math", - "ff5489b53ba0a4f650a926519ed6745ff910f7a8": "SafeMath", - "397b543dc2df14ccc410e0e472228aef1279e096": "Acknowledger", - "85458728ded749f7a0cb0417b4e6608c6fc04ca7": "AddressImpl", - "8b9f37cdbcfeb15a883ad849d9868379469b94b4": "AllowanceCrowdsaleImpl", - "65eb147c8b702f4742f2325c5774f1f87bca413d": "ArraysImpl", - "352bf73276ce2e422b715010bbb26a7dea1c060c": "CappedCrowdsaleImpl", - "2f63c91f090d3cf53ce96db8800692c34c53ba41": "CapperRoleMock", - "e43d3f784551e1eca9b046aff7dd1746ca1e53eb": "ConditionalEscrowMock", - "249d26fc0d08c342aedec0b9d92cc74e31d97db7": "CounterImpl", - "e063b808e89ecc3de5c4bbc9c919ffa7d7301b8b": "CrowdsaleMock", - "261bee63890ac92d183103eb06aa9e6468d00af7": "ERC20DetailedMock", - "a6d03a12f085621702ec2abe355799a5e60980fa": "ECDSAMock", - "97bcc379f499053394cb9b39baca0b5bd2c95f3b": "SupportsInterfaceWithLookupMock", - "e3f94dff17a0ddffe91cce083b0ab7da1ca407f8": "ERC165InterfacesSupported", - "ce2f042f44149297411c63b1656a7aed7c351281": "ERC165NotSupported", - "c8c6b08e59408716543fdf833bfdd2a46d5e9042": "ERC165CheckerMock", - "cc59e5ee83e2ac3c54a9faf63f95c3c7db171e66": "ERC165Mock", - "d9b73968b741d5cd53aaa7ac879f736785c91141": "ERC20BurnableMock", - "03703594ba3bb7a29f8c457c8485de1f768c430c": "ERC20MintableMock", - "06a59988de5e175074dfd61846655d8ceb6aabb0": "ERC20Mock", - "7c599fc3da0043e6e8a27890071a64e581e9491c": "ERC20PausableMock", - "cdf48b32e8a2040fa1785ff4006015ae3621620b": "ERC20WithMetadataMock", - "d1d60fd9b13a8685ab6f8aa87048c6e0a67d1c27": "ERC721FullMock", - "6944978f728b1665abaf2da7ba86b5428e99dba2": "ERC721MintableBurnableImpl", - "bb08f27cff0b19ef4adf183eb68d1e2ad2664ba7": "ERC721Mock", - "e51473b4de0d0cc41702f42d615f4d0e27789c60": "ERC721PausableMock", - "de3c52bb67df9b1e74f88dccf8ddacad748a91bc": "ERC721ReceiverMock", - "b9f98976e3f3bb053a1d6ac241b4e13dce74244d": "EventEmitter", - "ebb254073b372b3a28ea94e56212bb41ff372386": "IndirectEventEmitter", - "9dcc5fe734a4d420457384896568ef817dda942f": "Failer", - "06096854e33cbf52e2704e3f87d107c58f52d145": "FinalizableCrowdsaleImpl", - "f7a220e190e202e59e7ed83e8d93ebb8f676d3a5": "IncreasingPriceCrowdsaleImpl", - "48221c607b28f7ff67eb496dccaac552e2e4b80c": "IndividuallyCappedCrowdsaleImpl", - "a1780e67e3aeed1cb9493ffe00e2840fd85e5b52": "MathMock", - "811b3f5f798d1bd67cb4351ede94b40a96251450": "MerkleProofWrapper", - "f19bf654847043124db5ee412a4926fd45ece93c": "MintedCrowdsaleImpl", - "80c381c593821fb47db89d55e26bc66eb3b9815b": "MinterRoleMock", - "46c4d8c42833e483c06badecf3ef4870eeeef4c0": "OwnableInterfaceId", - "799e7db4e23a6cef4a8d9642ae4b5cd2d7eaa3c1": "OwnableMock", - "3f555df97ee448ff10299cb97da90b3f3b38a0d2": "PausableCrowdsaleImpl", - "351955623b3a5ba04402dc84132efe3bd36d81d6": "PausableMock", - "39f9b49623e98258a14b689f719e4c9e39960a58": "PauserRoleMock", - "df64a5fc7bb156be6d151d1853a4717c501fe981": "PostDeliveryCrowdsaleImpl", - "f2bc5891107b19ad4a9e2bcc9eb78651c23d8536": "PullPaymentMock", - "4cc249e1ae70127d1438dd7e52e00c76a0714e7a": "ReentrancyAttack", - "f9a7437047cc110b3d7c7886c537e63c88d58f77": "ReentrancyMock", - "9baeb425b432c40949ab0d772f3673356433e5fe": "RefundableCrowdsaleImpl", - "3a1327b39ea8686de5d4eae4488f464238196ba8": "RefundablePostDeliveryCrowdsaleImpl", - "7c102c2c0df13f6306a1491d1dab99216519efe4": "RolesMock", - "9172a3718949c08ec82487993301e25b4e988338": "ERC20FailingMock", - "05db7acd560f57643755be95bbbafe39db03db36": "ERC20SucceedingMock", - "e0f626fb634ae0401a38f07d5562a7e66339e42e": "SafeERC20Helper", - "5cb3f28de3e654931732a980fd663fecc4a1081a": "SafeMathMock", - "f8da5f69fc930b78d4d5ea2eac5147aa2b6ea5d4": "SecondaryMock", - "991f87c81fa1c7f853b0d77766c2d897e6f0f084": "SignatureBouncerMock", - "8ce412c8cd9286e85b7c28e3c3ed644bacaf39d8": "SignedSafeMathMock", - "47eee6b2d10bb21084c63f29a263bbe01173cac4": "SignerRoleMock", - "07b4e8cb7b3f12b92375f0a93c3eb2eb23aaaf60": "TimedCrowdsaleImpl", - "20f40b25fbd13c483becd042f5bf06e98b7bfe33": "WhitelistAdminRoleMock", - "148d4321f050aa8ff5724607bf13e1d4b55ca33c": "WhitelistCrowdsaleImpl", - "9986f2f41f56c43eb27b92c0547ac10e02d052fc": "WhitelistedRoleMock", - "d918cc9ba3b27a39e2e0a05c8be5b5fb07117521": "Ownable", - "f682e6ff4e928c190146ce6abc350197ee6dd9b2": "Secondary", - "015f648298c32f15f9b2e3dbda148e05c9f29ec1": "PaymentSplitter", - "feb2a352c4a8597f50e0c7f7caec4787e8a04571": "PullPayment", - "1236e7cc69efcf915b7ce81450fa7c8f013d66e3": "ConditionalEscrow", - "a1b2c0241d1f22d1d32c71415293e2357ce9754c": "Escrow", - "6e2e6ee47de4500756716fbf8943f13b29b2771e": "RefundEscrow", - "a08504b8c3c127e9f3a15cdd588573058a60acca": "ERC20", - "3bcfc9705f5bcab4583eebcaefd66a89e28e23c7": "ERC20Burnable", - "566bcf581eb9ed38c8c2b2e90cace8b78e7e2acb": "ERC20Capped", - "77ba7d78c25254fb6a22f0a92fa04b95a8ba4ef0": "ERC20Detailed", - "d602a9c5786af67ef6bb2d431651081d76dcdd89": "ERC20Mintable", - "563404ae3ad9decba0f1f12d78aff9234a84bab5": "ERC20Pausable", - "b3e5be0b3f985e92fe1f9146d8133f70c7370c9c": "IERC20", - "bdd10fc95fdb3e43dcb6f50c5a790526eb2339a5": "SafeERC20", - "1bc7268e369e6f66cae9a346a3be4200fb9ab2a2": "TokenTimelock", - "f5495923e256fc4aa541fe592c69f9c6a49d09b1": "ERC721", - "bff0ac152d4f9d6016939cc8a2f0abd3952a5cff": "ERC721Burnable", - "14d60ce0ee22fe6cc17a67f827f2d6405fde45fb": "ERC721Enumerable", - "1c5e388a06c8bc5e4ebbd264403d229c79cb538b": "ERC721Full", - "dc6488481efeb3f0a3fe4012e44cc9630de20454": "ERC721Holder", - "57d6282eac3ccb6f9934d1d2341098cd94888d34": "ERC721Metadata", - "bf266ddbcc0c703ec528a3589125187209ecfa0b": "ERC721MetadataMintable", - "feb0e24e8119875a567c7f63ae626229e989ba6b": "ERC721Mintable", - "4e7a7464f14927dcd4ac1c4c80c1416a532a1762": "ERC721Pausable", - "181645ad9bfe9ec844972ef6c3335fd0ea4a350e": "IERC721", - "5eeb659e05046a4f4fc1b998fca1960305af320d": "IERC721Enumerable", - "49a0645eb5f2c78e85729f78b6e46b5daba24d94": "IERC721Full", - "80912b3e9ab6eb4d3fc3d42d7a49810811a8067d": "IERC721Metadata", - "54be7bd4bad6dd7473376057523b9d49cb448688": "IERC721Receiver", - "7a16711320090635c8beb50e1328a501c188f888": "Address", - "5176d91de61a03d02be10f24b2a03fdbc6683a68": "Arrays", - "2b1f3555fce0551e87ee87794b27941844b305ed": "ReentrancyGuard", - "8bf62064d4d5f310f90c3b0260f35ed98a945899": "ERC20SucceedingMock", - "7fc61c5c87173431d88d59b7645b20b7a5a30a13": "SafeERC20", - "26d3b2bc6fb00cba01f3fc93926107bb8547dfca": "Crowdsale", - "dbbddfca9a9d822603879d0b26c9a87f896185e7": "IncreasingPriceCrowdsale", - "0b1275c2973bc9904a4719496518db986e75f0d9": "TimedCrowdsale", - "3181a686cc87d9773617f11e6e744a8ef4cd1485": "WhitelistCrowdsale", - "b44caa5b9a40b460428ea5145c3b516263196f9c": "ECDSA", - "a49a652a900af135636686be65e24c59b562f1f2": "Counters", - "24b08de6151fdf941a10bb1dec241f27958feee3": "ERC20Metadata", - "ced0258d0b0d50383252c1a10e11e72c54d8f854": "ERC20Migrator", - "d6493fab55286955839b4d6d279bda02b11c3644": "ERC20Snapshot", - "83dc70f4ffa7ca8b4bb744aafe520ca5813e5df5": "SignatureBouncer", - "df185ebc2fa12c378e5015bd475332756504f60d": "SignedSafeMath", - "4fb66323fe71536c1796582d32bfcabf6716ff65": "TokenVesting", - "bdfbcc3f8bc59328aa6ab0d4a20d24270492f9a2": "ERC165", - "2d2ca1d7fb9b959879a30f3a36a6ff381be7a50b": "ERC165Checker", - "d0b3500ec510385e5f14da45b3f72cbecf2d0e1a": "Math", - "a38f7d36cea19217092f7ee679308e368ec9a9bc": "SafeMath", - "b65922943e3104021a6f39825a9ad792d6c06202": "CountersImpl", - "0568279ce96d91ad7a4dbba12201003893a914a0": "SupportsInterfaceWithLookupMock", - "191327eebe6456d41be46d29262f424cb14cdaa4": "ERC20MetadataMock", - "ec24556da2b236f33be4263e76835c6f7b07c579": "ERC20Mock", - "b1f5209f1503fb7b95c1e274a4605961263658d6": "ERC20SnapshotMock", - "600c8541c63ee789fdef9c5c2901eabfcefc40c1": "ERC20ReturnFalseMock", - "375ddc80a306ac6fd622911e87a929e4317bc498": "ERC20ReturnTrueMock", - "5ff30663aecee0ab6ec3bc9342d9a21cb64e1ad3": "ERC20NoReturnMock", - "c6eeb63f9350a6293d3cd162768c72f84899efac": "SafeERC20Wrapper", - "5ec72a2da405c23f8b5610b9e7b0e4bb586a904c": "TimedCrowdsaleImpl", - "3086bc6470bdddb0bccf23d803130a76067fee7a": "Ownable", - "b83b3645b9107f5cbc95e2afbb57f6002e3e72d7": "PullPayment", - "9ab9c8709262c8ac99601051ce5c5d1ddd2950a6": "ConditionalEscrow", - "61dd244ce7b91aab023abcd5e64e90a7c2d363dd": "Escrow", - "4a5447519ca8bb2d82a79bd5b0b9b0792bba23a8": "RefundEscrow", - "c8df889cca25546f32a258b75f263fff3be529e9": "ERC20", - "21b260d15766f58e0590ea216fb5db31db4788e9": "ERC20Burnable", - "490f2847cf60a16df023549e03e6ff6a16f01f9e": "SafeERC20", - "67ec2c098cb4626d76ee8762f555edadeaf863c8": "ERC721", - "84f02d651f97b0225a3ad08eda8e51c73fca5eda": "ERC721Enumerable", - "b3f7f407fd76e2dc2ee39174a1f483e5864bb7b7": "ERC721Metadata", - "4e241f646d96f095386eae6a7a5f13e6dac682f1": "IERC721Receiver", - "5d932009fc8f204b32e2ff3b795b5a4016ba8856": "Arrays", - "97ad171eccfd6d686444cb1a096ca32c1e081173": "Roles", - "12d3a805c82a503a32584116eaa679c58663182e": "CapperRole", - "920fb014fdab17d9962e4a051ecb05e0346803c4": "MinterRole", - "0755ddb27f6aeb4095c5fa52223c6c321f634f37": "PauserRole", - "f2fdc6353650ca2a99350d5668fec6460865baf0": "SignerRole", - "a7420e74fc819c039143c4fc4060b3f8233aed23": "WhitelistAdminRole", - "7731004a855c8698643498ec733dfc528ab5e9af": "WhitelistedRole", - "362c8c4f6c21345efab16b43ac7a6dda826ef8bb": "Crowdsale", - "3a548446ff8b86dd7fc634446568f9549949d0aa": "FinalizableCrowdsale", - "4109c79f50836cd29d813afbeeed549745e579c9": "PostDeliveryCrowdsale", - "8d80a124fdfc163f1856b30d54475338d1995fa2": "__unstable__TokenVault", - "9dc3b6cc96b6bcf6dcdeb91ba4c732a8f7da0336": "RefundableCrowdsale", - "b123691e7215b1777026a26b72965372b355fc71": "RefundablePostDeliveryCrowdsale", - "18869bdf9d3a93150d1e0edcb1db4a85ee23e28c": "AllowanceCrowdsale", - "6e75e6262faa2337d43ec1066f50e2fd71409199": "MintedCrowdsale", - "33eb8c2e2ae6b95c6cf58d3c9c06587e7ca2bf3f": "IncreasingPriceCrowdsale", - "e8bfd676822015708c097b2064fc5d898f45c5fd": "CappedCrowdsale", - "8c2f617d1f49cb4fbef87748d2cf71aed74d515a": "IndividuallyCappedCrowdsale", - "9d143c684d3650ae76ef4cc89c043eb8c3680445": "TimedCrowdsale", - "6080c9c622f05b4a6439d1c98b67333b5edb9bb9": "WhitelistCrowdsale", - "791cc5d0ccd96d4d7cea297d4dd4282a2e03e30e": "ECDSA", - "4737e887fd1bc839b8b8cf2f10f02eaacda8294d": "MerkleProof", - "b7ed70197dc7c1b670f34cf2e3b4e58865383cd9": "ERC20Migrator", - "1b898dc4c40ad6e77b5e7600958f0675d6182077": "ERC20Snapshot", - "13b02c8c4a18591bc141c84d4f390a470699efee": "SignatureBouncer", - "e121f6ee965082a37437175f7f7de7327fc7f6ec": "SignedSafeMath", - "34333c9d9d0dd9cad48ced9b7ec9f16499d9e51f": "TokenVesting", - "0006db197a30a83123ae42b1412b9eb36e42a28a": "SampleCrowdsale", - "c09017218a635de03a5da5e72c0ca29453a3f119": "ERC165", - "65df18d3f80dc6e25c7b9261139254c041565eaa": "ERC165Checker", - "82aff27a106fe353c21f329d0884dba69a89e5f8": "ERC1820Implementer", - "7b1e6947bc70edd40153bcea559844c17eb80236": "IERC165", - "a4a4c4e1884a9ecff9a3be99eacc783c290bf7e5": "IERC1820Implementer", - "6fe4d6ebe9da8d97a48c7be4cb30aaabb3ff405c": "IERC1820Registry", - "ae0db82d81525d22cdc433cef124addd50430fc5": "Pausable", - "6b96a25ebec0776be5318fbff49d141d73f4f5de": "Math", - "2a829cf20030b8d3de8ac9873f0beaca3cad1f4e": "SafeMath", - "7c044669d66a8d69734c5f828a50d2ebd53f6bbd": "SupportsInterfaceWithLookupMock", - "7b97383d271f6b4cf1373d76ee256ba3028f24ea": "ERC1820ImplementerMock", - "95998f85eb3757d7b010f9d7c1480a92d9016d92": "ERC20Mock", - "30b598e64b3ea2b9915acaf629b2d0e4a2eb66ac": "ERC721ReceiverMock", - "e092e16bb0e17e23ca9e1b8c1521cfb386697e2a": "ERC777Mock", - "53a0001a2ebd03b5203549fa6c6c80cc9697187e": "ERC777SenderRecipientMock", - "ca4b8cacced7f06ec8ac865f7be0d5bf1b1957ff": "ReentrancyAttack", - "068676df02968b7b9e9b4d3b7f69155a9f70a13e": "ReentrancyMock", - "9124b8c0668411c9dfee424d0bb9ae6e8f7706e2": "ERC20ReturnFalseMock", - "257829241097f5fd720b48aa5025a7e972b0bb30": "Ownable", - "eefbd0e574c1afa621b60d5c0060ad123e094988": "Secondary", - "cf6cc9c70bb5ee318b5ba3588e9f2c4f34cca72d": "PaymentSplitter", - "f8d97ab19910043c2be57dfa599cd98b2e79c0e8": "ConditionalEscrow", - "cef9149e1ef5098f9600007ec477b01ea5f41140": "RefundEscrow", - "5e3eabc1f7f46c3375a3d8eb4ab618ea528254c4": "ERC20", - "9f0cfbf4cf9505829c19bf3698aa3a87660ce1d4": "ERC20Burnable", - "f6d6fbf05185ca026c9ccf4eab910054069c3f8f": "ERC20Capped", - "a9ef7428ed0d036ab79ddd21ae9b95da666634fb": "ERC20Detailed", - "cb12ca8d883bb3ad8317c61b2e7251221def665f": "ERC20Mintable", - "0f194824b2052c308c52ec5cae790adea7c64c57": "ERC20Pausable", - "3efeef33c00f8c7513b55015ee54e6235bb0b668": "IERC20", - "7f3606ceb7a5ca3d169607f28d825b7844d8f6ed": "SafeERC20", - "54bbee45e99d6502f0c9b5be1b80d4bbe3786d94": "TokenTimelock", - "11fc4d574650f2b1c58366124832c3409c78413a": "ERC721", - "205f8e867ab267c38e439b791c1e1bd1d8ca88c7": "ERC721Burnable", - "9b8256d1597bccaec572a77db88f059f58df9345": "ERC721Enumerable", - "66f22e50f77d448e975e59f871645e6abf6d1cf8": "ERC721Metadata", - "743b6405c190d6966e1284622dc0bade6c9cb40f": "ERC721MetadataMintable", - "628a4855f3a319fc3280111e4747b4faa9ac39a5": "ERC721Mintable", - "d5e1935a6ff55517a209f36ed99d5998837c9e4f": "IERC721", - "640289cb3557be343a7520230cd1c3d31961d3c2": "ERC777", - "532858b09be39df731d0f660c1c8df677d90663e": "IERC777", - "3c3e0a7eeab6fb60705ad74295fc20d947d4fd38": "IERC777Recipient", - "7c644be4848da35aed4b1b1358c79d273c5eb2c3": "IERC777Sender", - "862f5b1732442b00bc2bd40124ebbfc93e506b73": "Address", - "ffe0c2e7651f57976a4875cd95580dfc0a012a2a": "Arrays", - "00fd45355e275a2ed1c1eb0b3b2fc82786dcac5b": "ReentrancyGuard", - "f5f947f1c918d8d1ece09da651c3248f66cf7e4d": "Context", - "2e44800ce075b20ea3c20d1e62300384dfe2c517": "GSNRecipient", - "c5aee0ebb7cd74d8527a5db5954b364b863603d1": "GSNRecipientERC20Fee", - "99159b6dfffe5ffb4c973a9645385542d26aeaa4": "__unstable__ERC20PrimaryAdmin", - "a4073980c6f85544223a230d9dc9391f1b0dc311": "GSNRecipientSignature", - "d914062eb6557699da04d907e2b70c24de94bd12": "IRelayHub", - "3e206957fb817eb0ec41dc08053084c29a6a061b": "IRelayRecipient", - "43710cb6060b92e5f845d7c76ed4ab1f85f7cc86": "CapperRole", - "4a5a3fca54b8b8b1997614b1dd3b408a964c538d": "MinterRole", - "76bbbe6b0782ad22a92c56058b01b89ae789b599": "PauserRole", - "d4e83a7891c65c3ed3670a978bb76b634584af20": "SignerRole", - "6cc6766baef98a700e8e38821ae2aa15cbc31062": "WhitelistAdminRole", - "71c272ca2459bd2e5648c31cf3342109274dc265": "WhitelistedRole", - "bb5bc67bb08af53d6db7d3c6bfca4dfd34e5e574": "Crowdsale", - "c73846163f45573292c9e7281471658d480d83ba": "RefundableCrowdsale", - "041e87ca76fd2207ef3cf4936ec0205204be6b96": "ECDSA", - "0000d7516560f14246e909e2efa04fab08aa639c": "SignedSafeMath", - "b002d3ff71af2317f8c44c7098c5e12814bba92c": "Strings", - "cef172a9650a72ad1bbc8aa71d6c5e755f0b49bf": "SimpleToken", - "150947d54d2a71dae3b56af334766eb70e6253a4": "ERC165", - "a7c76ea626e3f0e494df9149c8e40ac8fb90d240": "ERC165Checker", - "0f2bb06c58e981260a4204795f24203a365c2737": "ERC1820Implementer", - "67b2092d07fad864c8fe808b9c3ca3e8749ef8a2": "IERC165", - "cf18bfd2ac9bb0e6f31e2e0169bcf7812b48d020": "IERC1820Implementer", - "c6d7a58fa8e4408d90bf4dba2251c7f384442e61": "IERC1820Registry", - "1d1a1e6a2b8373a0f9c12fecb97e9e9e2f5565bb": "Pausable", - "40c5df80b4b5cbba8434b7662078aa2f7bd11703": "SafeMath", - "7e7979f1b224b9a2f1521c2e7ee6269e86c192da": "AddressImpl", - "d2953944bb76616ec71f7ac0973f4a2c7735e3f5": "ContextMock", - "b9f88ead37062ca195d2a397eca7462b23377705": "ContextMockCaller", - "e4e81b34ffc158b871c398905044eaa407b53309": "ERC20PausableMock", - "1d5e75b5b0c6d5a5411479d0c5922cbc23b88935": "ERC721GSNRecipientMock", - "ccb9f10bcbdd9b08e3be1ddcea53285c2edfbbac": "ERC721Mock", - "f6dd2052f9728379c16000c51866baa667ae8ba4": "ERC777Mock", - "40c2c74b3acb1d4f2701bbc1726c54e7b93d879f": "ERC777SenderRecipientMock", - "a6ebcc719baf42b346ce99ce787a988dffafbe67": "EtherReceiverMock", - "31c735b3a0f5aca4dbcae3cd833d5327d77020e7": "GSNRecipientERC20FeeMock", - "f951aa42da5cb767b2d25af86911f06cd5558981": "GSNRecipientMock", - "35ec5d4c73fddcf8a5aaf5757ef1af99352b3e7f": "GSNRecipientSignatureMock", - "d3525012d52c3d06a22bb704ada33f21c0256dc8": "ReentrancyAttack", - "860bdd56a5ddf01ae3557917163d7c9dc8de8ee2": "ERC20ReturnFalseMock", - "ae01681cc37d58ab8052869e687f215e6cb8d0cf": "ERC20ReturnTrueMock", - "93af43acbe7d5b909433810d28f2ac6826dd1d91": "ERC20NoReturnMock", - "d09209d71a33bf114bf1adcec684c64deb010de4": "SafeERC20Wrapper", - "3d00f6d348841ae204c485cda3c4c2816af76957": "StringsMock", - "d1523aae49fb6f1896f49e590b6f51039e4bdd72": "Ownable", - "2fce93f9d6faa205cd88c0a09bd9f76fc5330932": "Secondary", - "0d32d5cabbfa9f420623b256dc5fb3494ed22769": "PaymentSplitter", - "99e22b366e81118ef4050f8f5f75962e73330c73": "PullPayment", - "4562c170bc9809fa46e6666f9728e8e61dd33f72": "Escrow", - "626414a459336b3ac497b8e49fa22f1f0abf1b92": "ERC20", - "950167661be5dc085fba4c584183bbd83a29eee7": "ERC20Burnable", - "38d0818e3e974224e2fbabbd73c57eda95034984": "ERC20Capped", - "e406b324425fe7c3f7c5589e06dbea4796503de1": "ERC20Detailed", - "3f15c8af26605011c8d5de1ce87ab8fd0ce60ea7": "ERC20Mintable", - "09071ee20d5607366d247ff1fa9aaaa46d606dd8": "ERC20Pausable", - "a8466bda6a100f8073131ee60f1f55f39cc79715": "IERC20", - "2c19d3f26dbfbf3d39f50dd735fe0fe5b5e6cb69": "SafeERC20", - "53de48de263bd917431b935fe6733716efaa53aa": "ERC721", - "f6798a7bd8cd9f0f9315ecf200035b4c1b27652b": "ERC721Burnable", - "5287c032e953f49cbead7d8e8dfb5013fdbea35a": "ERC721Enumerable", - "32a640d5908aa379be7abda1424894a0ed5cb389": "ERC721Metadata", - "0465da94cef491f15c1f0cf03ab35ba5f57c2e53": "ERC721Mintable", - "652b0218b8ce2fa84fc1489346eb4f8ba6be36fa": "ERC721Pausable", - "dbb96f95f55be6a05475b97ef7c35bd3e93ab4ed": "IERC721", - "f4b123f5b40878b70f02476c2e17a144bf88e1a2": "IERC721Receiver", - "fc247ca5c3f2ce5dfe65d307d34461c314f07225": "ERC777", - "70795fc39191bc51871b45a31c12b3bfb7a8d95f": "IERC777", - "923531fc7154edb1c04430faa466f2fc21be91b5": "IERC777Recipient", - "91df3b8cb635ee73d073bb41677b30cca16cdfaa": "IERC777Sender", - "671c527f68ac3d8c6793881d78179da4ad394eba": "Address", - "0bf7ab409d936c5f8868bfbcdcd40635b2d5975f": "Arrays", - "e6a65bea2d5d2b3629bebed655e5f99ba6b5cb62": "ReentrancyGuard", - "33fd40c136a0417ba1aca69c95440a6f6af396ee": "IRelayHub", - "e60e312ee7de5b97f6b691d2aa22a754139c0174": "IRelayRecipient", - "80635da095b81f3ac67980a810c197b175cd191a": "MerkleProof", - "2001957575c00b8d4f0d2e86da40374cc1f9b95c": "Counters", - "bee16f12e3d00612347f7716ac3dd919958f6ecd": "ERC165Checker", - "b7ffce9048179efef559653bd0fe78e3dbf3ccc9": "Create2Impl", - "ab5709072e811dc6892d9bea6dc2febc84c2eebb": "ERC721FullMock", - "8eebc80db69e1dc9feea6f06833983578d4b3780": "EnumerableSetMock", - "da3bb9482cc3fef975d4b940aa6a7a241620cddc": "SafeCastMock", - "418be7dc23fea0fb0685acfcd0924205d309da45": "Ownable", - "016a31280fdbbb2437d69d2d2077a7c6905c714d": "Secondary", - "e54799317dc440001a42e881955539c39216f20b": "ERC20", - "7f18034de8806b6e04a081d9139af0bafa7ebe28": "ERC721", - "a8e2e47304e89ec12edb4796701610ca0545f690": "ERC721Metadata", - "270b244803ef7871cc0ea9c7140c58b0cecc7121": "ERC777", - "46d949813bed5d0c28d461308d29b801440d4b5a": "Address", - "27cd94941b6e8368a47c3056f9881d9b777a12ee": "Create2", - "3f0be66d5ab109f6f063a2f621e2a27f598e9c75": "EnumerableSet", - "288ea0f7c464d6c209aedcb70702d40d055061a5": "ReentrancyGuard", - "96b9d4c39c132847fe9878012875a60be6815d6c": "SafeCast", - "d858e0f859c9a0007983f900e87377bc7b9db2d9": "ERC777Mock", - "c50d4a4bdb1ae07acba0c1808a395989814eb11c": "ERC777", - "b796dbdd6a4a193975d3e83a2705332b97d04c9e": "Context", - "26f098ad471cc55860f980fdb2a0e03e76124c5c": "GSNRecipient", - "df2e4c908e0f63db31a061d6b1a88aa3ac5e4259": "GSNRecipientERC20Fee", - "f6e0a568a7b389b06da90d094cff83cb479ea60d": "__unstable__ERC20Owned", - "250da0268e9484838d295b0a509683c70b9c2bcc": "GSNRecipientSignature", - "7db2684fb121525320f90ba363fb9d393c882c2a": "IRelayHub", - "b59618fd7459ca78735d140104a33f746c87ca23": "IRelayRecipient", - "f61364a0c94c546c2686fccf64fb00b7e6a238f5": "AccessControl", - "5d4b8f8c71145f3eea66f7436b857d639d294975": "Ownable", - "5ce37f6d78b690e78105d779c9c5f8b133b20713": "ECDSA", - "e2563eee26d163e13a84de12c231bad5bd9d07ef": "ERC165", - "bab56366523b8b4b46e5f4745d87d1c4925a4cd5": "ERC165Checker", - "e0902a009ac1aef60cb3f2396c3e0551cabe50e4": "ERC1820Implementer", - "8c1783f1553244438a69f197761338b573ea437a": "IERC1820Registry", - "299995a0dda5331bc9ee5b50a02caecae0ab2f47": "SafeMath", - "381c1c12d9d6ed7263d499568493801a2f9f6c98": "SignedSafeMath", - "b36bba5668b0585f8fd14a482b2b732245a71bbb": "AccessControlMock", - "ea494ccbabbb741ef48ad0ff5c085f91efcf3a3f": "AddressImpl", - "efab65e1bceef92614ebe4fbb8f9fb24482b6ed6": "ArraysImpl", - "3a520123de9cd4ca9a16c3f5b2d60d7d30aba9f7": "ConditionalEscrowMock", - "dfd11780fdbce9683363b9951c1736dd9c0a3479": "Create2Impl", - "039c37d37cd81934ed60f46f40e5b7c454e5c61e": "SupportsInterfaceWithLookupMock", - "945e934e278de6fd89f396f2cf47be09063ca054": "ERC165NotSupported", - "ea356c162ff728d39db8f4b1f8629294b7dc53c1": "ERC165CheckerMock", - "0a36b70b7c01ef2e9ad666db0b7c7815a2954bdc": "ERC20BurnableMock", - "44563df6fb78cc199c6afa99364a06e8b6bb1a8b": "ERC20CappedMock", - "065fda899fd387ce4fb161a544c6ca5c4d2cefe0": "ERC20DecimalsMock", - "0848d902f46092fd3cb28518efb3485754a176bd": "ERC20Mock", - "d3694a314c74d8e0061fd1ee4abe29265e333a8a": "ERC20PausableMock", - "b87497aeac600f01a5e99eef27004dba2b386db9": "ERC20SnapshotMock", - "801315f0005d984a6660bcc6a0980fd812f1c36a": "ERC721BurnableMock", - "7b7d05bbf487b7101f6d0b1b17d9775001297456": "ERC721GSNRecipientMock", - "b702ee7d010f646e049b5e6786395716a6c4e5de": "ERC721Mock", - "4265a7d8085494949939f615f62481d368c2ea2a": "ERC721PausableMock", - "153e1fe8ab29256f08340d4b68bb4d0e7bf31c1b": "ERC721ReceiverMock", - "9b9a5118eced1d02b1558076d4598e9e007ef161": "ERC777Mock", - "d4ab30adb57b13f8a100753fcbcc100b5b93c41f": "ERC777SenderRecipientMock", - "56edef128a9c6161b588e85b7e9f8a7c8719330c": "EnumerableMapMock", - "42492e1e3840893868cce13e052e73be0115a282": "EnumerableSetMock", - "8142f6d05936c535329a037a5982940423113d0d": "EtherReceiverMock", - "926923f5dda7a7fdefe2b298549b4c7c899d644d": "GSNRecipientERC20FeeMock", - "b25e72ff5f0838564ad1fef33a62269baa223e58": "GSNRecipientMock", - "08d9ca42c0b395de9866fdc89cf80baa79f3c544": "GSNRecipientSignatureMock", - "35bab91349a98ac9d37a0b0dea207ec66d9df1de": "OwnableMock", - "b598caa720703755d142c55313587b39afd98fed": "PausableMock", - "ee40626ef9ea1cda61726721063073150205a62d": "PullPaymentMock", - "9e583d7f7bb1a067f370d89b9fbe3761ec3e9667": "ReentrancyMock", - "b2abff56fa395cf30f6f70e37eca3d75afbba4fd": "SafeCastMock", - "bd3f6a5cf9aa93cca8f92896283807e732bf562f": "StringsMock", - "128b25a6695355f36790d5a10fd795b8bb27fa2d": "PaymentSplitter", - "86fd813a5a70b5d7233bc1dd53d2f794978e8bcd": "PullPayment", - "88a3718cebe06fc9da77d9678a2b6f0ed68ddba3": "ConditionalEscrow", - "69fb19ca610d79dbf1138608ac29096e7f1b5976": "Escrow", - "f2caea65705f8c4230984e0a8c7e764b2d87c29c": "RefundEscrow", - "54363b19c1cc14361dfea5510bff28f17a35e284": "ERC20PresetMinterPauser", - "38ca7b059432b97d9bd6ebb4dbfd3a8e7626c059": "ERC721PresetMinterPauserAutoId", - "01a31d70eac15ebc3e72762f3d9083e2ec58102f": "ERC20", - "b6e55d3df0d0552ed089b09f61be8bc6379ead02": "ERC20Burnable", - "32dab051731393e6bfb3688e8cfb871017bb917d": "ERC20Capped", - "33382c542643be96d197ace0347bc3ca0b450993": "ERC20Pausable", - "b1b3262a12fc93ad5fc3044f105688b26a8fc39c": "ERC20Snapshot", - "8ad28076b641582bd77b676374b81cfd0f2e1a16": "SafeERC20", - "b021a1cfeb77d1b2933aee2118525dec020d52e3": "TokenTimelock", - "876d34e7701f0b3ebefb39f5fa5c0fe434181466": "ERC721", - "a880a1b2738b3efcc5a95143d0a326ff227a45d0": "ERC721Burnable", - "562cd257f69b05c02c7e235fd3a6d3619c428006": "ERC721Holder", - "fa7968daf5e28907a8097cf716abe22a74102d2b": "ERC721Pausable", - "c05ee17be3c12e0d5062b147bbc85543ca5e57a0": "IERC721", - "2f8c54269c3eef1154da10fbe4cc8b9b988909d8": "IERC721Enumerable", - "c03c0409f543870410ebc74e33089d8bd8fe4d33": "IERC721Metadata", - "a4499a2caaf32ff3a48dfbb81587c3adf6adfae8": "IERC721Receiver", - "5899fda2e6c4c8cf2177cc7c078c78e6e5afd218": "ERC777", - "b9ef6216c31f8261423581d843bf14a333570560": "IERC777", - "b3b149c4a02c930e5f138a7bd4d1ed07e5742f36": "Address", - "61cc196dcfac4de6436deb8ec083d4aabf408a69": "Create2", - "a37fb5e05f9228dc03b7c50737be17949c276978": "EnumerableMap", - "ab23fb82ac99e05ad0a8697c1ad6b8eca4b9b6cf": "EnumerableSet", - "21547b61a2857572da1e51464899cdd52ebd5737": "Pausable", - "7e7fa83b0f54ef795991472b8e1d61d5cf98c7d9": "SafeCast", - "47fdeef8766861e816936156be77b55cb8e0d15d": "Strings", - "3ebd393dd34383ead311cc6a4ac498d0562fbeed": "ERC777Mock", - "08d677f4935acdd04f1939d6430d2d98ed95a8b8": "PullPayment", - "bcab2445fc6987740f10b1b48f5cc9f0a9dc628f": "ERC721PresetMinterPauserAutoId", - "391484feda2d514efcbd8ad05bf24925d6a71d9c": "IERC721", - "043402c29808063960b154297d4d949f81f27e38": "IERC721Enumerable", - "609c41e5ec3e7eda3fe7b20d5fdf8459da4741fe": "IERC721Metadata", - "fe18a97dfdc6f6805760ef16a3a6426fd4ca5742": "ERC777", - "59f0695316bfaf076e70940bb15f611ab18e7380": "Context", - "6ce10025cea27bb5e02ed9a0a849c592d991f9ba": "AccessControl", - "05fb43f68cd62715cd9537e2407662ffd80d1b14": "SafeMath", - "14bdd1cf1d91f81d608b9317df714bfdce5cc5c8": "SignedSafeMath", - "c387ffafae87632afcf8a61aa9a3046f74207337": "AddressImpl", - "77dbf870fb94cfd13fd3fd2cf4d40eed0e1b5fe5": "CallReceiverMock", - "2fbafc739e08a6e4f30468e02c422a0f46a44133": "ERC1155BurnableMock", - "edebb3dec4141dedd0e6486b38ae6d2f4a2750df": "ERC1155Mock", - "497e0d5e7016d8c029788a4612313a68b0dcac11": "ERC1155PausableMock", - "b63233a551c74f686b15f9d1e41ec9a511b216c9": "ERC1155ReceiverMock", - "4e0eb152c67034b43787e86dd9517e5acef04406": "EnumerableAddressSetMock", - "33031da76437b1311f45e835d07084449361c05e": "EnumerableUintSetMock", - "d58e3bc4a8dc2a667dfc6cd02e834693f8970d4f": "SafeCastMock", - "59444c98b67b5f88dfb7bc0165563cc10963cb54": "ERC1155PresetMinterPauser", - "57f1c230932cbfd9944efde495ece7b93961216c": "ERC20PresetMinterPauser", - "60a2b550bd5c41484cbb9d96840bde18080cc9e0": "ERC721PresetMinterPauserAutoId", - "271759a8472e5c3f9bd708d319334bc362f7ea28": "ERC1155", - "134643457f4b7b6f0e9e7e4d1a9dcc4490977b5b": "ERC1155Burnable", - "cdb13d40682488f9f0953066325cf069b44dbd1e": "ERC1155Holder", - "ad8f8fb3ef5b64079ea06b8a84f71961ca862b2c": "ERC1155Pausable", - "bd50c286a31a9281ae013970efdd8a2698f70a3d": "ERC1155Receiver", - "b51299123b2b7ac6f4473c4e9eeff2fae2527866": "IERC1155", - "ebbd8915f7e42b138f231d12a57aa3205648c228": "IERC1155MetadataURI", - "461f1b75562c952dc593e4b74fe5957247b47e96": "IERC1155Receiver", - "af36aa37efe07de73c75c3e3b2768abaf71d1f7e": "SafeERC20", - "76e26d8fe94c40bc65de0b949ba063aec0c8888d": "ERC721", - "8b36b4f8062eab95d4c7b88da93222c71ab4bc9a": "ERC721Burnable", - "8a49c9027bfd68a7406842fc38a54c1ffdb0f55c": "ERC721Holder", - "6bc0035b00df60df8ab929ad72f1c15907ead145": "IERC721", - "66c525cc867324229ddc289348a728c95abd8ac0": "IERC721Receiver", - "885e6164dd6b49a503e5a2a4ed16277b6eb23ca1": "ERC777", - "61c30616ec7a625371407d69c4f4287bef65465c": "Address", - "e55e6ff86a0622d2187303e42de5dbd1f8bd7577": "Create2", - "7253411ae52004badc4d7f7410ce466489d61649": "Pausable", - "26c0a8f218e277e2f800073ec1cf3d9e8589d369": "ReentrancyGuard", - "3bab9320873cd011466b2a6ab0dcac0f5dc1bc69": "SafeCast", - "4078d8de60d037cbbb1a421d03159750cef400d7": "GSNRecipientERC20Fee", - "05584150eb03bca28420d821f0d3079f3c392059": "__unstable__ERC20Owned", - "4821563b16a010649bd9fde1586e911f6c9c1841": "GSNRecipientSignature", - "15cacbe095318831e2b3e609d4018cf5d59bb7af": "IRelayHub", - "0453e5d14887ca74d7a9dd93ea24ffd21b33c0cc": "Ownable", - "1e0f45ff715be57f9424f5703cbaf1c7c0b4cdad": "ERC165", - "2dab2a74b7d92d977062dc109c47ca5ff6817564": "AccessControlMock", - "8caf6b0156b3bddcfbc8fdca0f640795d2dad50a": "ArraysImpl", - "a0dd84b48b5d2c1d88cf53ceb5e3f992edb33507": "ERC1155BurnableMock", - "b423c7c0aa88de46bbfd3d42fea4db2cda7733fe": "ERC1155Mock", - "85b3c12fd1d0ddd48e056e0b40f7407323376576": "ERC1155PausableMock", - "73e683d19ff414928daa00a6fced00488cb31307": "ERC1155ReceiverMock", - "83c038d09502c0d9a0315629e03aca228f6aeca7": "SupportsInterfaceWithLookupMock", - "32bbc7aff9562c2ae47502929375cd06c0e01aab": "ERC165InterfacesSupported", - "7d163c3d68597c146c14da4df3f451afed59a2f3": "ERC20BurnableMock", - "7214c953c5c6ec720257cd10340380687965941f": "ERC20CappedMock", - "8971a5f34be9083e20af4a06fb75050ff87cc784": "ERC20DecimalsMock", - "22cfcfc29d92bda4cca9a70b78b9ddefab727ccc": "ERC20Mock", - "db4e7558d868ae1b732167860c6d77e361f552fa": "ERC20PausableMock", - "4f7b8369f212124b124bbd4ff4d9809d1462f947": "ERC20SnapshotMock", - "a98e5e8ec5b8c839786c8b5fec95f1a8c0d76999": "ERC721BurnableMock", - "6bca38a21f8600f2c6e7ba24572beeeca15a7007": "ERC721GSNRecipientMock", - "27639747781f75ef1d11c3a8af9e7f9425b6595b": "ERC721Mock", - "f1e38a0757425bc9c416626fcf8f4a73a612264a": "ERC721PausableMock", - "4fa02f6cb2fe182533fe2c180323c8bdaf20472c": "ERC721ReceiverMock", - "01f24211871a64c439300003fc8b8dc76ddff4b6": "ERC777Mock", - "d286a08d1ddefa6a8fa5b8d6d8a52f4fdee2ce0c": "GSNRecipientERC20FeeMock", - "fec57f6d1902f7fbac554b0f375b3117e8e745eb": "GSNRecipientSignatureMock", - "ea7b7becb2c1cc0987b63d7cd3065b1819bb4b0a": "PausableMock", - "7d8fde97a41abf14faf73685794d849a4c3e0ac1": "PullPaymentMock", - "0c8d3622e8f5d7562ad37806f3d75b9290558a3a": "ReentrancyMock", - "0dbc8bb2fa7ae511f40ac5143ce8817dba57d89c": "SafeERC20Wrapper", - "9c68614788325a6129235a41228ca6d0d2ae806b": "PaymentSplitter", - "8084049564949219b37e12ecf91934ad62e5a94d": "PullPayment", - "1a5d2d9ad8b09f49594f516e1c1bd434264b6441": "RefundEscrow", - "7ef8bf14f12c46b04f4bb701ac6148af107d151e": "ERC1155PresetMinterPauser", - "4d3c1b8ff12cb6f53bfe559c4001aaae2ce5bfa9": "ERC20PresetMinterPauser", - "76e1b471738b29e9ad472002b299e6ca5c992583": "ERC721PresetMinterPauserAutoId", - "13032a5e6e8c053928c1a7079d1cec08a8f72545": "ERC1155", - "e9aeb04c7cf3cfe28278030bef8e6918e8822bd0": "ERC1155Receiver", - "1524e25dfd71e549c0927267e4cf939f87eb856c": "ERC20", - "ce38bf299cd7a12c71f467aab654930a323c8947": "ERC20Burnable", - "a093419c3b2483a11d550d411c12a40b4d2bc644": "ERC20Capped", - "c13eed0a07804745778304d7af258421bc4f2c50": "TokenTimelock", - "5553fa5d1dd434b4ff2f5631f89923d65a4156db": "ERC721", - "c97967b9b005fffa9ed4fc230cf48d48e34e71bc": "ERC777", - "c6c506954a6d5d6b55db67cc577e31e7da641ecd": "Pausable", - "aa82b2ee7d508dc438e8a7d3995278479076184e": "ReentrancyGuard", - "85e7ef332d5fc621ce63ccba93ee518591bf8c8b": "GSNRecipient", - "96d2749e41cfd4e833a6178779093d82efbb7d0b": "IRelayHub", - "ffe1a6c90aa2b5556371b3799d2c65380a257d0b": "IRelayRecipient", - "0d2073be4268aabd41cce88b3769748e23142750": "SignedSafeMath", - "c0bae1111dcdf923d9a02599ff8a04c00e2456ed": "ClashingImplementation", - "4f92b6c4dfa12c3081d1fe4007e48df4c8c82e5c": "Impl", - "299556791f944a3fdbb677e5940c9d6865822606": "DummyImplementation", - "0b65288765b06e6baaa610a1d42eaa2b4591d8cd": "DummyImplementationV2", - "36075e336521530913cca767578aac6f07a38909": "InitializableMock", - "2f0630fab703c0cfc42ae33caf06e886fc4e6969": "SampleHuman", - "0de21f8a03ee4c6f6a63c6b6bf8b4f72d72ceced": "SampleMother", - "62b03120ad8b165c812e68bfdbba23080bf441b2": "SampleGramps", - "0bb55179c7e2bafad38c05cdad4d7a4a6b82d90e": "SampleFather", - "dc4d51c37ecfb1e2967ef74f7a2559a6252a5272": "SampleChild", - "85d6460e3b0ac8447a7db9493a5ff396c5e9364a": "Implementation1", - "43af63388be018e6a4448b585ee2244486d266ff": "Implementation2", - "1b7890b0027cf8b10d871746f93c892d4b2e814c": "Implementation3", - "257829569899b91fcbbfbd6fe9660d7ed25f82b1": "Implementation4", - "e179e255d203b40b5e050148327a89a4db0274af": "MigratableMockV1", - "b74cf7f9f38e31bc2c4cc77a87569a094d157de0": "MigratableMockV2", - "97d9d9e61df537b9d68d8d94b363eb8f58f9c855": "MigratableMockV3", - "36ef2be3f4842ffce40b0baad7a38c98dca86627": "ERC721PresetMinterPauserAutoId", - "44346833a6bd65fe95c90748b5722a563f3dc3e1": "Initializable", - "c2f5c325aaa4ab9aa2c8def40e53cb2e7c38dd66": "Proxy", - "62927e48e0b61e131a6cfa67ebda7218969a6f3d": "ProxyAdmin", - "a312403c3feaf629c2900ce0f0d1434bc359d428": "TransparentUpgradeableProxy", - "2dc09dba2775be34524d45a25c6a12a6064b687e": "UpgradeableProxy", - "1451ecddce18800239ff93690b719b8a654a8b2e": "ERC1155", - "4635856f8449649c520428ead6e61d6f9b1e13a8": "IERC1155", - "12525308d365e1082fcf3ada1fb2d71db3972b16": "ERC20", - "0ea2181daa5c7e76ccbabf8a9999f9fbd1833820": "ERC20Snapshot", - "65ebeb77cd51d64c2e748bd176562b4e4b3766b7": "ERC721", - "365098499bb100597dd9267be4172eb9a51e49f7": "IERC721", - "aca21574c58b1e1387769de3b07df2bd8648fe2a": "Address", - "5e2433d4880abf2da08dc7bb2b1bed1ee89500dc": "ERC721PresetMinterPauserAutoId", - "060fa9715f285857c483f5f8aa8f283597b32a8e": "TransparentUpgradeableProxy", - "eeb1b0eb21f40d26aeaa5db59da4d89bdd78eb3a": "UpgradeableProxy", - "a6e8c979be5bb5af9fbb1e614b27b38839a5894d": "ERC1155", - "99b6d5df430ce23689a152c8438164c5de872197": "ERC20", - "c60a6be3f3fce5a3b3ef5122354fffa11cc2f04a": "ERC721", - "ac504766b532baf6b726e48a8e3c99f16b2453c2": "ERC777", - "f9fd0c5c9e330675fda7856b975b0fe6b02624d0": "GSNRecipientERC20Fee", - "f1fee8d515a2f71cfbbc450e793a2d2b17caca7a": "Ownable", - "b503decf7949df51f4ba6808c081792e70437c0d": "ERC165", - "761f89f6ffc7ca427b95c3f0101db6d1f271d0e8": "IERC1820Registry", - "7640634b8811549a807f0ba07f7acb29afbedf2d": "GSNRecipientMock", - "ef02f12e6402f08a97633ad225b6b312578ad132": "PaymentSplitter", - "248a8a1273db727248a7412571724b5707d2946b": "PullPayment", - "397958f6f4842504963dbd017cfb8bc64d4cc2f8": "RefundEscrow", - "84a1ee038830d25ac77a33ebe4b6d27360da022c": "TransparentUpgradeableProxy", - "bbc4789f86eff2f3a7f1da837ae6a85de7e2f803": "ERC1155", - "73606b13add74a0032c16e323d11c28d0a62fa05": "ERC20", - "c7e4c94e1c49864431de7e3b2dea4595757189d6": "ERC20Capped", - "ca4fe971d9d72558abd50f77b6cd8b3de2554b26": "TokenTimelock", - "eab2db3a101c13a594e8f1d140adf52c64242bf1": "ERC721", - "505e83265ba5e1b1939a2c199ec99b5beef596bb": "ERC777", - "ee5e60d9ed917eab36f085b0b128c2fff2caf10b": "Pausable", - "bc88ca03e46528a04853c32ebf121df42c4d9edd": "ReentrancyGuard", - "2cefc88832911d8f000cf1f853a8a1ec34a83869": "GSNRecipientERC20Fee", - "ff468e5fb020023b45058cd9d6baa684a07c169a": "Ownable", - "62e78f66a0dc5a7ad8b7f155a4a3c0bc056d37ed": "TimelockController", - "7661544d7b4503ae1db879c1b06335abe437eb43": "ECDSA", - "79f657470505cee15284ebf0afac69c26820b6bd": "ERC165", - "3a5cd51f0635a3fb082c4e761450b541cedd5e9f": "AddressImpl", - "780be56bedddc62c2722b13e5fe2e258e07da87e": "CallReceiverMock", - "eebcccd00f6a1385ea11f82064fe982637af2cd8": "Create2Impl", - "54279277126550e93cb4518ef5b0ec055915ec67": "DummyImplementation", - "0b1c723fb1caabd0949393e90cbb3a18af826a7b": "DummyImplementationV2", - "8f7732e30464761faf28ca7d986c979cb78b55ff": "EnumerableBytes32SetMock", - "08b973b9862e47b6cef3ae3540a9c798a2e3948a": "PaymentSplitter", - "3e2e2f659b27f72c72462d35a41afed6c71e1310": "PullPayment", - "36cbd240c302af1fc3f2bd00aa7f204ccbe1e051": "RefundEscrow", - "80b95e3cad825888ef85966822547e32c545d044": "Proxy", - "fb5050efb413c3776ec0c9ffa540df1a42d3ce2b": "TransparentUpgradeableProxy", - "93c13eddcfcd62395624270cde928e5d24d3b4b8": "ERC1155", - "61e358e538e2273e31fa7133009c7a3c4ff8b9dd": "ERC1155Receiver", - "0dc22cde3abaf6c0fa621b32f9f7934e22f4c1d1": "ERC20", - "63536d5bfe0f79c8ef6782baebe76002151cb22e": "ERC20Capped", - "dd756683800487b41064dd881e0b65a419862aa0": "TokenTimelock", - "818503b17c0db33bfe69b5cc461cbc061d0c65b9": "ERC721", - "04278f72bdb6c61d366aec038058a1212a4f07e9": "IERC721Receiver", - "5512c580e9da164446f6551a20486a35e1c08807": "ERC777", - "da934a25d30edfd91855d54555dc0144dbbfd7cb": "Address", - "179de8c468d36b2e51824b07136adedae7bcbdc3": "EnumerableSet", - "12cb21575ea5e6e30c37c9a7440fcc2b3adb0845": "Pausable", - "ffca07556d8e39845429a3b009980201301c5b6e": "ReentrancyGuard", - "be045cb6e49d12aa04b07af22ad6e600d472b78f": "TimelockController", - "6af4381b463ec0dcd9e2332bff9cf3ea9568ba29": "ERC20", - "33beec74bb53c2ee0e9e12f694e367258724e6b2": "GSNRecipient", - "32a14bea425dc2959b680187600942f4901efceb": "GSNRecipientERC20Fee", - "fa5e7908a5cb10013f735b6718ba6ef4fb41b794": "__unstable__ERC20Owned", - "5d07d72245331e4275c204db282ad3900383f778": "Ownable", - "5d26e032a554805a01aca59579417663de70f966": "TimelockController", - "63a2430e318736b284bccc524d6c619d329ce419": "ECDSA", - "2cf03d8347d7129c4de359dcaa4f0dc40f88684a": "EIP712", - "92215334770433b2add7c67ac51233591f7fe922": "ERC20Permit", - "e2f97eec1c3991924b7b1456696f87048be7d783": "IERC20Permit", - "f35d0cf20e1373848e42b706d4d6aa9fd46988c2": "ERC165", - "c8909db38edab0286eb1e83f45baad9b70ed6340": "ERC165Checker", - "dbf020d120894cffa01451b8caa8cac408122c47": "ERC1820Implementer", - "a1815b90bd687d3a96e0d4cc57bc8aa5acc126a9": "SafeMath", - "1eee0a26498f2e503cda12d7f0a3631e9256d11f": "AddressImpl", - "64ba98e0a7a3462e9a936a0744ed9d1f27f4efe2": "BadBeaconNoImpl", - "49252afe482c957eb4d0d4e1f61a70fae4534bbe": "BadBeaconNotContract", - "f21645963792a804fe46d24eae733ced9792325e": "ClonesMock", - "c312288ff11bbaa9f288b73efa4e89905b4b3e0c": "DummyImplementation", - "fba59a0ad823b65925d38fba35a9fb0acba4f11c": "EIP712External", - "3f41e938116aa300aad2aefadfbcaa6193c490ef": "ERC165CheckerMock", - "f5bc328483f38e40a88c2830fc7d26319aa9b5fb": "ERC20PermitMock", - "02d7d727adc8cb0dbc83f8e1803c172a0990296f": "ERC777Mock", - "7cdf827fe3a903fbcaa418bad074950ae9f8c8d2": "ERC777SenderRecipientMock", - "3a93528b96d70af4e872192f05dfc7ee25419517": "EnumerableMapMock", - "c68710ed96a182101e1024d3e1aa91cfd2a636d2": "SafeMathMock", - "5a91c81404f840fd7f9054fe06f3a1c5036d4343": "PaymentSplitter", - "e7ac2394f80e32ef8d86823bf3ab56e94543490f": "Escrow", - "46e54ddada38f2432fbbd672068ebc144fba6137": "RefundEscrow", - "222751ccf88f680c3c75ab80cfb80797d45b2651": "ERC20PresetFixedSupply", - "1a1081be6939302bfc77c7b3be6c5f874118297f": "ERC777PresetFixedSupply", - "ce7db6d05e7868e70e75528f1c0fbd9297bc6fcf": "BeaconProxy", - "4249e310139fbc623392ee676281a60d143c16da": "Clones", - "869d95b3589c7fa6b2ecb1dfeb9008c463c267bf": "IBeacon", - "0fbaee3e2bef583ef42cb3ed731b3e40b68aea33": "Initializable", - "3785f5c4f386559127baa5a185d2ec13ad4c53af": "Proxy", - "1c570dba696f08a170e92f985d839dbe0ecb4a91": "ProxyAdmin", - "a7386fcd820a2c66235bb3e835a30b553545812f": "TransparentUpgradeableProxy", - "870cdbd1d2ddaf132c3a1a6a1d48d6ea004b123a": "UpgradeableBeacon", - "9ce86a848977d6ebddddd293ea9e81836c488c6a": "UpgradeableProxy", - "3160f17274036d6719cd64c436b4167104e70bc1": "ERC1155", - "1c6dbf08eb3ea12cf8a55ba920f32971bf194e89": "ERC1155Pausable", - "b5611144434fe88f4b7fa065d3fe437178a770ce": "ERC1155Receiver", - "1c7854ebfeea3b6b4ada23aa0dec5cdd142d5524": "ERC20", - "54480a412d33bc4808a6f4626c12a186086c236b": "ERC20Capped", - "06ea9a75c96d6774e79699e85d93b2b2daf7e701": "ERC20Snapshot", - "7042e55c509ff3cbe7c149238e29fed880359381": "TokenTimelock", - "6146ecf60a2e9e538355b19cf9095a9723197adc": "ERC721", - "7e232aaf85bb00c9401b300972a3f6322faed39d": "IERC721", - "9fa1eca3807f9186d44ae941020d506dfe551adc": "ERC777", - "041cd09ad5b7832a451916a4eab7c14b9157f9bb": "Address", - "1c6caa372c1211fa570af1576c88d16cacb426c0": "Create2", - "cafd568a2be123baff9a85ba0d347a428fb5777e": "EnumerableMap", - "1690dfe17f8334a2a88203427ce601d9c6b25760": "EnumerableSet", - "3246d2bfdfc6dd0197a0fe1497632d66ae05fd58": "Pausable", - "b12a995aa8744db27ab0e367133c4cf01eb3a9de": "Strings", - "1dca314c082a2d86c4b13fc44d00ed3caf84660d": "GSNRecipientERC20Fee", - "507897800a5e8a472a426aebecc8e766854e20cd": "__unstable__ERC20Owned", - "e7f6d7ee5a886c88c0052fc24f06e83a3f3a08d1": "Ownable", - "b1eaec929a4492a5ab9c3ee0941f4d0ad4dae002": "TimelockController", - "050c8ca6f92fe1485057a1faa1293ac23af4e9ec": "EIP712", - "4fd1e1d5762c465c2779bb5062ab69c1c15df7b6": "ERC20Permit", - "8ebfa908d5afc1a43d6c42fb85da4d675ad2acaa": "ERC165", - "69db7dc4835bf134acaadee0aa2d3f51ab9e655b": "EIP712External", - "91dc025deeeb2e4dead2db739f04e2d00619a818": "ERC20PermitMock", - "f37b58e417ed7f71db679b2c2fa5c0ce14226133": "ERC777Mock", - "b052abe16f942be8a710a608a09f437476b8ca03": "PaymentSplitter", - "47f3ee26c503ec9c706f580520db5e78af9aeeef": "RefundEscrow", - "8a505d49e69fe65120a99979dbdca39b8efe22f5": "ERC20PresetFixedSupply", - "ea8b53fd468c496848babd2a0e108b002c94c3d7": "ERC777PresetFixedSupply", - "2bc90d97df0f2ee6653f0237130bdf57ca2437ab": "BeaconProxy", - "f1f156b98ccda98d19e894c141bc0317cc5eb9c0": "TransparentUpgradeableProxy", - "1ae15cdffe0ca9340174ae68cb8d2892fe831bc5": "UpgradeableBeacon", - "1c2989c2b4cad10ff8b0ed4f7cffce37d3f7a6dd": "UpgradeableProxy", - "51ad04dc5cdffc68238a1696f78d7672555ec7dd": "ERC1155", - "48ba59afc22a61b178aba0199a30340b43f9ba62": "ERC1155Receiver", - "7cf1a0c8c25eaa2edbfccc040d2942fbb7d7596e": "ERC20", - "12d077e4475d8cc3dd032a10fb2f97138c5c2bf4": "ERC20Capped", - "8846bad470e1c4a2177e3247c29c6604a2307157": "TokenTimelock", - "171ab805afaa2a3b05e4bdba9d9a8271c77db63a": "ERC721", - "a908082bdc2115f43aabea87e8c2897833bfda29": "ERC777", - "0424544a512fcdda8b090610916a0f7c5d375387": "Pausable", - "1321258244d9c40eff5a48ed1ecb88b2577a56b7": "ERC721", - "a0a26ed94d63bffb8f31246bdfce9867514cd672": "ERC721", - "b01a301a7d54e6d284e847eb9d9e24076112808c": "TimelockController", - "69d0e361a511bf3103d25a77dbe77048ee5e0115": "TimelockController", - "ef9cee4fc16302d9c2f27edb367db294c1b81f5f": "IAccessControl", - "dab86c163c575d30473cb3a5c0624b44334efc12": "AccessControl", - "2207123df93140cd294823148a2558be596e6495": "IAccessControlEnumerable", - "abbe8b6df781ca55c069fd98e85f817213835c6d": "AccessControlEnumerable", - "9565576e12fc40a6a8a79f663a4899ef55e80c5e": "PaymentSplitter", - "92411b430030f18396dc798bcf7d29c2d53b68eb": "TimelockController", - "259338440d397d3da2a4bf44649d51cc646c5aa0": "ERC2771Context", - "566d42bf0d67adb04c1e73658ef5802b61702c97": "MinimalForwarder", - "253248bcf8aaa75c515f000d674e69e3ad2dc67c": "AccessControlEnumerableMock", - "868d87ef0ff053e2007b9e9180f2d5daede6491a": "ClonesMock", - "e4ddf77999bc8a4befcd1d9428b77ec0156f1c82": "EIP712External", - "56a0750afc35891ff98a07f7c36aecbb2103c32e": "ERC1155ReceiverMock", - "8ac6ce7dd83fe6abaaea9e149de7fab285cb6f76": "ERC165MissingData", - "b33e2d44585e75d38aa904a4e210baf4350189da": "ERC165Mock", - "e89f235cccbc06e2bac7c41f6da38fd77d4de644": "ERC165StorageMock", - "8ab8d35fe19014b9066aa8ffc249623257072208": "ERC20DecimalsMock", - "67b9f92bb0f7ef4c509fd6db84af16f6a1dc95f8": "ERC20PermitMock", - "417a78c41729dfd05ac2baac8e6678dbb95f5a05": "ERC2771ContextMock", - "4e57221ebf4782201f0d1ca5b851e5bb12ec2b8b": "ERC721BurnableMock", - "e4bb74aec903fc8db95fad4c8192ff627923d2e9": "ERC721EnumerableMock", - "cef3ef778dd17371bf88d3a20cbdcc3c71298afa": "ERC721Mock", - "9e5a3684f1b44a48c73787f823a3d7898f922753": "ERC721PausableMock", - "947534cf69fa1bf1babb1d89e68fa2435d73f59b": "ERC721ReceiverMock", - "6fbee4f33e2aa55d513022b4b6629ef896f52db1": "ERC721URIStorageMock", - "d955f8e424d0b8531fcec97fd70d2eefa06daf04": "StringsMock", - "bf6d216501296a25f572b36b4ececf1e7f752b8e": "Clones", - "3caba018d8b811d7a9487df761635928bc7caf3f": "ERC1967Proxy", - "03f4e4dc310c6685debfa53240c8029d66d6a9d5": "TransparentUpgradeableProxy", - "db88ad8eb489e2e93a76e7f0d0843f442bb3e802": "Initializable", - "fcafd1a2198e83e29448c4961babe00d479a259e": "PullPayment", - "06a7146060ceeb791b34296ac3859ddf9924c8d9": "ERC1155", - "fc0e45a63f6c27366e72fba2e93045493a1d0fcc": "ERC1155PresetMinterPauser", - "991da8c1a4e38a69803a920b2ba6f04f3534ba90": "ERC1155Receiver", - "32f4baf24d04431b9f31d7fffbc14873db05910c": "ERC20", - "b8948a765f56a1cfae8a3b92033d3a7f583d266f": "ERC20Burnable", - "3ed786a6529d43a95101022d405252fbd955f7f6": "ERC20Capped", - "975df6aa796d442e90665e8639659a8da4d06175": "ERC20Snapshot", - "d6d1fc2391215c66cbe050ddb24066c54a8ec13f": "ERC20PresetMinterPauser", - "b923239c1bd5ce64cdd82b8a78585e70ce09a0b5": "SafeERC20", - "3cc2d212711b9aed654821263900fe101441e08e": "TokenTimelock", - "ade76f270c6838a189583a70457b1f34f547fa89": "ERC721", - "e32fa6056318ff4036b6b34ae3631d92cc2ea489": "ERC721Enumerable", - "174c62a690020e2cb1b08c2ed4ebf665a78e3bd9": "ERC721URIStorage", - "387defc33a85bd87dc92cf3e1b956407169ec624": "ERC721PresetMinterPauserAutoId", - "8a77655c684246218b9a58702a073110c1960c2a": "ERC777", - "fffccb2e4aaddd018bf1f74f424764d0d8f3ddcb": "Context", - "2a02aed9ef802a8544d18afe1df202a0fc9f22fc": "Counters", - "64e303670df935fe5d0a7e7bd932ae8850f6f201": "Strings", - "b1f1fd21fabeee2b3f8d781a3f7b61d2da0fa499": "ECDSA", - "53aa499a4c694653ffb7ad64295f7564c8d25f4e": "EIP712", - "fef23c7cba2fd6827ad096a963156b7122a5714d": "Escrow", - "c52d6d7307f32769c227bc90ff35f7ed9484a418": "RefundEscrow", - "27eb537f38f4e78bf50d746739387234f230a4db": "ERC165", - "e00b58223b3f1aebcc28924cdbf577f342709c68": "ERC165Checker", - "8ab170369493cd6ef28c81f35ec9fb0597632270": "ERC165Storage", - "01bd41c8fc215254e0fccc0f1937381becb83c93": "ERC1820Implementer", - "725b5b6b3cb30d120bdc97b353b214d7e0d5457d": "SafeCast", - "c3556d686a5da76a47d19d4e3c1aa5d53cc96011": "SafeMath", - "31f7a9169859955645a6b3b01225caa339e68a92": "SignedSafeMath", - "50b36c99d71a6f1e5bc74eb37305fb633ca745b1": "EnumerableMap", - "1eeccb2aba20ae782f788b591c1c73247a2f5710": "AccessControl", - "0d100f93955e406b8f4c64256fe2fac9f58feaa3": "TimelockController", - "03ad79036f06316b924f8e839e05f9f7418203d9": "IERC1271", - "32778f5dea953b5c71cda22b9034d3a99c80a260": "IERC3156FlashBorrower", - "7a7395520740c3e9ca99f25ac256918525d6947b": "IERC3156FlashLender", - "7b42fc0929549dded5a794ba5cbb6234482d5ae5": "AccessControlEnumerableMock", - "105af4b6cb195a355234adb0f75e29dc35fbfe58": "AccessControlMock", - "e69690c196421663cbeb3e40e3ec80db2419b7f8": "ERC1271WalletMock", - "400c8eb934cb0cc695a18678a58f974169150eeb": "ERC3156FlashBorrowerMock", - "d7d5ac3eeb3537f6007674f03f33da91b2a99606": "ERC20FlashMintMock", - "760696c2eddc1f804ccdd6ad139de35e315a8f5a": "ERC721Mock", - "1aed59d47401d84a7d52819e97f7efbb125604bd": "ERC777Mock", - "d4d4dc6d063c378fe8df00eba9ea1d3da940c6df": "MulticallTest", - "d51ce27019d1ba250fe0737caab014f9c51aefd3": "MulticallTokenMock", - "5ceef95f1a2229c02c5f838080b549fefa9d185e": "SignatureCheckerMock", - "d9969b56a2b7a0b53970600d4563508c1ca509e6": "StorageSlotMock", - "1859856bc5a07e18d8967ec00b4d89cd6ea11e0a": "UUPSUpgradeableMock", - "02306349e880c95b317f34313bf0d335bcb20711": "UUPSUpgradeableUnsafeMock", - "9d3be3ef2fe57b5f8345d6bb0b34500b94b3039f": "UUPSUpgradeableBrokenMock", - "ad0004727dde87f3bf6a518a02ccc9475c378edd": "ERC1967Proxy", - "e2bf5ece630b73ede3fa56a42a625ff79cf7a07b": "ERC1967Upgrade", - "775dad710f41a2629d9d5506682c1cd574eae0a6": "BeaconProxy", - "f1865b420ea4dee35a07e61461aa012d55131f33": "TransparentUpgradeableProxy", - "a1b5157f3148bf64bed9182b4d0617a8eadfd581": "UUPSUpgradeable", - "9d146a9046589ef5728295f53cb3fc9209f6f3e9": "ERC20", - "e3f871942e9365cc12cdb31ac4196e415579b5af": "IERC20Metadata", - "1b85965b7436f201b003472d4afba8ef1e2f0707": "ERC20FlashMint", - "2207444dc8582d69d9546a2434504f679dc50d9c": "ERC20Permit", - "6e83d64273b978f98df3e2379c388010ec2860f4": "IERC20Permit", - "1751dd56c4410e19af4980136ef1ba8e54000493": "ERC721", - "5714897c18afeeddd7dbe406d9878e22f5d751d1": "ERC777", - "63d1095e1fb56da130b614eeaa63f4803f99f7e5": "Multicall", - "fe5963116e1e943c56b62faf6875a3f8482cfe84": "StorageSlot", - "b06559b6a9527a4db570993b98327d1e16908ed2": "ECDSA", - "f6325fbfc5e1ff1f03992fba565321bbc17ed789": "SignatureChecker", - "6a11687f7b7fc1433b269fd4abac331c66fa8a77": "ERC1820Implementer", - "6eb9cd105fa9d0262ed7a11160b76381b39cebd5": "IERC1820Registry", - "e91a667e7a573e6eea5d853b468e8f3d60d81889": "EnumerableSet", - "5c61094952cd50d3802c31177357efd5d8964614": "IAccessControl", - "8694d4f12fbafeb16850afc3464c06ea0a548a0a": "AccessControl", - "28331601ee481fd4a956fdbe388c3abf54f3b65b": "IAccessControlEnumerable", - "64d6a3bb174631f086b16b5e8486a5f794d976b7": "AccessControlEnumerable", - "4d7c63c045201a4bb4b072b90c0ccb7e3da4f871": "Ownable", - "42b68abf0eec947d970be6ed8863108313d0af33": "PaymentSplitter", - "c1f9217c77f35c660dfb3d88d0406508c56488a6": "TimelockController", - "bc8959ed38c71118622ffefeebc4c039b892709b": "IERC1271", - "0b811309fd111891492fcc5d96a2cb3acd8d72e9": "IERC3156FlashLender", - "b6f84fda4cb8fdbaa97a02726fa37281f78e5c91": "ERC2771Context", - "42603ef9257bbe665bb87cffe0b376d7b67712ab": "MinimalForwarder", - "c2aec4893bc9a14ca843763da02fb355261d8a85": "AddressImpl", - "aa59563d28f55355429620d46a95f62807bf714c": "ArraysImpl", - "129786c0f640a54e1262bd0fa09c0402fa4f5310": "BadBeaconNoImpl", - "c7276d5682c391177c65742657733021762fde2e": "BitMapMock", - "da0acb035f001bc47226ca65e7805071ebcbc590": "ClashingImplementation", - "9a62fc52dfa77cec1a4fb20a17dc85c2b00165b0": "ClonesMock", - "e319f874c429173e1b901ab7fc2014f7acc17b54": "ContextMockCaller", - "46564e62cbf056df3d249a990973bdb709e83c2b": "CountersImpl", - "f89165a7467e5e4a909e2b013e8383263d133e18": "Create2Impl", - "5654add772b6dac7815ecc69eeb4c6da58f6ce7c": "Impl", - "9db5258aacf562685ca737ca2de3e42ab6d55a00": "DummyImplementation", - "e2170d2050cc953a0791202b11eb01c352a015b3": "DummyImplementationV2", - "75a5093a9fb3b7de904b13481d04f0570bf5a6ff": "EIP712External", - "369690b5196bce6039aaec5397827ac325a7b4f5": "ERC1155BurnableMock", - "ffc5443dbc5dd5285e2ded467043517e152a75cc": "ERC1155Mock", - "b3a1f1f5c11bb12f910ba0e8d951451eae1d0292": "ERC1155PausableMock", - "71fec413985069608d5a44630c2fdbd3b8418ccd": "ERC1155ReceiverMock", - "5cf44c06a1081d98ecd7e65cc1aae83995055909": "ERC1155SupplyMock", - "ad0b6a02674048a5e3a3d4d4a551934a2c897c74": "SupportsInterfaceWithLookupMock", - "070505611a17dcef9932ae5eb779350f79698235": "ERC165InterfacesSupported", - "93bb8c99dfe0581125332fb3ebd0e3955144df3e": "ERC165NotSupported", - "6b299c538b2c135312b0c72d8af712c821f831a2": "ERC165Mock", - "8fee474311bd35767aa7afb389d6e4799eb5b8cf": "ERC20BurnableMock", - "bf3af764a6c36127b5ff5e46f045291de91933ec": "ERC20CappedMock", - "21c4be0176e151069878b58aae5a1d165223e6ce": "ERC20DecimalsMock", - "cd2d838c0fb41e79aae2433e909abc6c0e8122bf": "ERC20FlashMintMock", - "f83b56148b0339522b662f03900cff6983c51850": "ERC20Mock", - "e28bdd635291e4e5aefef3245e353609f1515968": "ERC20PausableMock", - "9b65c5d1a96a1e41eb6182254c051eece2af5c54": "ERC20PermitMock", - "2ba8af8608e5448e4715cda8e571bcc6cfd48963": "ERC20VotesCompMock", - "0ab46f9bd08b5723b1d914e41725574517a12ad6": "ERC20VotesMock", - "b1c70a189722a29fdab6b49e27b040472f5a2e16": "ERC20WrapperMock", - "62a9a8199169e0de7117864ee9d256bb4b52083e": "ERC2771ContextMock", - "ae5f39a87a79311e6e4ad375b3ade2b5e03131ea": "ERC3156FlashBorrowerMock", - "e09d1048186c05d41f0015ba69aa70a86b243c00": "ERC721BurnableMock", - "7fae99c0b5530d32609982b4d533509b8674f0ee": "ERC721EnumerableMock", - "9578913f5871c5e1567c53da7d5675d75dc92747": "ERC721Mock", - "449cd793d9e4639b31812292d0319b59b0ca8e55": "ERC721PausableMock", - "b10cef059262dfabaeade8ff51fd80d2aaba7537": "ERC721ReceiverMock", - "85c61f773cca6fa57c335796e1ca1f5b98ea1485": "ERC721URIStorageMock", - "75e9ad33d99c316414a0d3506cab37488b722728": "ERC777Mock", - "2af1eabb238c84878673e589fd69defacb92e040": "ERC777SenderRecipientMock", - "4ce3c0c2f9d135ac50c7075651c9b930daecd603": "EnumerableMapMock", - "867d1f1aa9db24d77f5ecb83a38eb4a60b09dce9": "EtherReceiverMock", - "a8e715f4952f7265ec539aba50e8eea7a45f924e": "InitializableMock", - "e67f151ab39236b0419d7e8b0a583c10e549efb3": "MathMock", - "1f337a2bbb0e83495566c6cff4791828463f973c": "MerkleProofWrapper", - "c02597d82e217259e7d73000bd1f2789d1c7cd61": "MulticallTest", - "517131a8a0737e26e7be43853b9c24ff6a20552d": "MulticallTokenMock", - "7fadf3b05e77e38e5049e165344022d1e624b617": "SampleHuman", - "769bdb6cddb7c34bb955535a6f0f77f49e98f292": "SampleMother", - "a2b8b3961965b90f6c7b4ecaa477bd0d77f8c7d7": "SampleGramps", - "504d033dfcae64d76986dcb5cb8c5be4d1dded4d": "SampleFather", - "86e3593fee13c15d567cc136bacdca20ea1e6101": "SampleChild", - "cb6a1051fd2f5bc747c3f773fc3af72c484ab3a7": "OwnableMock", - "24cf84f54a22c4a772fe74d9f72853640e102262": "PausableMock", - "1167e7738408a66d3897f34aeef40c9ef438686e": "PullPaymentMock", - "a8fac5d6e42c033f8c2372dcb6ccdcfd37cc1437": "ReentrancyAttack", - "7b976c578c5adaf74bc18e387c7e12147609b8a7": "ReentrancyMock", - "e66dfe8c2da2a470c76b3d0a0cfe5e7a7580de9a": "Implementation1", - "a1226699bd48b90ff377b53c4a70f27c25a9a16b": "Implementation2", - "c9e618dc47d2ac5cc6dbce47d9b0130d4cc9377e": "Implementation3", - "3ce30a36b36ec42b787dd5be03a12341207a7fa6": "Implementation4", - "f29c76324fd21e33388b40bd77ace0ef9c5c0d41": "SafeCastMock", - "2689010b084a75537c8e662d0d4c1c82460a7661": "ERC20ReturnFalseMock", - "acc2c209743671f9c4e44c829247831bf350a0a0": "ERC20ReturnTrueMock", - "74fd9057d3dffcddeae355918b7644eaa8ef7244": "ERC20NoReturnMock", - "86229693a21d889433acfa056ae7db96ba4a6cef": "SafeERC20Wrapper", - "4823c60f1f994ca554eea1ecbfa81e5b83b5d561": "SafeMathMock", - "97db478067ab766d3fa0758aca22823b38c81327": "SignatureCheckerMock", - "e826f1b32cee3777ae3a3d0bef3cd8c20ac9cf7d": "MigratableMockV1", - "2e635423850dc52ed5a3b9afdec568a0519c6402": "MigratableMockV2", - "27932bcd6aeb679027157cf623195bd425b3d85b": "MigratableMockV3", - "2786cb54d7147fd4c067acd9bcd2ccb9cc57dbd8": "StorageSlotMock", - "b17d5f234e99981e2caad9c0f56ffaa53ad3e125": "StringsMock", - "5df1b89723d0bdcc5d517d4317b9c32184247a15": "UUPSUpgradeableBrokenMock", - "d90c57be785b0a21161e20792e434763a5617e42": "Clones", - "1a59f5b5a1457a6db4f0fde03cb7ae600702f205": "ERC1967Upgrade", - "3fb535ddf3bc10f6ee9803c6d0be51c32f15947c": "Proxy", - "dd95705feafaba2f8cf136c536916bc6e15679ce": "ProxyAdmin", - "4a8ef6e66df0839cd7aaab06e9e5101d0b427ab3": "TransparentUpgradeableProxy", - "04a6f67acb954ffe770a8a034c7b342ba53d470d": "Initializable", - "dc77065c6d2328495a7a5373a4384cdfa419b536": "UUPSUpgradeable", - "52cabe02daf5bc8b106eca66daf0d7a2af4a1c28": "Pausable", - "e087c5b92178714f1e90fa95c2eb7d96e584b267": "PullPayment", - "362780bb1082d2ee05b02fbf3586f2efdf55787d": "ReentrancyGuard", - "e0b83559902f4dbc79b69b31b5d5a55566f0a4d8": "ERC1155", - "26a7097a902c5d0ec06e9afe7a1b16e919e04f4d": "IERC1155", - "f7f86cc447e330c0f2fe6c75893393527f9f0b75": "IERC1155Receiver", - "dcc175b857019b96cc84b4b554e4078167fd8061": "ERC1155Burnable", - "6dbb111b0880293ce2d796b20c6a84f2b39b537d": "ERC1155Pausable", - "6c4f2cc4be0924e6b4ad2a9b3c46efb8054335ca": "ERC1155Supply", - "0ba967a226fd02a14a5e8da8780b72a207f642df": "ERC1155PresetMinterPauser", - "8f6be89b0ce95a5a8507d0473dd6bdc86fc05893": "ERC1155Holder", - "3eed534c118e1b55d8807ccdace65018f8e6cbfd": "ERC1155Receiver", - "5861a2fbfab58b39cbd32dfc63795083f43d1e65": "ERC20", - "eefc9e89d017a91a4ce1f87accc52538bb130e97": "IERC20", - "36c08003131ccd3493f61caa424d4ef45e40abef": "ERC20Burnable", - "d577838d7d5ecc6f5fca04d568956aaf48c13597": "ERC20Capped", - "4f57398877163b33c21ce35e9e43b94b72d943ab": "ERC20FlashMint", - "4a726b7b47a1ef62e108e4eabde5e35a24fd062e": "ERC20Pausable", - "aa54946245c2f1991404df914c8a529eece3f57d": "ERC20Snapshot", - "370ff7cbbbcefc8776065285a30cda977191d936": "ERC20Votes", - "6b887b5359c94e61da10ae9dbc82502becb4b45f": "ERC20VotesComp", - "a7bc491c206021ef00c4c58e34737ed6319ccf6e": "ERC20Wrapper", - "273d56d9e427a9c91ac82db0a87ecf5d1d4da973": "ERC20Permit", - "1d200e39cf5dd9bd315f3461c1a664558662d5e8": "IERC20Permit", - "d6bac8d6f8bff3ba4a2c45d3cf23101a81a093b3": "ERC20PresetMinterPauser", - "f1eefb4a9491a1ca4f3c88a9d8518d110f7ab8e8": "SafeERC20", - "d53bbb9fbcdf3ed1c0ff29350e7c813dabf9a5ac": "TokenTimelock", - "2caaed78e7c5899dfdfdc82812a31048d90f11d7": "ERC721", - "7899b986a2072f4ac72b129375c7eac5eee84c3e": "IERC721", - "15cb97070ec4da6593205c442a6fcae406e7af9a": "IERC721Receiver", - "ef9f288af616034ca45cbbfb70926273848a17c3": "ERC721Enumerable", - "06ee92df7f5d22b92b723b7fa47a7163a8bee826": "ERC721Pausable", - "29e0c18d75d521f4530bfd591cfea713a1f49e0c": "ERC721URIStorage", - "8f3477480c38a4dfda7d4192ea80511fd8eb063d": "IERC721Enumerable", - "7a4d553b1a0193fcf9fd4d9468bb5700c27db42b": "IERC721Metadata", - "f3c528e97bbb7f9aac27c721e2d17cbc75be7ce5": "ERC721PresetMinterPauserAutoId", - "0093e17405d73820432e8da360f33ddc23308530": "ERC721Holder", - "ec44444770bfb356bacc955d93d5237656af1390": "ERC777", - "e0bfb77c486769ad6acb629279feaf28455cccc4": "IERC777", - "14955bd29186d48ce191852b38f761ce1622fef1": "Address", - "5625fde14370990aa8d4d094ba822a866b36fbd3": "Arrays", - "4ac4dc8857640e049508901478e37e13576e9925": "Context", - "55cf39dc3f389da17665b6cff3c6b4c47ee5ae5f": "Counters", - "61ca214711b37f23de183403ef96eba568654e74": "Create2", - "abe82d145668c3c90d148f2ca2971ea0cdd3c9ed": "Multicall", - "3965655fb49d3d12cb7b48155c684401673fbb96": "Strings", - "db454d7154deefdcc0d1dea7d458b572c4a0a67b": "ECDSA", - "4fea412076493cc56d86c5296289f1ccc4bd2638": "MerkleProof", - "8c92fa340338deb4146af78038d2f8195df99ed0": "SignatureChecker", - "a94f50827517d3595fb4ea61c7357ef87858dd74": "EIP712", - "2de350f849494c8ac4872728cd696d77f879efea": "Escrow", - "fc0669b213fd21fcbf82b48b6a5834a0e8e4797f": "RefundEscrow", - "ffbe0135815bb9d107067eac054384ce9c559853": "ERC165Checker", - "6843b3e0971a80f76c78626e5fbd5816449c4891": "ERC1820Implementer", - "3ab18388a1564c59b08f34c40e49fba6ed2030fa": "IERC1820Registry", - "e4a7521c8dfccec8ef656905b09facaee8dfdb01": "Math", - "69e808bc327ca30cce6784a56944f386502da108": "SafeCast", - "e3d19a417652f39488237ae86f633fc55f37ddd8": "SafeMath", - "61d0bee3d53d397afc63ceb8f5aebb843ad4f58c": "BitMaps", - "f4e98a17d92c50528ac5512cf6d19c28381a671a": "EnumerableMap", - "034b7e7cc2490688bf19079ab52aca584c622a2d": "EnumerableSet", - "3ff259364b811ce55fbaf0b7d6e145fe32532877": "AccessControl", - "982c66e73b9fd3c148d7f157a38fb08a074922a9": "AccessControlEnumerable", - "47e570ba4dfb58e4d36d325ca74008a1ac3a25ef": "IAccessControl", - "d78d847dd07ed931c12f77b0f7626eb4e0100745": "IAccessControlEnumerable", - "1f9a441bb3f9991cf0d8db4a0f7338155dc1135e": "Governor", - "c802a401fe1793af47cb8b418684023cd4d5361b": "IGovernor", - "5fd29ee0161a032ec9a5e86f2d8cd71f53bc6ed1": "GovernorCompatibilityBravo", - "0d8b9df97940d08bb323a575ef0d7060676ed260": "IGovernorCompatibilityBravo", - "54543b187e4d9f29dc31c819093f48d9969d7d8a": "GovernorCountingSimple", - "dae38923cfdcb3de8c354a88b7b13fc2ecc26e12": "GovernorProposalThreshold", - "946bb0a46b5c75167f052528a401a12768de1f45": "ICompoundTimelock", - "6d6fc8587f4cc604ecc04de3ee0f8377c88c2e38": "GovernorTimelockCompound", - "8a58931413fa94e76f02d330097fcfa9c1c48bd9": "GovernorTimelockControl", - "2eb8af93a3b36609392bf643c72a9d03f0a6f398": "GovernorVotes", - "fb68a921152337bcb1e01376223f4c55de026197": "GovernorVotesComp", - "f5c1995c54bbbda556c0b279624eb88f03cdea3f": "GovernorVotesQuorumFraction", - "bce8f84c0ec1c03925f2478e3a3fccb33f60f35e": "IGovernorTimelock", - "9bd35ec7f53dbd0a4a87d1a93c424f09916497f6": "IERC1363", - "898275960fb383e8850df71e6e26dc86a5af34ee": "IERC1363Receiver", - "8e978b1851c28780339fc78c1095ef2e9844ee55": "IERC1363Spender", - "8794d872af0a539cdb093481e698677eff5e2745": "IERC2981", - "e72cca0e88cb8abd72845272eb6c90402063a578": "IERC2612", - "2bfb18e3d399cff65ab9b803c1e058868d26387a": "ERC2771Context", - "88fb8242a3f1c90475facda5a92901c903676ce3": "ECDSAMock", - "339f780618b8638444d16c9e43ee94e0dedbd4d8": "EnumerableBytes32SetMock", - "a32259aa2046b09ffc5dc8b1a89cd3bbdf4163a1": "EnumerableAddressSetMock", - "47212bb1a4a0679b281ef4d5d1ff20b1d8e152e4": "EnumerableUintSetMock", - "6892b367ba9dbfecaf18e5ec15291d334a2a67a2": "GovernorCompMock", - "fa5c7c49cb08c80190788a5f66c38869fae7ae51": "GovernorCompatibilityBravoMock", - "aa27e63eb1eda7556b559ae08ed141575a001370": "GovernorMock", - "bc7e434e2afd6cea41ec96110028e63c2c55db42": "GovernorTimelockCompoundMock", - "d8b5430cf0a55144e3ebfb8a06f882614dbb7718": "GovernorTimelockControlMock", - "cce92ebddff5d610dca62d66c72c9cb83c62700f": "TimersBlockNumberImpl", - "83786236d97273dfc27838a31c523b1d362bf105": "TimersTimestampImpl", - "8a04dcf69374c0eb397038120d6f3efdcc2ffd76": "CompTimelock", - "60dfa68371a6272fc626fd9aae7e556621402067": "ERC1155", - "f0766528233a6368c8539a4627387175feb32b94": "ERC20", - "91e9f927a20d0de07df4ea6e3c2060bcca716ea3": "ERC20FlashMint", - "b655b4fbbb49760010632cc8d0fc006b15f0c4ee": "ERC20Votes", - "e92b2feb6b8539d301c2c4c66b91fdf11ab3a691": "ERC721", - "1fde194446c5afd545cc902213afbec2c87a46bd": "Address", - "6ced0927362ad42d906b44d8616661c2da119c84": "Timers", - "14c1e71a34bcc6538f8de689211c51c0ec0a8d11": "ECDSA", - "b590e553b7df8030182c6ecb4721a9c5dad81c98": "SignatureChecker", - "eebebdb79c1b3e1f8ffcff988f929b6dc1eda7dc": "ERC165Checker", - "9f15868ec22f5af898a458488bc83dfe12bf8817": "Math", - "2d212d3ead2002233febe7e68c6851cb66449d97": "BitMaps", - "1896e438b057c94ccba383036112041dd7cbad62": "EnumerableSet", - "898b9a1a1bb87f2ca186905c385d3bca567eebb7": "TimelockController", - "2219a93edab7ad1455f89d93bc04bfd6799232a1": "UUPSUpgradeable", - "8b6ce0d7b4ad592774afeadd155078d4027ab95a": "ERC1155SupplyMock", - "dba518f42d643a2286c0bf8eacd3613c53d85ca4": "ERC1155Supply", - "a99091ffa64d372a750e960e401381eb95593793": "AccessControl", - "27faee4bc796dc15628234c0aff9f28e6a93eda9": "AccessControlEnumerable", - "bad3e51ef939deac2032e71376b598cdbfa12b14": "Ownable", - "5492770f5c3d20f1b82762f03356ef4fd6995126": "PaymentSplitter", - "c7fbf0739abbc9f1f60596b280bbd07bb4390681": "VestingWallet", - "f258a176329f89585b497b54a6c49c51dec02479": "Governor", - "13ef8f5e7fef9d50c289b20dc3b1ee35d9fc08a5": "IGovernor", - "84f5273d82b316b964e0094fedc4790215ae3f4a": "GovernorCompatibilityBravo", - "828f00113b4c019ae42020b90286d6c0d902bc08": "IGovernorCompatibilityBravo", - "d60a1b5753981b2f04d1b3e8fe01856bca55d895": "GovernorCountingSimple", - "7b5312b7e518b77b9ca1807058090a7f27908f75": "GovernorProposalThreshold", - "5caea9b7191c8bf8fe302e98f69d61efe4a626cf": "GovernorSettings", - "392943039111895161ca27cf1884863f7f9a96b9": "GovernorTimelockCompound", - "bc5e88dd5c3e739eea0b8f33568044dd0a04abf7": "ECDSAMock", - "96506e6a865793695afaa9ba6149baf8acca2f1c": "GovernorCompMock", - "920beda23e95dc26939587a933619dfae19492c2": "GovernorCompatibilityBravoMock", - "00d7d368e9e122f5d5162e42c6247685e5c94a7a": "GovernorMock", - "6ba6c91c65d91381889a327f62e600e48bab91b5": "GovernorTimelockCompoundMock", - "22674de544356a14664077d9598afc866e1e08d3": "GovernorTimelockControlMock", - "308abb0377baa296b93206b78e0f17a7eacd5dd0": "MerkleProofWrapper", - "d594afd3a1d8065b0999fab33b33ee98afbb1a9e": "MyGovernor1", - "a6e00d1c93dca6635da940320b7ca27b97aac5a9": "MyGovernor2", - "73feea0db74075f5757321a99d1602d8255eb17f": "MyGovernor", - "514e3afefce9342035a181c08c0ec2ee4ea03640": "ReentrancyGuard", - "d324c57106e8a29e644543f66c6466102c4cff4d": "ERC1155", - "cdcb56b1b4f8d6c2baa0aad1d5d293975be3b6b6": "ERC1155Supply", - "642fb791ce5f30f714a33b8eadf51e3cc183f353": "ERC20Votes", - "5ea292ebdd2f061e9379b500f2fceba49ef00761": "ERC721", - "61ac98a69d3dfd3c15232499e2315581004d8522": "ECDSA", - "461520eae9f1d49bd16c01cdd05800f72633691d": "MerkleProof", - "876796dde039fc6fe4b5d43d9ca6e411af135800": "EIP712", - "81903dc774a37209651c9c2e0b2ba85b56f381f1": "InitializableMock", - "a0ec129eecdccb3a692f9be3661a19f39d1312e2": "ConstructorInitializableMock", - "f0b9b893ca9aad442d6d92dca525a1c5332c474b": "SampleHuman", - "1c97276a55c8d0090fa15d4b99d27deaa955e3b7": "SampleMother", - "26b8494cd75563c4d5f0b141c27c59065421eaf9": "SampleGramps", - "4fad92aa7e239a5a470b35c3ab8d1101c69c23a0": "SampleFather", - "31fd7aee4912ba9ae36ba4a04a4a05d9d2690afb": "SampleChild", - "eec4af0ee55aba5b65b0ac375db706b2541e5653": "Initializable", - "94d8214a6855376d8fcde6f26316c8d848faeb6d": "GovernorCompatibilityBravo", - "2a8c112fa192928eae7c1e7b8f8322fa7766121e": "CallReceiverMock", - "f6b1a7502344283a76b1385153d5dbe17bd792ae": "AccessControl", - "a1d8fc054c5d73114421ce0f143b4fabf3568d42": "AccessControlEnumerable", - "7019d3d6e4cf90818adcc5d8f2034670cda85daf": "Governor", - "dbbf75e8914cd4f0946c52f98d04f493e94dd620": "IGovernor", - "c00e7da3dba00f6c11fdcbbf357b6dc18110e2b9": "GovernorPreventLateQuorum", - "1bc4aae7c1537cd679c7193f3f7652101d30a892": "GovernorTimelockCompound", - "58969c4290386e434b89e71174668703cec1ab45": "GovernorTimelockControl", - "29836afa63a7f71b8afb1d048e444b4b75cd822b": "GovernorVotes", - "800c4417f2601773c7bb90aaf81a1dea6f47485f": "GovernorVotesQuorumFraction", - "5235772d4436eccec983d7c5edbd240052c9ba22": "IVotes", - "563ff993a6b7d8def9f98ac8bbba2e0d260ceff0": "Votes", - "287623ca3a4ee8b95286d73ba6b2ed74b31aa56e": "IERC2981", - "2d3287e3ef37104daa848d29ba9e569939dfb421": "IERC1822Proxiable", - "55a1a0a2c8d2703791c32dbbe88d26107897fc53": "ERC2771Context", - "0f78a22d966157b538e172ee646c8b2aa2ddcce5": "MinimalForwarder", - "2ba4a77e01e137cab1d1ad573bae7e2bfef25b8f": "Base64Mock", - "9ad73f0552ac99d3e074b3c630658afda1049412": "CheckpointsImpl", - "660557bd64e5e8e21d5d45f4ee8fb6ad951d0452": "ERC2771ContextMock", - "ea0f405b0d5c246931e84d1375055083872f097c": "ERC721RoyaltyMock", - "e0e331829d37789f4c66f72174b609e65e382d54": "ERC721VotesMock", - "c67fdb73a1ebdc6f94bd34f84f7410d860b179d4": "GovernorMock", - "3d5d49916ab335e7e63e6ac8c6bbdde4ce91774a": "GovernorPreventLateQuorumMock", - "846f47565f55b3ce4e7e1991a4f76a0f6d257cae": "GovernorTimelockCompoundMock", - "d80b0d79f0062440f20d9cd7992ef3b6412d74ee": "GovernorTimelockControlMock", - "50fc19942debe7b63d6307cc2ad4f485739a4f6f": "GovernorVoteMocks", - "50c9c79167cff6cae0533e799ccb7da86cf72d90": "ERC20ReturnFalseMock", - "1306e3dd922f348e0ad76610cec7acfbb1363489": "SignedMathMock", - "fb165320294354e11a7e2d11e8c1b73000dac9c7": "UUPSUpgradeableLegacyMock", - "794af8bd5c3a40c9e038b52ec27b22abcb52c8bb": "VotesMock", - "a3dc30773372880a622a3577d2097f9976622b0b": "MyGovernor1", - "b154ab0518de330d71a343878580a2dd4130c6cd": "MyGovernor2", - "20d2a2d2701c4357b2abce38302a1caa427ae884": "MyGovernor", - "6bc0b1abdafe6cd09f3b89d0a2204361106cd29d": "ERC1967Upgrade", - "1cce6c0614504a6d6ee709651a1182a1cbba8e2e": "Proxy", - "dd05a2a306a051e1c4c381d967584d02c114038a": "UUPSUpgradeable", - "2f99143bf51f009a94948a12b8ee5b5af48743c6": "IERC1155Receiver", - "dfd6949ce9bb4cf1b409dec313064e123de4d18d": "ERC20", - "6fa24eddd6020e757903a86dd74f335e9d6d92ae": "IERC20", - "6137641e7029f78ccdb9ed7576394655140f1687": "ERC20Burnable", - "630204f30f220515a71dada488ef5e2b5f8cac65": "ERC20FlashMint", - "f132d224bf01c7af2adab4143b27eb01e3af3908": "ERC20Votes", - "c78fb00bcac30eac9c9f09370bfb134f1fb0dace": "ERC20VotesComp", - "73965f3b502d3eb2c7b119a1a3385dbbf61431e1": "TokenTimelock", - "d1216cfae4bd3a10f1d1875dfff6d645866adf43": "ERC721", - "bf9ad9a6de08088c645ff86bdf875c0beac8a3b5": "ERC721Royalty", - "a8385ddba748ac6b2d17f1c342aba1e9b5d6927d": "IERC721Enumerable", - "6f84eff1a9116fbf20abd5c4457e4897ab40a415": "ERC721Votes", - "b457774f9fc82764468c9438603124f1243e042f": "ERC777", - "89520f76f5c9a9c6bad97750f2e01377f76bad6f": "ERC2981", - "be306f01ae84e9a1a568f703b8bcc9b1a0c49898": "Address", - "3bc96067d15f810ae58d139dd854197d0c3be98a": "Base64", - "0802f0deda6bb9b59cdbe73a5e5c6a238ea5668b": "Checkpoints", - "fc9ecdcc8173f23d1db2eecc243d1ab3999dbe35": "Multicall", - "68081d1d7d71bcdbb1507f31b71fe09f66b5ad21": "ECDSA", - "33ea0fbdba5f8542328ddac5067b9384c8988296": "MerkleProof", - "1c3856f541a8333183cfecbed1f6034030f2dd2a": "SignatureChecker", - "29e09293303b76a688d81e63b7c3469ef5459b59": "SignedMath" + "16ad4eed535bc7e7ea4d1096618d68ffe5a02287": LibraryInfo("Bounty", ["v1.3.0"]), + "896a88e86ba21fe176d5e3de434af62ee531b1d5": LibraryInfo( + "Target", ["v1.3.0", "v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "ab36e566a3daf2aa0a8e129c150ed868a4902891": LibraryInfo("DayLimit", ["v1.3.0"]), + "07684a10bdf44d974020a0370e5ed7afbe1f9e44": LibraryInfo("ECRecovery", ["v1.3.0"]), + "0df8b61d53724353dff7ceb4948f99f4d5d0a558": LibraryInfo("LimitBalance", ["v1.3.0"]), + "a034f5999f05402616da9a54ed665d6196c6adee": LibraryInfo("MerkleProof", ["v1.3.0"]), + "7e2f3e9543ef140fb05e6cd5b67ee85f9e5c89e8": LibraryInfo("ReentrancyGuard", ["v1.3.0"]), + "1b983aa0e808ccb541f22f643011ee24e9eddc1e": LibraryInfo("CappedCrowdsale", ["v1.3.0"]), + "f48c976b3a18769596a181adc072c3266a232166": LibraryInfo("Crowdsale", ["v1.3.0"]), + "fc085749b4f49f6999c5cccd50c6a8b567b0ed5d": LibraryInfo("FinalizableCrowdsale", ["v1.3.0"]), + "2190fe74b4df2a58266ce573a1c09a047fec8b68": LibraryInfo("RefundVault", ["v1.3.0"]), + "06c26f4535dea69cdec2cf94d31f3a542430f692": LibraryInfo("RefundableCrowdsale", ["v1.3.0"]), + "e2e8a667511fa076aa2f4721a7b0476ded68f179": LibraryInfo( + "SampleCrowdsaleToken", ["v1.3.0", "v1.12.0"] + ), + "618409ffc0166d51eae7474a0e65db339c1a1a48": LibraryInfo("SampleCrowdsale", ["v1.3.0"]), + "4893616c2a59bcc5b391a85598145327f6c9b481": LibraryInfo("SimpleToken", ["v1.3.0"]), + "78d8f11bc1dd500ef6aa3bf95b516facd34ae97f": LibraryInfo("Destructible", ["v1.3.0"]), + "7c2320f840fb8175ef0338f82488b437bccb3a2d": LibraryInfo("Migrations", ["v1.3.0"]), + "20954e05e6a84d9d349f36b720d20057a5849126": LibraryInfo("Pausable", ["v1.3.0"]), + "98656c8719e36d1e018b5e7d907f84531d0cde71": LibraryInfo("TokenDestructible", ["v1.3.0"]), + "77c201c932c5fd7a11e30bb970afda5a5c1a0e6c": LibraryInfo("Math", ["v1.3.0"]), + "dcd94e653605571a4adaef30328837552088af90": LibraryInfo("SafeMath", ["v1.3.0"]), + "e102f7570918afe9b8a712ec7b8cf2ce2d7ccf06": LibraryInfo( + "CanReclaimToken", ["v1.3.0", "v1.9.0", "v1.10.0", "v1.11.0"] + ), + "18816a398c07b658ed4f84871d8afa1132ff2ea9": LibraryInfo("Claimable", ["v1.3.0"]), + "a51d83ec668c67ee7e3cb6744f207d7fba110ad8": LibraryInfo("Contactable", ["v1.3.0"]), + "ef49ebbffe424c8b829cf8d8fe07b0bdd4b6a32a": LibraryInfo("DelayedClaimable", ["v1.3.0"]), + "295a28a0cc845f398fd3f73fe7d7ebd3f217efb5": LibraryInfo( + "HasNoContracts", ["v1.3.0", "v1.9.0", "v1.10.0", "v1.11.0"] + ), + "0695e926e394b778337e14f8bbbdce3aee6756c9": LibraryInfo("HasNoEther", ["v1.3.0"]), + "e0d144a37d99136b64edec4bc0a7d5f003ca4eb5": LibraryInfo("HasNoTokens", ["v1.3.0"]), + "70334d1b91d44591475891c4a1462711d37a8990": LibraryInfo( + "NoOwner", ["v1.3.0", "v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "4bafe87e87f2f7924cebc0f210ffc504f62479ea": LibraryInfo("Ownable", ["v1.3.0"]), + "9f8caf856608726e48ee86370d866088590bf374": LibraryInfo("PullPayment", ["v1.3.0"]), + "a586769701d35125a8281597f0187c12eebf45d8": LibraryInfo("BasicToken", ["v1.3.0"]), + "1938eb4e2cdedd786c42fbace059fbe4591a3c11": LibraryInfo("BurnableToken", ["v1.3.0"]), + "7d6c8036444ef12c4293c12f6dac7ea09b009ccd": LibraryInfo("ERC20", ["v1.3.0"]), + "26cac836b179301d90c2fb814eda7f46c0a185ef": LibraryInfo("ERC20Basic", ["v1.3.0"]), + "9414672a30d64bb82b495245b0dd47ef4f9f626c": LibraryInfo("LimitedTransferToken", ["v1.3.0"]), + "0774060a7337641beb9a43a8c0bdcb1c3ae145bc": LibraryInfo("MintableToken", ["v1.3.0"]), + "b3ce90caedd7821ec2a6f1bcbcda81637501d52b": LibraryInfo("PausableToken", ["v1.3.0", "v1.9.0"]), + "3af6c4bebea1014a2a35abccc63a5fcba9be70ab": LibraryInfo("SafeERC20", ["v1.3.0"]), + "cc3aea9e2f2110e02913b2ce811c9ed4beecf465": LibraryInfo("StandardToken", ["v1.3.0"]), + "fa1616bdd4888c5d16500a3e407fa001ddd75df0": LibraryInfo("TokenTimelock", ["v1.3.0"]), + "09c671cd62433379e237d2fc5dc311af49cf1f5c": LibraryInfo("VestedToken", ["v1.3.0"]), + "7762232a812e8fa5f4cc1f41d0e8c647839bcf3f": LibraryInfo("AddressUtils", ["v1.9.0", "v1.9.1"]), + "9adc4ade8a73cef7a0494e49b3195491f2567630": LibraryInfo("Bounty", ["v1.9.0", "v1.10.0"]), + "dc527f7040995e42e07446f383fd40b293814e4c": LibraryInfo("DayLimit", ["v1.9.0"]), + "91c4da8fd04d8dc4678a741b7a553a7fc47bfc0c": LibraryInfo( + "ECRecovery", ["v1.9.0", "v1.9.1", "v1.10.0"] + ), + "e362496576b5ef824429b2aa0634a04e5e13864d": LibraryInfo("LimitBalance", ["v1.9.0"]), + "d2ad47f4ddb62fb8bcb3f4add161aeb0f3f5a4be": LibraryInfo("MerkleProof", ["v1.9.0", "v1.9.1"]), + "abe9489ed9de21737a43ab9698d131e7407620f6": LibraryInfo( + "ReentrancyGuard", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "76fae86d089153d66e6e8402d43da9485c2113a8": LibraryInfo( + "SignatureBouncer", ["v1.9.0", "v1.10.0"] + ), + "20c12a01e1c64fa836c2569bb44eb852d44c7c5c": LibraryInfo("Crowdsale", ["v1.9.0"]), + "22465351d15ee5cd18d91ae8ab159129d4dcfb4d": LibraryInfo( + "FinalizableCrowdsale", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "9774a38be6323299d069a8756b44179c880e7c1e": LibraryInfo("PostDeliveryCrowdsale", ["v1.9.0"]), + "e933560cd155790112d5685ed76df0e235c780ea": LibraryInfo("RefundableCrowdsale", ["v1.9.0"]), + "d7910b2369b470f77e0e14605a8b061d6e2bd46d": LibraryInfo("RefundVault", ["v1.9.0"]), + "2661d9bc3203d658e7ed5d29a47fa66e0fdac5ba": LibraryInfo("AllowanceCrowdsale", ["v1.9.0"]), + "eb321ffdfe7be1efaefc8bdd9e6acb46eca221f4": LibraryInfo("MintedCrowdsale", ["v1.9.0"]), + "09016aac11d32d3fda430c154c180afb2fb7732d": LibraryInfo("IncreasingPriceCrowdsale", ["v1.9.0"]), + "1ff28b511dec3f0515c96d659e10f6ef7c47ce0b": LibraryInfo("CappedCrowdsale", ["v1.9.0"]), + "e789d95184e0adabe7b5b79510d3f32c9d882cd3": LibraryInfo( + "IndividuallyCappedCrowdsale", ["v1.9.0"] + ), + "d062ebe0b22232bb1d8ac84cf09f10c3cbea5618": LibraryInfo("TimedCrowdsale", ["v1.9.0"]), + "7d396a8c6ff432ad5e51697af40baa20dbe97603": LibraryInfo("WhitelistedCrowdsale", ["v1.9.0"]), + "9e1ceee37e77060c7b13a87909cac0902e2ad81e": LibraryInfo("SampleCrowdsaleToken", ["v1.9.0"]), + "b1a63d12b5f88f0b4d8d0283aabcb052b03b9a6f": LibraryInfo("SampleCrowdsale", ["v1.9.0"]), + "4ffdf78526d08ef08faa67476631359f1f34d39c": LibraryInfo("SimpleSavingsWallet", ["v1.9.0"]), + "848e77f0c272c709d7df601a0a7dff1be871aa47": LibraryInfo("SimpleToken", ["v1.9.0"]), + "149e2bf2bf05ac0417a92de826b691e605375f87": LibraryInfo("Destructible", ["v1.9.0"]), + "9ec21dbeba82d8ffbb547ec3efc63e946e403433": LibraryInfo( + "Pausable", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "0636e347e26d51691bbe203f326ed3a81c14893b": LibraryInfo("TokenDestructible", ["v1.9.0"]), + "8c43814c5d4144e7241ad3acf036831f72626f53": LibraryInfo( + "Math", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0"] + ), + "dcb0461fc135342c8335ec971c0fce948749fcad": LibraryInfo("SafeMath", ["v1.9.0", "v1.9.1"]), + "3c84335582613c4f61db5e2dba4a5bdf9a32647e": LibraryInfo("AllowanceCrowdsaleImpl", ["v1.9.0"]), + "f27124a3561a89f719110813c710df74b8852455": LibraryInfo("BasicTokenMock", ["v1.9.0", "v1.9.1"]), + "882c0e313871f9bdb3ade123cd21a06e80b9687b": LibraryInfo( + "SignatureBouncerMock", ["v1.9.0", "v1.10.0"] + ), + "767d1b9bea360813c53f074339dab44dba2be3e1": LibraryInfo( + "BurnableTokenMock", ["v1.9.0", "v1.9.1"] + ), + "c06b8492aa76d2b3e863e9cc21e56ea9220b6725": LibraryInfo("CappedCrowdsaleImpl", ["v1.9.0"]), + "5e4b5478ed4656e3e83cae78eeddca3ffdc77ce7": LibraryInfo("DayLimitMock", ["v1.9.0"]), + "c07480985ff1aef7516290b6e1c6eb0f5f428379": LibraryInfo("DetailedERC20Mock", ["v1.9.0"]), + "01478e8bf733ffd6b1f847f5406b6225c8b02f1c": LibraryInfo( + "ECRecoveryMock", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0"] + ), + "17b3d5a66300e613b33d994b29afae7826d66b15": LibraryInfo( + "ERC223ContractInterface", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "02100ab471369f65ef7a811c4979da275426f021": LibraryInfo("ERC223TokenMock", ["v1.9.0"]), + "ed7ae160a58372fd8f7fd58b4138ff029dd27df1": LibraryInfo( + "ERC721BasicTokenMock", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "c6c6e961e36c39df202768b8fd18f1f76cefd1ff": LibraryInfo( + "ERC721ReceiverMock", ["v1.9.0", "v1.9.1"] + ), + "400593f520c28ce9b68fb12bd4dd3f869f570f39": LibraryInfo("ERC721TokenMock", ["v1.9.0"]), + "2442a363e65369915bcde718b986a2143220fbfd": LibraryInfo("ERC827TokenMock", ["v1.9.0"]), + "59841830db8f308b717f22514cbc406dff101d0f": LibraryInfo("FinalizableCrowdsaleImpl", ["v1.9.0"]), + "2022504c8205da3c77517ffbc24ec595065050e0": LibraryInfo("ForceEther", ["v1.9.0"]), + "f0aac4a39cf1687f94c084250f2aadb75f9474b2": LibraryInfo("HasNoEtherTest", ["v1.9.0"]), + "aba043594e0651956d0ae8be33625f29883a0503": LibraryInfo( + "IncreasingPriceCrowdsaleImpl", ["v1.9.0"] + ), + "e04e7327bfe0b1c52d1c6ff340837d7752c6a1ef": LibraryInfo( + "IndividuallyCappedCrowdsaleImpl", ["v1.9.0"] + ), + "3860cb9cc1bcc675eabfc3fc498c012f97956f89": LibraryInfo( + "InsecureTargetMock", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "0ae95f3ba71966844f02df90764349726fa5faa3": LibraryInfo( + "InsecureTargetBounty", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "056f7fb47b260ca924e77d4bf345dcf67e62b732": LibraryInfo( + "LimitBalanceMock", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "3c0eb7e3a1376c180c4afc060e6b02ff2dc0a12a": LibraryInfo( + "MathMock", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0"] + ), + "dc1cbbcf7506800281d7264f137d2d20e30c980a": LibraryInfo( + "MerkleProofWrapper", ["v1.9.0", "v1.9.1"] + ), + "bba58d62208bcee8307170a5dc002d5f0c0c1d2d": LibraryInfo("MessageHelper", ["v1.9.0"]), + "f5c9e9e324b4d6f1ef41008850e5dbb0e525c234": LibraryInfo("MintedCrowdsaleImpl", ["v1.9.0"]), + "8d93ca1addadb71893e2016bfa26db40fc2f4a2f": LibraryInfo("PausableMock", ["v1.9.0"]), + "36659de8c778859e75e98389e40f86261ca0becf": LibraryInfo("PausableTokenMock", ["v1.9.0"]), + "a297f3f1391501f49a3d8bb132e158faaa7249b6": LibraryInfo( + "PostDeliveryCrowdsaleImpl", ["v1.9.0"] + ), + "2695bb63d6fc96d972146f159cb17d2bdb7f1cd7": LibraryInfo( + "PullPaymentMock", ["v1.9.0", "v1.9.1"] + ), + "b087e928c74ce7d5adc14e9b484bb7de22f268d4": LibraryInfo("RBACMock", ["v1.9.0"]), + "0bddfeb265ff29d4c3d6ca38852747a1e21318ad": LibraryInfo( + "ReentrancyAttack", ["v1.9.0", "v1.10.0"] + ), + "a9a47c2b37110ab4c5a96948b848e823abb391b9": LibraryInfo("ReentrancyMock", ["v1.9.0"]), + "585bffaaba0b7bb6fd37817b94d373ec54c4d2c7": LibraryInfo("RefundableCrowdsaleImpl", ["v1.9.0"]), + "30d70d64a1416b8cead631c93b84ed113b5e18d7": LibraryInfo("ERC20FailingMock", ["v1.9.0"]), + "ae5f3e2f0996d8b0445e4890701f35389fd565c5": LibraryInfo("ERC20SucceedingMock", ["v1.9.0"]), + "b5703426566223d0c7e0079a8aded144192c330d": LibraryInfo( + "SafeERC20Helper", ["v1.9.0", "v1.9.1"] + ), + "378b31ac238e143f5f752834203492dd3980522f": LibraryInfo( + "SafeMathMock", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0"] + ), + "2f487c8b59cc0cb91ea2ee7aa7a2b7b9bbe22a02": LibraryInfo( + "SecureTargetMock", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "78c3a5e7b0d5b58efe770c54a73b42bf1d242d9b": LibraryInfo( + "SecureTargetBounty", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "c4cfaf59a49f506e31c3acd8d3ae8624613c2044": LibraryInfo( + "StandardBurnableTokenMock", ["v1.9.0", "v1.9.1"] + ), + "5a3481b0e8029747c9bf839d7a12b7f831513ba7": LibraryInfo( + "StandardTokenMock", ["v1.9.0", "v1.9.1"] + ), + "eded4e7da3e73140ba6fd5a80217c562c5922c47": LibraryInfo("TimedCrowdsaleImpl", ["v1.9.0"]), + "b8eaff3a88d6c9b87a050ae4e3caf8eb39c508f3": LibraryInfo("WhitelistMock", ["v1.9.0", "v1.10.0"]), + "2e295e4571f9f017638cd4b9e013ce502d4f2759": LibraryInfo("WhitelistedCrowdsaleImpl", ["v1.9.0"]), + "dd349689f6d497b6d60d18af598981c0c5ea5c43": LibraryInfo( + "Claimable", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "b4c914658062b263ddd7bbad7a303f9aadb8edda": LibraryInfo( + "Contactable", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "379f3940245b3bf07e3da0ba8bacb31a7b71837a": LibraryInfo( + "DelayedClaimable", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "04a144226212c8093a72edac65132dfebf5cbc34": LibraryInfo("HasNoEther", ["v1.9.0"]), + "e581fe4461bda93a810cf8f56e985d7b17e5c57c": LibraryInfo( + "HasNoTokens", ["v1.9.0", "v1.10.0", "v1.11.0"] + ), + "adca50311c8c516281fae62e7bf8711b247dd1fe": LibraryInfo("Heritable", ["v1.9.0"]), + "bff7a458838d22f59d77dcb1e4c8f71ad9e6c6ad": LibraryInfo("Ownable", ["v1.9.0"]), + "b92612ef15ec3b9d6df30a8f7becdc945bde3d4b": LibraryInfo("Whitelist", ["v1.9.0"]), + "c9ee90b58cfe7db8fb2093a5dc6ac901e3560376": LibraryInfo( + "RBAC", ["v1.9.0", "v1.9.1", "v1.10.0"] + ), + "d07bdfe9e5c1197eaaeb8db19a60b2d7c8b08a88": LibraryInfo("RBACWithAdmin", ["v1.9.0"]), + "3bf165712333a39e76e159a3406fa49517afe215": LibraryInfo( + "Roles", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0"] + ), + "7e998f3b5ecb8820313c1bb24dfb0d6d99ace954": LibraryInfo( + "PullPayment", ["v1.9.0", "v1.9.1", "v1.10.0"] + ), + "74d3dda7f213a09504a9a9291a40a3dcd8365fbd": LibraryInfo("SplitPayment", ["v1.9.0"]), + "819441e9e704135b09b0b1f72db902159a737913": LibraryInfo( + "BasicToken", ["v1.9.0", "v1.9.1", "v1.10.0"] + ), + "27dea92802e715fa1863d34fdd4d5c9c07f2447a": LibraryInfo( + "BurnableToken", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "cddbea62966149d6c6e6709ab8568b3c4f0ad494": LibraryInfo("CappedToken", ["v1.9.0"]), + "cf6e58a034f1418d57a0f1952afb136e82102f94": LibraryInfo("DetailedERC20", ["v1.9.0"]), + "8d2f3828797c3e84f29d2c8cdb6ed25ee69511f6": LibraryInfo("ERC20", ["v1.9.0", "v1.9.1"]), + "953db1b3480bf572e44ad6fa898f6c6bf2eee57c": LibraryInfo( + "ERC20Basic", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0"] + ), + "241b903da1f922131be0e2bdf10c4306082848ea": LibraryInfo("MintableToken", ["v1.9.0"]), + "b34956dcce7a77bd57b4fad7545ab5988bf8dbf1": LibraryInfo("SafeERC20", ["v1.9.0", "v1.9.1"]), + "de2af31e6fa1013b6f867fa12ccaa7696d9442d7": LibraryInfo( + "StandardBurnableToken", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "50589279d9b57e6c0ad23388176dda20dc4c491e": LibraryInfo("StandardToken", ["v1.9.0", "v1.9.1"]), + "be03e255bc582a956bff757a7e1a8bad8bdc3361": LibraryInfo("TokenTimelock", ["v1.9.0"]), + "59d01319278f7765dd0e242d02c1ca82e6ba091a": LibraryInfo("TokenVesting", ["v1.9.0"]), + "012926dd9f55e8dfe9776b9f1df62546bca5ecc1": LibraryInfo( + "DeprecatedERC721", ["v1.9.0", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "30067e830dea40199578d0debf1d3d2c85b310df": LibraryInfo( + "ERC721Enumerable", ["v1.9.0", "v1.9.1"] + ), + "4a83cf38bff15fc12b16638f7844fc0f8980f9f3": LibraryInfo( + "ERC721Metadata", ["v1.9.0", "v1.9.1", "v1.10.0"] + ), + "2e8afdc67c556a384622e8f1518264a445a92b57": LibraryInfo( + "ERC721", ["v1.9.0", "v1.9.1", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "bb0256dd101e575fe0c2371482723f8e2c32c087": LibraryInfo("ERC721Basic", ["v1.9.0", "v1.9.1"]), + "a8eecb22ae520032234d75016dfcf803ba6fba82": LibraryInfo( + "ERC721BasicToken", ["v1.9.0", "v1.9.1"] + ), + "5ce55c0eca12e6589b4ccef66917574890fdf1af": LibraryInfo( + "ERC721Holder", ["v1.9.0", "v1.9.1", "v1.10.0"] + ), + "4646738364802bb2215ef7f4062cdc03bc33bc33": LibraryInfo("ERC721Receiver", ["v1.9.0", "v1.9.1"]), + "24749e32f3f9f241cbf61755cd27c4e1c33ec6ef": LibraryInfo("ERC721Token", ["v1.9.0"]), + "34e294455d0b633a92c85294e33391da976dfff2": LibraryInfo("ERC827", ["v1.9.0"]), + "5646047a82bc6b598f782b9ecfbe0ef37b1bde4b": LibraryInfo("ERC827Token", ["v1.9.0"]), + "ba598a71f86f1d7453d8d921680d7bd75d34a15d": LibraryInfo("SignatureBouncer", ["v1.9.1"]), + "af99a0bc53580c8d654923048cec891e61e24a6b": LibraryInfo("Pausable", ["v1.9.1"]), + "eaf939ca050feaf102dbd9835b6a67eb4b51e0b9": LibraryInfo("SignatureBouncerMock", ["v1.9.1"]), + "c998cfc7431ac0d0c66f70f0982b3e8659c6bfb9": LibraryInfo("DetailedERC20Mock", ["v1.9.1"]), + "a364bd1d78dd9528eb357f93c190db2652cbbd5c": LibraryInfo("ERC721TokenMock", ["v1.9.1"]), + "8b07a36751ac1e354baf93be047c852143a57119": LibraryInfo("PausableMock", ["v1.9.1"]), + "70b936df444e167029f22e8ef48b007bbe37d544": LibraryInfo("PausableTokenMock", ["v1.9.1"]), + "dc38f5ba7ca5eb5a8a85b7b0e9d8288a1e70e41d": LibraryInfo("RBACMock", ["v1.9.1"]), + "d1f6822833daab2b5c6521ee6aacc6303b946095": LibraryInfo( + "ERC20FailingMock", ["v1.9.1", "v1.10.0", "v1.11.0", "v1.12.0"] + ), + "87310193da0df53c2be5ff230d2704011a0806a5": LibraryInfo("ERC20SucceedingMock", ["v1.9.1"]), + "d1dd6a62116d8605377f70bb5de6f2c70ced3d81": LibraryInfo("Ownable", ["v1.9.1"]), + "be72653e125b02bb575d00a9a8db2b40aaa6bc9f": LibraryInfo("RBACWithAdmin", ["v1.9.1"]), + "7c353bddb33d9c15e9aebfb843a1e5d63645f267": LibraryInfo("SplitPayment", ["v1.9.1"]), + "a0b88b77efc2a12f98310d83fa335fa5564cca08": LibraryInfo("DetailedERC20", ["v1.9.1"]), + "feb56e7c42453ae5639cbbcae4b8d8e5c59447c2": LibraryInfo("DetailedMintableToken", ["v1.9.1"]), + "cea5d86a5cdca1d9dd226d199d740a3d3cd32d07": LibraryInfo("DetailedPremintedToken", ["v1.9.1"]), + "6bed3b69e3391bded476aabdd2c5f861819e73f8": LibraryInfo("MintableToken", ["v1.9.1"]), + "46ebd57a637d411818418140d0aa63dbf1cc2246": LibraryInfo("PausableToken", ["v1.9.1"]), + "5cc2a3e344df53e317dbe38e76ac94695a38e9e0": LibraryInfo("TokenTimelock", ["v1.9.1"]), + "3e7d8f34659881bc3b2ca951668372a47f79193d": LibraryInfo("TokenVesting", ["v1.9.1"]), + "e197b8a76f56af18f47f67a89005390e3bd55694": LibraryInfo("ERC721Token", ["v1.9.1"]), + "1b53bd5e5472c4a818e266b64d0f9e6fd49857cb": LibraryInfo("MintableERC721Token", ["v1.9.1"]), + "ec78d7ca528901ef6910c0f44ab705b870742c90": LibraryInfo("Migratable", ["v1.9.1"]), + "fc413be3907db5515f084a8fff63bcc8c5635400": LibraryInfo("AddressUtils", ["v1.10.0"]), + "31c153b4c6b900b16219cae11feef97ce4076143": LibraryInfo( + "LimitBalance", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "962b05e5b0824201f5aedc58501637db05b154a3": LibraryInfo("MerkleProof", ["v1.10.0"]), + "b08f9ebec900e55ba7b20624dad0097bc243c12a": LibraryInfo("Crowdsale", ["v1.10.0"]), + "5124365778e24aa55c9e06bdf26149d4310d95d0": LibraryInfo( + "PostDeliveryCrowdsale", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "57737cab20c3fada86461ebe4df4b14d7d515b7a": LibraryInfo("RefundableCrowdsale", ["v1.10.0"]), + "1fdb50fd86681dfa181c490bcdef28171be6e6f3": LibraryInfo("RefundVault", ["v1.10.0"]), + "cde035237ef2f07d69f3756cd9d1305cda39f749": LibraryInfo("AllowanceCrowdsale", ["v1.10.0"]), + "e7b6247a1c2be98eb8a1c56486c3f17dc60b98ed": LibraryInfo( + "MintedCrowdsale", ["v1.10.0", "v1.11.0"] + ), + "e318ca5d228fcbbd844491efd5fee829e32c53ac": LibraryInfo( + "IncreasingPriceCrowdsale", ["v1.10.0", "v1.11.0"] + ), + "e9b16e3a549af2c8cd56090702d269b432a80283": LibraryInfo( + "CappedCrowdsale", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "bdaaf0e469b346ce4d51c3fe15d14a4b02bc990e": LibraryInfo( + "IndividuallyCappedCrowdsale", ["v1.10.0", "v1.11.0"] + ), + "eff0fd34b36c459c2d98f5a04a7b04fff08674e0": LibraryInfo( + "TimedCrowdsale", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "8a1c7e2eda5d6444d767db6e960beb998e94e523": LibraryInfo("WhitelistedCrowdsale", ["v1.10.0"]), + "35690875b56b9ef06dc5c82640a067bd9132901c": LibraryInfo( + "RBACWithAdmin", ["v1.10.0", "v1.11.0"] + ), + "c5dfbb1d2f9641afa4f031f2f600f697e9a77b05": LibraryInfo( + "SampleCrowdsaleToken", ["v1.10.0", "v1.11.0"] + ), + "9f752a8cbc435f39d6c36760d3fff29d99d079c4": LibraryInfo( + "SampleCrowdsale", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "edca9f3d7957cef23f6f3209af3eee94ea523194": LibraryInfo("SimpleSavingsWallet", ["v1.10.0"]), + "f844de78dd748876a43a33fa9a6caccbe3fb511a": LibraryInfo("SimpleToken", ["v1.10.0"]), + "0c02b9e264482b9501239880d508d2fc45a921c7": LibraryInfo("Destructible", ["v1.10.0", "v1.11.0"]), + "d66ff49a491298f7d0aadc302cce5b80e20397c1": LibraryInfo( + "TokenDestructible", ["v1.10.0", "v1.11.0"] + ), + "ee4d3ec37306122ceeec79f60680a632176509b0": LibraryInfo("SafeMath", ["v1.10.0", "v1.11.0"]), + "1e3619093d26ad06a7fd448a3e4db543de00d219": LibraryInfo( + "AllowanceCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "565c175208220601b83adfeaca95bb41efe016c3": LibraryInfo( + "BasicTokenMock", ["v1.10.0", "v1.11.0"] + ), + "635c6422d4af70e8ffe48d54148f457329870eaa": LibraryInfo( + "BurnableTokenMock", ["v1.10.0", "v1.11.0"] + ), + "e7177cb6bde32587072093fece1269add34133cc": LibraryInfo( + "CappedCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "63f108c805f519b16c8db619e7274d4937aad376": LibraryInfo( + "DetailedERC20Mock", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "fb554453f065e88a35f0d412de76fe4e83686366": LibraryInfo( + "ERC223TokenMock", ["v1.10.0", "v1.11.0"] + ), + "e288225fc414795b7697952164f0e2a02fb89e97": LibraryInfo("ERC721ReceiverMock", ["v1.10.0"]), + "774d1a89a0f8fbb420f6a6586b9328e6853d5f7e": LibraryInfo( + "ERC721TokenMock", ["v1.10.0", "v1.11.0"] + ), + "8d29283dd9ef9bde0001ebf6a7c765a6af12bc68": LibraryInfo("ERC827TokenMock", ["v1.10.0"]), + "7449c745206ac15d5192ba7a16bed39819a50113": LibraryInfo( + "FinalizableCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "60704a7554b0ad4ee9d0626bcbbadbac87d8d270": LibraryInfo( + "ForceEther", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "b339de538541166e1bf3390a1b07fef171e03b00": LibraryInfo( + "HasNoEtherTest", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "80198840976a3fdcdcf2fa5a8d9454b1e39004de": LibraryInfo( + "IncreasingPriceCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "9628906154701c6e5306e6da622b4db92cc6f6ec": LibraryInfo( + "IndividuallyCappedCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "cd5924adb9ef87e99bcd94ae9ae57b7a6897b1e0": LibraryInfo( + "MerkleProofWrapper", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "1f6d4d30c38abd953fca5a89b5193e10df9d1751": LibraryInfo( + "MessageHelper", ["v1.10.0", "v1.11.0"] + ), + "0a1706f232f69f32bf2954b566c7c2c14d69392d": LibraryInfo( + "MintedCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "c684d5ce1dd245aa8c912952594a373f977c76e7": LibraryInfo( + "PausableMock", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "3be1ec9b4f338c96d86b894ba8ceb846fb647c23": LibraryInfo( + "PausableTokenMock", ["v1.10.0", "v1.11.0"] + ), + "b28308433da65d22476951196f1caeb41f26cf33": LibraryInfo( + "PostDeliveryCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "559fa0817335651783601a27dde5faf21fc686b0": LibraryInfo("PullPaymentMock", ["v1.10.0"]), + "8107d16875287a7046493571b10dd5eab0d97976": LibraryInfo("RBACMock", ["v1.10.0", "v1.11.0"]), + "07e16eeb1ec64a6995695ed1816a95243000f8a8": LibraryInfo("ReentrancyMock", ["v1.10.0"]), + "f0bd68476f483619630828a8419d39ac57d0f49b": LibraryInfo( + "RefundableCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "2b40af803f1243f59805beb75d2afadf5fdb84a7": LibraryInfo( + "ERC20SucceedingMock", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "3c6b59e930edaae5e84ee9338017b301d7fc12b4": LibraryInfo("SafeERC20Helper", ["v1.10.0"]), + "695a35876abcaf66f60903ec69331e522a9001f8": LibraryInfo( + "StandardBurnableTokenMock", ["v1.10.0", "v1.11.0"] + ), + "07eb9f220d92b3b0a026d03abe31782e18b8a3aa": LibraryInfo( + "StandardTokenMock", ["v1.10.0", "v1.11.0"] + ), + "13a503e0871b386c82691937b1cdca7542f35bbd": LibraryInfo( + "TimedCrowdsaleImpl", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "f401c66a3d208ecf85040784b4eb8bb14e20d0e7": LibraryInfo( + "WhitelistedCrowdsaleImpl", ["v1.10.0"] + ), + "93407117e15d8a7a63deaf473df32c73518a30ea": LibraryInfo("HasNoEther", ["v1.10.0"]), + "baa2d89bbdb2edb622a4c9c1fdc23a6642d899c4": LibraryInfo("Heritable", ["v1.10.0"]), + "211a4479365db5f0eaa4377da409e42db4a25b52": LibraryInfo("Ownable", ["v1.10.0"]), + "ff57312417ac31bd0332308e65ef44f4d4062111": LibraryInfo( + "Superuser", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "2db796d1517717fca1dd3983832f3a45f390ab55": LibraryInfo("Whitelist", ["v1.10.0"]), + "2ee8d28f85d2697054414783e221260b9a7f6c97": LibraryInfo("SplitPayment", ["v1.10.0", "v1.11.0"]), + "cd31a5ef466eeb34195d244e35a3c87b253e9788": LibraryInfo("CappedToken", ["v1.10.0"]), + "405f965e67819b1bd2a94f8c121e66fccb198b8d": LibraryInfo( + "DetailedERC20", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "1fafc8de20663f8ceaa7386a89b7c9e5dce82a3f": LibraryInfo("ERC20", ["v1.10.0", "v1.11.0"]), + "dfac014d93a70a21a3b8b97e3d1b57efd14fe545": LibraryInfo( + "MintableToken", ["v1.10.0", "v1.11.0"] + ), + "c9027d7b556e7e687bec0304ffaecf1d474eabfa": LibraryInfo( + "PausableToken", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "968207fdc2ce386ab24cac2101d8d0e7f9eb7417": LibraryInfo( + "RBACMintableToken", ["v1.10.0", "v1.11.0"] + ), + "87f48da5d43ba18ca15d7347a5626cc37cf01dac": LibraryInfo("SafeERC20", ["v1.10.0", "v1.11.0"]), + "ab442d8dd4ecf1d472d9dce47ea1157c27d0a44e": LibraryInfo("StandardToken", ["v1.10.0"]), + "075e8adaeaed593aad3e14ca9820df4e55e364e2": LibraryInfo( + "TokenTimelock", ["v1.10.0", "v1.11.0"] + ), + "1fcb0b4c52970b0f395e2da5bc6595daa71daff2": LibraryInfo("TokenVesting", ["v1.10.0", "v1.11.0"]), + "ef375977e93dc6aeae3256bc5a0c0ed23a734df8": LibraryInfo( + "ERC721Enumerable", ["v1.10.0", "v1.11.0", "v1.12.0"] + ), + "15405a8487b11120873f75247b1ab5461f1ed8c7": LibraryInfo("ERC721Basic", ["v1.10.0"]), + "4a3380e9127e514a0630ea0656facdebfe716acc": LibraryInfo("ERC721BasicToken", ["v1.10.0"]), + "1c47823ad3c15275bfd34a4c1a66525fca5454bd": LibraryInfo("ERC721Receiver", ["v1.10.0"]), + "95a8f9396ea8cbc14f6cca9a8b6492fbf2437f18": LibraryInfo("ERC721Token", ["v1.10.0"]), + "9fcc86aa8a8ae5217bd10cce1a954c5cb7caac82": LibraryInfo("ERC827", ["v1.10.0"]), + "68b878162744df8ddb16479dd790341cafce251f": LibraryInfo("ERC827Token", ["v1.10.0"]), + "9c4ab3267a3dc0ce51b3baee28fae5006a3be725": LibraryInfo("AddressUtils", ["v1.11.0"]), + "452fe8fdaa7d15bbe79e9ab641f3307b1bece216": LibraryInfo("Bounty", ["v1.11.0"]), + "4b73fc34d4fe601e4c4065e08ec11fc8c3a1ad18": LibraryInfo("ECRecovery", ["v1.11.0"]), + "19ced19ab2d8edf9fe46282e242d8b52a09f7bd6": LibraryInfo("MerkleProof", ["v1.11.0"]), + "4e1211d90f62f0b3d59bb318ac744ac95e6f6317": LibraryInfo("SignatureBouncer", ["v1.11.0"]), + "48d836f14524ef04eccac96647887425545781c0": LibraryInfo("Whitelist", ["v1.11.0"]), + "ee718ffb3fe3609d882556704f41c62311effe27": LibraryInfo("Crowdsale", ["v1.11.0"]), + "6bea0f0c1a89ad2622afba8f47a0af62c2799629": LibraryInfo( + "RefundableCrowdsale", ["v1.11.0", "v1.12.0"] + ), + "8da34d0e919bf9d1a2b1da81e797a6c2c1ed60b4": LibraryInfo( + "AllowanceCrowdsale", ["v1.11.0", "v1.12.0"] + ), + "8bf8cb311ea7d15c8ddaf54454e60ce44a60bdf4": LibraryInfo("WhitelistedCrowdsale", ["v1.11.0"]), + "a1419a713627dbb2ffea8a68c616e0a051f1b606": LibraryInfo("SimpleSavingsWallet", ["v1.11.0"]), + "0b8d54f5efc4de837b7dd93996db086849cb14da": LibraryInfo("SimpleToken", ["v1.11.0"]), + "a7e1df3805ef75dc41a754ae5546f06fec8cb03f": LibraryInfo("ERC165", ["v1.11.0", "v1.12.0"]), + "5e7625321628749b31d4c4cc45e2d90b556d6409": LibraryInfo( + "SupportsInterfaceWithLookup", ["v1.11.0"] + ), + "c1351bcccd9852179bfd81b241caaa056de4be3b": LibraryInfo("SignatureBouncerMock", ["v1.11.0"]), + "cd6add9c23aeffa94971107e162281b260df91dd": LibraryInfo( + "ConditionalEscrowMock", ["v1.11.0", "v1.12.0"] + ), + "5b43908bda2ed2a2abd97bdc0c726f4e0a994686": LibraryInfo("ERC20WithMetadataMock", ["v1.11.0"]), + "afd20cd7880b7afcab66a1177bea6b85ba76ae80": LibraryInfo( + "ERC721ReceiverMock", ["v1.11.0", "v1.12.0"] + ), + "a53e6a8705e545971a03677411de3e3e2fa21104": LibraryInfo("PullPaymentMock", ["v1.11.0"]), + "66ac45d59afe1d96a3512f788c9f1742c8d6948e": LibraryInfo("RBACCappedTokenMock", ["v1.11.0"]), + "65022b9fefebb8d6c04e9d7c6869843a504cb607": LibraryInfo( + "ReentrancyAttack", ["v1.11.0", "v2.0.0", "v2.0.1"] + ), + "429c0d0af89af3652ab701919da11ce73a98d37d": LibraryInfo( + "ReentrancyMock", ["v1.11.0", "v2.0.0", "v2.0.1"] + ), + "b956eb0e6216174795f2ee06204c7da650e845b8": LibraryInfo( + "SafeERC20Helper", ["v1.11.0", "v1.12.0"] + ), + "c2ef9875134777ad5fb22ebdc123e383caafbd19": LibraryInfo( + "SupportsInterfaceWithLookupMock", ["v1.11.0", "v1.12.0"] + ), + "aaeffe18854cb829f1a400a2d89f0b625a5b345d": LibraryInfo("WhitelistMock", ["v1.11.0"]), + "ed2e1b404135b09fe5f0d79f95dbe33b78b587f0": LibraryInfo( + "WhitelistedCrowdsaleImpl", ["v1.11.0", "v1.12.0"] + ), + "319335756a88f45e8684a029ca1c8bc0a311da2a": LibraryInfo("HasNoEther", ["v1.11.0"]), + "5527c4a0bee8b4bb21e2b8f3aef283d724dc62f6": LibraryInfo("Heritable", ["v1.11.0"]), + "d2e619214bc724aeb273d48e420db453b3ffe31d": LibraryInfo("Ownable", ["v1.11.0", "v1.12.0"]), + "4ace23c2264121b28731efcf28cd3552e6fca588": LibraryInfo("RBAC", ["v1.11.0"]), + "2bfe51db8ee661f769d98f9ae45361a9b8f6e0ec": LibraryInfo( + "ConditionalEscrow", ["v1.11.0", "v1.12.0"] + ), + "627f53ee54bf4c94d1cad825b7ae55998a65bc9d": LibraryInfo("Escrow", ["v1.11.0", "v1.12.0"]), + "78f1f3f29386d9b09253ca23087eae02c2efedcd": LibraryInfo("PullPayment", ["v1.11.0", "v1.12.0"]), + "142c5a368e011d0578205a2fb5f776b4937605df": LibraryInfo("RefundEscrow", ["v1.11.0", "v1.12.0"]), + "392ccebdf4b62992e7460dc3f65064cb5d042a45": LibraryInfo( + "ERC20TokenMetadata", ["v1.11.0", "v1.12.0"] + ), + "4a35664713c0831432f0f44b72df33f7eed2248a": LibraryInfo("ERC20WithMetadata", ["v1.11.0"]), + "38c60461bba3a6795a0459e3de0c035ee1d1a53e": LibraryInfo("BasicToken", ["v1.11.0"]), + "917071f9daeb837c90acc2222568398b048b95f6": LibraryInfo("CappedToken", ["v1.11.0", "v1.12.0"]), + "2b6593f6ad447e65d848bc4bfec26e9a8b34557e": LibraryInfo("StandardToken", ["v1.11.0"]), + "3e6344b21675b204f35c12801cea0dfe18d4d298": LibraryInfo( + "ERC721Metadata", ["v1.11.0", "v1.12.0"] + ), + "ed3cce364a25058da857c468423935a1b5fde50d": LibraryInfo("ERC721Basic", ["v1.11.0"]), + "1a45edece56696e721cddc98e8f6703a1d8bbf9b": LibraryInfo("ERC721BasicToken", ["v1.11.0"]), + "cb15d8841ffa1b27b982e31901772957f6123aad": LibraryInfo("ERC721Holder", ["v1.11.0"]), + "715d07f7f060007413defdb6fd5c6934486f34f7": LibraryInfo("ERC721Receiver", ["v1.11.0"]), + "0144a17b7f1ed3cd662df4069296e2e1c32c8dd8": LibraryInfo("ERC721Token", ["v1.11.0"]), + "0450b83815a1e26a02b54c4233ac7aa4cf053ea9": LibraryInfo("AddressUtils", ["v1.12.0"]), + "d583f3e45f2c243e55ee47a107a29bb9e972fe68": LibraryInfo("AutoIncrementing", ["v1.12.0"]), + "a8144e43cf0c0c8b0bb54dcedb0531639e4d00d8": LibraryInfo("Bounty", ["v1.12.0"]), + "d3f87956fa5f05f54106216a9c4a8079ba8d086a": LibraryInfo("ECRecovery", ["v1.12.0"]), + "094905728bfb1ba7462642ae7ce245c709717531": LibraryInfo("MerkleProof", ["v1.12.0"]), + "3cb4bc1e9a9a34a46858922cba2f0af59d767054": LibraryInfo("ReentrancyGuard", ["v1.12.0"]), + "c00a7c93b18d897e6ebf868e0b093ed6ace719dd": LibraryInfo("SignatureBouncer", ["v1.12.0"]), + "a1b464a6a3a1bbbd2fe33b5c231eba11236fa92e": LibraryInfo("Whitelist", ["v1.12.0"]), + "12a2f840294d267c6950a1347b726222b416ed46": LibraryInfo("RBAC", ["v1.12.0"]), + "50dd834b3d24a0bab1361fb858cbc51cf67ccbcf": LibraryInfo("Roles", ["v1.12.0"]), + "e11c891ecfb38b3bc7f4cf1363aae79feb99cf12": LibraryInfo("Crowdsale", ["v1.12.0"]), + "8b5f8bc529ee24fd54869c1d3dcfc18990a59548": LibraryInfo("FinalizableCrowdsale", ["v1.12.0"]), + "2b6997bc5d0b3be1d0e2c1869353383a2fbd4993": LibraryInfo("MintedCrowdsale", ["v1.12.0"]), + "59ed05ce0be380f62d4a3999c32428497594e327": LibraryInfo( + "IncreasingPriceCrowdsale", ["v1.12.0"] + ), + "8a8a532f2e3ea4c08ff27af946fe20298a1e45ae": LibraryInfo( + "IndividuallyCappedCrowdsale", ["v1.12.0"] + ), + "8a9c055e3d1349a664caa802eb204cd198a0f539": LibraryInfo("WhitelistedCrowdsale", ["v1.12.0"]), + "230848a3836ccef1f4430b0bf203cd21f8052291": LibraryInfo("RBACWithAdmin", ["v1.12.0"]), + "0ce489b153032a7ee90ed0eddca2c52daef1abf3": LibraryInfo("SimpleSavingsWallet", ["v1.12.0"]), + "1a2d42f20aef6df99897db234b801340a423450c": LibraryInfo("SimpleToken", ["v1.12.0"]), + "90d9d40b3412f59732a2bb622a88a4bc36f6b821": LibraryInfo( + "SupportsInterfaceWithLookup", ["v1.12.0"] + ), + "2321441ae68a4e14b2306c7575958449a3c29b98": LibraryInfo("Destructible", ["v1.12.0"]), + "ad31f71ee52649c94cb438200fd1c1ed08094bf5": LibraryInfo("Pausable", ["v1.12.0"]), + "53f24a0ac15b157dbbc3f61d5c1408998c1db0ef": LibraryInfo("TokenDestructible", ["v1.12.0"]), + "2ff3848281b684d98af5b73bd62d933ad9795e1b": LibraryInfo("Math", ["v1.12.0"]), + "5b9701e018c1d6a97bc507e5c00433246ac7f025": LibraryInfo("SafeMath", ["v1.12.0"]), + "a03dbbc1c4f0ae5e64d672d84690dc48152e2650": LibraryInfo("AutoIncrementingImpl", ["v1.12.0"]), + "977f8bdafbecf36f639f00746a506a0665e14ee8": LibraryInfo("BasicTokenMock", ["v1.12.0"]), + "68cd257584aa39dab35cc08947cb4aabe9ce852f": LibraryInfo("SignatureBouncerMock", ["v1.12.0"]), + "f08f0cd0d441234b1b15fa1cc1aeed01d651523c": LibraryInfo("BurnableTokenMock", ["v1.12.0"]), + "482f4acdd6c3523e078f68f3905f8e9c0bd96f85": LibraryInfo("DestructibleMock", ["v1.12.0"]), + "e5b1031669b3bfd06fb12626a47888243c07c469": LibraryInfo("ECRecoveryMock", ["v1.12.0"]), + "d439e3f9b056d304aba764b34c2623b4600c55fb": LibraryInfo("ERC20WithMetadataMock", ["v1.12.0"]), + "22f1d1e0932e3558eef115f3e867619c135b5a26": LibraryInfo("ERC223TokenMock", ["v1.12.0"]), + "c37afaa6e4b7ab6775e3c9b3b2c1b848ee3e0548": LibraryInfo("ERC721TokenMock", ["v1.12.0"]), + "fa28e9b84c25de3655f8068c07f5ae030f00705c": LibraryInfo("MathMock", ["v1.12.0"]), + "41437f07fa0866525684129c46b107cf2a28d9dc": LibraryInfo("MessageHelper", ["v1.12.0"]), + "e781977728414ecb0dc389712cbaea2f3c1b2401": LibraryInfo("PausableTokenMock", ["v1.12.0"]), + "c5cbc9122a21b464aec57faf3e8b783f455f3175": LibraryInfo("PullPaymentMock", ["v1.12.0"]), + "10618dab995da34a38ef8e7d53b069a7b0bda621": LibraryInfo("RBACCappedTokenMock", ["v1.12.0"]), + "9fae112623b416c1c3a847d6de92967854f4e3ba": LibraryInfo("RBACMock", ["v1.12.0"]), + "84992bb16c0aa52e586c7ce43af9f8ef80d71382": LibraryInfo("ReentrancyAttack", ["v1.12.0"]), + "ec8922620cd3664ea34d9295aa85c64b77b61c0c": LibraryInfo("ReentrancyMock", ["v1.12.0"]), + "2cddebeab16c4e11f6457eae79615514d0467224": LibraryInfo("SafeMathMock", ["v1.12.0"]), + "ed5496d88df044b594a28d8b4e2b02aa8c5c98a9": LibraryInfo( + "StandardBurnableTokenMock", ["v1.12.0"] + ), + "4b79de8b6a7b868ac3db16c36c7caf1511dc4e9c": LibraryInfo("StandardTokenMock", ["v1.12.0"]), + "207467653a042b1e3f796be82daa00deae4be4e0": LibraryInfo("WhitelistMock", ["v1.12.0"]), + "3b64fac09338834e7f31e4a94857c405644ad27a": LibraryInfo("CanReclaimToken", ["v1.12.0"]), + "39458b20c5ba02b89578bdb4d0569fdedbb89449": LibraryInfo("Claimable", ["v1.12.0"]), + "30b2eb1b65dfd72e93c6370eec1b66cbc77514b6": LibraryInfo("Contactable", ["v1.12.0"]), + "d08d45bef636d729b4781cee2671f02dfc65cd46": LibraryInfo("DelayedClaimable", ["v1.12.0"]), + "733f7047e97a7426847cbc4176463ee020cf48d6": LibraryInfo("HasNoContracts", ["v1.12.0"]), + "4a4e894cd3cd3cfa4dcbcbd9568f81d20cd4e307": LibraryInfo("HasNoEther", ["v1.12.0"]), + "b025cfaf6f8e5da5efafe9883f25f18bab015a1f": LibraryInfo("HasNoTokens", ["v1.12.0"]), + "98a5d657fe6eb93bcdb660880496f6c163e654c1": LibraryInfo("Heritable", ["v1.12.0"]), + "8d77727ba855420961ee128de2676fec22402a03": LibraryInfo("SplitPayment", ["v1.12.0"]), + "55799f56ada0b8e0bcc75ecce38851eeb1332d8a": LibraryInfo("ERC20WithMetadata", ["v1.12.0"]), + "3c34d6a7f6c127303531d7e54e94a47fe0e30e82": LibraryInfo("BasicToken", ["v1.12.0"]), + "c784fa49f4c22ac28509c8b0d54381eabcc00a99": LibraryInfo("ERC20", ["v1.12.0"]), + "d89b847b33cf7f9529f426c6ed57e4b12cadda40": LibraryInfo("ERC20Basic", ["v1.12.0"]), + "c992e0acf64fafaea8a3158d8d80b84e22b3aaca": LibraryInfo("MintableToken", ["v1.12.0"]), + "bec3d2b20fa3b24ef5ac434c4a01b47b1e64a134": LibraryInfo("RBACMintableToken", ["v1.12.0"]), + "60e42b733ad56c03b8addc0df215791b1338c01e": LibraryInfo("SafeERC20", ["v1.12.0"]), + "ee8d24c22c925406ad22c22adab9654866eafdf3": LibraryInfo("StandardToken", ["v1.12.0"]), + "28a8c7bb0a04847910d3f9eead16d6d449620534": LibraryInfo("TokenTimelock", ["v1.12.0"]), + "1d8a3c508c18473083cb5db9961a36ba1a7f796e": LibraryInfo("TokenVesting", ["v1.12.0"]), + "c29ab0fd5418aa6c45a6e82f4d5a4f1477241875": LibraryInfo("ERC721Basic", ["v1.12.0"]), + "40d61fc659d2cba425f99f5b2656eb37b35731a4": LibraryInfo("ERC721BasicToken", ["v1.12.0"]), + "bb10ec6ee3cdd5386ecfd6de333f1eeb6a377689": LibraryInfo("ERC721Holder", ["v1.12.0"]), + "950c07b39c3ca854d94e48357f5d453e4c9c1965": LibraryInfo("ERC721Receiver", ["v1.12.0"]), + "6a9692e0a456886959918a48694dcd3dcb8baf5f": LibraryInfo("ERC721Token", ["v1.12.0"]), + "f0a61efe61df17f5559adaead1964139182d7dbf": LibraryInfo("Roles", ["v2.0.0", "v2.0.1"]), + "0d6fbe8089bfed5e4961f8bc56d5c8fb7be2dbda": LibraryInfo("CapperRole", ["v2.0.0", "v2.0.1"]), + "c7189a4af9a64378f15e69b14fc8e8b9cf99779a": LibraryInfo("MinterRole", ["v2.0.0", "v2.0.1"]), + "61a08e1edc53903eaeda23582b34825c0a67d23c": LibraryInfo("PauserRole", ["v2.0.0", "v2.0.1"]), + "d775bbc48440cc258eaa96091fcb81fa08bad123": LibraryInfo("SignerRole", ["v2.0.0", "v2.0.1"]), + "de16a5f2763080c0e057578a3cca2c570af9d066": LibraryInfo("Crowdsale", ["v2.0.0", "v2.0.1"]), + "567baa80771bce105326a8b76f150738e6a10db3": LibraryInfo( + "FinalizableCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "ffd73415ed9b47f97e48f5b42212bb055b4d21ed": LibraryInfo( + "PostDeliveryCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "ab93b46587fb58c1adb6cbd580ca17412917b74e": LibraryInfo( + "RefundableCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "a3a1fa663a64dda4b8c95f50c518bad87f75541e": LibraryInfo( + "AllowanceCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "656d0767acf97048298609648350fd1b019442a7": LibraryInfo( + "MintedCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "9ab95e8d5b012575e490704b512ce4928dbee629": LibraryInfo( + "IncreasingPriceCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "41f26f62f9f5227b1b6dbf65a6196c226e0939c8": LibraryInfo( + "CappedCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "b8bd1ce8e8a33223abedb3548de7c2f989969ebc": LibraryInfo( + "IndividuallyCappedCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "7b2a6e8e9aa71fb6a5d28b20399b0f5dccbd5463": LibraryInfo("TimedCrowdsale", ["v2.0.0", "v2.0.1"]), + "e6060cd66b2d3908f948ae9b850e85c3464ea305": LibraryInfo("ECDSA", ["v2.0.0", "v2.0.1"]), + "0260526f527ee9224774358021b9859015296518": LibraryInfo("MerkleProof", ["v2.0.0", "v2.0.1"]), + "1b7e98ea211e7445e5f678fa148ea775af49b6e1": LibraryInfo("Counter", ["v2.0.0", "v2.0.1"]), + "5be5fa4c91b2869c02f52a199e21be5806044560": LibraryInfo( + "ERC20TokenMetadata", ["v2.0.0", "v2.0.1"] + ), + "d769c77787738e2e01649f5b5b943fb06ed9b8a9": LibraryInfo( + "ERC20WithMetadata", ["v2.0.0", "v2.0.1"] + ), + "423800580427804d9eca8b706c43dc0297e37614": LibraryInfo("ERC20Migrator", ["v2.0.0", "v2.0.1"]), + "8d7f569e100340e8ba17eaedc939ff68b406b05e": LibraryInfo( + "SignatureBouncer", ["v2.0.0", "v2.0.1"] + ), + "b66a976d5f147079fb9c7f0a12415e008f585598": LibraryInfo("TokenVesting", ["v2.0.0", "v2.0.1"]), + "3f9165306b2f53880ed5096af1b4e74db56da9bf": LibraryInfo( + "SampleCrowdsaleToken", ["v2.0.0", "v2.0.1"] + ), + "1265d4f6bf6767e10033e733858ee6fa32a9073c": LibraryInfo( + "SampleCrowdsale", ["v2.0.0", "v2.0.1"] + ), + "3c7f94391a02d5dc6f8f262ec96b3bc2a4b25640": LibraryInfo("SimpleToken", ["v2.0.0", "v2.0.1"]), + "713380dc6ccc9d47f8d31a25eb0e446ebc4b4863": LibraryInfo("ERC165", ["v2.0.0", "v2.0.1"]), + "c281f8016ab3d891630a35bd07f11dff97431234": LibraryInfo("ERC165Checker", ["v2.0.0", "v2.0.1"]), + "1d4d0241d585c68fb08c1599437a4eea11eeab02": LibraryInfo("IERC165", ["v2.0.0", "v2.0.1"]), + "313e8327db21cc8aa166fe5721eb99a46e4fa19c": LibraryInfo("Pausable", ["v2.0.0", "v2.0.1"]), + "3d6ac03389ed6c835e26b7ebd8cd6f5bbc37934a": LibraryInfo("Math", ["v2.0.0", "v2.0.1"]), + "8580d3e0df2d45ed48cbd99d42c0934038129cf7": LibraryInfo("SafeMath", ["v2.0.0", "v2.0.1"]), + "113210a137c1be5187dcb3918a2a521d63f540cf": LibraryInfo("AddressImpl", ["v2.0.0", "v2.0.1"]), + "e09a6efec62a3a1d426fcf5bf0a6ef150cadb36d": LibraryInfo( + "AllowanceCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "34f5dc1d6acd84e2efeba46c180527f251dadcca": LibraryInfo("ArraysImpl", ["v2.0.0", "v2.0.1"]), + "5fe750839b60d2691dfc55d926090028b5003043": LibraryInfo( + "CappedCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "39412da7b5fdc81977acbda550e8dc71f6dba41b": LibraryInfo("CapperRoleMock", ["v2.0.0", "v2.0.1"]), + "717e4d2b812a14a6c4d5658cb94dcc835a0af6f9": LibraryInfo( + "ConditionalEscrowMock", ["v2.0.0", "v2.0.1"] + ), + "85e956ec45ece826f1c53505c1f035f3329fe0ad": LibraryInfo("CounterImpl", ["v2.0.0", "v2.0.1"]), + "7ab9fe5373ce944504f2893349ea086b216b71a8": LibraryInfo("CrowdsaleMock", ["v2.0.0", "v2.0.1"]), + "c321c20499e195867282851da42f2ccbbdb96167": LibraryInfo( + "ERC20DetailedMock", ["v2.0.0", "v2.0.1"] + ), + "5e0bcabbb2cfd18eb2d43ff6fd8d8e20dbeeb019": LibraryInfo("ECDSAMock", ["v2.0.0", "v2.0.1"]), + "a5da195613c182f94167d833dec5c7d4da0b5ba7": LibraryInfo( + "SupportsInterfaceWithLookupMock", ["v2.0.0", "v2.0.1"] + ), + "bc1a4e4cfd066ef11bc6e2465ddec0f3fd4d51c4": LibraryInfo( + "ERC165InterfacesSupported", ["v2.0.0", "v2.0.1"] + ), + "29cd8653e4b4504f0999a2454d9abf1f945de8f9": LibraryInfo( + "ERC165NotSupported", ["v2.0.0", "v2.0.1"] + ), + "ae16304dfc91c51729a425eaf772ae8d08593dae": LibraryInfo( + "ERC165CheckerMock", ["v2.0.0", "v2.0.1"] + ), + "aea815c696fff49c7fc52185b0523a33f7371b49": LibraryInfo("ERC165Mock", ["v2.0.0", "v2.0.1"]), + "b7b9d98b25d14185d4e3c2986c7a5a39b1f0781d": LibraryInfo( + "ERC20BurnableMock", ["v2.0.0", "v2.0.1"] + ), + "2399138dd71e45eaa2b5496aa7c751e39304ff91": LibraryInfo( + "ERC20MintableMock", ["v2.0.0", "v2.0.1"] + ), + "069f9a6dfd87e2586b4fab42ca29e826310646ea": LibraryInfo("ERC20Mock", ["v2.0.0", "v2.0.1"]), + "a5c6bf38e0fa04c8d470478a4bb8a3076e00e6e0": LibraryInfo( + "ERC20PausableMock", ["v2.0.0", "v2.0.1"] + ), + "9a8f6b3985ad17fe0cadbda553573df4e4731e7e": LibraryInfo( + "ERC20WithMetadataMock", ["v2.0.0", "v2.0.1"] + ), + "947e9e69d2016cebb10ee296f0f6495090671a21": LibraryInfo("ERC721FullMock", ["v2.0.0", "v2.0.1"]), + "3ca707c71f9022105f61b352c598c256703178f2": LibraryInfo( + "ERC721MintableBurnableImpl", ["v2.0.0", "v2.0.1"] + ), + "7c3cb25da3236a7c5738e31d410df75d16af096c": LibraryInfo("ERC721Mock", ["v2.0.0", "v2.0.1"]), + "cb9a0e0a90469cd5b4e5aca0a818330f486bc3f9": LibraryInfo( + "ERC721PausableMock", ["v2.0.0", "v2.0.1"] + ), + "13b19933bdd88840f5a617e14c9d736546ea8839": LibraryInfo( + "ERC721ReceiverMock", ["v2.0.0", "v2.0.1"] + ), + "53bfe5d6b4368228e985c1fe3f02b8534416b3a0": LibraryInfo("EventEmitter", ["v2.0.0", "v2.0.1"]), + "7057eb7b10d45a631cb5f442fc76bb7d5407a901": LibraryInfo( + "FinalizableCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "2c959d10bff6c2909017efd20dc0e347da94e219": LibraryInfo( + "IncreasingPriceCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "4a383b44bd773fe5ed6e84ff12070f60603c1eca": LibraryInfo( + "IndividuallyCappedCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "15f79f51354210f3bf40a1555bd9e0f479292474": LibraryInfo("MathMock", ["v2.0.0", "v2.0.1"]), + "f1291dc03b8c8f52ebc9ebda49c5ec933f050fa2": LibraryInfo( + "MerkleProofWrapper", ["v2.0.0", "v2.0.1"] + ), + "f1cfdc773653bf69f5c277a60d81abd46029bebd": LibraryInfo( + "MintedCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "cedf354f18ea2894c41fb93c79a08d07051846c4": LibraryInfo("MinterRoleMock", ["v2.0.0", "v2.0.1"]), + "43a5ef129162556fd38e9c4175c7dcbcf3213d22": LibraryInfo("OwnableMock", ["v2.0.0", "v2.0.1"]), + "59b3c7740b08088fb10e47d0d86fb6b7312e269a": LibraryInfo("PausableMock", ["v2.0.0", "v2.0.1"]), + "d2b11cbf3fca7f65ac31170f6e1533b639486478": LibraryInfo("PauserRoleMock", ["v2.0.0", "v2.0.1"]), + "4c25587eb2479ee3623ae6e168e3edf3f51914b7": LibraryInfo( + "PostDeliveryCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "dc38502622bd92737566c51aba07ec48ed2c02ac": LibraryInfo( + "PullPaymentMock", ["v2.0.0", "v2.0.1"] + ), + "1c605d2812687edd646a5fde7d2fe7ccda137edb": LibraryInfo( + "RefundableCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "03dfbef44fe5a4a75c99a3e995675f027f15b2d6": LibraryInfo("RolesMock", ["v2.0.0", "v2.0.1"]), + "938a3b0db268f2cefb5b7eb3ed792308f5865027": LibraryInfo( + "ERC20FailingMock", ["v2.0.0", "v2.0.1"] + ), + "45d60ab40be79c18dcb7a111ab02614c3e47db37": LibraryInfo("ERC20SucceedingMock", ["v2.0.0"]), + "2e88c135c98b395714739991d9072bdaf48b7cf0": LibraryInfo( + "SafeERC20Helper", ["v2.0.0", "v2.0.1"] + ), + "0dc70ec0c9017ae55f65d3473d5a44f0c093dcab": LibraryInfo("SafeMathMock", ["v2.0.0", "v2.0.1"]), + "337c1f8e999806aed78498d4372754b2344ccb2d": LibraryInfo("SecondaryMock", ["v2.0.0", "v2.0.1"]), + "3f228f7bf41c099970f6748488b9cd7d00afe7f6": LibraryInfo( + "SignatureBouncerMock", ["v2.0.0", "v2.0.1"] + ), + "caf3459749bb0264fa5a5d0a07f413f6991e0c41": LibraryInfo("SignerRoleMock", ["v2.0.0", "v2.0.1"]), + "a2df662c3e2a73f196b5067859545a352db2bdac": LibraryInfo( + "TimedCrowdsaleImpl", ["v2.0.0", "v2.0.1"] + ), + "e2ca5cd4923928c9f46de8e2e7df82ba01585738": LibraryInfo("Ownable", ["v2.0.0", "v2.0.1"]), + "a6c503a46f2f91f5fb01793e96c7cb9c5363069e": LibraryInfo("Secondary", ["v2.0.0", "v2.0.1"]), + "bb8f25ed8686742450daf6ba9b7cf99a2d20dacd": LibraryInfo( + "PaymentSplitter", ["v2.0.0", "v2.0.1"] + ), + "52b717d273b5bfb68c8630175990354fc172b4e6": LibraryInfo("PullPayment", ["v2.0.0", "v2.0.1"]), + "186ae2534c331ef59b6a86efc4a02d3b41cf1c8d": LibraryInfo( + "ConditionalEscrow", ["v2.0.0", "v2.0.1"] + ), + "e2af959beebe03963562c8e06b5eddbfe4e8b750": LibraryInfo("Escrow", ["v2.0.0", "v2.0.1"]), + "284f716f2501cfb02bee9357adc4c1eb840b0ac0": LibraryInfo("RefundEscrow", ["v2.0.0", "v2.0.1"]), + "8235160a08bafe5bcafad41567e3229bbc331839": LibraryInfo("ERC20", ["v2.0.0", "v2.0.1"]), + "4a97e9cbe78ad401ec19e46d114c71ea6f6f3d14": LibraryInfo("ERC20Burnable", ["v2.0.0", "v2.0.1"]), + "c098a863a8b795e46bd3c055ebf944190443f2be": LibraryInfo("ERC20Capped", ["v2.0.0", "v2.0.1"]), + "9dc5cc5b708cd1822f27baee4bc9c7d5f1b15d15": LibraryInfo("ERC20Detailed", ["v2.0.0", "v2.0.1"]), + "0222ab47eca4f760dd21963f230a5fb803c0b4db": LibraryInfo("ERC20Mintable", ["v2.0.0", "v2.0.1"]), + "23c0bd7b456d222b9d9625220eff56887fcff2ff": LibraryInfo("ERC20Pausable", ["v2.0.0", "v2.0.1"]), + "fc05cf3f16e6ed0739b635d0b79e115d53ab4d76": LibraryInfo("IERC20", ["v2.0.0", "v2.0.1"]), + "f05d94772232c941ce0bba7c06a494b3a0b0a217": LibraryInfo("SafeERC20", ["v2.0.0"]), + "5eba5fb2bcd1248ec673a99ce57e788601326cdb": LibraryInfo("TokenTimelock", ["v2.0.0", "v2.0.1"]), + "18adf8251b9db34a725031820ac989d18b6823f7": LibraryInfo("ERC721", ["v2.0.0", "v2.0.1"]), + "10c5c3d991ca543dc5cc61d85664c797a01dd473": LibraryInfo("ERC721Burnable", ["v2.0.0", "v2.0.1"]), + "beb061075916c16204b16cc18d4a3804df2aaeeb": LibraryInfo( + "ERC721Enumerable", ["v2.0.0", "v2.0.1"] + ), + "8c15a90797b67219f50776315045bdad8ebe7a87": LibraryInfo("ERC721Full", ["v2.0.0", "v2.0.1"]), + "f0ab234347570e7a9fc23f9d740b6784f31f2a58": LibraryInfo("ERC721Holder", ["v2.0.0", "v2.0.1"]), + "5769b699617659dc63abace9efab19a6bb17a22e": LibraryInfo("ERC721Metadata", ["v2.0.0", "v2.0.1"]), + "1f3d7d62ddc8d3c2b2a20255a4c40ee86432049e": LibraryInfo( + "ERC721MetadataMintable", ["v2.0.0", "v2.0.1"] + ), + "e9ea73c83db4303fb0a6556f2b37eee4441b73df": LibraryInfo("ERC721Mintable", ["v2.0.0", "v2.0.1"]), + "f82126eaeab8efc10723ee81a2f039d1baa7f6df": LibraryInfo("ERC721Pausable", ["v2.0.0", "v2.0.1"]), + "560f515efb7ed83cf9c09d5b79693343104260d4": LibraryInfo("IERC721", ["v2.0.0", "v2.0.1"]), + "67ad40b09e6d653e19421f7014f3e350d5cdd9ac": LibraryInfo( + "IERC721Enumerable", ["v2.0.0", "v2.0.1"] + ), + "90d70ae5ca5809d733d2e9fb28f817532cf2f0fb": LibraryInfo("IERC721Full", ["v2.0.0", "v2.0.1"]), + "51959c2d6c447821dd8897bda07dcb6c633282ba": LibraryInfo( + "IERC721Metadata", ["v2.0.0", "v2.0.1"] + ), + "e14b06d2c5031542140ef8bc33fd56fd99c2ecc6": LibraryInfo( + "IERC721Receiver", ["v2.0.0", "v2.0.1"] + ), + "03d71a566ea9225b43c66ae51dceebcd0da7e323": LibraryInfo("Address", ["v2.0.0", "v2.0.1"]), + "a41c0e26a104eac14adff7bfb2fbaa3e223883e5": LibraryInfo("Arrays", ["v2.0.0", "v2.0.1"]), + "d3ed07597d18babbd7344381e4e6d7b727795ca8": LibraryInfo( + "ReentrancyGuard", ["v2.0.0", "v2.0.1"] + ), + "8b179f92ca6c1e439bb544b4798c389b5c78687b": LibraryInfo("ERC20SucceedingMock", ["v2.0.1"]), + "ef0d299d4c858659f2b78e2ede4e089067ef911b": LibraryInfo("SafeERC20", ["v2.0.1"]), + "49d0b746a287d74cc714cbf2c174c231093fbf72": LibraryInfo( + "Roles", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "e58c83075e53473844ccb571dde2cd30a4b82912": LibraryInfo( + "CapperRole", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "da35a3d6d7d9d825fbb987d916b68fd32e348f47": LibraryInfo( + "MinterRole", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "69fa5a584acfdc5b9a6d8e76882308aad31a31e4": LibraryInfo( + "PauserRole", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "a81e3a3364183cd787d8e461c6df7daaf55586f2": LibraryInfo( + "SignerRole", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "581f46692dcd9692ca67f5cc61a7bb1b3e712290": LibraryInfo( + "WhitelistAdminRole", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "42d70f9fafd3ff7a27bedd0976b0905416bb0a4f": LibraryInfo( + "WhitelistedRole", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "780a9ae4d9266ce7ec373260ffce87614258ca2f": LibraryInfo( + "Crowdsale", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "0dbefc37cfbfcfe26099c488dadba4a66d6e9512": LibraryInfo( + "FinalizableCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "60ff213d27e3d08e39d78629af2e0f57119d93e2": LibraryInfo( + "PostDeliveryCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "487942e4eb8721d19908196bd30f897dc2c6db3e": LibraryInfo( + "RefundableCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "fb65273ef381e17d86e898541acd1fba51e304a7": LibraryInfo( + "RefundablePostDeliveryCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "961682e22bd8ffe0ffcc8111fd7e2ad1003d2189": LibraryInfo( + "AllowanceCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "ebaedbafbdaa1cde24c257781d36ba931a2dd830": LibraryInfo( + "MintedCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "e2c4d52950ae64e9f7a4f551972df02e1b099de5": LibraryInfo( + "IncreasingPriceCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "f62969face2bdc7724d99bcd5046883288ecea52": LibraryInfo( + "CappedCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "43b1d8a5e54c23dc212c7f199511a965a4fec5b7": LibraryInfo( + "IndividuallyCappedCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "fb880cb8c46f68da6b53afca6fa8429b5bab3ade": LibraryInfo( + "PausableCrowdsale", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "dd7b8f3a631856e81a5fd24beb58fa56417cd0fc": LibraryInfo( + "TimedCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "3bf3e3bb72048132bff0717ef5dd2dd25d61f229": LibraryInfo( + "WhitelistCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "8eac263edf76d56c747feb9a5a4e5529d920aa11": LibraryInfo( + "ECDSA", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "d86f0bd36ed54800fbf5d094c0cd61680bd7fe22": LibraryInfo( + "MerkleProof", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "d86f0434c7e803fa4e355f6bb78c5847d8e828e6": LibraryInfo( + "Counter", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "3063a8a855ab9d8e1d31ac38179c32bd475a2aa1": LibraryInfo( + "ERC20TokenMetadata", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "40b61fcc362b84b7b8f5b45403faaac2ded0048c": LibraryInfo( + "ERC20WithMetadata", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "6f5320de16c71dbf2d08b478bcae89a7c8cfe0e0": LibraryInfo( + "ERC20Migrator", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "163a9d74ebf7a2cc7f910697d513585918f276e7": LibraryInfo( + "SignatureBouncer", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "bc64e7383ee9e61b613c0aa77c38e4173b727986": LibraryInfo( + "SignedSafeMath", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "5bc207b44f8ed1bf37ed702d8785882f6eb3277a": LibraryInfo( + "TokenVesting", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "63f538b47a22324fed11f97b993e48a18d32b522": LibraryInfo( + "SampleCrowdsaleToken", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "18ac17a25a4dfe3748f013b5e1acd2e638495cd8": LibraryInfo( + "SampleCrowdsale", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "858f334ed2c08da2e605ab04db4d526ede537cd9": LibraryInfo( + "SimpleToken", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0"] + ), + "b511b2fa36bea37c2840edc1be130612d949daed": LibraryInfo( + "ERC165", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "ef087ed4bf42cc143bba6361e99f5d965c5209a3": LibraryInfo( + "ERC165Checker", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "89b41dcad369ddf9289dd5bb640703e5e19805bf": LibraryInfo( + "IERC165", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "8f78aa0fbc5f33696eba1aa5999f0367ccbe4b29": LibraryInfo( + "Pausable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "294fd705d0a1c8e94cce6774f9f0275538787670": LibraryInfo("Math", ["v2.1.1", "v2.1.2", "v2.1.3"]), + "ff5489b53ba0a4f650a926519ed6745ff910f7a8": LibraryInfo( + "SafeMath", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "397b543dc2df14ccc410e0e472228aef1279e096": LibraryInfo( + "Acknowledger", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "85458728ded749f7a0cb0417b4e6608c6fc04ca7": LibraryInfo( + "AddressImpl", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0"] + ), + "8b9f37cdbcfeb15a883ad849d9868379469b94b4": LibraryInfo( + "AllowanceCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "65eb147c8b702f4742f2325c5774f1f87bca413d": LibraryInfo( + "ArraysImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "352bf73276ce2e422b715010bbb26a7dea1c060c": LibraryInfo( + "CappedCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "2f63c91f090d3cf53ce96db8800692c34c53ba41": LibraryInfo( + "CapperRoleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "e43d3f784551e1eca9b046aff7dd1746ca1e53eb": LibraryInfo( + "ConditionalEscrowMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "249d26fc0d08c342aedec0b9d92cc74e31d97db7": LibraryInfo( + "CounterImpl", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "e063b808e89ecc3de5c4bbc9c919ffa7d7301b8b": LibraryInfo( + "CrowdsaleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "261bee63890ac92d183103eb06aa9e6468d00af7": LibraryInfo( + "ERC20DetailedMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "a6d03a12f085621702ec2abe355799a5e60980fa": LibraryInfo( + "ECDSAMock", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + ], + ), + "97bcc379f499053394cb9b39baca0b5bd2c95f3b": LibraryInfo( + "SupportsInterfaceWithLookupMock", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "e3f94dff17a0ddffe91cce083b0ab7da1ca407f8": LibraryInfo( + "ERC165InterfacesSupported", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.2.0", + "v3.3.0", + "v3.4.0", + "v3.4.1", + "v3.4.2", + ], + ), + "ce2f042f44149297411c63b1656a7aed7c351281": LibraryInfo( + "ERC165NotSupported", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "c8c6b08e59408716543fdf833bfdd2a46d5e9042": LibraryInfo( + "ERC165CheckerMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "cc59e5ee83e2ac3c54a9faf63f95c3c7db171e66": LibraryInfo( + "ERC165Mock", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "d9b73968b741d5cd53aaa7ac879f736785c91141": LibraryInfo( + "ERC20BurnableMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "03703594ba3bb7a29f8c457c8485de1f768c430c": LibraryInfo( + "ERC20MintableMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "06a59988de5e175074dfd61846655d8ceb6aabb0": LibraryInfo( + "ERC20Mock", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "7c599fc3da0043e6e8a27890071a64e581e9491c": LibraryInfo( + "ERC20PausableMock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0"] + ), + "cdf48b32e8a2040fa1785ff4006015ae3621620b": LibraryInfo( + "ERC20WithMetadataMock", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "d1d60fd9b13a8685ab6f8aa87048c6e0a67d1c27": LibraryInfo( + "ERC721FullMock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0"] + ), + "6944978f728b1665abaf2da7ba86b5428e99dba2": LibraryInfo( + "ERC721MintableBurnableImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "bb08f27cff0b19ef4adf183eb68d1e2ad2664ba7": LibraryInfo( + "ERC721Mock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0"] + ), + "e51473b4de0d0cc41702f42d615f4d0e27789c60": LibraryInfo( + "ERC721PausableMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "de3c52bb67df9b1e74f88dccf8ddacad748a91bc": LibraryInfo( + "ERC721ReceiverMock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "b9f98976e3f3bb053a1d6ac241b4e13dce74244d": LibraryInfo( + "EventEmitter", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "ebb254073b372b3a28ea94e56212bb41ff372386": LibraryInfo( + "IndirectEventEmitter", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "9dcc5fe734a4d420457384896568ef817dda942f": LibraryInfo( + "Failer", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "06096854e33cbf52e2704e3f87d107c58f52d145": LibraryInfo( + "FinalizableCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "f7a220e190e202e59e7ed83e8d93ebb8f676d3a5": LibraryInfo( + "IncreasingPriceCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "48221c607b28f7ff67eb496dccaac552e2e4b80c": LibraryInfo( + "IndividuallyCappedCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "a1780e67e3aeed1cb9493ffe00e2840fd85e5b52": LibraryInfo( + "MathMock", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "811b3f5f798d1bd67cb4351ede94b40a96251450": LibraryInfo( + "MerkleProofWrapper", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "f19bf654847043124db5ee412a4926fd45ece93c": LibraryInfo( + "MintedCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "80c381c593821fb47db89d55e26bc66eb3b9815b": LibraryInfo( + "MinterRoleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "46c4d8c42833e483c06badecf3ef4870eeeef4c0": LibraryInfo( + "OwnableInterfaceId", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "799e7db4e23a6cef4a8d9642ae4b5cd2d7eaa3c1": LibraryInfo( + "OwnableMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "3f555df97ee448ff10299cb97da90b3f3b38a0d2": LibraryInfo( + "PausableCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "351955623b3a5ba04402dc84132efe3bd36d81d6": LibraryInfo( + "PausableMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "39f9b49623e98258a14b689f719e4c9e39960a58": LibraryInfo( + "PauserRoleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "df64a5fc7bb156be6d151d1853a4717c501fe981": LibraryInfo( + "PostDeliveryCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "f2bc5891107b19ad4a9e2bcc9eb78651c23d8536": LibraryInfo( + "PullPaymentMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "4cc249e1ae70127d1438dd7e52e00c76a0714e7a": LibraryInfo( + "ReentrancyAttack", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "f9a7437047cc110b3d7c7886c537e63c88d58f77": LibraryInfo( + "ReentrancyMock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "9baeb425b432c40949ab0d772f3673356433e5fe": LibraryInfo( + "RefundableCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "3a1327b39ea8686de5d4eae4488f464238196ba8": LibraryInfo( + "RefundablePostDeliveryCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "7c102c2c0df13f6306a1491d1dab99216519efe4": LibraryInfo( + "RolesMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "9172a3718949c08ec82487993301e25b4e988338": LibraryInfo( + "ERC20FailingMock", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "05db7acd560f57643755be95bbbafe39db03db36": LibraryInfo( + "ERC20SucceedingMock", ["v2.1.1", "v2.1.2"] + ), + "e0f626fb634ae0401a38f07d5562a7e66339e42e": LibraryInfo( + "SafeERC20Helper", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "5cb3f28de3e654931732a980fd663fecc4a1081a": LibraryInfo( + "SafeMathMock", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "f8da5f69fc930b78d4d5ea2eac5147aa2b6ea5d4": LibraryInfo( + "SecondaryMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "991f87c81fa1c7f853b0d77766c2d897e6f0f084": LibraryInfo( + "SignatureBouncerMock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0"] + ), + "8ce412c8cd9286e85b7c28e3c3ed644bacaf39d8": LibraryInfo( + "SignedSafeMathMock", + [ + "v2.1.1", + "v2.1.2", + "v2.1.3", + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "47eee6b2d10bb21084c63f29a263bbe01173cac4": LibraryInfo( + "SignerRoleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "07b4e8cb7b3f12b92375f0a93c3eb2eb23aaaf60": LibraryInfo( + "TimedCrowdsaleImpl", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "20f40b25fbd13c483becd042f5bf06e98b7bfe33": LibraryInfo( + "WhitelistAdminRoleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "148d4321f050aa8ff5724607bf13e1d4b55ca33c": LibraryInfo( + "WhitelistCrowdsaleImpl", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "9986f2f41f56c43eb27b92c0547ac10e02d052fc": LibraryInfo( + "WhitelistedRoleMock", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "d918cc9ba3b27a39e2e0a05c8be5b5fb07117521": LibraryInfo( + "Ownable", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "f682e6ff4e928c190146ce6abc350197ee6dd9b2": LibraryInfo( + "Secondary", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "015f648298c32f15f9b2e3dbda148e05c9f29ec1": LibraryInfo( + "PaymentSplitter", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "feb2a352c4a8597f50e0c7f7caec4787e8a04571": LibraryInfo( + "PullPayment", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "1236e7cc69efcf915b7ce81450fa7c8f013d66e3": LibraryInfo( + "ConditionalEscrow", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "a1b2c0241d1f22d1d32c71415293e2357ce9754c": LibraryInfo( + "Escrow", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "6e2e6ee47de4500756716fbf8943f13b29b2771e": LibraryInfo( + "RefundEscrow", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "a08504b8c3c127e9f3a15cdd588573058a60acca": LibraryInfo( + "ERC20", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "3bcfc9705f5bcab4583eebcaefd66a89e28e23c7": LibraryInfo( + "ERC20Burnable", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "566bcf581eb9ed38c8c2b2e90cace8b78e7e2acb": LibraryInfo( + "ERC20Capped", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "77ba7d78c25254fb6a22f0a92fa04b95a8ba4ef0": LibraryInfo( + "ERC20Detailed", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "d602a9c5786af67ef6bb2d431651081d76dcdd89": LibraryInfo( + "ERC20Mintable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "563404ae3ad9decba0f1f12d78aff9234a84bab5": LibraryInfo( + "ERC20Pausable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "b3e5be0b3f985e92fe1f9146d8133f70c7370c9c": LibraryInfo( + "IERC20", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "bdd10fc95fdb3e43dcb6f50c5a790526eb2339a5": LibraryInfo("SafeERC20", ["v2.1.1", "v2.1.2"]), + "1bc7268e369e6f66cae9a346a3be4200fb9ab2a2": LibraryInfo( + "TokenTimelock", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "f5495923e256fc4aa541fe592c69f9c6a49d09b1": LibraryInfo( + "ERC721", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "bff0ac152d4f9d6016939cc8a2f0abd3952a5cff": LibraryInfo( + "ERC721Burnable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "14d60ce0ee22fe6cc17a67f827f2d6405fde45fb": LibraryInfo( + "ERC721Enumerable", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "1c5e388a06c8bc5e4ebbd264403d229c79cb538b": LibraryInfo( + "ERC721Full", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "dc6488481efeb3f0a3fe4012e44cc9630de20454": LibraryInfo( + "ERC721Holder", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "57d6282eac3ccb6f9934d1d2341098cd94888d34": LibraryInfo( + "ERC721Metadata", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "bf266ddbcc0c703ec528a3589125187209ecfa0b": LibraryInfo( + "ERC721MetadataMintable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "feb0e24e8119875a567c7f63ae626229e989ba6b": LibraryInfo( + "ERC721Mintable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "4e7a7464f14927dcd4ac1c4c80c1416a532a1762": LibraryInfo( + "ERC721Pausable", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0"] + ), + "181645ad9bfe9ec844972ef6c3335fd0ea4a350e": LibraryInfo( + "IERC721", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "5eeb659e05046a4f4fc1b998fca1960305af320d": LibraryInfo( + "IERC721Enumerable", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "49a0645eb5f2c78e85729f78b6e46b5daba24d94": LibraryInfo( + "IERC721Full", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "80912b3e9ab6eb4d3fc3d42d7a49810811a8067d": LibraryInfo( + "IERC721Metadata", + ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"], + ), + "54be7bd4bad6dd7473376057523b9d49cb448688": LibraryInfo( + "IERC721Receiver", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "7a16711320090635c8beb50e1328a501c188f888": LibraryInfo( + "Address", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "5176d91de61a03d02be10f24b2a03fdbc6683a68": LibraryInfo( + "Arrays", ["v2.1.1", "v2.1.2", "v2.1.3"] + ), + "2b1f3555fce0551e87ee87794b27941844b305ed": LibraryInfo( + "ReentrancyGuard", ["v2.1.1", "v2.1.2", "v2.1.3", "v2.2.0"] + ), + "8bf62064d4d5f310f90c3b0260f35ed98a945899": LibraryInfo("ERC20SucceedingMock", ["v2.1.3"]), + "7fc61c5c87173431d88d59b7645b20b7a5a30a13": LibraryInfo("SafeERC20", ["v2.1.3"]), + "26d3b2bc6fb00cba01f3fc93926107bb8547dfca": LibraryInfo("Crowdsale", ["v2.2.0"]), + "dbbddfca9a9d822603879d0b26c9a87f896185e7": LibraryInfo("IncreasingPriceCrowdsale", ["v2.2.0"]), + "0b1275c2973bc9904a4719496518db986e75f0d9": LibraryInfo("TimedCrowdsale", ["v2.2.0"]), + "3181a686cc87d9773617f11e6e744a8ef4cd1485": LibraryInfo("WhitelistCrowdsale", ["v2.2.0"]), + "b44caa5b9a40b460428ea5145c3b516263196f9c": LibraryInfo("ECDSA", ["v2.2.0"]), + "a49a652a900af135636686be65e24c59b562f1f2": LibraryInfo( + "Counters", ["v2.2.0", "v2.3.0", "v2.4.0"] + ), + "24b08de6151fdf941a10bb1dec241f27958feee3": LibraryInfo( + "ERC20Metadata", ["v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "ced0258d0b0d50383252c1a10e11e72c54d8f854": LibraryInfo("ERC20Migrator", ["v2.2.0"]), + "d6493fab55286955839b4d6d279bda02b11c3644": LibraryInfo("ERC20Snapshot", ["v2.2.0"]), + "83dc70f4ffa7ca8b4bb744aafe520ca5813e5df5": LibraryInfo("SignatureBouncer", ["v2.2.0"]), + "df185ebc2fa12c378e5015bd475332756504f60d": LibraryInfo("SignedSafeMath", ["v2.2.0"]), + "4fb66323fe71536c1796582d32bfcabf6716ff65": LibraryInfo("TokenVesting", ["v2.2.0"]), + "bdfbcc3f8bc59328aa6ab0d4a20d24270492f9a2": LibraryInfo("ERC165", ["v2.2.0"]), + "2d2ca1d7fb9b959879a30f3a36a6ff381be7a50b": LibraryInfo("ERC165Checker", ["v2.2.0"]), + "d0b3500ec510385e5f14da45b3f72cbecf2d0e1a": LibraryInfo("Math", ["v2.2.0"]), + "a38f7d36cea19217092f7ee679308e368ec9a9bc": LibraryInfo("SafeMath", ["v2.2.0"]), + "b65922943e3104021a6f39825a9ad792d6c06202": LibraryInfo( + "CountersImpl", + [ + "v2.2.0", + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "0568279ce96d91ad7a4dbba12201003893a914a0": LibraryInfo( + "SupportsInterfaceWithLookupMock", ["v2.2.0"] + ), + "191327eebe6456d41be46d29262f424cb14cdaa4": LibraryInfo( + "ERC20MetadataMock", ["v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "ec24556da2b236f33be4263e76835c6f7b07c579": LibraryInfo("ERC20Mock", ["v2.2.0"]), + "b1f5209f1503fb7b95c1e274a4605961263658d6": LibraryInfo( + "ERC20SnapshotMock", ["v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "600c8541c63ee789fdef9c5c2901eabfcefc40c1": LibraryInfo("ERC20ReturnFalseMock", ["v2.2.0"]), + "375ddc80a306ac6fd622911e87a929e4317bc498": LibraryInfo( + "ERC20ReturnTrueMock", ["v2.2.0", "v2.3.0"] + ), + "5ff30663aecee0ab6ec3bc9342d9a21cb64e1ad3": LibraryInfo( + "ERC20NoReturnMock", ["v2.2.0", "v2.3.0"] + ), + "c6eeb63f9350a6293d3cd162768c72f84899efac": LibraryInfo( + "SafeERC20Wrapper", ["v2.2.0", "v2.3.0"] + ), + "5ec72a2da405c23f8b5610b9e7b0e4bb586a904c": LibraryInfo( + "TimedCrowdsaleImpl", ["v2.2.0", "v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "3086bc6470bdddb0bccf23d803130a76067fee7a": LibraryInfo("Ownable", ["v2.2.0"]), + "b83b3645b9107f5cbc95e2afbb57f6002e3e72d7": LibraryInfo("PullPayment", ["v2.2.0", "v2.3.0"]), + "9ab9c8709262c8ac99601051ce5c5d1ddd2950a6": LibraryInfo("ConditionalEscrow", ["v2.2.0"]), + "61dd244ce7b91aab023abcd5e64e90a7c2d363dd": LibraryInfo("Escrow", ["v2.2.0", "v2.3.0"]), + "4a5447519ca8bb2d82a79bd5b0b9b0792bba23a8": LibraryInfo("RefundEscrow", ["v2.2.0"]), + "c8df889cca25546f32a258b75f263fff3be529e9": LibraryInfo("ERC20", ["v2.2.0"]), + "21b260d15766f58e0590ea216fb5db31db4788e9": LibraryInfo("ERC20Burnable", ["v2.2.0"]), + "490f2847cf60a16df023549e03e6ff6a16f01f9e": LibraryInfo("SafeERC20", ["v2.2.0"]), + "67ec2c098cb4626d76ee8762f555edadeaf863c8": LibraryInfo("ERC721", ["v2.2.0"]), + "84f02d651f97b0225a3ad08eda8e51c73fca5eda": LibraryInfo("ERC721Enumerable", ["v2.2.0"]), + "b3f7f407fd76e2dc2ee39174a1f483e5864bb7b7": LibraryInfo("ERC721Metadata", ["v2.2.0"]), + "4e241f646d96f095386eae6a7a5f13e6dac682f1": LibraryInfo( + "IERC721Receiver", ["v2.2.0", "v2.3.0"] + ), + "5d932009fc8f204b32e2ff3b795b5a4016ba8856": LibraryInfo("Arrays", ["v2.2.0"]), + "97ad171eccfd6d686444cb1a096ca32c1e081173": LibraryInfo( + "Roles", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "12d3a805c82a503a32584116eaa679c58663182e": LibraryInfo("CapperRole", ["v2.3.0"]), + "920fb014fdab17d9962e4a051ecb05e0346803c4": LibraryInfo("MinterRole", ["v2.3.0"]), + "0755ddb27f6aeb4095c5fa52223c6c321f634f37": LibraryInfo("PauserRole", ["v2.3.0"]), + "f2fdc6353650ca2a99350d5668fec6460865baf0": LibraryInfo("SignerRole", ["v2.3.0"]), + "a7420e74fc819c039143c4fc4060b3f8233aed23": LibraryInfo("WhitelistAdminRole", ["v2.3.0"]), + "7731004a855c8698643498ec733dfc528ab5e9af": LibraryInfo("WhitelistedRole", ["v2.3.0"]), + "362c8c4f6c21345efab16b43ac7a6dda826ef8bb": LibraryInfo("Crowdsale", ["v2.3.0"]), + "3a548446ff8b86dd7fc634446568f9549949d0aa": LibraryInfo( + "FinalizableCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "4109c79f50836cd29d813afbeeed549745e579c9": LibraryInfo( + "PostDeliveryCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "8d80a124fdfc163f1856b30d54475338d1995fa2": LibraryInfo( + "__unstable__TokenVault", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "9dc3b6cc96b6bcf6dcdeb91ba4c732a8f7da0336": LibraryInfo("RefundableCrowdsale", ["v2.3.0"]), + "b123691e7215b1777026a26b72965372b355fc71": LibraryInfo( + "RefundablePostDeliveryCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "18869bdf9d3a93150d1e0edcb1db4a85ee23e28c": LibraryInfo( + "AllowanceCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "6e75e6262faa2337d43ec1066f50e2fd71409199": LibraryInfo( + "MintedCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "33eb8c2e2ae6b95c6cf58d3c9c06587e7ca2bf3f": LibraryInfo( + "IncreasingPriceCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "e8bfd676822015708c097b2064fc5d898f45c5fd": LibraryInfo( + "CappedCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "8c2f617d1f49cb4fbef87748d2cf71aed74d515a": LibraryInfo( + "IndividuallyCappedCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "9d143c684d3650ae76ef4cc89c043eb8c3680445": LibraryInfo( + "TimedCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "6080c9c622f05b4a6439d1c98b67333b5edb9bb9": LibraryInfo( + "WhitelistCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "791cc5d0ccd96d4d7cea297d4dd4282a2e03e30e": LibraryInfo("ECDSA", ["v2.3.0"]), + "4737e887fd1bc839b8b8cf2f10f02eaacda8294d": LibraryInfo("MerkleProof", ["v2.3.0", "v2.4.0"]), + "b7ed70197dc7c1b670f34cf2e3b4e58865383cd9": LibraryInfo( + "ERC20Migrator", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "1b898dc4c40ad6e77b5e7600958f0675d6182077": LibraryInfo( + "ERC20Snapshot", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "13b02c8c4a18591bc141c84d4f390a470699efee": LibraryInfo("SignatureBouncer", ["v2.3.0"]), + "e121f6ee965082a37437175f7f7de7327fc7f6ec": LibraryInfo("SignedSafeMath", ["v2.3.0"]), + "34333c9d9d0dd9cad48ced9b7ec9f16499d9e51f": LibraryInfo( + "TokenVesting", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1", "v3.0.0", "v3.0.1", "v3.0.2"] + ), + "0006db197a30a83123ae42b1412b9eb36e42a28a": LibraryInfo( + "SampleCrowdsale", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "c09017218a635de03a5da5e72c0ca29453a3f119": LibraryInfo("ERC165", ["v2.3.0"]), + "65df18d3f80dc6e25c7b9261139254c041565eaa": LibraryInfo("ERC165Checker", ["v2.3.0"]), + "82aff27a106fe353c21f329d0884dba69a89e5f8": LibraryInfo("ERC1820Implementer", ["v2.3.0"]), + "7b1e6947bc70edd40153bcea559844c17eb80236": LibraryInfo("IERC165", ["v2.3.0"]), + "a4a4c4e1884a9ecff9a3be99eacc783c290bf7e5": LibraryInfo("IERC1820Implementer", ["v2.3.0"]), + "6fe4d6ebe9da8d97a48c7be4cb30aaabb3ff405c": LibraryInfo("IERC1820Registry", ["v2.3.0"]), + "ae0db82d81525d22cdc433cef124addd50430fc5": LibraryInfo("Pausable", ["v2.3.0"]), + "6b96a25ebec0776be5318fbff49d141d73f4f5de": LibraryInfo( + "Math", + [ + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "2a829cf20030b8d3de8ac9873f0beaca3cad1f4e": LibraryInfo("SafeMath", ["v2.3.0"]), + "7c044669d66a8d69734c5f828a50d2ebd53f6bbd": LibraryInfo( + "SupportsInterfaceWithLookupMock", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "7b97383d271f6b4cf1373d76ee256ba3028f24ea": LibraryInfo( + "ERC1820ImplementerMock", + [ + "v2.3.0", + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "95998f85eb3757d7b010f9d7c1480a92d9016d92": LibraryInfo( + "ERC20Mock", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "30b598e64b3ea2b9915acaf629b2d0e4a2eb66ac": LibraryInfo( + "ERC721ReceiverMock", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "e092e16bb0e17e23ca9e1b8c1521cfb386697e2a": LibraryInfo("ERC777Mock", ["v2.3.0"]), + "53a0001a2ebd03b5203549fa6c6c80cc9697187e": LibraryInfo( + "ERC777SenderRecipientMock", ["v2.3.0"] + ), + "ca4b8cacced7f06ec8ac865f7be0d5bf1b1957ff": LibraryInfo("ReentrancyAttack", ["v2.3.0"]), + "068676df02968b7b9e9b4d3b7f69155a9f70a13e": LibraryInfo( + "ReentrancyMock", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "9124b8c0668411c9dfee424d0bb9ae6e8f7706e2": LibraryInfo("ERC20ReturnFalseMock", ["v2.3.0"]), + "257829241097f5fd720b48aa5025a7e972b0bb30": LibraryInfo("Ownable", ["v2.3.0"]), + "eefbd0e574c1afa621b60d5c0060ad123e094988": LibraryInfo("Secondary", ["v2.3.0"]), + "cf6cc9c70bb5ee318b5ba3588e9f2c4f34cca72d": LibraryInfo("PaymentSplitter", ["v2.3.0"]), + "f8d97ab19910043c2be57dfa599cd98b2e79c0e8": LibraryInfo( + "ConditionalEscrow", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "cef9149e1ef5098f9600007ec477b01ea5f41140": LibraryInfo( + "RefundEscrow", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "5e3eabc1f7f46c3375a3d8eb4ab618ea528254c4": LibraryInfo("ERC20", ["v2.3.0"]), + "9f0cfbf4cf9505829c19bf3698aa3a87660ce1d4": LibraryInfo("ERC20Burnable", ["v2.3.0"]), + "f6d6fbf05185ca026c9ccf4eab910054069c3f8f": LibraryInfo("ERC20Capped", ["v2.3.0"]), + "a9ef7428ed0d036ab79ddd21ae9b95da666634fb": LibraryInfo("ERC20Detailed", ["v2.3.0"]), + "cb12ca8d883bb3ad8317c61b2e7251221def665f": LibraryInfo("ERC20Mintable", ["v2.3.0"]), + "0f194824b2052c308c52ec5cae790adea7c64c57": LibraryInfo("ERC20Pausable", ["v2.3.0"]), + "3efeef33c00f8c7513b55015ee54e6235bb0b668": LibraryInfo("IERC20", ["v2.3.0"]), + "7f3606ceb7a5ca3d169607f28d825b7844d8f6ed": LibraryInfo("SafeERC20", ["v2.3.0"]), + "54bbee45e99d6502f0c9b5be1b80d4bbe3786d94": LibraryInfo( + "TokenTimelock", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "11fc4d574650f2b1c58366124832c3409c78413a": LibraryInfo("ERC721", ["v2.3.0"]), + "205f8e867ab267c38e439b791c1e1bd1d8ca88c7": LibraryInfo("ERC721Burnable", ["v2.3.0"]), + "9b8256d1597bccaec572a77db88f059f58df9345": LibraryInfo("ERC721Enumerable", ["v2.3.0"]), + "66f22e50f77d448e975e59f871645e6abf6d1cf8": LibraryInfo("ERC721Metadata", ["v2.3.0"]), + "743b6405c190d6966e1284622dc0bade6c9cb40f": LibraryInfo( + "ERC721MetadataMintable", ["v2.3.0", "v2.4.0", "v2.5.0", "v2.5.1"] + ), + "628a4855f3a319fc3280111e4747b4faa9ac39a5": LibraryInfo("ERC721Mintable", ["v2.3.0"]), + "d5e1935a6ff55517a209f36ed99d5998837c9e4f": LibraryInfo("IERC721", ["v2.3.0"]), + "640289cb3557be343a7520230cd1c3d31961d3c2": LibraryInfo("ERC777", ["v2.3.0"]), + "532858b09be39df731d0f660c1c8df677d90663e": LibraryInfo("IERC777", ["v2.3.0"]), + "3c3e0a7eeab6fb60705ad74295fc20d947d4fd38": LibraryInfo("IERC777Recipient", ["v2.3.0"]), + "7c644be4848da35aed4b1b1358c79d273c5eb2c3": LibraryInfo("IERC777Sender", ["v2.3.0"]), + "862f5b1732442b00bc2bd40124ebbfc93e506b73": LibraryInfo("Address", ["v2.3.0"]), + "ffe0c2e7651f57976a4875cd95580dfc0a012a2a": LibraryInfo("Arrays", ["v2.3.0"]), + "00fd45355e275a2ed1c1eb0b3b2fc82786dcac5b": LibraryInfo("ReentrancyGuard", ["v2.3.0"]), + "f5f947f1c918d8d1ece09da651c3248f66cf7e4d": LibraryInfo( + "Context", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "2e44800ce075b20ea3c20d1e62300384dfe2c517": LibraryInfo( + "GSNRecipient", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "c5aee0ebb7cd74d8527a5db5954b364b863603d1": LibraryInfo( + "GSNRecipientERC20Fee", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "99159b6dfffe5ffb4c973a9645385542d26aeaa4": LibraryInfo( + "__unstable__ERC20PrimaryAdmin", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "a4073980c6f85544223a230d9dc9391f1b0dc311": LibraryInfo( + "GSNRecipientSignature", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "d914062eb6557699da04d907e2b70c24de94bd12": LibraryInfo("IRelayHub", ["v2.4.0"]), + "3e206957fb817eb0ec41dc08053084c29a6a061b": LibraryInfo("IRelayRecipient", ["v2.4.0"]), + "43710cb6060b92e5f845d7c76ed4ab1f85f7cc86": LibraryInfo( + "CapperRole", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "4a5a3fca54b8b8b1997614b1dd3b408a964c538d": LibraryInfo( + "MinterRole", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "76bbbe6b0782ad22a92c56058b01b89ae789b599": LibraryInfo( + "PauserRole", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "d4e83a7891c65c3ed3670a978bb76b634584af20": LibraryInfo( + "SignerRole", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "6cc6766baef98a700e8e38821ae2aa15cbc31062": LibraryInfo( + "WhitelistAdminRole", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "71c272ca2459bd2e5648c31cf3342109274dc265": LibraryInfo( + "WhitelistedRole", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "bb5bc67bb08af53d6db7d3c6bfca4dfd34e5e574": LibraryInfo( + "Crowdsale", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "c73846163f45573292c9e7281471658d480d83ba": LibraryInfo( + "RefundableCrowdsale", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "041e87ca76fd2207ef3cf4936ec0205204be6b96": LibraryInfo( + "ECDSA", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "0000d7516560f14246e909e2efa04fab08aa639c": LibraryInfo( + "SignedSafeMath", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "b002d3ff71af2317f8c44c7098c5e12814bba92c": LibraryInfo( + "Strings", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "cef172a9650a72ad1bbc8aa71d6c5e755f0b49bf": LibraryInfo( + "SimpleToken", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "150947d54d2a71dae3b56af334766eb70e6253a4": LibraryInfo( + "ERC165", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "a7c76ea626e3f0e494df9149c8e40ac8fb90d240": LibraryInfo("ERC165Checker", ["v2.4.0"]), + "0f2bb06c58e981260a4204795f24203a365c2737": LibraryInfo( + "ERC1820Implementer", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "67b2092d07fad864c8fe808b9c3ca3e8749ef8a2": LibraryInfo( + "IERC165", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "cf18bfd2ac9bb0e6f31e2e0169bcf7812b48d020": LibraryInfo( + "IERC1820Implementer", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "c6d7a58fa8e4408d90bf4dba2251c7f384442e61": LibraryInfo( + "IERC1820Registry", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "1d1a1e6a2b8373a0f9c12fecb97e9e9e2f5565bb": LibraryInfo( + "Pausable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "40c5df80b4b5cbba8434b7662078aa2f7bd11703": LibraryInfo( + "SafeMath", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "7e7979f1b224b9a2f1521c2e7ee6269e86c192da": LibraryInfo( + "AddressImpl", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "d2953944bb76616ec71f7ac0973f4a2c7735e3f5": LibraryInfo( + "ContextMock", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "b9f88ead37062ca195d2a397eca7462b23377705": LibraryInfo( + "ContextMockCaller", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "e4e81b34ffc158b871c398905044eaa407b53309": LibraryInfo( + "ERC20PausableMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "1d5e75b5b0c6d5a5411479d0c5922cbc23b88935": LibraryInfo( + "ERC721GSNRecipientMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "ccb9f10bcbdd9b08e3be1ddcea53285c2edfbbac": LibraryInfo( + "ERC721Mock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "f6dd2052f9728379c16000c51866baa667ae8ba4": LibraryInfo("ERC777Mock", ["v2.4.0", "v2.5.0"]), + "40c2c74b3acb1d4f2701bbc1726c54e7b93d879f": LibraryInfo( + "ERC777SenderRecipientMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "a6ebcc719baf42b346ce99ce787a988dffafbe67": LibraryInfo( + "EtherReceiverMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "31c735b3a0f5aca4dbcae3cd833d5327d77020e7": LibraryInfo( + "GSNRecipientERC20FeeMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "f951aa42da5cb767b2d25af86911f06cd5558981": LibraryInfo( + "GSNRecipientMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "35ec5d4c73fddcf8a5aaf5757ef1af99352b3e7f": LibraryInfo( + "GSNRecipientSignatureMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "d3525012d52c3d06a22bb704ada33f21c0256dc8": LibraryInfo( + "ReentrancyAttack", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "860bdd56a5ddf01ae3557917163d7c9dc8de8ee2": LibraryInfo( + "ERC20ReturnFalseMock", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "ae01681cc37d58ab8052869e687f215e6cb8d0cf": LibraryInfo( + "ERC20ReturnTrueMock", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "93af43acbe7d5b909433810d28f2ac6826dd1d91": LibraryInfo( + "ERC20NoReturnMock", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "d09209d71a33bf114bf1adcec684c64deb010de4": LibraryInfo( + "SafeERC20Wrapper", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.2.0", + "v3.3.0", + "v3.4.0", + "v3.4.1", + "v3.4.2", + ], + ), + "3d00f6d348841ae204c485cda3c4c2816af76957": LibraryInfo( + "StringsMock", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "d1523aae49fb6f1896f49e590b6f51039e4bdd72": LibraryInfo("Ownable", ["v2.4.0"]), + "2fce93f9d6faa205cd88c0a09bd9f76fc5330932": LibraryInfo("Secondary", ["v2.4.0"]), + "0d32d5cabbfa9f420623b256dc5fb3494ed22769": LibraryInfo( + "PaymentSplitter", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "99e22b366e81118ef4050f8f5f75962e73330c73": LibraryInfo( + "PullPayment", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "4562c170bc9809fa46e6666f9728e8e61dd33f72": LibraryInfo( + "Escrow", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "626414a459336b3ac497b8e49fa22f1f0abf1b92": LibraryInfo("ERC20", ["v2.4.0"]), + "950167661be5dc085fba4c584183bbd83a29eee7": LibraryInfo( + "ERC20Burnable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "38d0818e3e974224e2fbabbd73c57eda95034984": LibraryInfo( + "ERC20Capped", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "e406b324425fe7c3f7c5589e06dbea4796503de1": LibraryInfo( + "ERC20Detailed", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "3f15c8af26605011c8d5de1ce87ab8fd0ce60ea7": LibraryInfo( + "ERC20Mintable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "09071ee20d5607366d247ff1fa9aaaa46d606dd8": LibraryInfo( + "ERC20Pausable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "a8466bda6a100f8073131ee60f1f55f39cc79715": LibraryInfo( + "IERC20", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "2c19d3f26dbfbf3d39f50dd735fe0fe5b5e6cb69": LibraryInfo( + "SafeERC20", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "53de48de263bd917431b935fe6733716efaa53aa": LibraryInfo("ERC721", ["v2.4.0"]), + "f6798a7bd8cd9f0f9315ecf200035b4c1b27652b": LibraryInfo( + "ERC721Burnable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "5287c032e953f49cbead7d8e8dfb5013fdbea35a": LibraryInfo( + "ERC721Enumerable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "32a640d5908aa379be7abda1424894a0ed5cb389": LibraryInfo("ERC721Metadata", ["v2.4.0"]), + "0465da94cef491f15c1f0cf03ab35ba5f57c2e53": LibraryInfo( + "ERC721Mintable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "652b0218b8ce2fa84fc1489346eb4f8ba6be36fa": LibraryInfo( + "ERC721Pausable", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "dbb96f95f55be6a05475b97ef7c35bd3e93ab4ed": LibraryInfo( + "IERC721", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "f4b123f5b40878b70f02476c2e17a144bf88e1a2": LibraryInfo( + "IERC721Receiver", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "fc247ca5c3f2ce5dfe65d307d34461c314f07225": LibraryInfo("ERC777", ["v2.4.0"]), + "70795fc39191bc51871b45a31c12b3bfb7a8d95f": LibraryInfo( + "IERC777", ["v2.4.0", "v2.5.0", "v2.5.1"] + ), + "923531fc7154edb1c04430faa466f2fc21be91b5": LibraryInfo( + "IERC777Recipient", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "91df3b8cb635ee73d073bb41677b30cca16cdfaa": LibraryInfo( + "IERC777Sender", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "671c527f68ac3d8c6793881d78179da4ad394eba": LibraryInfo("Address", ["v2.4.0"]), + "0bf7ab409d936c5f8868bfbcdcd40635b2d5975f": LibraryInfo( + "Arrays", + [ + "v2.4.0", + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "e6a65bea2d5d2b3629bebed655e5f99ba6b5cb62": LibraryInfo("ReentrancyGuard", ["v2.4.0"]), + "33fd40c136a0417ba1aca69c95440a6f6af396ee": LibraryInfo("IRelayHub", ["v2.5.0", "v2.5.1"]), + "e60e312ee7de5b97f6b691d2aa22a754139c0174": LibraryInfo( + "IRelayRecipient", ["v2.5.0", "v2.5.1"] + ), + "80635da095b81f3ac67980a810c197b175cd191a": LibraryInfo( + "MerkleProof", + [ + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "2001957575c00b8d4f0d2e86da40374cc1f9b95c": LibraryInfo( + "Counters", + [ + "v2.5.0", + "v2.5.1", + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "bee16f12e3d00612347f7716ac3dd919958f6ecd": LibraryInfo("ERC165Checker", ["v2.5.0", "v2.5.1"]), + "b7ffce9048179efef559653bd0fe78e3dbf3ccc9": LibraryInfo("Create2Impl", ["v2.5.0", "v2.5.1"]), + "ab5709072e811dc6892d9bea6dc2febc84c2eebb": LibraryInfo("ERC721FullMock", ["v2.5.0", "v2.5.1"]), + "8eebc80db69e1dc9feea6f06833983578d4b3780": LibraryInfo( + "EnumerableSetMock", ["v2.5.0", "v2.5.1"] + ), + "da3bb9482cc3fef975d4b940aa6a7a241620cddc": LibraryInfo("SafeCastMock", ["v2.5.0", "v2.5.1"]), + "418be7dc23fea0fb0685acfcd0924205d309da45": LibraryInfo("Ownable", ["v2.5.0", "v2.5.1"]), + "016a31280fdbbb2437d69d2d2077a7c6905c714d": LibraryInfo("Secondary", ["v2.5.0", "v2.5.1"]), + "e54799317dc440001a42e881955539c39216f20b": LibraryInfo("ERC20", ["v2.5.0", "v2.5.1"]), + "7f18034de8806b6e04a081d9139af0bafa7ebe28": LibraryInfo("ERC721", ["v2.5.0", "v2.5.1"]), + "a8e2e47304e89ec12edb4796701610ca0545f690": LibraryInfo("ERC721Metadata", ["v2.5.0", "v2.5.1"]), + "270b244803ef7871cc0ea9c7140c58b0cecc7121": LibraryInfo("ERC777", ["v2.5.0"]), + "46d949813bed5d0c28d461308d29b801440d4b5a": LibraryInfo("Address", ["v2.5.0", "v2.5.1"]), + "27cd94941b6e8368a47c3056f9881d9b777a12ee": LibraryInfo("Create2", ["v2.5.0", "v2.5.1"]), + "3f0be66d5ab109f6f063a2f621e2a27f598e9c75": LibraryInfo("EnumerableSet", ["v2.5.0", "v2.5.1"]), + "288ea0f7c464d6c209aedcb70702d40d055061a5": LibraryInfo( + "ReentrancyGuard", ["v2.5.0", "v2.5.1", "v3.0.0", "v3.0.1", "v3.0.2"] + ), + "96b9d4c39c132847fe9878012875a60be6815d6c": LibraryInfo("SafeCast", ["v2.5.0", "v2.5.1"]), + "d858e0f859c9a0007983f900e87377bc7b9db2d9": LibraryInfo("ERC777Mock", ["v2.5.1"]), + "c50d4a4bdb1ae07acba0c1808a395989814eb11c": LibraryInfo("ERC777", ["v2.5.1"]), + "b796dbdd6a4a193975d3e83a2705332b97d04c9e": LibraryInfo( + "Context", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "26f098ad471cc55860f980fdb2a0e03e76124c5c": LibraryInfo( + "GSNRecipient", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.1.0-solc-0.7"] + ), + "df2e4c908e0f63db31a061d6b1a88aa3ac5e4259": LibraryInfo( + "GSNRecipientERC20Fee", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "f6e0a568a7b389b06da90d094cff83cb479ea60d": LibraryInfo( + "__unstable__ERC20Owned", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0"] + ), + "250da0268e9484838d295b0a509683c70b9c2bcc": LibraryInfo( + "GSNRecipientSignature", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "7db2684fb121525320f90ba363fb9d393c882c2a": LibraryInfo( + "IRelayHub", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0"] + ), + "b59618fd7459ca78735d140104a33f746c87ca23": LibraryInfo( + "IRelayRecipient", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.1.0-solc-0.7"] + ), + "f61364a0c94c546c2686fccf64fb00b7e6a238f5": LibraryInfo( + "AccessControl", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "5d4b8f8c71145f3eea66f7436b857d639d294975": LibraryInfo( + "Ownable", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "5ce37f6d78b690e78105d779c9c5f8b133b20713": LibraryInfo( + "ECDSA", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + ], + ), + "e2563eee26d163e13a84de12c231bad5bd9d07ef": LibraryInfo( + "ERC165", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "bab56366523b8b4b46e5f4745d87d1c4925a4cd5": LibraryInfo( + "ERC165Checker", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "e0902a009ac1aef60cb3f2396c3e0551cabe50e4": LibraryInfo( + "ERC1820Implementer", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "8c1783f1553244438a69f197761338b573ea437a": LibraryInfo( + "IERC1820Registry", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.1.0-solc-0.7", "v3.2.0", "v3.2.1-solc-0.7"], + ), + "299995a0dda5331bc9ee5b50a02caecae0ab2f47": LibraryInfo( + "SafeMath", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "381c1c12d9d6ed7263d499568493801a2f9f6c98": LibraryInfo( + "SignedSafeMath", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "b36bba5668b0585f8fd14a482b2b732245a71bbb": LibraryInfo( + "AccessControlMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "ea494ccbabbb741ef48ad0ff5c085f91efcf3a3f": LibraryInfo( + "AddressImpl", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "efab65e1bceef92614ebe4fbb8f9fb24482b6ed6": LibraryInfo( + "ArraysImpl", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "3a520123de9cd4ca9a16c3f5b2d60d7d30aba9f7": LibraryInfo( + "ConditionalEscrowMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "dfd11780fdbce9683363b9951c1736dd9c0a3479": LibraryInfo( + "Create2Impl", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + ], + ), + "039c37d37cd81934ed60f46f40e5b7c454e5c61e": LibraryInfo( + "SupportsInterfaceWithLookupMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "945e934e278de6fd89f396f2cf47be09063ca054": LibraryInfo( + "ERC165NotSupported", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "ea356c162ff728d39db8f4b1f8629294b7dc53c1": LibraryInfo( + "ERC165CheckerMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "0a36b70b7c01ef2e9ad666db0b7c7815a2954bdc": LibraryInfo( + "ERC20BurnableMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "44563df6fb78cc199c6afa99364a06e8b6bb1a8b": LibraryInfo( + "ERC20CappedMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "065fda899fd387ce4fb161a544c6ca5c4d2cefe0": LibraryInfo( + "ERC20DecimalsMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "0848d902f46092fd3cb28518efb3485754a176bd": LibraryInfo( + "ERC20Mock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "d3694a314c74d8e0061fd1ee4abe29265e333a8a": LibraryInfo( + "ERC20PausableMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "b87497aeac600f01a5e99eef27004dba2b386db9": LibraryInfo( + "ERC20SnapshotMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "801315f0005d984a6660bcc6a0980fd812f1c36a": LibraryInfo( + "ERC721BurnableMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "7b7d05bbf487b7101f6d0b1b17d9775001297456": LibraryInfo( + "ERC721GSNRecipientMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "b702ee7d010f646e049b5e6786395716a6c4e5de": LibraryInfo( + "ERC721Mock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "4265a7d8085494949939f615f62481d368c2ea2a": LibraryInfo( + "ERC721PausableMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "153e1fe8ab29256f08340d4b68bb4d0e7bf31c1b": LibraryInfo( + "ERC721ReceiverMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "9b9a5118eced1d02b1558076d4598e9e007ef161": LibraryInfo("ERC777Mock", ["v3.0.0"]), + "d4ab30adb57b13f8a100753fcbcc100b5b93c41f": LibraryInfo( + "ERC777SenderRecipientMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "56edef128a9c6161b588e85b7e9f8a7c8719330c": LibraryInfo( + "EnumerableMapMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "42492e1e3840893868cce13e052e73be0115a282": LibraryInfo( + "EnumerableSetMock", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "8142f6d05936c535329a037a5982940423113d0d": LibraryInfo( + "EtherReceiverMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "926923f5dda7a7fdefe2b298549b4c7c899d644d": LibraryInfo( + "GSNRecipientERC20FeeMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "b25e72ff5f0838564ad1fef33a62269baa223e58": LibraryInfo( + "GSNRecipientMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.3.0", + "v3.4.0", + "v3.4.1", + "v3.4.2", + ], + ), + "08d9ca42c0b395de9866fdc89cf80baa79f3c544": LibraryInfo( + "GSNRecipientSignatureMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "35bab91349a98ac9d37a0b0dea207ec66d9df1de": LibraryInfo( + "OwnableMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b598caa720703755d142c55313587b39afd98fed": LibraryInfo( + "PausableMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "ee40626ef9ea1cda61726721063073150205a62d": LibraryInfo( + "PullPaymentMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "9e583d7f7bb1a067f370d89b9fbe3761ec3e9667": LibraryInfo( + "ReentrancyMock", + ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"], + ), + "b2abff56fa395cf30f6f70e37eca3d75afbba4fd": LibraryInfo( + "SafeCastMock", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "bd3f6a5cf9aa93cca8f92896283807e732bf562f": LibraryInfo( + "StringsMock", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "128b25a6695355f36790d5a10fd795b8bb27fa2d": LibraryInfo( + "PaymentSplitter", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "86fd813a5a70b5d7233bc1dd53d2f794978e8bcd": LibraryInfo("PullPayment", ["v3.0.0"]), + "88a3718cebe06fc9da77d9678a2b6f0ed68ddba3": LibraryInfo( + "ConditionalEscrow", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "69fb19ca610d79dbf1138608ac29096e7f1b5976": LibraryInfo( + "Escrow", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "f2caea65705f8c4230984e0a8c7e764b2d87c29c": LibraryInfo( + "RefundEscrow", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "54363b19c1cc14361dfea5510bff28f17a35e284": LibraryInfo( + "ERC20PresetMinterPauser", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "38ca7b059432b97d9bd6ebb4dbfd3a8e7626c059": LibraryInfo( + "ERC721PresetMinterPauserAutoId", ["v3.0.0"] + ), + "01a31d70eac15ebc3e72762f3d9083e2ec58102f": LibraryInfo( + "ERC20", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0"] + ), + "b6e55d3df0d0552ed089b09f61be8bc6379ead02": LibraryInfo( + "ERC20Burnable", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "32dab051731393e6bfb3688e8cfb871017bb917d": LibraryInfo( + "ERC20Capped", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "33382c542643be96d197ace0347bc3ca0b450993": LibraryInfo( + "ERC20Pausable", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b1b3262a12fc93ad5fc3044f105688b26a8fc39c": LibraryInfo( + "ERC20Snapshot", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.1.0-solc-0.7"] + ), + "8ad28076b641582bd77b676374b81cfd0f2e1a16": LibraryInfo( + "SafeERC20", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "b021a1cfeb77d1b2933aee2118525dec020d52e3": LibraryInfo( + "TokenTimelock", ["v3.0.0", "v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "876d34e7701f0b3ebefb39f5fa5c0fe434181466": LibraryInfo( + "ERC721", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "a880a1b2738b3efcc5a95143d0a326ff227a45d0": LibraryInfo( + "ERC721Burnable", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "562cd257f69b05c02c7e235fd3a6d3619c428006": LibraryInfo( + "ERC721Holder", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "fa7968daf5e28907a8097cf716abe22a74102d2b": LibraryInfo( + "ERC721Pausable", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "c05ee17be3c12e0d5062b147bbc85543ca5e57a0": LibraryInfo("IERC721", ["v3.0.0"]), + "2f8c54269c3eef1154da10fbe4cc8b9b988909d8": LibraryInfo("IERC721Enumerable", ["v3.0.0"]), + "c03c0409f543870410ebc74e33089d8bd8fe4d33": LibraryInfo("IERC721Metadata", ["v3.0.0"]), + "a4499a2caaf32ff3a48dfbb81587c3adf6adfae8": LibraryInfo( + "IERC721Receiver", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "5899fda2e6c4c8cf2177cc7c078c78e6e5afd218": LibraryInfo("ERC777", ["v3.0.0"]), + "b9ef6216c31f8261423581d843bf14a333570560": LibraryInfo( + "IERC777", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b3b149c4a02c930e5f138a7bd4d1ed07e5742f36": LibraryInfo( + "Address", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "61cc196dcfac4de6436deb8ec083d4aabf408a69": LibraryInfo( + "Create2", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "a37fb5e05f9228dc03b7c50737be17949c276978": LibraryInfo( + "EnumerableMap", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "ab23fb82ac99e05ad0a8697c1ad6b8eca4b9b6cf": LibraryInfo( + "EnumerableSet", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + ], + ), + "21547b61a2857572da1e51464899cdd52ebd5737": LibraryInfo( + "Pausable", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "7e7fa83b0f54ef795991472b8e1d61d5cf98c7d9": LibraryInfo( + "SafeCast", ["v3.0.0", "v3.0.1", "v3.0.2"] + ), + "47fdeef8766861e816936156be77b55cb8e0d15d": LibraryInfo( + "Strings", + [ + "v3.0.0", + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "3ebd393dd34383ead311cc6a4ac498d0562fbeed": LibraryInfo( + "ERC777Mock", ["v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0", "v3.3.0"] + ), + "08d677f4935acdd04f1939d6430d2d98ed95a8b8": LibraryInfo( + "PullPayment", ["v3.0.1", "v3.0.2", "v3.1.0", "v3.2.0"] + ), + "bcab2445fc6987740f10b1b48f5cc9f0a9dc628f": LibraryInfo( + "ERC721PresetMinterPauserAutoId", ["v3.0.1", "v3.0.2"] + ), + "391484feda2d514efcbd8ad05bf24925d6a71d9c": LibraryInfo("IERC721", ["v3.0.1", "v3.0.2"]), + "043402c29808063960b154297d4d949f81f27e38": LibraryInfo( + "IERC721Enumerable", + [ + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "609c41e5ec3e7eda3fe7b20d5fdf8459da4741fe": LibraryInfo( + "IERC721Metadata", + [ + "v3.0.1", + "v3.0.2", + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "fe18a97dfdc6f6805760ef16a3a6426fd4ca5742": LibraryInfo("ERC777", ["v3.0.1", "v3.0.2"]), + "59f0695316bfaf076e70940bb15f611ab18e7380": LibraryInfo( + "Context", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "6ce10025cea27bb5e02ed9a0a849c592d991f9ba": LibraryInfo( + "AccessControl", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "05fb43f68cd62715cd9537e2407662ffd80d1b14": LibraryInfo( + "SafeMath", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "14bdd1cf1d91f81d608b9317df714bfdce5cc5c8": LibraryInfo( + "SignedSafeMath", ["v3.1.0", "v3.1.0-solc-0.7"] + ), + "c387ffafae87632afcf8a61aa9a3046f74207337": LibraryInfo( + "AddressImpl", ["v3.1.0", "v3.1.0-solc-0.7", "v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"] + ), + "77dbf870fb94cfd13fd3fd2cf4d40eed0e1b5fe5": LibraryInfo( + "CallReceiverMock", + ["v3.1.0", "v3.1.0-solc-0.7", "v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"], + ), + "2fbafc739e08a6e4f30468e02c422a0f46a44133": LibraryInfo( + "ERC1155BurnableMock", ["v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "edebb3dec4141dedd0e6486b38ae6d2f4a2750df": LibraryInfo( + "ERC1155Mock", ["v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "497e0d5e7016d8c029788a4612313a68b0dcac11": LibraryInfo( + "ERC1155PausableMock", ["v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "b63233a551c74f686b15f9d1e41ec9a511b216c9": LibraryInfo( + "ERC1155ReceiverMock", ["v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "4e0eb152c67034b43787e86dd9517e5acef04406": LibraryInfo( + "EnumerableAddressSetMock", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + ], + ), + "33031da76437b1311f45e835d07084449361c05e": LibraryInfo( + "EnumerableUintSetMock", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + ], + ), + "d58e3bc4a8dc2a667dfc6cd02e834693f8970d4f": LibraryInfo( + "SafeCastMock", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "59444c98b67b5f88dfb7bc0165563cc10963cb54": LibraryInfo( + "ERC1155PresetMinterPauser", ["v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "57f1c230932cbfd9944efde495ece7b93961216c": LibraryInfo( + "ERC20PresetMinterPauser", ["v3.1.0", "v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "60a2b550bd5c41484cbb9d96840bde18080cc9e0": LibraryInfo( + "ERC721PresetMinterPauserAutoId", ["v3.1.0"] + ), + "271759a8472e5c3f9bd708d319334bc362f7ea28": LibraryInfo("ERC1155", ["v3.1.0"]), + "134643457f4b7b6f0e9e7e4d1a9dcc4490977b5b": LibraryInfo( + "ERC1155Burnable", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "cdb13d40682488f9f0953066325cf069b44dbd1e": LibraryInfo( + "ERC1155Holder", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "ad8f8fb3ef5b64079ea06b8a84f71961ca862b2c": LibraryInfo( + "ERC1155Pausable", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "bd50c286a31a9281ae013970efdd8a2698f70a3d": LibraryInfo( + "ERC1155Receiver", ["v3.1.0", "v3.2.0"] + ), + "b51299123b2b7ac6f4473c4e9eeff2fae2527866": LibraryInfo( + "IERC1155", ["v3.1.0", "v3.1.0-solc-0.7"] + ), + "ebbd8915f7e42b138f231d12a57aa3205648c228": LibraryInfo( + "IERC1155MetadataURI", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "461f1b75562c952dc593e4b74fe5957247b47e96": LibraryInfo( + "IERC1155Receiver", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "af36aa37efe07de73c75c3e3b2768abaf71d1f7e": LibraryInfo( + "SafeERC20", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "76e26d8fe94c40bc65de0b949ba063aec0c8888d": LibraryInfo("ERC721", ["v3.1.0"]), + "8b36b4f8062eab95d4c7b88da93222c71ab4bc9a": LibraryInfo( + "ERC721Burnable", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "8a49c9027bfd68a7406842fc38a54c1ffdb0f55c": LibraryInfo( + "ERC721Holder", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "6bc0035b00df60df8ab929ad72f1c15907ead145": LibraryInfo( + "IERC721", ["v3.1.0", "v3.1.0-solc-0.7"] + ), + "66c525cc867324229ddc289348a728c95abd8ac0": LibraryInfo( + "IERC721Receiver", + ["v3.1.0", "v3.1.0-solc-0.7", "v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"], + ), + "885e6164dd6b49a503e5a2a4ed16277b6eb23ca1": LibraryInfo("ERC777", ["v3.1.0", "v3.2.0"]), + "61c30616ec7a625371407d69c4f4287bef65465c": LibraryInfo( + "Address", ["v3.1.0", "v3.1.0-solc-0.7", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"] + ), + "e55e6ff86a0622d2187303e42de5dbd1f8bd7577": LibraryInfo( + "Create2", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + ], + ), + "7253411ae52004badc4d7f7410ce466489d61649": LibraryInfo("Pausable", ["v3.1.0", "v3.2.0"]), + "26c0a8f218e277e2f800073ec1cf3d9e8589d369": LibraryInfo( + "ReentrancyGuard", ["v3.1.0", "v3.2.0"] + ), + "3bab9320873cd011466b2a6ab0dcac0f5dc1bc69": LibraryInfo( + "SafeCast", + [ + "v3.1.0", + "v3.1.0-solc-0.7", + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "4078d8de60d037cbbb1a421d03159750cef400d7": LibraryInfo( + "GSNRecipientERC20Fee", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "05584150eb03bca28420d821f0d3079f3c392059": LibraryInfo( + "__unstable__ERC20Owned", + ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0-solc-0.7"], + ), + "4821563b16a010649bd9fde1586e911f6c9c1841": LibraryInfo( + "GSNRecipientSignature", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "15cacbe095318831e2b3e609d4018cf5d59bb7af": LibraryInfo("IRelayHub", ["v3.1.0-solc-0.7"]), + "0453e5d14887ca74d7a9dd93ea24ffd21b33c0cc": LibraryInfo( + "Ownable", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "1e0f45ff715be57f9424f5703cbaf1c7c0b4cdad": LibraryInfo( + "ERC165", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "2dab2a74b7d92d977062dc109c47ca5ff6817564": LibraryInfo( + "AccessControlMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + ], + ), + "8caf6b0156b3bddcfbc8fdca0f640795d2dad50a": LibraryInfo( + "ArraysImpl", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "a0dd84b48b5d2c1d88cf53ceb5e3f992edb33507": LibraryInfo( + "ERC1155BurnableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b423c7c0aa88de46bbfd3d42fea4db2cda7733fe": LibraryInfo( + "ERC1155Mock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "85b3c12fd1d0ddd48e056e0b40f7407323376576": LibraryInfo( + "ERC1155PausableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "73e683d19ff414928daa00a6fced00488cb31307": LibraryInfo( + "ERC1155ReceiverMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "83c038d09502c0d9a0315629e03aca228f6aeca7": LibraryInfo( + "SupportsInterfaceWithLookupMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "32bbc7aff9562c2ae47502929375cd06c0e01aab": LibraryInfo( + "ERC165InterfacesSupported", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "7d163c3d68597c146c14da4df3f451afed59a2f3": LibraryInfo( + "ERC20BurnableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "7214c953c5c6ec720257cd10340380687965941f": LibraryInfo( + "ERC20CappedMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "8971a5f34be9083e20af4a06fb75050ff87cc784": LibraryInfo( + "ERC20DecimalsMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "22cfcfc29d92bda4cca9a70b78b9ddefab727ccc": LibraryInfo( + "ERC20Mock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "db4e7558d868ae1b732167860c6d77e361f552fa": LibraryInfo( + "ERC20PausableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "4f7b8369f212124b124bbd4ff4d9809d1462f947": LibraryInfo( + "ERC20SnapshotMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "a98e5e8ec5b8c839786c8b5fec95f1a8c0d76999": LibraryInfo( + "ERC721BurnableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "6bca38a21f8600f2c6e7ba24572beeeca15a7007": LibraryInfo( + "ERC721GSNRecipientMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "27639747781f75ef1d11c3a8af9e7f9425b6595b": LibraryInfo( + "ERC721Mock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "f1e38a0757425bc9c416626fcf8f4a73a612264a": LibraryInfo( + "ERC721PausableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "4fa02f6cb2fe182533fe2c180323c8bdaf20472c": LibraryInfo( + "ERC721ReceiverMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "01f24211871a64c439300003fc8b8dc76ddff4b6": LibraryInfo( + "ERC777Mock", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "d286a08d1ddefa6a8fa5b8d6d8a52f4fdee2ce0c": LibraryInfo( + "GSNRecipientERC20FeeMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "fec57f6d1902f7fbac554b0f375b3117e8e745eb": LibraryInfo( + "GSNRecipientSignatureMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "ea7b7becb2c1cc0987b63d7cd3065b1819bb4b0a": LibraryInfo( + "PausableMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "7d8fde97a41abf14faf73685794d849a4c3e0ac1": LibraryInfo( + "PullPaymentMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "0c8d3622e8f5d7562ad37806f3d75b9290558a3a": LibraryInfo( + "ReentrancyMock", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "0dbc8bb2fa7ae511f40ac5143ce8817dba57d89c": LibraryInfo( + "SafeERC20Wrapper", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "9c68614788325a6129235a41228ca6d0d2ae806b": LibraryInfo( + "PaymentSplitter", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "8084049564949219b37e12ecf91934ad62e5a94d": LibraryInfo( + "PullPayment", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "1a5d2d9ad8b09f49594f516e1c1bd434264b6441": LibraryInfo( + "RefundEscrow", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "7ef8bf14f12c46b04f4bb701ac6148af107d151e": LibraryInfo( + "ERC1155PresetMinterPauser", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "4d3c1b8ff12cb6f53bfe559c4001aaae2ce5bfa9": LibraryInfo( + "ERC20PresetMinterPauser", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "76e1b471738b29e9ad472002b299e6ca5c992583": LibraryInfo( + "ERC721PresetMinterPauserAutoId", ["v3.1.0-solc-0.7"] + ), + "13032a5e6e8c053928c1a7079d1cec08a8f72545": LibraryInfo("ERC1155", ["v3.1.0-solc-0.7"]), + "e9aeb04c7cf3cfe28278030bef8e6918e8822bd0": LibraryInfo( + "ERC1155Receiver", + ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0-solc-0.7"], + ), + "1524e25dfd71e549c0927267e4cf939f87eb856c": LibraryInfo("ERC20", ["v3.1.0-solc-0.7"]), + "ce38bf299cd7a12c71f467aab654930a323c8947": LibraryInfo( + "ERC20Burnable", + [ + "v3.1.0-solc-0.7", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "a093419c3b2483a11d550d411c12a40b4d2bc644": LibraryInfo( + "ERC20Capped", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "c13eed0a07804745778304d7af258421bc4f2c50": LibraryInfo( + "TokenTimelock", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "5553fa5d1dd434b4ff2f5631f89923d65a4156db": LibraryInfo("ERC721", ["v3.1.0-solc-0.7"]), + "c97967b9b005fffa9ed4fc230cf48d48e34e71bc": LibraryInfo("ERC777", ["v3.1.0-solc-0.7"]), + "c6c506954a6d5d6b55db67cc577e31e7da641ecd": LibraryInfo( + "Pausable", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "aa82b2ee7d508dc438e8a7d3995278479076184e": LibraryInfo( + "ReentrancyGuard", ["v3.1.0-solc-0.7", "v3.2.1-solc-0.7"] + ), + "85e7ef332d5fc621ce63ccba93ee518591bf8c8b": LibraryInfo( + "GSNRecipient", + ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0", "v3.3.0-solc-0.7"], + ), + "96d2749e41cfd4e833a6178779093d82efbb7d0b": LibraryInfo( + "IRelayHub", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "ffe1a6c90aa2b5556371b3799d2c65380a257d0b": LibraryInfo( + "IRelayRecipient", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "0d2073be4268aabd41cce88b3769748e23142750": LibraryInfo( + "SignedSafeMath", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "c0bae1111dcdf923d9a02599ff8a04c00e2456ed": LibraryInfo( + "ClashingImplementation", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "4f92b6c4dfa12c3081d1fe4007e48df4c8c82e5c": LibraryInfo( + "Impl", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "299556791f944a3fdbb677e5940c9d6865822606": LibraryInfo( + "DummyImplementation", ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"] + ), + "0b65288765b06e6baaa610a1d42eaa2b4591d8cd": LibraryInfo( + "DummyImplementationV2", ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"] + ), + "36075e336521530913cca767578aac6f07a38909": LibraryInfo( + "InitializableMock", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "2f0630fab703c0cfc42ae33caf06e886fc4e6969": LibraryInfo( + "SampleHuman", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "0de21f8a03ee4c6f6a63c6b6bf8b4f72d72ceced": LibraryInfo( + "SampleMother", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "62b03120ad8b165c812e68bfdbba23080bf441b2": LibraryInfo( + "SampleGramps", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "0bb55179c7e2bafad38c05cdad4d7a4a6b82d90e": LibraryInfo( + "SampleFather", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "dc4d51c37ecfb1e2967ef74f7a2559a6252a5272": LibraryInfo( + "SampleChild", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "85d6460e3b0ac8447a7db9493a5ff396c5e9364a": LibraryInfo( + "Implementation1", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "43af63388be018e6a4448b585ee2244486d266ff": LibraryInfo( + "Implementation2", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "1b7890b0027cf8b10d871746f93c892d4b2e814c": LibraryInfo( + "Implementation3", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "257829569899b91fcbbfbd6fe9660d7ed25f82b1": LibraryInfo( + "Implementation4", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "e179e255d203b40b5e050148327a89a4db0274af": LibraryInfo( + "MigratableMockV1", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b74cf7f9f38e31bc2c4cc77a87569a094d157de0": LibraryInfo( + "MigratableMockV2", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "97d9d9e61df537b9d68d8d94b363eb8f58f9c855": LibraryInfo( + "MigratableMockV3", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "36ef2be3f4842ffce40b0baad7a38c98dca86627": LibraryInfo( + "ERC721PresetMinterPauserAutoId", ["v3.2.0", "v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "44346833a6bd65fe95c90748b5722a563f3dc3e1": LibraryInfo( + "Initializable", + ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0", "v3.3.0-solc-0.7"], + ), + "c2f5c325aaa4ab9aa2c8def40e53cb2e7c38dd66": LibraryInfo( + "Proxy", ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7"] + ), + "62927e48e0b61e131a6cfa67ebda7218969a6f3d": LibraryInfo( + "ProxyAdmin", ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0", "v3.3.0-solc-0.7"] + ), + "a312403c3feaf629c2900ce0f0d1434bc359d428": LibraryInfo( + "TransparentUpgradeableProxy", ["v3.2.0"] + ), + "2dc09dba2775be34524d45a25c6a12a6064b687e": LibraryInfo( + "UpgradeableProxy", ["v3.2.0", "v3.3.0"] + ), + "1451ecddce18800239ff93690b719b8a654a8b2e": LibraryInfo("ERC1155", ["v3.2.0"]), + "4635856f8449649c520428ead6e61d6f9b1e13a8": LibraryInfo( + "IERC1155", + [ + "v3.2.0", + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "12525308d365e1082fcf3ada1fb2d71db3972b16": LibraryInfo("ERC20", ["v3.2.0"]), + "0ea2181daa5c7e76ccbabf8a9999f9fbd1833820": LibraryInfo( + "ERC20Snapshot", + ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0", "v3.3.0-solc-0.7"], + ), + "65ebeb77cd51d64c2e748bd176562b4e4b3766b7": LibraryInfo("ERC721", ["v3.2.0"]), + "365098499bb100597dd9267be4172eb9a51e49f7": LibraryInfo( + "IERC721", ["v3.2.0", "v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0", "v3.3.0-solc-0.7"] + ), + "aca21574c58b1e1387769de3b07df2bd8648fe2a": LibraryInfo("Address", ["v3.2.0"]), + "5e2433d4880abf2da08dc7bb2b1bed1ee89500dc": LibraryInfo( + "ERC721PresetMinterPauserAutoId", + [ + "v3.2.1-solc-0.7", + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "060fa9715f285857c483f5f8aa8f283597b32a8e": LibraryInfo( + "TransparentUpgradeableProxy", ["v3.2.1-solc-0.7"] + ), + "eeb1b0eb21f40d26aeaa5db59da4d89bdd78eb3a": LibraryInfo( + "UpgradeableProxy", ["v3.2.1-solc-0.7", "v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "a6e8c979be5bb5af9fbb1e614b27b38839a5894d": LibraryInfo("ERC1155", ["v3.2.1-solc-0.7"]), + "99b6d5df430ce23689a152c8438164c5de872197": LibraryInfo("ERC20", ["v3.2.1-solc-0.7"]), + "c60a6be3f3fce5a3b3ef5122354fffa11cc2f04a": LibraryInfo("ERC721", ["v3.2.1-solc-0.7"]), + "ac504766b532baf6b726e48a8e3c99f16b2453c2": LibraryInfo("ERC777", ["v3.2.1-solc-0.7"]), + "f9fd0c5c9e330675fda7856b975b0fe6b02624d0": LibraryInfo( + "GSNRecipientERC20Fee", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "f1fee8d515a2f71cfbbc450e793a2d2b17caca7a": LibraryInfo( + "Ownable", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "b503decf7949df51f4ba6808c081792e70437c0d": LibraryInfo( + "ERC165", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "761f89f6ffc7ca427b95c3f0101db6d1f271d0e8": LibraryInfo( + "IERC1820Registry", + [ + "v3.2.2-solc-0.7", + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + ], + ), + "7640634b8811549a807f0ba07f7acb29afbedf2d": LibraryInfo( + "GSNRecipientMock", + [ + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "ef02f12e6402f08a97633ad225b6b312578ad132": LibraryInfo( + "PaymentSplitter", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "248a8a1273db727248a7412571724b5707d2946b": LibraryInfo( + "PullPayment", + [ + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + ], + ), + "397958f6f4842504963dbd017cfb8bc64d4cc2f8": LibraryInfo( + "RefundEscrow", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "84a1ee038830d25ac77a33ebe4b6d27360da022c": LibraryInfo( + "TransparentUpgradeableProxy", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "bbc4789f86eff2f3a7f1da837ae6a85de7e2f803": LibraryInfo( + "ERC1155", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "73606b13add74a0032c16e323d11c28d0a62fa05": LibraryInfo("ERC20", ["v3.2.2-solc-0.7"]), + "c7e4c94e1c49864431de7e3b2dea4595757189d6": LibraryInfo( + "ERC20Capped", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "ca4fe971d9d72558abd50f77b6cd8b3de2554b26": LibraryInfo( + "TokenTimelock", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "eab2db3a101c13a594e8f1d140adf52c64242bf1": LibraryInfo( + "ERC721", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "505e83265ba5e1b1939a2c199ec99b5beef596bb": LibraryInfo( + "ERC777", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "ee5e60d9ed917eab36f085b0b128c2fff2caf10b": LibraryInfo( + "Pausable", ["v3.2.2-solc-0.7", "v3.3.0-solc-0.7"] + ), + "bc88ca03e46528a04853c32ebf121df42c4d9edd": LibraryInfo( + "ReentrancyGuard", + [ + "v3.2.2-solc-0.7", + "v3.3.0-solc-0.7", + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "2cefc88832911d8f000cf1f853a8a1ec34a83869": LibraryInfo("GSNRecipientERC20Fee", ["v3.3.0"]), + "ff468e5fb020023b45058cd9d6baa684a07c169a": LibraryInfo("Ownable", ["v3.3.0"]), + "62e78f66a0dc5a7ad8b7f155a4a3c0bc056d37ed": LibraryInfo("TimelockController", ["v3.3.0"]), + "7661544d7b4503ae1db879c1b06335abe437eb43": LibraryInfo("ECDSA", ["v3.3.0", "v3.3.0-solc-0.7"]), + "79f657470505cee15284ebf0afac69c26820b6bd": LibraryInfo("ERC165", ["v3.3.0"]), + "3a5cd51f0635a3fb082c4e761450b541cedd5e9f": LibraryInfo( + "AddressImpl", ["v3.3.0", "v3.3.0-solc-0.7"] + ), + "780be56bedddc62c2722b13e5fe2e258e07da87e": LibraryInfo( + "CallReceiverMock", + [ + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + ], + ), + "eebcccd00f6a1385ea11f82064fe982637af2cd8": LibraryInfo( + "Create2Impl", + [ + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "54279277126550e93cb4518ef5b0ec055915ec67": LibraryInfo( + "DummyImplementation", ["v3.3.0", "v3.3.0-solc-0.7"] + ), + "0b1c723fb1caabd0949393e90cbb3a18af826a7b": LibraryInfo( + "DummyImplementationV2", + [ + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "8f7732e30464761faf28ca7d986c979cb78b55ff": LibraryInfo( + "EnumerableBytes32SetMock", + [ + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + ], + ), + "08b973b9862e47b6cef3ae3540a9c798a2e3948a": LibraryInfo("PaymentSplitter", ["v3.3.0"]), + "3e2e2f659b27f72c72462d35a41afed6c71e1310": LibraryInfo( + "PullPayment", ["v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "36cbd240c302af1fc3f2bd00aa7f204ccbe1e051": LibraryInfo("RefundEscrow", ["v3.3.0"]), + "80b95e3cad825888ef85966822547e32c545d044": LibraryInfo("Proxy", ["v3.3.0", "v3.3.0-solc-0.7"]), + "fb5050efb413c3776ec0c9ffa540df1a42d3ce2b": LibraryInfo( + "TransparentUpgradeableProxy", ["v3.3.0"] + ), + "93c13eddcfcd62395624270cde928e5d24d3b4b8": LibraryInfo("ERC1155", ["v3.3.0"]), + "61e358e538e2273e31fa7133009c7a3c4ff8b9dd": LibraryInfo("ERC1155Receiver", ["v3.3.0"]), + "0dc22cde3abaf6c0fa621b32f9f7934e22f4c1d1": LibraryInfo("ERC20", ["v3.3.0"]), + "63536d5bfe0f79c8ef6782baebe76002151cb22e": LibraryInfo("ERC20Capped", ["v3.3.0"]), + "dd756683800487b41064dd881e0b65a419862aa0": LibraryInfo("TokenTimelock", ["v3.3.0"]), + "818503b17c0db33bfe69b5cc461cbc061d0c65b9": LibraryInfo("ERC721", ["v3.3.0"]), + "04278f72bdb6c61d366aec038058a1212a4f07e9": LibraryInfo( + "IERC721Receiver", + [ + "v3.3.0", + "v3.3.0-solc-0.7", + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "5512c580e9da164446f6551a20486a35e1c08807": LibraryInfo("ERC777", ["v3.3.0"]), + "da934a25d30edfd91855d54555dc0144dbbfd7cb": LibraryInfo( + "Address", ["v3.3.0", "v3.3.0-solc-0.7"] + ), + "179de8c468d36b2e51824b07136adedae7bcbdc3": LibraryInfo( + "EnumerableSet", ["v3.3.0", "v3.3.0-solc-0.7"] + ), + "12cb21575ea5e6e30c37c9a7440fcc2b3adb0845": LibraryInfo("Pausable", ["v3.3.0"]), + "ffca07556d8e39845429a3b009980201301c5b6e": LibraryInfo( + "ReentrancyGuard", ["v3.3.0", "v3.4.0", "v3.4.1", "v3.4.2"] + ), + "be045cb6e49d12aa04b07af22ad6e600d472b78f": LibraryInfo( + "TimelockController", ["v3.3.0-solc-0.7"] + ), + "6af4381b463ec0dcd9e2332bff9cf3ea9568ba29": LibraryInfo("ERC20", ["v3.3.0-solc-0.7"]), + "33beec74bb53c2ee0e9e12f694e367258724e6b2": LibraryInfo( + "GSNRecipient", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "32a14bea425dc2959b680187600942f4901efceb": LibraryInfo( + "GSNRecipientERC20Fee", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "fa5e7908a5cb10013f735b6718ba6ef4fb41b794": LibraryInfo( + "__unstable__ERC20Owned", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "5d07d72245331e4275c204db282ad3900383f778": LibraryInfo( + "Ownable", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "5d26e032a554805a01aca59579417663de70f966": LibraryInfo( + "TimelockController", ["v3.4.0", "v3.4.1"] + ), + "63a2430e318736b284bccc524d6c619d329ce419": LibraryInfo( + "ECDSA", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "2cf03d8347d7129c4de359dcaa4f0dc40f88684a": LibraryInfo( + "EIP712", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "92215334770433b2add7c67ac51233591f7fe922": LibraryInfo( + "ERC20Permit", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "e2f97eec1c3991924b7b1456696f87048be7d783": LibraryInfo( + "IERC20Permit", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + ], + ), + "f35d0cf20e1373848e42b706d4d6aa9fd46988c2": LibraryInfo( + "ERC165", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "c8909db38edab0286eb1e83f45baad9b70ed6340": LibraryInfo( + "ERC165Checker", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "dbf020d120894cffa01451b8caa8cac408122c47": LibraryInfo( + "ERC1820Implementer", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "a1815b90bd687d3a96e0d4cc57bc8aa5acc126a9": LibraryInfo( + "SafeMath", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "1eee0a26498f2e503cda12d7f0a3631e9256d11f": LibraryInfo( + "AddressImpl", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "64ba98e0a7a3462e9a936a0744ed9d1f27f4efe2": LibraryInfo( + "BadBeaconNoImpl", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "49252afe482c957eb4d0d4e1f61a70fae4534bbe": LibraryInfo( + "BadBeaconNotContract", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "f21645963792a804fe46d24eae733ced9792325e": LibraryInfo( + "ClonesMock", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "c312288ff11bbaa9f288b73efa4e89905b4b3e0c": LibraryInfo( + "DummyImplementation", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "fba59a0ad823b65925d38fba35a9fb0acba4f11c": LibraryInfo( + "EIP712External", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "3f41e938116aa300aad2aefadfbcaa6193c490ef": LibraryInfo( + "ERC165CheckerMock", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "f5bc328483f38e40a88c2830fc7d26319aa9b5fb": LibraryInfo( + "ERC20PermitMock", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "02d7d727adc8cb0dbc83f8e1803c172a0990296f": LibraryInfo( + "ERC777Mock", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "7cdf827fe3a903fbcaa418bad074950ae9f8c8d2": LibraryInfo( + "ERC777SenderRecipientMock", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "3a93528b96d70af4e872192f05dfc7ee25419517": LibraryInfo( + "EnumerableMapMock", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "c68710ed96a182101e1024d3e1aa91cfd2a636d2": LibraryInfo( + "SafeMathMock", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "5a91c81404f840fd7f9054fe06f3a1c5036d4343": LibraryInfo( + "PaymentSplitter", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "e7ac2394f80e32ef8d86823bf3ab56e94543490f": LibraryInfo( + "Escrow", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "46e54ddada38f2432fbbd672068ebc144fba6137": LibraryInfo( + "RefundEscrow", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "222751ccf88f680c3c75ab80cfb80797d45b2651": LibraryInfo( + "ERC20PresetFixedSupply", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "1a1081be6939302bfc77c7b3be6c5f874118297f": LibraryInfo( + "ERC777PresetFixedSupply", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "ce7db6d05e7868e70e75528f1c0fbd9297bc6fcf": LibraryInfo( + "BeaconProxy", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "4249e310139fbc623392ee676281a60d143c16da": LibraryInfo( + "Clones", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "869d95b3589c7fa6b2ecb1dfeb9008c463c267bf": LibraryInfo( + "IBeacon", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "0fbaee3e2bef583ef42cb3ed731b3e40b68aea33": LibraryInfo( + "Initializable", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "3785f5c4f386559127baa5a185d2ec13ad4c53af": LibraryInfo( + "Proxy", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "1c570dba696f08a170e92f985d839dbe0ecb4a91": LibraryInfo( + "ProxyAdmin", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "a7386fcd820a2c66235bb3e835a30b553545812f": LibraryInfo( + "TransparentUpgradeableProxy", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "870cdbd1d2ddaf132c3a1a6a1d48d6ea004b123a": LibraryInfo( + "UpgradeableBeacon", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "9ce86a848977d6ebddddd293ea9e81836c488c6a": LibraryInfo( + "UpgradeableProxy", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "3160f17274036d6719cd64c436b4167104e70bc1": LibraryInfo( + "ERC1155", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "1c6dbf08eb3ea12cf8a55ba920f32971bf194e89": LibraryInfo( + "ERC1155Pausable", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b5611144434fe88f4b7fa065d3fe437178a770ce": LibraryInfo( + "ERC1155Receiver", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "1c7854ebfeea3b6b4ada23aa0dec5cdd142d5524": LibraryInfo( + "ERC20", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "54480a412d33bc4808a6f4626c12a186086c236b": LibraryInfo( + "ERC20Capped", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "06ea9a75c96d6774e79699e85d93b2b2daf7e701": LibraryInfo( + "ERC20Snapshot", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "7042e55c509ff3cbe7c149238e29fed880359381": LibraryInfo( + "TokenTimelock", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "6146ecf60a2e9e538355b19cf9095a9723197adc": LibraryInfo("ERC721", ["v3.4.0"]), + "7e232aaf85bb00c9401b300972a3f6322faed39d": LibraryInfo( + "IERC721", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "9fa1eca3807f9186d44ae941020d506dfe551adc": LibraryInfo( + "ERC777", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "041cd09ad5b7832a451916a4eab7c14b9157f9bb": LibraryInfo( + "Address", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "1c6caa372c1211fa570af1576c88d16cacb426c0": LibraryInfo( + "Create2", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "cafd568a2be123baff9a85ba0d347a428fb5777e": LibraryInfo( + "EnumerableMap", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "1690dfe17f8334a2a88203427ce601d9c6b25760": LibraryInfo( + "EnumerableSet", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + "v4.0.0", + ], + ), + "3246d2bfdfc6dd0197a0fe1497632d66ae05fd58": LibraryInfo( + "Pausable", ["v3.4.0", "v3.4.1", "v3.4.2"] + ), + "b12a995aa8744db27ab0e367133c4cf01eb3a9de": LibraryInfo( + "Strings", + [ + "v3.4.0", + "v3.4.0-solc-0.7", + "v3.4.1", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2", + "v3.4.2-solc-0.7", + ], + ), + "1dca314c082a2d86c4b13fc44d00ed3caf84660d": LibraryInfo( + "GSNRecipientERC20Fee", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "507897800a5e8a472a426aebecc8e766854e20cd": LibraryInfo( + "__unstable__ERC20Owned", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "e7f6d7ee5a886c88c0052fc24f06e83a3f3a08d1": LibraryInfo( + "Ownable", + [ + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "b1eaec929a4492a5ab9c3ee0941f4d0ad4dae002": LibraryInfo( + "TimelockController", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2"] + ), + "050c8ca6f92fe1485057a1faa1293ac23af4e9ec": LibraryInfo( + "EIP712", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"] + ), + "4fd1e1d5762c465c2779bb5062ab69c1c15df7b6": LibraryInfo( + "ERC20Permit", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7", "v4.0.0"], + ), + "8ebfa908d5afc1a43d6c42fb85da4d675ad2acaa": LibraryInfo( + "ERC165", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"] + ), + "69db7dc4835bf134acaadee0aa2d3f51ab9e655b": LibraryInfo( + "EIP712External", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "91dc025deeeb2e4dead2db739f04e2d00619a818": LibraryInfo( + "ERC20PermitMock", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "f37b58e417ed7f71db679b2c2fa5c0ce14226133": LibraryInfo( + "ERC777Mock", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7", "v4.0.0"], + ), + "b052abe16f942be8a710a608a09f437476b8ca03": LibraryInfo( + "PaymentSplitter", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "47f3ee26c503ec9c706f580520db5e78af9aeeef": LibraryInfo( + "RefundEscrow", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "8a505d49e69fe65120a99979dbdca39b8efe22f5": LibraryInfo( + "ERC20PresetFixedSupply", + [ + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "ea8b53fd468c496848babd2a0e108b002c94c3d7": LibraryInfo( + "ERC777PresetFixedSupply", + [ + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "2bc90d97df0f2ee6653f0237130bdf57ca2437ab": LibraryInfo( + "BeaconProxy", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7", "v4.0.0"], + ), + "f1f156b98ccda98d19e894c141bc0317cc5eb9c0": LibraryInfo( + "TransparentUpgradeableProxy", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "1ae15cdffe0ca9340174ae68cb8d2892fe831bc5": LibraryInfo( + "UpgradeableBeacon", + [ + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "1c2989c2b4cad10ff8b0ed4f7cffce37d3f7a6dd": LibraryInfo( + "UpgradeableProxy", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "51ad04dc5cdffc68238a1696f78d7672555ec7dd": LibraryInfo( + "ERC1155", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"] + ), + "48ba59afc22a61b178aba0199a30340b43f9ba62": LibraryInfo( + "ERC1155Receiver", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "7cf1a0c8c25eaa2edbfccc040d2942fbb7d7596e": LibraryInfo( + "ERC20", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"] + ), + "12d077e4475d8cc3dd032a10fb2f97138c5c2bf4": LibraryInfo( + "ERC20Capped", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "8846bad470e1c4a2177e3247c29c6604a2307157": LibraryInfo( + "TokenTimelock", + ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"], + ), + "171ab805afaa2a3b05e4bdba9d9a8271c77db63a": LibraryInfo( + "ERC721", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7"] + ), + "a908082bdc2115f43aabea87e8c2897833bfda29": LibraryInfo( + "ERC777", ["v3.4.0-solc-0.7", "v3.4.1-solc-0.7", "v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"] + ), + "0424544a512fcdda8b090610916a0f7c5d375387": LibraryInfo( + "Pausable", + [ + "v3.4.0-solc-0.7", + "v3.4.1-solc-0.7", + "v3.4.1-solc-0.7-2", + "v3.4.2-solc-0.7", + "v4.0.0", + "v4.1.0", + ], + ), + "1321258244d9c40eff5a48ed1ecb88b2577a56b7": LibraryInfo("ERC721", ["v3.4.1", "v3.4.2"]), + "a0a26ed94d63bffb8f31246bdfce9867514cd672": LibraryInfo( + "ERC721", ["v3.4.1-solc-0.7-2", "v3.4.2-solc-0.7"] + ), + "b01a301a7d54e6d284e847eb9d9e24076112808c": LibraryInfo("TimelockController", ["v3.4.2"]), + "69d0e361a511bf3103d25a77dbe77048ee5e0115": LibraryInfo( + "TimelockController", ["v3.4.2-solc-0.7"] + ), + "ef9cee4fc16302d9c2f27edb367db294c1b81f5f": LibraryInfo("IAccessControl", ["v4.0.0", "v4.1.0"]), + "dab86c163c575d30473cb3a5c0624b44334efc12": LibraryInfo("AccessControl", ["v4.0.0"]), + "2207123df93140cd294823148a2558be596e6495": LibraryInfo( + "IAccessControlEnumerable", ["v4.0.0", "v4.1.0"] + ), + "abbe8b6df781ca55c069fd98e85f817213835c6d": LibraryInfo( + "AccessControlEnumerable", ["v4.0.0", "v4.1.0"] + ), + "9565576e12fc40a6a8a79f663a4899ef55e80c5e": LibraryInfo( + "PaymentSplitter", ["v4.0.0", "v4.1.0"] + ), + "92411b430030f18396dc798bcf7d29c2d53b68eb": LibraryInfo("TimelockController", ["v4.0.0"]), + "259338440d397d3da2a4bf44649d51cc646c5aa0": LibraryInfo("ERC2771Context", ["v4.0.0", "v4.1.0"]), + "566d42bf0d67adb04c1e73658ef5802b61702c97": LibraryInfo( + "MinimalForwarder", ["v4.0.0", "v4.1.0"] + ), + "253248bcf8aaa75c515f000d674e69e3ad2dc67c": LibraryInfo( + "AccessControlEnumerableMock", ["v4.0.0"] + ), + "868d87ef0ff053e2007b9e9180f2d5daede6491a": LibraryInfo("ClonesMock", ["v4.0.0", "v4.1.0"]), + "e4ddf77999bc8a4befcd1d9428b77ec0156f1c82": LibraryInfo("EIP712External", ["v4.0.0", "v4.1.0"]), + "56a0750afc35891ff98a07f7c36aecbb2103c32e": LibraryInfo( + "ERC1155ReceiverMock", ["v4.0.0", "v4.1.0"] + ), + "8ac6ce7dd83fe6abaaea9e149de7fab285cb6f76": LibraryInfo( + "ERC165MissingData", + [ + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "b33e2d44585e75d38aa904a4e210baf4350189da": LibraryInfo("ERC165Mock", ["v4.0.0", "v4.1.0"]), + "e89f235cccbc06e2bac7c41f6da38fd77d4de644": LibraryInfo( + "ERC165StorageMock", + [ + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "8ab8d35fe19014b9066aa8ffc249623257072208": LibraryInfo( + "ERC20DecimalsMock", ["v4.0.0", "v4.1.0"] + ), + "67b9f92bb0f7ef4c509fd6db84af16f6a1dc95f8": LibraryInfo( + "ERC20PermitMock", ["v4.0.0", "v4.1.0"] + ), + "417a78c41729dfd05ac2baac8e6678dbb95f5a05": LibraryInfo( + "ERC2771ContextMock", ["v4.0.0", "v4.1.0"] + ), + "4e57221ebf4782201f0d1ca5b851e5bb12ec2b8b": LibraryInfo( + "ERC721BurnableMock", ["v4.0.0", "v4.1.0"] + ), + "e4bb74aec903fc8db95fad4c8192ff627923d2e9": LibraryInfo( + "ERC721EnumerableMock", ["v4.0.0", "v4.1.0"] + ), + "cef3ef778dd17371bf88d3a20cbdcc3c71298afa": LibraryInfo("ERC721Mock", ["v4.0.0"]), + "9e5a3684f1b44a48c73787f823a3d7898f922753": LibraryInfo( + "ERC721PausableMock", ["v4.0.0", "v4.1.0"] + ), + "947534cf69fa1bf1babb1d89e68fa2435d73f59b": LibraryInfo( + "ERC721ReceiverMock", ["v4.0.0", "v4.1.0"] + ), + "6fbee4f33e2aa55d513022b4b6629ef896f52db1": LibraryInfo( + "ERC721URIStorageMock", ["v4.0.0", "v4.1.0"] + ), + "d955f8e424d0b8531fcec97fd70d2eefa06daf04": LibraryInfo("StringsMock", ["v4.0.0", "v4.1.0"]), + "bf6d216501296a25f572b36b4ececf1e7f752b8e": LibraryInfo("Clones", ["v4.0.0", "v4.1.0"]), + "3caba018d8b811d7a9487df761635928bc7caf3f": LibraryInfo("ERC1967Proxy", ["v4.0.0"]), + "03f4e4dc310c6685debfa53240c8029d66d6a9d5": LibraryInfo( + "TransparentUpgradeableProxy", ["v4.0.0"] + ), + "db88ad8eb489e2e93a76e7f0d0843f442bb3e802": LibraryInfo("Initializable", ["v4.0.0", "v4.1.0"]), + "fcafd1a2198e83e29448c4961babe00d479a259e": LibraryInfo("PullPayment", ["v4.0.0", "v4.1.0"]), + "06a7146060ceeb791b34296ac3859ddf9924c8d9": LibraryInfo("ERC1155", ["v4.0.0", "v4.1.0"]), + "fc0e45a63f6c27366e72fba2e93045493a1d0fcc": LibraryInfo( + "ERC1155PresetMinterPauser", ["v4.0.0", "v4.1.0"] + ), + "991da8c1a4e38a69803a920b2ba6f04f3534ba90": LibraryInfo( + "ERC1155Receiver", ["v4.0.0", "v4.1.0"] + ), + "32f4baf24d04431b9f31d7fffbc14873db05910c": LibraryInfo("ERC20", ["v4.0.0"]), + "b8948a765f56a1cfae8a3b92033d3a7f583d266f": LibraryInfo("ERC20Burnable", ["v4.0.0", "v4.1.0"]), + "3ed786a6529d43a95101022d405252fbd955f7f6": LibraryInfo("ERC20Capped", ["v4.0.0", "v4.1.0"]), + "975df6aa796d442e90665e8639659a8da4d06175": LibraryInfo("ERC20Snapshot", ["v4.0.0", "v4.1.0"]), + "d6d1fc2391215c66cbe050ddb24066c54a8ec13f": LibraryInfo( + "ERC20PresetMinterPauser", ["v4.0.0", "v4.1.0"] + ), + "b923239c1bd5ce64cdd82b8a78585e70ce09a0b5": LibraryInfo("SafeERC20", ["v4.0.0", "v4.1.0"]), + "3cc2d212711b9aed654821263900fe101441e08e": LibraryInfo("TokenTimelock", ["v4.0.0", "v4.1.0"]), + "ade76f270c6838a189583a70457b1f34f547fa89": LibraryInfo("ERC721", ["v4.0.0"]), + "e32fa6056318ff4036b6b34ae3631d92cc2ea489": LibraryInfo( + "ERC721Enumerable", ["v4.0.0", "v4.1.0"] + ), + "174c62a690020e2cb1b08c2ed4ebf665a78e3bd9": LibraryInfo( + "ERC721URIStorage", ["v4.0.0", "v4.1.0"] + ), + "387defc33a85bd87dc92cf3e1b956407169ec624": LibraryInfo( + "ERC721PresetMinterPauserAutoId", ["v4.0.0", "v4.1.0"] + ), + "8a77655c684246218b9a58702a073110c1960c2a": LibraryInfo("ERC777", ["v4.0.0"]), + "fffccb2e4aaddd018bf1f74f424764d0d8f3ddcb": LibraryInfo("Context", ["v4.0.0", "v4.1.0"]), + "2a02aed9ef802a8544d18afe1df202a0fc9f22fc": LibraryInfo("Counters", ["v4.0.0", "v4.1.0"]), + "64e303670df935fe5d0a7e7bd932ae8850f6f201": LibraryInfo("Strings", ["v4.0.0", "v4.1.0"]), + "b1f1fd21fabeee2b3f8d781a3f7b61d2da0fa499": LibraryInfo("ECDSA", ["v4.0.0"]), + "53aa499a4c694653ffb7ad64295f7564c8d25f4e": LibraryInfo("EIP712", ["v4.0.0", "v4.1.0"]), + "fef23c7cba2fd6827ad096a963156b7122a5714d": LibraryInfo("Escrow", ["v4.0.0", "v4.1.0"]), + "c52d6d7307f32769c227bc90ff35f7ed9484a418": LibraryInfo("RefundEscrow", ["v4.0.0", "v4.1.0"]), + "27eb537f38f4e78bf50d746739387234f230a4db": LibraryInfo( + "ERC165", + [ + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "e00b58223b3f1aebcc28924cdbf577f342709c68": LibraryInfo("ERC165Checker", ["v4.0.0", "v4.1.0"]), + "8ab170369493cd6ef28c81f35ec9fb0597632270": LibraryInfo( + "ERC165Storage", + [ + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "01bd41c8fc215254e0fccc0f1937381becb83c93": LibraryInfo("ERC1820Implementer", ["v4.0.0"]), + "725b5b6b3cb30d120bdc97b353b214d7e0d5457d": LibraryInfo("SafeCast", ["v4.0.0", "v4.1.0"]), + "c3556d686a5da76a47d19d4e3c1aa5d53cc96011": LibraryInfo("SafeMath", ["v4.0.0", "v4.1.0"]), + "31f7a9169859955645a6b3b01225caa339e68a92": LibraryInfo( + "SignedSafeMath", + [ + "v4.0.0", + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "50b36c99d71a6f1e5bc74eb37305fb633ca745b1": LibraryInfo("EnumerableMap", ["v4.0.0", "v4.1.0"]), + "1eeccb2aba20ae782f788b591c1c73247a2f5710": LibraryInfo("AccessControl", ["v4.1.0"]), + "0d100f93955e406b8f4c64256fe2fac9f58feaa3": LibraryInfo("TimelockController", ["v4.1.0"]), + "03ad79036f06316b924f8e839e05f9f7418203d9": LibraryInfo("IERC1271", ["v4.1.0"]), + "32778f5dea953b5c71cda22b9034d3a99c80a260": LibraryInfo( + "IERC3156FlashBorrower", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "7a7395520740c3e9ca99f25ac256918525d6947b": LibraryInfo("IERC3156FlashLender", ["v4.1.0"]), + "7b42fc0929549dded5a794ba5cbb6234482d5ae5": LibraryInfo( + "AccessControlEnumerableMock", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "105af4b6cb195a355234adb0f75e29dc35fbfe58": LibraryInfo( + "AccessControlMock", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "e69690c196421663cbeb3e40e3ec80db2419b7f8": LibraryInfo( + "ERC1271WalletMock", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "400c8eb934cb0cc695a18678a58f974169150eeb": LibraryInfo("ERC3156FlashBorrowerMock", ["v4.1.0"]), + "d7d5ac3eeb3537f6007674f03f33da91b2a99606": LibraryInfo("ERC20FlashMintMock", ["v4.1.0"]), + "760696c2eddc1f804ccdd6ad139de35e315a8f5a": LibraryInfo("ERC721Mock", ["v4.1.0"]), + "1aed59d47401d84a7d52819e97f7efbb125604bd": LibraryInfo("ERC777Mock", ["v4.1.0"]), + "d4d4dc6d063c378fe8df00eba9ea1d3da940c6df": LibraryInfo("MulticallTest", ["v4.1.0"]), + "d51ce27019d1ba250fe0737caab014f9c51aefd3": LibraryInfo("MulticallTokenMock", ["v4.1.0"]), + "5ceef95f1a2229c02c5f838080b549fefa9d185e": LibraryInfo("SignatureCheckerMock", ["v4.1.0"]), + "d9969b56a2b7a0b53970600d4563508c1ca509e6": LibraryInfo("StorageSlotMock", ["v4.1.0"]), + "1859856bc5a07e18d8967ec00b4d89cd6ea11e0a": LibraryInfo( + "UUPSUpgradeableMock", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "02306349e880c95b317f34313bf0d335bcb20711": LibraryInfo( + "UUPSUpgradeableUnsafeMock", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "9d3be3ef2fe57b5f8345d6bb0b34500b94b3039f": LibraryInfo( + "UUPSUpgradeableBrokenMock", ["v4.1.0"] + ), + "ad0004727dde87f3bf6a518a02ccc9475c378edd": LibraryInfo( + "ERC1967Proxy", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "e2bf5ece630b73ede3fa56a42a625ff79cf7a07b": LibraryInfo("ERC1967Upgrade", ["v4.1.0"]), + "775dad710f41a2629d9d5506682c1cd574eae0a6": LibraryInfo( + "BeaconProxy", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "f1865b420ea4dee35a07e61461aa012d55131f33": LibraryInfo( + "TransparentUpgradeableProxy", ["v4.1.0"] + ), + "a1b5157f3148bf64bed9182b4d0617a8eadfd581": LibraryInfo("UUPSUpgradeable", ["v4.1.0"]), + "9d146a9046589ef5728295f53cb3fc9209f6f3e9": LibraryInfo("ERC20", ["v4.1.0"]), + "e3f871942e9365cc12cdb31ac4196e415579b5af": LibraryInfo( + "IERC20Metadata", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "1b85965b7436f201b003472d4afba8ef1e2f0707": LibraryInfo("ERC20FlashMint", ["v4.1.0"]), + "2207444dc8582d69d9546a2434504f679dc50d9c": LibraryInfo("ERC20Permit", ["v4.1.0"]), + "6e83d64273b978f98df3e2379c388010ec2860f4": LibraryInfo("IERC20Permit", ["v4.1.0"]), + "1751dd56c4410e19af4980136ef1ba8e54000493": LibraryInfo("ERC721", ["v4.1.0"]), + "5714897c18afeeddd7dbe406d9878e22f5d751d1": LibraryInfo("ERC777", ["v4.1.0"]), + "63d1095e1fb56da130b614eeaa63f4803f99f7e5": LibraryInfo("Multicall", ["v4.1.0"]), + "fe5963116e1e943c56b62faf6875a3f8482cfe84": LibraryInfo( + "StorageSlot", + [ + "v4.1.0", + "v4.2.0", + "v4.3.0", + "v4.3.1", + "v4.3.2", + "v4.3.3", + "v4.4.0", + "v4.4.1", + "v4.4.2", + "v4.5.0", + ], + ), + "b06559b6a9527a4db570993b98327d1e16908ed2": LibraryInfo("ECDSA", ["v4.1.0"]), + "f6325fbfc5e1ff1f03992fba565321bbc17ed789": LibraryInfo("SignatureChecker", ["v4.1.0"]), + "6a11687f7b7fc1433b269fd4abac331c66fa8a77": LibraryInfo("ERC1820Implementer", ["v4.1.0"]), + "6eb9cd105fa9d0262ed7a11160b76381b39cebd5": LibraryInfo("IERC1820Registry", ["v4.1.0"]), + "e91a667e7a573e6eea5d853b468e8f3d60d81889": LibraryInfo("EnumerableSet", ["v4.1.0"]), + "5c61094952cd50d3802c31177357efd5d8964614": LibraryInfo("IAccessControl", ["v4.2.0"]), + "8694d4f12fbafeb16850afc3464c06ea0a548a0a": LibraryInfo("AccessControl", ["v4.2.0"]), + "28331601ee481fd4a956fdbe388c3abf54f3b65b": LibraryInfo("IAccessControlEnumerable", ["v4.2.0"]), + "64d6a3bb174631f086b16b5e8486a5f794d976b7": LibraryInfo("AccessControlEnumerable", ["v4.2.0"]), + "4d7c63c045201a4bb4b072b90c0ccb7e3da4f871": LibraryInfo( + "Ownable", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "42b68abf0eec947d970be6ed8863108313d0af33": LibraryInfo( + "PaymentSplitter", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "c1f9217c77f35c660dfb3d88d0406508c56488a6": LibraryInfo( + "TimelockController", ["v4.2.0", "v4.3.0"] + ), + "bc8959ed38c71118622ffefeebc4c039b892709b": LibraryInfo( + "IERC1271", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "0b811309fd111891492fcc5d96a2cb3acd8d72e9": LibraryInfo( + "IERC3156FlashLender", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "b6f84fda4cb8fdbaa97a02726fa37281f78e5c91": LibraryInfo("ERC2771Context", ["v4.2.0"]), + "42603ef9257bbe665bb87cffe0b376d7b67712ab": LibraryInfo( + "MinimalForwarder", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "c2aec4893bc9a14ca843763da02fb355261d8a85": LibraryInfo( + "AddressImpl", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "aa59563d28f55355429620d46a95f62807bf714c": LibraryInfo( + "ArraysImpl", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "129786c0f640a54e1262bd0fa09c0402fa4f5310": LibraryInfo( + "BadBeaconNoImpl", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "c7276d5682c391177c65742657733021762fde2e": LibraryInfo( + "BitMapMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "da0acb035f001bc47226ca65e7805071ebcbc590": LibraryInfo( + "ClashingImplementation", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "9a62fc52dfa77cec1a4fb20a17dc85c2b00165b0": LibraryInfo( + "ClonesMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e319f874c429173e1b901ab7fc2014f7acc17b54": LibraryInfo( + "ContextMockCaller", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "46564e62cbf056df3d249a990973bdb709e83c2b": LibraryInfo( + "CountersImpl", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f89165a7467e5e4a909e2b013e8383263d133e18": LibraryInfo( + "Create2Impl", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "5654add772b6dac7815ecc69eeb4c6da58f6ce7c": LibraryInfo( + "Impl", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "9db5258aacf562685ca737ca2de3e42ab6d55a00": LibraryInfo( + "DummyImplementation", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e2170d2050cc953a0791202b11eb01c352a015b3": LibraryInfo( + "DummyImplementationV2", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "75a5093a9fb3b7de904b13481d04f0570bf5a6ff": LibraryInfo( + "EIP712External", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "369690b5196bce6039aaec5397827ac325a7b4f5": LibraryInfo( + "ERC1155BurnableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "ffc5443dbc5dd5285e2ded467043517e152a75cc": LibraryInfo( + "ERC1155Mock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "b3a1f1f5c11bb12f910ba0e8d951451eae1d0292": LibraryInfo( + "ERC1155PausableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "71fec413985069608d5a44630c2fdbd3b8418ccd": LibraryInfo( + "ERC1155ReceiverMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "5cf44c06a1081d98ecd7e65cc1aae83995055909": LibraryInfo( + "ERC1155SupplyMock", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2"] + ), + "ad0b6a02674048a5e3a3d4d4a551934a2c897c74": LibraryInfo( + "SupportsInterfaceWithLookupMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "070505611a17dcef9932ae5eb779350f79698235": LibraryInfo( + "ERC165InterfacesSupported", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "93bb8c99dfe0581125332fb3ebd0e3955144df3e": LibraryInfo( + "ERC165NotSupported", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "6b299c538b2c135312b0c72d8af712c821f831a2": LibraryInfo( + "ERC165Mock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "8fee474311bd35767aa7afb389d6e4799eb5b8cf": LibraryInfo( + "ERC20BurnableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "bf3af764a6c36127b5ff5e46f045291de91933ec": LibraryInfo( + "ERC20CappedMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "21c4be0176e151069878b58aae5a1d165223e6ce": LibraryInfo( + "ERC20DecimalsMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "cd2d838c0fb41e79aae2433e909abc6c0e8122bf": LibraryInfo( + "ERC20FlashMintMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f83b56148b0339522b662f03900cff6983c51850": LibraryInfo( + "ERC20Mock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e28bdd635291e4e5aefef3245e353609f1515968": LibraryInfo( + "ERC20PausableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "9b65c5d1a96a1e41eb6182254c051eece2af5c54": LibraryInfo( + "ERC20PermitMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "2ba8af8608e5448e4715cda8e571bcc6cfd48963": LibraryInfo( + "ERC20VotesCompMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "0ab46f9bd08b5723b1d914e41725574517a12ad6": LibraryInfo( + "ERC20VotesMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "b1c70a189722a29fdab6b49e27b040472f5a2e16": LibraryInfo( + "ERC20WrapperMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "62a9a8199169e0de7117864ee9d256bb4b52083e": LibraryInfo( + "ERC2771ContextMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "ae5f39a87a79311e6e4ad375b3ade2b5e03131ea": LibraryInfo( + "ERC3156FlashBorrowerMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e09d1048186c05d41f0015ba69aa70a86b243c00": LibraryInfo( + "ERC721BurnableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "7fae99c0b5530d32609982b4d533509b8674f0ee": LibraryInfo( + "ERC721EnumerableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "9578913f5871c5e1567c53da7d5675d75dc92747": LibraryInfo( + "ERC721Mock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "449cd793d9e4639b31812292d0319b59b0ca8e55": LibraryInfo( + "ERC721PausableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "b10cef059262dfabaeade8ff51fd80d2aaba7537": LibraryInfo( + "ERC721ReceiverMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "85c61f773cca6fa57c335796e1ca1f5b98ea1485": LibraryInfo( + "ERC721URIStorageMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "75e9ad33d99c316414a0d3506cab37488b722728": LibraryInfo( + "ERC777Mock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "2af1eabb238c84878673e589fd69defacb92e040": LibraryInfo( + "ERC777SenderRecipientMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "4ce3c0c2f9d135ac50c7075651c9b930daecd603": LibraryInfo( + "EnumerableMapMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "867d1f1aa9db24d77f5ecb83a38eb4a60b09dce9": LibraryInfo( + "EtherReceiverMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "a8e715f4952f7265ec539aba50e8eea7a45f924e": LibraryInfo( + "InitializableMock", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "e67f151ab39236b0419d7e8b0a583c10e549efb3": LibraryInfo( + "MathMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "1f337a2bbb0e83495566c6cff4791828463f973c": LibraryInfo( + "MerkleProofWrapper", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "c02597d82e217259e7d73000bd1f2789d1c7cd61": LibraryInfo( + "MulticallTest", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "517131a8a0737e26e7be43853b9c24ff6a20552d": LibraryInfo( + "MulticallTokenMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "7fadf3b05e77e38e5049e165344022d1e624b617": LibraryInfo( + "SampleHuman", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "769bdb6cddb7c34bb955535a6f0f77f49e98f292": LibraryInfo( + "SampleMother", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "a2b8b3961965b90f6c7b4ecaa477bd0d77f8c7d7": LibraryInfo( + "SampleGramps", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "504d033dfcae64d76986dcb5cb8c5be4d1dded4d": LibraryInfo( + "SampleFather", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "86e3593fee13c15d567cc136bacdca20ea1e6101": LibraryInfo( + "SampleChild", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "cb6a1051fd2f5bc747c3f773fc3af72c484ab3a7": LibraryInfo( + "OwnableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "24cf84f54a22c4a772fe74d9f72853640e102262": LibraryInfo( + "PausableMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "1167e7738408a66d3897f34aeef40c9ef438686e": LibraryInfo( + "PullPaymentMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "a8fac5d6e42c033f8c2372dcb6ccdcfd37cc1437": LibraryInfo( + "ReentrancyAttack", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "7b976c578c5adaf74bc18e387c7e12147609b8a7": LibraryInfo( + "ReentrancyMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e66dfe8c2da2a470c76b3d0a0cfe5e7a7580de9a": LibraryInfo( + "Implementation1", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "a1226699bd48b90ff377b53c4a70f27c25a9a16b": LibraryInfo( + "Implementation2", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "c9e618dc47d2ac5cc6dbce47d9b0130d4cc9377e": LibraryInfo( + "Implementation3", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "3ce30a36b36ec42b787dd5be03a12341207a7fa6": LibraryInfo( + "Implementation4", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f29c76324fd21e33388b40bd77ace0ef9c5c0d41": LibraryInfo( + "SafeCastMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "2689010b084a75537c8e662d0d4c1c82460a7661": LibraryInfo( + "ERC20ReturnFalseMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "acc2c209743671f9c4e44c829247831bf350a0a0": LibraryInfo( + "ERC20ReturnTrueMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "74fd9057d3dffcddeae355918b7644eaa8ef7244": LibraryInfo( + "ERC20NoReturnMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "86229693a21d889433acfa056ae7db96ba4a6cef": LibraryInfo( + "SafeERC20Wrapper", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "4823c60f1f994ca554eea1ecbfa81e5b83b5d561": LibraryInfo( + "SafeMathMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "97db478067ab766d3fa0758aca22823b38c81327": LibraryInfo( + "SignatureCheckerMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e826f1b32cee3777ae3a3d0bef3cd8c20ac9cf7d": LibraryInfo( + "MigratableMockV1", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "2e635423850dc52ed5a3b9afdec568a0519c6402": LibraryInfo( + "MigratableMockV2", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "27932bcd6aeb679027157cf623195bd425b3d85b": LibraryInfo( + "MigratableMockV3", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "2786cb54d7147fd4c067acd9bcd2ccb9cc57dbd8": LibraryInfo( + "StorageSlotMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "b17d5f234e99981e2caad9c0f56ffaa53ad3e125": LibraryInfo( + "StringsMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "5df1b89723d0bdcc5d517d4317b9c32184247a15": LibraryInfo( + "UUPSUpgradeableBrokenMock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "d90c57be785b0a21161e20792e434763a5617e42": LibraryInfo( + "Clones", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "1a59f5b5a1457a6db4f0fde03cb7ae600702f205": LibraryInfo( + "ERC1967Upgrade", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "3fb535ddf3bc10f6ee9803c6d0be51c32f15947c": LibraryInfo( + "Proxy", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "dd95705feafaba2f8cf136c536916bc6e15679ce": LibraryInfo( + "ProxyAdmin", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "4a8ef6e66df0839cd7aaab06e9e5101d0b427ab3": LibraryInfo( + "TransparentUpgradeableProxy", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "04a6f67acb954ffe770a8a034c7b342ba53d470d": LibraryInfo( + "Initializable", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0"] + ), + "dc77065c6d2328495a7a5373a4384cdfa419b536": LibraryInfo( + "UUPSUpgradeable", ["v4.2.0", "v4.3.0", "v4.3.1"] + ), + "52cabe02daf5bc8b106eca66daf0d7a2af4a1c28": LibraryInfo( + "Pausable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e087c5b92178714f1e90fa95c2eb7d96e584b267": LibraryInfo( + "PullPayment", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "362780bb1082d2ee05b02fbf3586f2efdf55787d": LibraryInfo( + "ReentrancyGuard", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "e0b83559902f4dbc79b69b31b5d5a55566f0a4d8": LibraryInfo("ERC1155", ["v4.2.0"]), + "26a7097a902c5d0ec06e9afe7a1b16e919e04f4d": LibraryInfo( + "IERC1155", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f7f86cc447e330c0f2fe6c75893393527f9f0b75": LibraryInfo( + "IERC1155Receiver", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "dcc175b857019b96cc84b4b554e4078167fd8061": LibraryInfo( + "ERC1155Burnable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "6dbb111b0880293ce2d796b20c6a84f2b39b537d": LibraryInfo( + "ERC1155Pausable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "6c4f2cc4be0924e6b4ad2a9b3c46efb8054335ca": LibraryInfo( + "ERC1155Supply", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2"] + ), + "0ba967a226fd02a14a5e8da8780b72a207f642df": LibraryInfo( + "ERC1155PresetMinterPauser", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "8f6be89b0ce95a5a8507d0473dd6bdc86fc05893": LibraryInfo( + "ERC1155Holder", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "3eed534c118e1b55d8807ccdace65018f8e6cbfd": LibraryInfo( + "ERC1155Receiver", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "5861a2fbfab58b39cbd32dfc63795083f43d1e65": LibraryInfo("ERC20", ["v4.2.0"]), + "eefc9e89d017a91a4ce1f87accc52538bb130e97": LibraryInfo( + "IERC20", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "36c08003131ccd3493f61caa424d4ef45e40abef": LibraryInfo( + "ERC20Burnable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "d577838d7d5ecc6f5fca04d568956aaf48c13597": LibraryInfo( + "ERC20Capped", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "4f57398877163b33c21ce35e9e43b94b72d943ab": LibraryInfo("ERC20FlashMint", ["v4.2.0"]), + "4a726b7b47a1ef62e108e4eabde5e35a24fd062e": LibraryInfo( + "ERC20Pausable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "aa54946245c2f1991404df914c8a529eece3f57d": LibraryInfo( + "ERC20Snapshot", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "370ff7cbbbcefc8776065285a30cda977191d936": LibraryInfo("ERC20Votes", ["v4.2.0"]), + "6b887b5359c94e61da10ae9dbc82502becb4b45f": LibraryInfo( + "ERC20VotesComp", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "a7bc491c206021ef00c4c58e34737ed6319ccf6e": LibraryInfo( + "ERC20Wrapper", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "273d56d9e427a9c91ac82db0a87ecf5d1d4da973": LibraryInfo( + "ERC20Permit", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "1d200e39cf5dd9bd315f3461c1a664558662d5e8": LibraryInfo( + "IERC20Permit", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "d6bac8d6f8bff3ba4a2c45d3cf23101a81a093b3": LibraryInfo( + "ERC20PresetMinterPauser", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f1eefb4a9491a1ca4f3c88a9d8518d110f7ab8e8": LibraryInfo( + "SafeERC20", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "d53bbb9fbcdf3ed1c0ff29350e7c813dabf9a5ac": LibraryInfo( + "TokenTimelock", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "2caaed78e7c5899dfdfdc82812a31048d90f11d7": LibraryInfo("ERC721", ["v4.2.0"]), + "7899b986a2072f4ac72b129375c7eac5eee84c3e": LibraryInfo( + "IERC721", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "15cb97070ec4da6593205c442a6fcae406e7af9a": LibraryInfo( + "IERC721Receiver", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "ef9f288af616034ca45cbbfb70926273848a17c3": LibraryInfo( + "ERC721Enumerable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "06ee92df7f5d22b92b723b7fa47a7163a8bee826": LibraryInfo( + "ERC721Pausable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "29e0c18d75d521f4530bfd591cfea713a1f49e0c": LibraryInfo( + "ERC721URIStorage", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "8f3477480c38a4dfda7d4192ea80511fd8eb063d": LibraryInfo( + "IERC721Enumerable", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "7a4d553b1a0193fcf9fd4d9468bb5700c27db42b": LibraryInfo( + "IERC721Metadata", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f3c528e97bbb7f9aac27c721e2d17cbc75be7ce5": LibraryInfo( + "ERC721PresetMinterPauserAutoId", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "0093e17405d73820432e8da360f33ddc23308530": LibraryInfo( + "ERC721Holder", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "ec44444770bfb356bacc955d93d5237656af1390": LibraryInfo( + "ERC777", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "e0bfb77c486769ad6acb629279feaf28455cccc4": LibraryInfo( + "IERC777", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "14955bd29186d48ce191852b38f761ce1622fef1": LibraryInfo("Address", ["v4.2.0"]), + "5625fde14370990aa8d4d094ba822a866b36fbd3": LibraryInfo( + "Arrays", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "4ac4dc8857640e049508901478e37e13576e9925": LibraryInfo( + "Context", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "55cf39dc3f389da17665b6cff3c6b4c47ee5ae5f": LibraryInfo( + "Counters", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "61ca214711b37f23de183403ef96eba568654e74": LibraryInfo( + "Create2", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "abe82d145668c3c90d148f2ca2971ea0cdd3c9ed": LibraryInfo( + "Multicall", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "3965655fb49d3d12cb7b48155c684401673fbb96": LibraryInfo( + "Strings", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "db454d7154deefdcc0d1dea7d458b572c4a0a67b": LibraryInfo("ECDSA", ["v4.2.0"]), + "4fea412076493cc56d86c5296289f1ccc4bd2638": LibraryInfo( + "MerkleProof", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "8c92fa340338deb4146af78038d2f8195df99ed0": LibraryInfo("SignatureChecker", ["v4.2.0"]), + "a94f50827517d3595fb4ea61c7357ef87858dd74": LibraryInfo( + "EIP712", ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "2de350f849494c8ac4872728cd696d77f879efea": LibraryInfo( + "Escrow", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "fc0669b213fd21fcbf82b48b6a5834a0e8e4797f": LibraryInfo( + "RefundEscrow", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "ffbe0135815bb9d107067eac054384ce9c559853": LibraryInfo("ERC165Checker", ["v4.2.0"]), + "6843b3e0971a80f76c78626e5fbd5816449c4891": LibraryInfo( + "ERC1820Implementer", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "3ab18388a1564c59b08f34c40e49fba6ed2030fa": LibraryInfo( + "IERC1820Registry", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e4a7521c8dfccec8ef656905b09facaee8dfdb01": LibraryInfo("Math", ["v4.2.0"]), + "69e808bc327ca30cce6784a56944f386502da108": LibraryInfo( + "SafeCast", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "e3d19a417652f39488237ae86f633fc55f37ddd8": LibraryInfo( + "SafeMath", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "61d0bee3d53d397afc63ceb8f5aebb843ad4f58c": LibraryInfo("BitMaps", ["v4.2.0"]), + "f4e98a17d92c50528ac5512cf6d19c28381a671a": LibraryInfo( + "EnumerableMap", + ["v4.2.0", "v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "034b7e7cc2490688bf19079ab52aca584c622a2d": LibraryInfo("EnumerableSet", ["v4.2.0"]), + "3ff259364b811ce55fbaf0b7d6e145fe32532877": LibraryInfo( + "AccessControl", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "982c66e73b9fd3c148d7f157a38fb08a074922a9": LibraryInfo( + "AccessControlEnumerable", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "47e570ba4dfb58e4d36d325ca74008a1ac3a25ef": LibraryInfo( + "IAccessControl", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "d78d847dd07ed931c12f77b0f7626eb4e0100745": LibraryInfo( + "IAccessControlEnumerable", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "1f9a441bb3f9991cf0d8db4a0f7338155dc1135e": LibraryInfo( + "Governor", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "c802a401fe1793af47cb8b418684023cd4d5361b": LibraryInfo( + "IGovernor", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "5fd29ee0161a032ec9a5e86f2d8cd71f53bc6ed1": LibraryInfo( + "GovernorCompatibilityBravo", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "0d8b9df97940d08bb323a575ef0d7060676ed260": LibraryInfo( + "IGovernorCompatibilityBravo", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "54543b187e4d9f29dc31c819093f48d9969d7d8a": LibraryInfo( + "GovernorCountingSimple", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "dae38923cfdcb3de8c354a88b7b13fc2ecc26e12": LibraryInfo( + "GovernorProposalThreshold", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "946bb0a46b5c75167f052528a401a12768de1f45": LibraryInfo( + "ICompoundTimelock", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "6d6fc8587f4cc604ecc04de3ee0f8377c88c2e38": LibraryInfo( + "GovernorTimelockCompound", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "8a58931413fa94e76f02d330097fcfa9c1c48bd9": LibraryInfo( + "GovernorTimelockControl", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "2eb8af93a3b36609392bf643c72a9d03f0a6f398": LibraryInfo( + "GovernorVotes", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "fb68a921152337bcb1e01376223f4c55de026197": LibraryInfo( + "GovernorVotesComp", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "f5c1995c54bbbda556c0b279624eb88f03cdea3f": LibraryInfo( + "GovernorVotesQuorumFraction", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"], + ), + "bce8f84c0ec1c03925f2478e3a3fccb33f60f35e": LibraryInfo( + "IGovernorTimelock", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "9bd35ec7f53dbd0a4a87d1a93c424f09916497f6": LibraryInfo( + "IERC1363", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "898275960fb383e8850df71e6e26dc86a5af34ee": LibraryInfo( + "IERC1363Receiver", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "8e978b1851c28780339fc78c1095ef2e9844ee55": LibraryInfo( + "IERC1363Spender", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "8794d872af0a539cdb093481e698677eff5e2745": LibraryInfo( + "IERC2981", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "e72cca0e88cb8abd72845272eb6c90402063a578": LibraryInfo( + "IERC2612", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "2bfb18e3d399cff65ab9b803c1e058868d26387a": LibraryInfo( + "ERC2771Context", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "88fb8242a3f1c90475facda5a92901c903676ce3": LibraryInfo( + "ECDSAMock", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "339f780618b8638444d16c9e43ee94e0dedbd4d8": LibraryInfo( + "EnumerableBytes32SetMock", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "a32259aa2046b09ffc5dc8b1a89cd3bbdf4163a1": LibraryInfo( + "EnumerableAddressSetMock", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "47212bb1a4a0679b281ef4d5d1ff20b1d8e152e4": LibraryInfo( + "EnumerableUintSetMock", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "6892b367ba9dbfecaf18e5ec15291d334a2a67a2": LibraryInfo( + "GovernorCompMock", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "fa5c7c49cb08c80190788a5f66c38869fae7ae51": LibraryInfo( + "GovernorCompatibilityBravoMock", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "aa27e63eb1eda7556b559ae08ed141575a001370": LibraryInfo( + "GovernorMock", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "bc7e434e2afd6cea41ec96110028e63c2c55db42": LibraryInfo( + "GovernorTimelockCompoundMock", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "d8b5430cf0a55144e3ebfb8a06f882614dbb7718": LibraryInfo( + "GovernorTimelockControlMock", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "cce92ebddff5d610dca62d66c72c9cb83c62700f": LibraryInfo( + "TimersBlockNumberImpl", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "83786236d97273dfc27838a31c523b1d362bf105": LibraryInfo( + "TimersTimestampImpl", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "8a04dcf69374c0eb397038120d6f3efdcc2ffd76": LibraryInfo( + "CompTimelock", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "60dfa68371a6272fc626fd9aae7e556621402067": LibraryInfo( + "ERC1155", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "f0766528233a6368c8539a4627387175feb32b94": LibraryInfo( + "ERC20", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "91e9f927a20d0de07df4ea6e3c2060bcca716ea3": LibraryInfo( + "ERC20FlashMint", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "b655b4fbbb49760010632cc8d0fc006b15f0c4ee": LibraryInfo( + "ERC20Votes", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "e92b2feb6b8539d301c2c4c66b91fdf11ab3a691": LibraryInfo( + "ERC721", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "1fde194446c5afd545cc902213afbec2c87a46bd": LibraryInfo( + "Address", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "6ced0927362ad42d906b44d8616661c2da119c84": LibraryInfo( + "Timers", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "14c1e71a34bcc6538f8de689211c51c0ec0a8d11": LibraryInfo( + "ECDSA", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3"] + ), + "b590e553b7df8030182c6ecb4721a9c5dad81c98": LibraryInfo( + "SignatureChecker", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "eebebdb79c1b3e1f8ffcff988f929b6dc1eda7dc": LibraryInfo( + "ERC165Checker", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "9f15868ec22f5af898a458488bc83dfe12bf8817": LibraryInfo( + "Math", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "2d212d3ead2002233febe7e68c6851cb66449d97": LibraryInfo( + "BitMaps", ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "1896e438b057c94ccba383036112041dd7cbad62": LibraryInfo( + "EnumerableSet", + ["v4.3.0", "v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"], + ), + "898b9a1a1bb87f2ca186905c385d3bca567eebb7": LibraryInfo( + "TimelockController", ["v4.3.1", "v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "2219a93edab7ad1455f89d93bc04bfd6799232a1": LibraryInfo( + "UUPSUpgradeable", ["v4.3.2", "v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2"] + ), + "8b6ce0d7b4ad592774afeadd155078d4027ab95a": LibraryInfo( + "ERC1155SupplyMock", ["v4.3.3", "v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "dba518f42d643a2286c0bf8eacd3613c53d85ca4": LibraryInfo("ERC1155Supply", ["v4.3.3"]), + "a99091ffa64d372a750e960e401381eb95593793": LibraryInfo( + "AccessControl", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "27faee4bc796dc15628234c0aff9f28e6a93eda9": LibraryInfo( + "AccessControlEnumerable", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "bad3e51ef939deac2032e71376b598cdbfa12b14": LibraryInfo( + "Ownable", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "5492770f5c3d20f1b82762f03356ef4fd6995126": LibraryInfo( + "PaymentSplitter", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "c7fbf0739abbc9f1f60596b280bbd07bb4390681": LibraryInfo( + "VestingWallet", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "f258a176329f89585b497b54a6c49c51dec02479": LibraryInfo( + "Governor", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "13ef8f5e7fef9d50c289b20dc3b1ee35d9fc08a5": LibraryInfo( + "IGovernor", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "84f5273d82b316b964e0094fedc4790215ae3f4a": LibraryInfo( + "GovernorCompatibilityBravo", ["v4.4.0", "v4.4.1"] + ), + "828f00113b4c019ae42020b90286d6c0d902bc08": LibraryInfo( + "IGovernorCompatibilityBravo", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "d60a1b5753981b2f04d1b3e8fe01856bca55d895": LibraryInfo( + "GovernorCountingSimple", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "7b5312b7e518b77b9ca1807058090a7f27908f75": LibraryInfo( + "GovernorProposalThreshold", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "5caea9b7191c8bf8fe302e98f69d61efe4a626cf": LibraryInfo( + "GovernorSettings", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "392943039111895161ca27cf1884863f7f9a96b9": LibraryInfo( + "GovernorTimelockCompound", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "bc5e88dd5c3e739eea0b8f33568044dd0a04abf7": LibraryInfo( + "ECDSAMock", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "96506e6a865793695afaa9ba6149baf8acca2f1c": LibraryInfo( + "GovernorCompMock", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "920beda23e95dc26939587a933619dfae19492c2": LibraryInfo( + "GovernorCompatibilityBravoMock", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "00d7d368e9e122f5d5162e42c6247685e5c94a7a": LibraryInfo( + "GovernorMock", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "6ba6c91c65d91381889a327f62e600e48bab91b5": LibraryInfo( + "GovernorTimelockCompoundMock", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "22674de544356a14664077d9598afc866e1e08d3": LibraryInfo( + "GovernorTimelockControlMock", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "308abb0377baa296b93206b78e0f17a7eacd5dd0": LibraryInfo( + "MerkleProofWrapper", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "d594afd3a1d8065b0999fab33b33ee98afbb1a9e": LibraryInfo( + "MyGovernor1", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "a6e00d1c93dca6635da940320b7ca27b97aac5a9": LibraryInfo( + "MyGovernor2", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "73feea0db74075f5757321a99d1602d8255eb17f": LibraryInfo( + "MyGovernor", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "514e3afefce9342035a181c08c0ec2ee4ea03640": LibraryInfo( + "ReentrancyGuard", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "d324c57106e8a29e644543f66c6466102c4cff4d": LibraryInfo( + "ERC1155", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "cdcb56b1b4f8d6c2baa0aad1d5d293975be3b6b6": LibraryInfo( + "ERC1155Supply", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "642fb791ce5f30f714a33b8eadf51e3cc183f353": LibraryInfo( + "ERC20Votes", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "5ea292ebdd2f061e9379b500f2fceba49ef00761": LibraryInfo( + "ERC721", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "61ac98a69d3dfd3c15232499e2315581004d8522": LibraryInfo( + "ECDSA", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "461520eae9f1d49bd16c01cdd05800f72633691d": LibraryInfo( + "MerkleProof", ["v4.4.0", "v4.4.1", "v4.4.2"] + ), + "876796dde039fc6fe4b5d43d9ca6e411af135800": LibraryInfo( + "EIP712", ["v4.4.0", "v4.4.1", "v4.4.2", "v4.5.0"] + ), + "81903dc774a37209651c9c2e0b2ba85b56f381f1": LibraryInfo( + "InitializableMock", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "a0ec129eecdccb3a692f9be3661a19f39d1312e2": LibraryInfo( + "ConstructorInitializableMock", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "f0b9b893ca9aad442d6d92dca525a1c5332c474b": LibraryInfo( + "SampleHuman", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "1c97276a55c8d0090fa15d4b99d27deaa955e3b7": LibraryInfo( + "SampleMother", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "26b8494cd75563c4d5f0b141c27c59065421eaf9": LibraryInfo( + "SampleGramps", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "4fad92aa7e239a5a470b35c3ab8d1101c69c23a0": LibraryInfo( + "SampleFather", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "31fd7aee4912ba9ae36ba4a04a4a05d9d2690afb": LibraryInfo( + "SampleChild", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "eec4af0ee55aba5b65b0ac375db706b2541e5653": LibraryInfo( + "Initializable", ["v4.4.1", "v4.4.2", "v4.5.0"] + ), + "94d8214a6855376d8fcde6f26316c8d848faeb6d": LibraryInfo( + "GovernorCompatibilityBravo", ["v4.4.2", "v4.5.0"] + ), + "2a8c112fa192928eae7c1e7b8f8322fa7766121e": LibraryInfo( + "CallReceiverMock", ["v4.4.2", "v4.5.0"] + ), + "f6b1a7502344283a76b1385153d5dbe17bd792ae": LibraryInfo("AccessControl", ["v4.5.0"]), + "a1d8fc054c5d73114421ce0f143b4fabf3568d42": LibraryInfo("AccessControlEnumerable", ["v4.5.0"]), + "7019d3d6e4cf90818adcc5d8f2034670cda85daf": LibraryInfo("Governor", ["v4.5.0"]), + "dbbf75e8914cd4f0946c52f98d04f493e94dd620": LibraryInfo("IGovernor", ["v4.5.0"]), + "c00e7da3dba00f6c11fdcbbf357b6dc18110e2b9": LibraryInfo( + "GovernorPreventLateQuorum", ["v4.5.0"] + ), + "1bc4aae7c1537cd679c7193f3f7652101d30a892": LibraryInfo("GovernorTimelockCompound", ["v4.5.0"]), + "58969c4290386e434b89e71174668703cec1ab45": LibraryInfo("GovernorTimelockControl", ["v4.5.0"]), + "29836afa63a7f71b8afb1d048e444b4b75cd822b": LibraryInfo("GovernorVotes", ["v4.5.0"]), + "800c4417f2601773c7bb90aaf81a1dea6f47485f": LibraryInfo( + "GovernorVotesQuorumFraction", ["v4.5.0"] + ), + "5235772d4436eccec983d7c5edbd240052c9ba22": LibraryInfo("IVotes", ["v4.5.0"]), + "563ff993a6b7d8def9f98ac8bbba2e0d260ceff0": LibraryInfo("Votes", ["v4.5.0"]), + "287623ca3a4ee8b95286d73ba6b2ed74b31aa56e": LibraryInfo("IERC2981", ["v4.5.0"]), + "2d3287e3ef37104daa848d29ba9e569939dfb421": LibraryInfo("IERC1822Proxiable", ["v4.5.0"]), + "55a1a0a2c8d2703791c32dbbe88d26107897fc53": LibraryInfo("ERC2771Context", ["v4.5.0"]), + "0f78a22d966157b538e172ee646c8b2aa2ddcce5": LibraryInfo("MinimalForwarder", ["v4.5.0"]), + "2ba4a77e01e137cab1d1ad573bae7e2bfef25b8f": LibraryInfo("Base64Mock", ["v4.5.0"]), + "9ad73f0552ac99d3e074b3c630658afda1049412": LibraryInfo("CheckpointsImpl", ["v4.5.0"]), + "660557bd64e5e8e21d5d45f4ee8fb6ad951d0452": LibraryInfo("ERC2771ContextMock", ["v4.5.0"]), + "ea0f405b0d5c246931e84d1375055083872f097c": LibraryInfo("ERC721RoyaltyMock", ["v4.5.0"]), + "e0e331829d37789f4c66f72174b609e65e382d54": LibraryInfo("ERC721VotesMock", ["v4.5.0"]), + "c67fdb73a1ebdc6f94bd34f84f7410d860b179d4": LibraryInfo("GovernorMock", ["v4.5.0"]), + "3d5d49916ab335e7e63e6ac8c6bbdde4ce91774a": LibraryInfo( + "GovernorPreventLateQuorumMock", ["v4.5.0"] + ), + "846f47565f55b3ce4e7e1991a4f76a0f6d257cae": LibraryInfo( + "GovernorTimelockCompoundMock", ["v4.5.0"] + ), + "d80b0d79f0062440f20d9cd7992ef3b6412d74ee": LibraryInfo( + "GovernorTimelockControlMock", ["v4.5.0"] + ), + "50fc19942debe7b63d6307cc2ad4f485739a4f6f": LibraryInfo("GovernorVoteMocks", ["v4.5.0"]), + "50c9c79167cff6cae0533e799ccb7da86cf72d90": LibraryInfo("ERC20ReturnFalseMock", ["v4.5.0"]), + "1306e3dd922f348e0ad76610cec7acfbb1363489": LibraryInfo("SignedMathMock", ["v4.5.0"]), + "fb165320294354e11a7e2d11e8c1b73000dac9c7": LibraryInfo( + "UUPSUpgradeableLegacyMock", ["v4.5.0"] + ), + "794af8bd5c3a40c9e038b52ec27b22abcb52c8bb": LibraryInfo("VotesMock", ["v4.5.0"]), + "a3dc30773372880a622a3577d2097f9976622b0b": LibraryInfo("MyGovernor1", ["v4.5.0"]), + "b154ab0518de330d71a343878580a2dd4130c6cd": LibraryInfo("MyGovernor2", ["v4.5.0"]), + "20d2a2d2701c4357b2abce38302a1caa427ae884": LibraryInfo("MyGovernor", ["v4.5.0"]), + "6bc0b1abdafe6cd09f3b89d0a2204361106cd29d": LibraryInfo("ERC1967Upgrade", ["v4.5.0"]), + "1cce6c0614504a6d6ee709651a1182a1cbba8e2e": LibraryInfo("Proxy", ["v4.5.0"]), + "dd05a2a306a051e1c4c381d967584d02c114038a": LibraryInfo("UUPSUpgradeable", ["v4.5.0"]), + "2f99143bf51f009a94948a12b8ee5b5af48743c6": LibraryInfo("IERC1155Receiver", ["v4.5.0"]), + "dfd6949ce9bb4cf1b409dec313064e123de4d18d": LibraryInfo("ERC20", ["v4.5.0"]), + "6fa24eddd6020e757903a86dd74f335e9d6d92ae": LibraryInfo("IERC20", ["v4.5.0"]), + "6137641e7029f78ccdb9ed7576394655140f1687": LibraryInfo("ERC20Burnable", ["v4.5.0"]), + "630204f30f220515a71dada488ef5e2b5f8cac65": LibraryInfo("ERC20FlashMint", ["v4.5.0"]), + "f132d224bf01c7af2adab4143b27eb01e3af3908": LibraryInfo("ERC20Votes", ["v4.5.0"]), + "c78fb00bcac30eac9c9f09370bfb134f1fb0dace": LibraryInfo("ERC20VotesComp", ["v4.5.0"]), + "73965f3b502d3eb2c7b119a1a3385dbbf61431e1": LibraryInfo("TokenTimelock", ["v4.5.0"]), + "d1216cfae4bd3a10f1d1875dfff6d645866adf43": LibraryInfo("ERC721", ["v4.5.0"]), + "bf9ad9a6de08088c645ff86bdf875c0beac8a3b5": LibraryInfo("ERC721Royalty", ["v4.5.0"]), + "a8385ddba748ac6b2d17f1c342aba1e9b5d6927d": LibraryInfo("IERC721Enumerable", ["v4.5.0"]), + "6f84eff1a9116fbf20abd5c4457e4897ab40a415": LibraryInfo("ERC721Votes", ["v4.5.0"]), + "b457774f9fc82764468c9438603124f1243e042f": LibraryInfo("ERC777", ["v4.5.0"]), + "89520f76f5c9a9c6bad97750f2e01377f76bad6f": LibraryInfo("ERC2981", ["v4.5.0"]), + "be306f01ae84e9a1a568f703b8bcc9b1a0c49898": LibraryInfo("Address", ["v4.5.0"]), + "3bc96067d15f810ae58d139dd854197d0c3be98a": LibraryInfo("Base64", ["v4.5.0"]), + "0802f0deda6bb9b59cdbe73a5e5c6a238ea5668b": LibraryInfo("Checkpoints", ["v4.5.0"]), + "fc9ecdcc8173f23d1db2eecc243d1ab3999dbe35": LibraryInfo("Multicall", ["v4.5.0"]), + "68081d1d7d71bcdbb1507f31b71fe09f66b5ad21": LibraryInfo("ECDSA", ["v4.5.0"]), + "33ea0fbdba5f8542328ddac5067b9384c8988296": LibraryInfo("MerkleProof", ["v4.5.0"]), + "1c3856f541a8333183cfecbed1f6034030f2dd2a": LibraryInfo("SignatureChecker", ["v4.5.0"]), + "29e09293303b76a688d81e63b7c3469ef5459b59": LibraryInfo("SignedMath", ["v4.5.0"]), } diff --git a/slither/utils/standard_libraries.py b/slither/utils/standard_libraries.py index 8062efacc..66b164b98 100644 --- a/slither/utils/standard_libraries.py +++ b/slither/utils/standard_libraries.py @@ -68,13 +68,13 @@ def is_openzepellin(contract: "Contract") -> bool: def is_openzepellin_strict(contract: "Contract") -> bool: - start = contract.source_mapping['start'] - end = start + contract.source_mapping['length'] - - # we need a way to get the source code, from a Contract - # source_code = slither.source_code[contract.source_mapping['filename_absolute']][start:end] - # source_hash = sha1(source_code.encode('utf-8')).hexdigest() - # return source_hash in oz_hashes + start = contract.source_mapping["start"] + end = start + contract.source_mapping["length"] + source_code = contract.compilation_unit.core.source_code[ + contract.source_mapping["filename_absolute"] + ][start:end] + source_hash = sha1(source_code.encode("utf-8")).hexdigest() + return source_hash in oz_hashes def is_zos(contract: "Contract") -> bool: From d0fff8ca9a1cd6642c163e9cd8e1298783729016 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 25 Mar 2022 23:59:15 +0100 Subject: [PATCH 026/202] Apply suggestions from code review Co-authored-by: alpharush <0xalpharush@protonmail.com> --- slither/detectors/functions/external_function.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index c95191ad5..6291d27b3 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -20,7 +20,7 @@ class ExternalFunction(AbstractDetector): WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external" WIKI_TITLE = "Public function that could be declared external" - WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external` and its immutable parameters should be located in `calldata` to save gas." + WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external`, and its immutable parameters should be located in `calldata` to save gas." WIKI_RECOMMENDATION = ( "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." ) @@ -110,7 +110,7 @@ class ExternalFunction(AbstractDetector): # After solc 0.6.9, calldata arguments are allowed in public functions if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in ["0.6.9","0.6.10","0.6.11"]: - return [] + return results # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be # calling functions internally, and thus we can't assume any function in such contracts isn't called by them. From b5db35e7f668aec5a16cf713b0cfb2a6f2ca5c18 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 01:05:34 +0200 Subject: [PATCH 027/202] Detect if function has at least one memory arg --- .../detectors/functions/external_function.py | 24 +++++++ ..._function.sol.0.4.25.ExternalFunction.json | 62 ------------------- ..._function.sol.0.5.16.ExternalFunction.json | 62 ------------------- 3 files changed, 24 insertions(+), 124 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 6291d27b3..16ac9d7f1 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,3 +1,7 @@ +from array import ArrayType +from slither.core.declarations.structure import Structure +from slither.core.solidity_types.mapping_type import MappingType +from slither.core.solidity_types.user_defined_type import UserDefinedType from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.operations import SolidityCall from slither.slithir.operations import InternalCall, InternalDynamicCall @@ -105,6 +109,18 @@ class ExternalFunction(AbstractDetector): def function_parameters_written(function): return any(p in function.variables_written for p in function.parameters) + @staticmethod + def is_reference_type(parameter): + if isinstance(parameter.type, ArrayType): + return True + if isinstance(parameter.type, MappingType): + return True + if isinstance(parameter.type, UserDefinedType) and isinstance(parameter.type.type, Structure): + return True + if str(parameter.type) in ["bytes", "string"]: + return True + return False + def _detect(self): # pylint: disable=too-many-locals,too-many-branches results = [] @@ -135,6 +151,14 @@ class ExternalFunction(AbstractDetector): # Next we'll want to loop through all functions defined directly in this contract. for function in contract.functions_declared: + # If all of the function arguments are non-reference type or calldata, we skip it. + reference_args = [] + for arg in function.parameters: + if self.is_reference_type(arg) and arg.location == 'memory': + reference_args.append(arg) + if len(reference_args) == 0 and len(function.parameters) > 0: + continue + # If the function is a constructor, or is public, we skip it. if function.is_constructor or function.visibility != "public": continue diff --git a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json index 75e76126d..17885c854 100644 --- a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json @@ -210,68 +210,6 @@ "impact": "Optimization", "confidence": "High" }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.4.25/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.4.25/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, { "elements": [ { diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 4d947de06..3a0514955 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -210,68 +210,6 @@ "impact": "Optimization", "confidence": "High" }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.5.16/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.5.16/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, { "elements": [ { From 2bf846109901a96bfd655351f598f8fc5096c380 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 15:44:50 +0200 Subject: [PATCH 028/202] Fix: skip functions without args --- .../detectors/functions/external_function.py | 2 +- ..._function.sol.0.4.25.ExternalFunction.json | 279 +----------------- ..._function.sol.0.5.16.ExternalFunction.json | 279 +----------------- 3 files changed, 3 insertions(+), 557 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 16ac9d7f1..4ab2225f4 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -156,7 +156,7 @@ class ExternalFunction(AbstractDetector): for arg in function.parameters: if self.is_reference_type(arg) and arg.location == 'memory': reference_args.append(arg) - if len(reference_args) == 0 and len(function.parameters) > 0: + if len(reference_args) == 0: continue # If the function is a constructor, or is public, we skip it. diff --git a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json index 17885c854..5825bcacc 100644 --- a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json @@ -1,280 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.4.25/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.4.25/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.4.25/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.4.25/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 3a0514955..5825bcacc 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -1,280 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.5.16/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.5.16/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.5.16/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.5.16/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file From b31c73de3d27f2800a126e28eff2d75058955ff3 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 21:27:54 +0200 Subject: [PATCH 029/202] Linting --- .../detectors/functions/external_function.py | 22 +++++++++++-------- tests/test_detectors.py | 8 +++---- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 4ab2225f4..231560014 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -25,9 +25,7 @@ class ExternalFunction(AbstractDetector): WIKI_TITLE = "Public function that could be declared external" WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external`, and its immutable parameters should be located in `calldata` to save gas." - WIKI_RECOMMENDATION = ( - "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." - ) + WIKI_RECOMMENDATION = "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." @staticmethod def detect_functions_called(contract): @@ -112,10 +110,12 @@ class ExternalFunction(AbstractDetector): @staticmethod def is_reference_type(parameter): if isinstance(parameter.type, ArrayType): - return True + return True if isinstance(parameter.type, MappingType): return True - if isinstance(parameter.type, UserDefinedType) and isinstance(parameter.type.type, Structure): + if isinstance(parameter.type, UserDefinedType) and isinstance( + parameter.type.type, Structure + ): return True if str(parameter.type) in ["bytes", "string"]: return True @@ -125,7 +125,11 @@ class ExternalFunction(AbstractDetector): results = [] # After solc 0.6.9, calldata arguments are allowed in public functions - if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in ["0.6.9","0.6.10","0.6.11"]: + if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in [ + "0.6.9", + "0.6.10", + "0.6.11", + ]: return results # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be @@ -151,13 +155,13 @@ class ExternalFunction(AbstractDetector): # Next we'll want to loop through all functions defined directly in this contract. for function in contract.functions_declared: - # If all of the function arguments are non-reference type or calldata, we skip it. + # If all of the function arguments are non-reference type or calldata, we skip it. reference_args = [] for arg in function.parameters: - if self.is_reference_type(arg) and arg.location == 'memory': + if self.is_reference_type(arg) and arg.location == "memory": reference_args.append(arg) if len(reference_args) == 0: - continue + continue # If the function is a constructor, or is public, we skip it. if function.is_constructor or function.visibility != "public": diff --git a/tests/test_detectors.py b/tests/test_detectors.py index e55740431..5aec956a5 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -514,7 +514,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.4.25", - ), + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -529,7 +529,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.5.16", - ), + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -544,7 +544,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.6.11", - ), + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -559,7 +559,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.7.6", - ), + ), Test( all_detectors.NamingConvention, "naming_convention.sol", From 166eaed76178acd7657a773e25b37e68545fb9ff Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 21:37:47 +0200 Subject: [PATCH 030/202] Improved tests --- .../0.4.25/external_function_3.sol | 11 +- ...unction_3.sol.0.4.25.ExternalFunction.json | 129 +----------------- .../0.5.16/external_function_3.sol | 9 +- ...unction_3.sol.0.5.16.ExternalFunction.json | 62 +-------- .../0.6.11/external_function_3.sol | 9 +- .../0.7.6/external_function_3.sol | 9 +- 6 files changed, 25 insertions(+), 204 deletions(-) diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol index 2ea376fcd..eb11475e5 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -1,11 +1,10 @@ contract Test { - function test(bytes x) public { - - } + function good(bytes x) external {} + function good2() public {} - function test2(bytes memory x) public { - - } + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] x, string y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json index c7c7ae31e..5825bcacc 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json @@ -1,130 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "test", - "source_mapping": { - "start": 21, - "length": 46, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Test", - "source_mapping": { - "start": 0, - "length": 134, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "test(bytes)" - } - } - ], - "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#3-5)\n", - "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5", - "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "test2", - "source_mapping": { - "start": 73, - "length": 54, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 7, - 8, - 9 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Test", - "source_mapping": { - "start": 0, - "length": 134, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "test2(bytes)" - } - } - ], - "description": "test2(bytes) should be declared external:\n\t- Test.test2(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#7-9)\n", - "markdown": "test2(bytes) should be declared external:\n\t- [Test.test2(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9", - "id": "a5b4753f43bb5a2a669ecbf4ce6ab1aaff060454657b16b5ed8cc9c34b521c79", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol index 641027603..92d6bcc5e 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -1,7 +1,10 @@ contract Test { - function test(bytes memory x) public { - - } + function good(bytes calldata x) external {} + function good2() public {} + + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] calldata x, string calldata y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json index 351921497..5825bcacc 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json @@ -1,63 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "test", - "source_mapping": { - "start": 21, - "length": 53, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Test", - "source_mapping": { - "start": 0, - "length": 77, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "is_dependency": false, - "lines": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "test(bytes)" - } - } - ], - "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.5.16/external_function_3.sol#3-5)\n", - "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5", - "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol index 641027603..92d6bcc5e 100644 --- a/tests/detectors/external-function/0.6.11/external_function_3.sol +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -1,7 +1,10 @@ contract Test { - function test(bytes memory x) public { - - } + function good(bytes calldata x) external {} + function good2() public {} + + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] calldata x, string calldata y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol index 641027603..92d6bcc5e 100644 --- a/tests/detectors/external-function/0.7.6/external_function_3.sol +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -1,7 +1,10 @@ contract Test { - function test(bytes memory x) public { - - } + function good(bytes calldata x) external {} + function good2() public {} + + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] calldata x, string calldata y) external {} } \ No newline at end of file From 767094fff12504437cef501c3415919adb551e18 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 20:35:59 +0200 Subject: [PATCH 031/202] Removed detection of mapping type --- slither/detectors/functions/external_function.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 231560014..67c42d2d1 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,6 +1,5 @@ from array import ArrayType from slither.core.declarations.structure import Structure -from slither.core.solidity_types.mapping_type import MappingType from slither.core.solidity_types.user_defined_type import UserDefinedType from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.operations import SolidityCall @@ -111,8 +110,6 @@ class ExternalFunction(AbstractDetector): def is_reference_type(parameter): if isinstance(parameter.type, ArrayType): return True - if isinstance(parameter.type, MappingType): - return True if isinstance(parameter.type, UserDefinedType) and isinstance( parameter.type.type, Structure ): From f295bf35f83cb8153d871566fa6792eeffb31fe5 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 20:59:12 +0200 Subject: [PATCH 032/202] Increased tests coverage --- .../external-function/0.4.25/external_function_3.sol | 2 -- .../external-function/0.5.16/external_function_3.sol | 10 ++++++++-- .../external-function/0.6.11/external_function_3.sol | 10 ++++++++-- .../external-function/0.7.6/external_function_3.sol | 10 ++++++++-- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol index eb11475e5..1e215bceb 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -2,9 +2,7 @@ contract Test { function good(bytes x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] x, string y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol index 92d6bcc5e..3e9204c96 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -1,10 +1,16 @@ +pragma experimental ABIEncoderV2; + contract Test { + struct testStruct { + uint256 id; + string name; + } + function good(bytes calldata x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] calldata x, string calldata y) external {} + function good5(testStruct calldata x) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol index 92d6bcc5e..3e9204c96 100644 --- a/tests/detectors/external-function/0.6.11/external_function_3.sol +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -1,10 +1,16 @@ +pragma experimental ABIEncoderV2; + contract Test { + struct testStruct { + uint256 id; + string name; + } + function good(bytes calldata x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] calldata x, string calldata y) external {} + function good5(testStruct calldata x) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol index 92d6bcc5e..3e9204c96 100644 --- a/tests/detectors/external-function/0.7.6/external_function_3.sol +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -1,10 +1,16 @@ +pragma experimental ABIEncoderV2; + contract Test { + struct testStruct { + uint256 id; + string name; + } + function good(bytes calldata x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] calldata x, string calldata y) external {} + function good5(testStruct calldata x) external {} } \ No newline at end of file From d28df4df3fef46fc2e6b575afb8a89f1110e7205 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 23:20:11 +0200 Subject: [PATCH 033/202] Fixed wrong import --- slither/detectors/functions/external_function.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 67c42d2d1..5344a6881 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,4 +1,4 @@ -from array import ArrayType +from slither.core.solidity_types.array_type import ArrayType from slither.core.declarations.structure import Structure from slither.core.solidity_types.user_defined_type import UserDefinedType from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification From c878a8fc25b8a82fb41b4400f2c97f0ec6061fc6 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 23:22:13 +0200 Subject: [PATCH 034/202] Added parameters that should be changed in info --- slither/detectors/functions/external_function.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 5344a6881..a24bc0e93 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -232,6 +232,12 @@ class ExternalFunction(AbstractDetector): info = [f"{function_definition.full_name} should be declared external:\n"] info += ["\t- ", function_definition, "\n"] + if self.compilation_unit.solc_version >= "0.5.": + info += [ + "Moreover, the following function parameters should change its data location:\n" + ] + for reference_arg in reference_args: + info += [f"{reference_arg} location should be calldata\n"] for other_function_definition in all_function_definitions: info += ["\t- ", other_function_definition, "\n"] From 9e9f0d9c26764076293cae57cc83b3adfc1ac4bb Mon Sep 17 00:00:00 2001 From: feliam Date: Tue, 19 Apr 2022 16:05:43 -0300 Subject: [PATCH 035/202] WIP/PoC type.isdynamic --- slither/core/solidity_types/array_type.py | 5 +++++ slither/core/solidity_types/elementary_type.py | 6 +++++- slither/core/solidity_types/function_type.py | 4 ++++ slither/core/solidity_types/mapping_type.py | 4 ++++ slither/core/solidity_types/type.py | 5 +++++ slither/core/solidity_types/type_alias.py | 3 +++ slither/core/solidity_types/user_defined_type.py | 5 +++++ 7 files changed, 31 insertions(+), 1 deletion(-) diff --git a/slither/core/solidity_types/array_type.py b/slither/core/solidity_types/array_type.py index a93a976b9..2f5a675f9 100644 --- a/slither/core/solidity_types/array_type.py +++ b/slither/core/solidity_types/array_type.py @@ -29,6 +29,11 @@ class ArrayType(Type): def type(self) -> Type: return self._type + + @property + def is_dynamic(self) -> bool: + return self.length is None + @property def length(self) -> Optional[Expression]: return self._length diff --git a/slither/core/solidity_types/elementary_type.py b/slither/core/solidity_types/elementary_type.py index cac864142..4d5d21896 100644 --- a/slither/core/solidity_types/elementary_type.py +++ b/slither/core/solidity_types/elementary_type.py @@ -163,6 +163,10 @@ class ElementaryType(Type): t = "bytes1" self._type = t + @property + def is_dynamic(self) -> bool: + return self._type in ("bytes", "string") + @property def type(self) -> str: return self._type @@ -188,7 +192,7 @@ class ElementaryType(Type): return int(8) if t == "address": return int(160) - if t.startswith("bytes"): + if t.startswith("bytes") and t != "bytes": return int(t[len("bytes") :]) return None diff --git a/slither/core/solidity_types/function_type.py b/slither/core/solidity_types/function_type.py index e808aa940..3146aa0bf 100644 --- a/slither/core/solidity_types/function_type.py +++ b/slither/core/solidity_types/function_type.py @@ -32,6 +32,10 @@ class FunctionType(Type): def storage_size(self) -> Tuple[int, bool]: return 24, False + @property + def is_dynamic(self) -> bool: + return False + def __str__(self): # Use x.type # x.name may be empty diff --git a/slither/core/solidity_types/mapping_type.py b/slither/core/solidity_types/mapping_type.py index ab1e976fb..fea5bdb7b 100644 --- a/slither/core/solidity_types/mapping_type.py +++ b/slither/core/solidity_types/mapping_type.py @@ -23,6 +23,10 @@ class MappingType(Type): def storage_size(self) -> Tuple[int, bool]: return 32, True + @property + def is_dynamic(self) -> bool: + return True + def __str__(self): return f"mapping({str(self._from)} => {str(self._to)})" diff --git a/slither/core/solidity_types/type.py b/slither/core/solidity_types/type.py index 8405578a9..bfec7d8bc 100644 --- a/slither/core/solidity_types/type.py +++ b/slither/core/solidity_types/type.py @@ -14,3 +14,8 @@ class Type(SourceMapping, metaclass=abc.ABCMeta): :return: (int, bool) - the number of bytes this type will require, and whether it must start in a new slot regardless of whether the current slot can still fit it """ + + @property + @abc.abstractmethod + def is_dynamic(self) -> bool: + """ True if the size of the type is dynamic""" diff --git a/slither/core/solidity_types/type_alias.py b/slither/core/solidity_types/type_alias.py index 06aa06a8b..cb2d43de1 100644 --- a/slither/core/solidity_types/type_alias.py +++ b/slither/core/solidity_types/type_alias.py @@ -22,6 +22,9 @@ class TypeAlias(Type): def __hash__(self): return hash(str(self)) + @property + def is_dynamic(self) -> bool: + return self.underlying_type.is_dynamic class TypeAliasTopLevel(TypeAlias, TopLevel): def __init__(self, underlying_type: Type, name: str, scope: "FileScope"): diff --git a/slither/core/solidity_types/user_defined_type.py b/slither/core/solidity_types/user_defined_type.py index cecbec449..21f9c0911 100644 --- a/slither/core/solidity_types/user_defined_type.py +++ b/slither/core/solidity_types/user_defined_type.py @@ -20,10 +20,15 @@ class UserDefinedType(Type): super().__init__() self._type = t + @property + def is_dynamic(self) -> bool: + raise NotImplemented + @property def type(self) -> Union["Contract", "Enum", "Structure"]: return self._type + @property def storage_size(self) -> Tuple[int, bool]: from slither.core.declarations.structure import Structure From ab53a0821fc66a5f05b39c7e2df20a6091c9b8ee Mon Sep 17 00:00:00 2001 From: feliam Date: Thu, 21 Apr 2022 10:46:47 -0300 Subject: [PATCH 036/202] linted --- slither/core/solidity_types/type_alias.py | 1 + 1 file changed, 1 insertion(+) diff --git a/slither/core/solidity_types/type_alias.py b/slither/core/solidity_types/type_alias.py index cb2d43de1..0a1f99d23 100644 --- a/slither/core/solidity_types/type_alias.py +++ b/slither/core/solidity_types/type_alias.py @@ -15,6 +15,7 @@ class TypeAlias(Type): self.name = name self.underlying_type = underlying_type + @property def storage_size(self) -> Tuple[int, bool]: return self.underlying_type.storage_size From 18483c46d2d74d100b5a9cfda9f16674f60bf260 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 22 Apr 2022 12:31:37 -0500 Subject: [PATCH 037/202] resolve top level var used as yul identifiers --- slither/solc_parsing/yul/parse_yul.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/slither/solc_parsing/yul/parse_yul.py b/slither/solc_parsing/yul/parse_yul.py index 0c7b48091..f303647ce 100644 --- a/slither/solc_parsing/yul/parse_yul.py +++ b/slither/solc_parsing/yul/parse_yul.py @@ -35,6 +35,7 @@ from slither.solc_parsing.yul.evm_functions import ( unary_ops, binary_ops, ) +from slither.solc_parsing.expressions.find_variable import _find_top_level from slither.visitors.expression.find_calls import FindCalls from slither.visitors.expression.read_var import ReadVar from slither.visitors.expression.write_var import WriteVar @@ -797,6 +798,10 @@ def parse_yul_identifier(root: YulScope, _node: YulNode, ast: Dict) -> Optional[ if magic_suffix: return magic_suffix + ret, _ = _find_top_level(name, root._contract.file_scope) + if ret: + return Identifier(ret) + raise SlitherException(f"unresolved reference to identifier {name}") From 67211303cb1619989f0c4fabcba0fd401294be22 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Mon, 24 Jan 2022 11:27:02 -0300 Subject: [PATCH 038/202] WIP: Filter external visibility recommendation for public functions to solc < 0.6.9 --- slither/detectors/functions/external_function.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index d68b0c31f..3f4c78f0c 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -20,9 +20,9 @@ class ExternalFunction(AbstractDetector): WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external" WIKI_TITLE = "Public function that could be declared external" - WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external` to save gas." + WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external` and its immutable parameters should be located in `calldata` to save gas." WIKI_RECOMMENDATION = ( - "Use the `external` attribute for functions never called from the contract." + "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." ) @staticmethod @@ -108,6 +108,10 @@ class ExternalFunction(AbstractDetector): def _detect(self): # pylint: disable=too-many-locals,too-many-branches results = [] + # After solc 0.6.9, calldata arguments are allowed in public functions + if self.compilation_unit.solc_version >= "0.6.9": + return [] + # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be # calling functions internally, and thus we can't assume any function in such contracts isn't called by them. dynamic_call_contracts = set() From be333e97af2c15c2796ff7a7ce7ee41b49dea06f Mon Sep 17 00:00:00 2001 From: Tadashi Date: Sat, 19 Feb 2022 21:17:10 +0100 Subject: [PATCH 039/202] WIP: Fixed code for detecting solc version --- slither/detectors/functions/external_function.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 3f4c78f0c..c95191ad5 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -109,7 +109,7 @@ class ExternalFunction(AbstractDetector): results = [] # After solc 0.6.9, calldata arguments are allowed in public functions - if self.compilation_unit.solc_version >= "0.6.9": + if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in ["0.6.9","0.6.10","0.6.11"]: return [] # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be From e52af99cf0eaeeec5d86d887778093740d7953a4 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Sat, 19 Feb 2022 22:51:31 +0100 Subject: [PATCH 040/202] Added new tests and updated JSON artifacts --- .../0.4.25/external_function_3.sol | 11 + ...unction_3.sol.0.4.25.ExternalFunction.json | 130 +++++++ .../0.5.16/external_function_3.sol | 7 + ...unction_3.sol.0.5.16.ExternalFunction.json | 63 ++++ ..._function.sol.0.6.11.ExternalFunction.json | 341 +----------------- .../0.6.11/external_function_3.sol | 7 + ...unction_3.sol.0.6.11.ExternalFunction.json | 3 + ...l_function.sol.0.7.6.ExternalFunction.json | 341 +----------------- .../0.7.6/external_function_3.sol | 7 + ...function_3.sol.0.7.6.ExternalFunction.json | 3 + tests/test_detectors.py | 20 + 11 files changed, 253 insertions(+), 680 deletions(-) create mode 100644 tests/detectors/external-function/0.4.25/external_function_3.sol create mode 100644 tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json create mode 100644 tests/detectors/external-function/0.5.16/external_function_3.sol create mode 100644 tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json create mode 100644 tests/detectors/external-function/0.6.11/external_function_3.sol create mode 100644 tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json create mode 100644 tests/detectors/external-function/0.7.6/external_function_3.sol create mode 100644 tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol new file mode 100644 index 000000000..2ea376fcd --- /dev/null +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -0,0 +1,11 @@ +contract Test { + + function test(bytes x) public { + + } + + function test2(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json new file mode 100644 index 000000000..c7c7ae31e --- /dev/null +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json @@ -0,0 +1,130 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "test", + "source_mapping": { + "start": 21, + "length": 46, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 134, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "test(bytes)" + } + } + ], + "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#3-5)\n", + "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5", + "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "test2", + "source_mapping": { + "start": 73, + "length": 54, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 7, + 8, + 9 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 134, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "test2(bytes)" + } + } + ], + "description": "test2(bytes) should be declared external:\n\t- Test.test2(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#7-9)\n", + "markdown": "test2(bytes) should be declared external:\n\t- [Test.test2(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9", + "id": "a5b4753f43bb5a2a669ecbf4ce6ab1aaff060454657b16b5ed8cc9c34b521c79", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol new file mode 100644 index 000000000..641027603 --- /dev/null +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -0,0 +1,7 @@ +contract Test { + + function test(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json new file mode 100644 index 000000000..351921497 --- /dev/null +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json @@ -0,0 +1,63 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "test", + "source_mapping": { + "start": 21, + "length": 53, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 77, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "test(bytes)" + } + } + ], + "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.5.16/external_function_3.sol#3-5)\n", + "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5)\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5", + "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json index 7f600c37d..5825bcacc 100644 --- a/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json +++ b/tests/detectors/external-function/0.6.11/external_function.sol.0.6.11.ExternalFunction.json @@ -1,342 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.6.11/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.6.11/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.6.11/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.6.11/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.6.11/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.6.11/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.6.11/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.6.11/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.6.11/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.6.11/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.6.11/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.6.11/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.6.11/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol new file mode 100644 index 000000000..641027603 --- /dev/null +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -0,0 +1,7 @@ +contract Test { + + function test(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json b/tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol.0.6.11.ExternalFunction.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json index dc3662a91..5825bcacc 100644 --- a/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json +++ b/tests/detectors/external-function/0.7.6/external_function.sol.0.7.6.ExternalFunction.json @@ -1,342 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.7.6/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.7.6/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.7.6/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.7.6/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.7.6/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.7.6/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.7.6/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.7.6/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.7.6/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.7.6/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.7.6/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.7.6/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.7.6/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol new file mode 100644 index 000000000..641027603 --- /dev/null +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -0,0 +1,7 @@ +contract Test { + + function test(bytes memory x) public { + + } + +} \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json b/tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol.0.7.6.ExternalFunction.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 30999389c..5f8d70aad 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -510,6 +510,11 @@ ALL_TEST_OBJECTS = [ "external_function_2.sol", "0.4.25", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.4.25", + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -520,6 +525,11 @@ ALL_TEST_OBJECTS = [ "external_function_2.sol", "0.5.16", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.5.16", + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -530,6 +540,11 @@ ALL_TEST_OBJECTS = [ "external_function_2.sol", "0.6.11", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.6.11", + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -540,6 +555,11 @@ ALL_TEST_OBJECTS = [ "external_function_2.sol", "0.7.6", ), + Test( + all_detectors.ExternalFunction, + "external_function_3.sol", + "0.7.6", + ), Test( all_detectors.NamingConvention, "naming_convention.sol", From e07cd6602412bfca063a2236d2c046d66934ca8c Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 25 Mar 2022 23:59:15 +0100 Subject: [PATCH 041/202] Apply suggestions from code review Co-authored-by: alpharush <0xalpharush@protonmail.com> --- slither/detectors/functions/external_function.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index c95191ad5..6291d27b3 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -20,7 +20,7 @@ class ExternalFunction(AbstractDetector): WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external" WIKI_TITLE = "Public function that could be declared external" - WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external` and its immutable parameters should be located in `calldata` to save gas." + WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external`, and its immutable parameters should be located in `calldata` to save gas." WIKI_RECOMMENDATION = ( "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." ) @@ -110,7 +110,7 @@ class ExternalFunction(AbstractDetector): # After solc 0.6.9, calldata arguments are allowed in public functions if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in ["0.6.9","0.6.10","0.6.11"]: - return [] + return results # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be # calling functions internally, and thus we can't assume any function in such contracts isn't called by them. From 8eede9d95fa726d31b4d021d940dfe9db7b1a9c7 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 01:05:34 +0200 Subject: [PATCH 042/202] Detect if function has at least one memory arg --- .../detectors/functions/external_function.py | 24 +++++++ ..._function.sol.0.4.25.ExternalFunction.json | 62 ------------------- ..._function.sol.0.5.16.ExternalFunction.json | 62 ------------------- 3 files changed, 24 insertions(+), 124 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 6291d27b3..16ac9d7f1 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,3 +1,7 @@ +from array import ArrayType +from slither.core.declarations.structure import Structure +from slither.core.solidity_types.mapping_type import MappingType +from slither.core.solidity_types.user_defined_type import UserDefinedType from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.operations import SolidityCall from slither.slithir.operations import InternalCall, InternalDynamicCall @@ -105,6 +109,18 @@ class ExternalFunction(AbstractDetector): def function_parameters_written(function): return any(p in function.variables_written for p in function.parameters) + @staticmethod + def is_reference_type(parameter): + if isinstance(parameter.type, ArrayType): + return True + if isinstance(parameter.type, MappingType): + return True + if isinstance(parameter.type, UserDefinedType) and isinstance(parameter.type.type, Structure): + return True + if str(parameter.type) in ["bytes", "string"]: + return True + return False + def _detect(self): # pylint: disable=too-many-locals,too-many-branches results = [] @@ -135,6 +151,14 @@ class ExternalFunction(AbstractDetector): # Next we'll want to loop through all functions defined directly in this contract. for function in contract.functions_declared: + # If all of the function arguments are non-reference type or calldata, we skip it. + reference_args = [] + for arg in function.parameters: + if self.is_reference_type(arg) and arg.location == 'memory': + reference_args.append(arg) + if len(reference_args) == 0 and len(function.parameters) > 0: + continue + # If the function is a constructor, or is public, we skip it. if function.is_constructor or function.visibility != "public": continue diff --git a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json index 75e76126d..17885c854 100644 --- a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json @@ -210,68 +210,6 @@ "impact": "Optimization", "confidence": "High" }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.4.25/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.4.25/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, { "elements": [ { diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 4d947de06..3a0514955 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -210,68 +210,6 @@ "impact": "Optimization", "confidence": "High" }, - { - "elements": [ - { - "type": "function", - "name": "parameter_read_ok_for_external", - "source_mapping": { - "start": 1420, - "length": 81, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 74, - 75, - 76 - ], - "starting_column": 3, - "ending_column": 4 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "FunctionParameterWrite", - "source_mapping": { - "start": 1381, - "length": 234, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "parameter_read_ok_for_external(uint256)" - } - } - ], - "description": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- FunctionParameterWrite.parameter_read_ok_for_external(uint256) (tests/detectors/external-function/0.5.16/external_function.sol#74-76)\n", - "markdown": "parameter_read_ok_for_external(uint256) should be declared external:\n\t- [FunctionParameterWrite.parameter_read_ok_for_external(uint256)](tests/detectors/external-function/0.5.16/external_function.sol#L74-L76)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L74-L76", - "id": "3a0a42d128eff9fb04d8f7605bf2d6f7574c2cbbdffa2dcabbae66d7568ecc59", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, { "elements": [ { From 8ee4150defd9781474a32f1c955d07794a42abf6 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 15:44:50 +0200 Subject: [PATCH 043/202] Fix: skip functions without args --- .../detectors/functions/external_function.py | 2 +- ..._function.sol.0.4.25.ExternalFunction.json | 279 +----------------- ..._function.sol.0.5.16.ExternalFunction.json | 279 +----------------- 3 files changed, 3 insertions(+), 557 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 16ac9d7f1..4ab2225f4 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -156,7 +156,7 @@ class ExternalFunction(AbstractDetector): for arg in function.parameters: if self.is_reference_type(arg) and arg.location == 'memory': reference_args.append(arg) - if len(reference_args) == 0 and len(function.parameters) > 0: + if len(reference_args) == 0: continue # If the function is a constructor, or is public, we skip it. diff --git a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json index 17885c854..5825bcacc 100644 --- a/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function.sol.0.4.25.ExternalFunction.json @@ -1,280 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.4.25/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.4.25/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.4.25/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.4.25/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.4.25/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.4.25/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json index 3a0514955..5825bcacc 100644 --- a/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function.sol.0.5.16.ExternalFunction.json @@ -1,280 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled3", - "source_mapping": { - "start": 259, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 13, - 14, - 15 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled3()" - } - } - ], - "description": "funcNotCalled3() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled3() (tests/detectors/external-function/0.5.16/external_function.sol#13-15)\n", - "markdown": "funcNotCalled3() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled3()](tests/detectors/external-function/0.5.16/external_function.sol#L13-L15)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L13-L15", - "id": "026d9a579ea0304e58c8a5174296494f4b672e4ea032f4e17504f3dac327c4e6", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled2", - "source_mapping": { - "start": 306, - "length": 41, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 17, - 18, - 19 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled2()" - } - } - ], - "description": "funcNotCalled2() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled2() (tests/detectors/external-function/0.5.16/external_function.sol#17-19)\n", - "markdown": "funcNotCalled2() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled2()](tests/detectors/external-function/0.5.16/external_function.sol#L17-L19)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L17-L19", - "id": "1ef1f19a92a8ab8d27df156d50dd75628ec3057b5f5eb16b7d1faa0e5c3850a0", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 353, - "length": 40, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 21, - 22, - 23 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled", - "source_mapping": { - "start": 213, - "length": 258, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#21-23)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L21-L23)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L21-L23", - "id": "369a2f3d071735755ff4f5bc43081fe858bbfb07eed94e5c6dda3c8daa22ba26", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "funcNotCalled", - "source_mapping": { - "start": 554, - "length": 325, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "ContractWithFunctionNotCalled2", - "source_mapping": { - "start": 473, - "length": 408, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function.sol", - "is_dependency": false, - "lines": [ - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40 - ], - "starting_column": 1, - "ending_column": 2 - } - }, - "signature": "funcNotCalled()" - } - } - ], - "description": "funcNotCalled() should be declared external:\n\t- ContractWithFunctionNotCalled2.funcNotCalled() (tests/detectors/external-function/0.5.16/external_function.sol#32-39)\n", - "markdown": "funcNotCalled() should be declared external:\n\t- [ContractWithFunctionNotCalled2.funcNotCalled()](tests/detectors/external-function/0.5.16/external_function.sol#L32-L39)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function.sol#L32-L39", - "id": "80a0a3a3954cc6e314079a1d8d96d6739d521ddbcf738e63078d7f210e443562", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file From b6103dd015b207e60d4ecf5e640ab3915ea2d15a Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 21:27:54 +0200 Subject: [PATCH 044/202] Linting --- .../detectors/functions/external_function.py | 22 +++++++++++-------- tests/test_detectors.py | 8 +++---- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 4ab2225f4..231560014 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -25,9 +25,7 @@ class ExternalFunction(AbstractDetector): WIKI_TITLE = "Public function that could be declared external" WIKI_DESCRIPTION = "`public` functions that are never called by the contract should be declared `external`, and its immutable parameters should be located in `calldata` to save gas." - WIKI_RECOMMENDATION = ( - "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." - ) + WIKI_RECOMMENDATION = "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." @staticmethod def detect_functions_called(contract): @@ -112,10 +110,12 @@ class ExternalFunction(AbstractDetector): @staticmethod def is_reference_type(parameter): if isinstance(parameter.type, ArrayType): - return True + return True if isinstance(parameter.type, MappingType): return True - if isinstance(parameter.type, UserDefinedType) and isinstance(parameter.type.type, Structure): + if isinstance(parameter.type, UserDefinedType) and isinstance( + parameter.type.type, Structure + ): return True if str(parameter.type) in ["bytes", "string"]: return True @@ -125,7 +125,11 @@ class ExternalFunction(AbstractDetector): results = [] # After solc 0.6.9, calldata arguments are allowed in public functions - if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in ["0.6.9","0.6.10","0.6.11"]: + if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in [ + "0.6.9", + "0.6.10", + "0.6.11", + ]: return results # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be @@ -151,13 +155,13 @@ class ExternalFunction(AbstractDetector): # Next we'll want to loop through all functions defined directly in this contract. for function in contract.functions_declared: - # If all of the function arguments are non-reference type or calldata, we skip it. + # If all of the function arguments are non-reference type or calldata, we skip it. reference_args = [] for arg in function.parameters: - if self.is_reference_type(arg) and arg.location == 'memory': + if self.is_reference_type(arg) and arg.location == "memory": reference_args.append(arg) if len(reference_args) == 0: - continue + continue # If the function is a constructor, or is public, we skip it. if function.is_constructor or function.visibility != "public": diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 5f8d70aad..410fd0a7e 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -514,7 +514,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.4.25", - ), + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -529,7 +529,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.5.16", - ), + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -544,7 +544,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.6.11", - ), + ), Test( all_detectors.ExternalFunction, "external_function.sol", @@ -559,7 +559,7 @@ ALL_TEST_OBJECTS = [ all_detectors.ExternalFunction, "external_function_3.sol", "0.7.6", - ), + ), Test( all_detectors.NamingConvention, "naming_convention.sol", From 6a4b97b7a760d3e56963a49b46756698c088497d Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 1 Apr 2022 21:37:47 +0200 Subject: [PATCH 045/202] Improved tests --- .../0.4.25/external_function_3.sol | 11 +- ...unction_3.sol.0.4.25.ExternalFunction.json | 129 +----------------- .../0.5.16/external_function_3.sol | 9 +- ...unction_3.sol.0.5.16.ExternalFunction.json | 62 +-------- .../0.6.11/external_function_3.sol | 9 +- .../0.7.6/external_function_3.sol | 9 +- 6 files changed, 25 insertions(+), 204 deletions(-) diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol index 2ea376fcd..eb11475e5 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -1,11 +1,10 @@ contract Test { - function test(bytes x) public { - - } + function good(bytes x) external {} + function good2() public {} - function test2(bytes memory x) public { - - } + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] x, string y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json index c7c7ae31e..5825bcacc 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json @@ -1,130 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "test", - "source_mapping": { - "start": 21, - "length": 46, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Test", - "source_mapping": { - "start": 0, - "length": 134, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "test(bytes)" - } - } - ], - "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#3-5)\n", - "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L3-L5", - "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - }, - { - "elements": [ - { - "type": "function", - "name": "test2", - "source_mapping": { - "start": 73, - "length": 54, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 7, - 8, - 9 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Test", - "source_mapping": { - "start": 0, - "length": 134, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", - "is_dependency": false, - "lines": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "test2(bytes)" - } - } - ], - "description": "test2(bytes) should be declared external:\n\t- Test.test2(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#7-9)\n", - "markdown": "test2(bytes) should be declared external:\n\t- [Test.test2(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9)\n", - "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L7-L9", - "id": "a5b4753f43bb5a2a669ecbf4ce6ab1aaff060454657b16b5ed8cc9c34b521c79", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol index 641027603..92d6bcc5e 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -1,7 +1,10 @@ contract Test { - function test(bytes memory x) public { - - } + function good(bytes calldata x) external {} + function good2() public {} + + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] calldata x, string calldata y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json index 351921497..5825bcacc 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json @@ -1,63 +1,3 @@ [ - [ - { - "elements": [ - { - "type": "function", - "name": "test", - "source_mapping": { - "start": 21, - "length": 53, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "is_dependency": false, - "lines": [ - 3, - 4, - 5 - ], - "starting_column": 5, - "ending_column": 6 - }, - "type_specific_fields": { - "parent": { - "type": "contract", - "name": "Test", - "source_mapping": { - "start": 0, - "length": 77, - "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", - "is_dependency": false, - "lines": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8 - ], - "starting_column": 1, - "ending_column": 0 - } - }, - "signature": "test(bytes)" - } - } - ], - "description": "test(bytes) should be declared external:\n\t- Test.test(bytes) (tests/detectors/external-function/0.5.16/external_function_3.sol#3-5)\n", - "markdown": "test(bytes) should be declared external:\n\t- [Test.test(bytes)](tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5)\n", - "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L3-L5", - "id": "058fd57c313c645eff4b4e53234ca0f73ca3362bd28d3fdc90e0219a32099592", - "check": "external-function", - "impact": "Optimization", - "confidence": "High" - } - ] + [] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol index 641027603..92d6bcc5e 100644 --- a/tests/detectors/external-function/0.6.11/external_function_3.sol +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -1,7 +1,10 @@ contract Test { - function test(bytes memory x) public { - - } + function good(bytes calldata x) external {} + function good2() public {} + + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] calldata x, string calldata y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol index 641027603..92d6bcc5e 100644 --- a/tests/detectors/external-function/0.7.6/external_function_3.sol +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -1,7 +1,10 @@ contract Test { - function test(bytes memory x) public { - - } + function good(bytes calldata x) external {} + function good2() public {} + + function good3(uint256 x, uint256 y) public {} + + function good4(uint256[] calldata x, string calldata y) external {} } \ No newline at end of file From bc0cf5e084772d7597720aa890737ee2f37f98d0 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 20:35:59 +0200 Subject: [PATCH 046/202] Removed detection of mapping type --- slither/detectors/functions/external_function.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 231560014..67c42d2d1 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,6 +1,5 @@ from array import ArrayType from slither.core.declarations.structure import Structure -from slither.core.solidity_types.mapping_type import MappingType from slither.core.solidity_types.user_defined_type import UserDefinedType from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.operations import SolidityCall @@ -111,8 +110,6 @@ class ExternalFunction(AbstractDetector): def is_reference_type(parameter): if isinstance(parameter.type, ArrayType): return True - if isinstance(parameter.type, MappingType): - return True if isinstance(parameter.type, UserDefinedType) and isinstance( parameter.type.type, Structure ): From d15641233d9dfbb191e9b576365cb7d70f75d58b Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 20:59:12 +0200 Subject: [PATCH 047/202] Increased tests coverage --- .../external-function/0.4.25/external_function_3.sol | 2 -- .../external-function/0.5.16/external_function_3.sol | 10 ++++++++-- .../external-function/0.6.11/external_function_3.sol | 10 ++++++++-- .../external-function/0.7.6/external_function_3.sol | 10 ++++++++-- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol index eb11475e5..1e215bceb 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -2,9 +2,7 @@ contract Test { function good(bytes x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] x, string y) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol index 92d6bcc5e..3e9204c96 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -1,10 +1,16 @@ +pragma experimental ABIEncoderV2; + contract Test { + struct testStruct { + uint256 id; + string name; + } + function good(bytes calldata x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] calldata x, string calldata y) external {} + function good5(testStruct calldata x) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol index 92d6bcc5e..3e9204c96 100644 --- a/tests/detectors/external-function/0.6.11/external_function_3.sol +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -1,10 +1,16 @@ +pragma experimental ABIEncoderV2; + contract Test { + struct testStruct { + uint256 id; + string name; + } + function good(bytes calldata x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] calldata x, string calldata y) external {} + function good5(testStruct calldata x) external {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol index 92d6bcc5e..3e9204c96 100644 --- a/tests/detectors/external-function/0.7.6/external_function_3.sol +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -1,10 +1,16 @@ +pragma experimental ABIEncoderV2; + contract Test { + struct testStruct { + uint256 id; + string name; + } + function good(bytes calldata x) external {} function good2() public {} - function good3(uint256 x, uint256 y) public {} - function good4(uint256[] calldata x, string calldata y) external {} + function good5(testStruct calldata x) external {} } \ No newline at end of file From 3362a689400372120567ecd4db89368f69b90a1b Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 23:20:11 +0200 Subject: [PATCH 048/202] Fixed wrong import --- slither/detectors/functions/external_function.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 67c42d2d1..5344a6881 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,4 +1,4 @@ -from array import ArrayType +from slither.core.solidity_types.array_type import ArrayType from slither.core.declarations.structure import Structure from slither.core.solidity_types.user_defined_type import UserDefinedType from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification From 502a0df0e9362fde591cc00222e43bd53cc3498c Mon Sep 17 00:00:00 2001 From: Tadashi Date: Fri, 15 Apr 2022 23:22:13 +0200 Subject: [PATCH 049/202] Added parameters that should be changed in info --- slither/detectors/functions/external_function.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index 5344a6881..a24bc0e93 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -232,6 +232,12 @@ class ExternalFunction(AbstractDetector): info = [f"{function_definition.full_name} should be declared external:\n"] info += ["\t- ", function_definition, "\n"] + if self.compilation_unit.solc_version >= "0.5.": + info += [ + "Moreover, the following function parameters should change its data location:\n" + ] + for reference_arg in reference_args: + info += [f"{reference_arg} location should be calldata\n"] for other_function_definition in all_function_definitions: info += ["\t- ", other_function_definition, "\n"] From 2e5aa1a20e88b548698fd2959a215dea6b3f08c0 Mon Sep 17 00:00:00 2001 From: Tadashi Date: Wed, 27 Apr 2022 00:40:51 +0200 Subject: [PATCH 050/202] Added "bad" test cases --- .../0.4.25/external_function_3.sol | 3 + ...unction_3.sol.0.4.25.ExternalFunction.json | 186 +++++++++++- .../0.5.16/external_function_3.sol | 4 + ...unction_3.sol.0.5.16.ExternalFunction.json | 275 +++++++++++++++++- .../0.6.11/external_function_3.sol | 5 +- .../0.7.6/external_function_3.sol | 5 +- 6 files changed, 474 insertions(+), 4 deletions(-) diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol b/tests/detectors/external-function/0.4.25/external_function_3.sol index 1e215bceb..fdcffa1db 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol @@ -4,5 +4,8 @@ contract Test { function good2() public {} function good3(uint256 x, uint256 y) public {} function good4(uint256[] x, string y) external {} + function bad(bytes memory x) public {} + function bad2(uint256[] memory x) public {} + function bad3(string memory x) public {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json index 5825bcacc..2801b84eb 100644 --- a/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json +++ b/tests/detectors/external-function/0.4.25/external_function_3.sol.0.4.25.ExternalFunction.json @@ -1,3 +1,187 @@ [ - [] + [ + { + "elements": [ + { + "type": "function", + "name": "bad2", + "source_mapping": { + "start": 239, + "length": 43, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 8 + ], + "starting_column": 5, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 330, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad2(uint256[])" + } + } + ], + "description": "bad2(uint256[]) should be declared external:\n\t- Test.bad2(uint256[]) (tests/detectors/external-function/0.4.25/external_function_3.sol#8)\n", + "markdown": "bad2(uint256[]) should be declared external:\n\t- [Test.bad2(uint256[])](tests/detectors/external-function/0.4.25/external_function_3.sol#L8)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L8", + "id": "69068a3072d6f392073d197438688ae8e0bee7844098cfe4cc6c7d345e603678", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad", + "source_mapping": { + "start": 196, + "length": 38, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 7 + ], + "starting_column": 5, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 330, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad(bytes)" + } + } + ], + "description": "bad(bytes) should be declared external:\n\t- Test.bad(bytes) (tests/detectors/external-function/0.4.25/external_function_3.sol#7)\n", + "markdown": "bad(bytes) should be declared external:\n\t- [Test.bad(bytes)](tests/detectors/external-function/0.4.25/external_function_3.sol#L7)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L7", + "id": "695915ec89adb6bfc4bf7f8eebf7993e02756da20f0b0e5a8d1dd251bf956c43", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "source_mapping": { + "start": 287, + "length": 40, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 9 + ], + "starting_column": 5, + "ending_column": 45 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 0, + "length": 330, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.4.25/external_function_3.sol", + "is_dependency": false, + "lines": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad3(string)" + } + } + ], + "description": "bad3(string) should be declared external:\n\t- Test.bad3(string) (tests/detectors/external-function/0.4.25/external_function_3.sol#9)\n", + "markdown": "bad3(string) should be declared external:\n\t- [Test.bad3(string)](tests/detectors/external-function/0.4.25/external_function_3.sol#L9)\n", + "first_markdown_element": "tests/detectors/external-function/0.4.25/external_function_3.sol#L9", + "id": "f56b73c72461d3d9fd4e79bd3cd2649f79c425406843e5c7b2de3fad5b2f663a", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + } + ] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol b/tests/detectors/external-function/0.5.16/external_function_3.sol index 3e9204c96..43b172710 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol @@ -12,5 +12,9 @@ contract Test { function good3(uint256 x, uint256 y) public {} function good4(uint256[] calldata x, string calldata y) external {} function good5(testStruct calldata x) external {} + function bad(bytes memory x) public {} + function bad2(uint256[] memory x) public {} + function bad3(testStruct memory x) public {} + function bad4(string memory x) public {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json index 5825bcacc..c8eb3c1e5 100644 --- a/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json +++ b/tests/detectors/external-function/0.5.16/external_function_3.sol.0.5.16.ExternalFunction.json @@ -1,3 +1,276 @@ [ - [] + [ + { + "elements": [ + { + "type": "function", + "name": "bad4", + "source_mapping": { + "start": 524, + "length": 40, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 18 + ], + "starting_column": 5, + "ending_column": 45 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 35, + "length": 532, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad4(string)" + } + } + ], + "description": "bad4(string) should be declared external:\n\t- Test.bad4(string) (tests/detectors/external-function/0.5.16/external_function_3.sol#18)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "markdown": "bad4(string) should be declared external:\n\t- [Test.bad4(string)](tests/detectors/external-function/0.5.16/external_function_3.sol#L18)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L18", + "id": "1b6de528ed7f8ecf61a543879c8bcbee1bce7e08bdef89c6f8f663937d5a7209", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "source_mapping": { + "start": 475, + "length": 44, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 17 + ], + "starting_column": 5, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 35, + "length": 532, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad3(Test.testStruct)" + } + } + ], + "description": "bad3(Test.testStruct) should be declared external:\n\t- Test.bad3(Test.testStruct) (tests/detectors/external-function/0.5.16/external_function_3.sol#17)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "markdown": "bad3(Test.testStruct) should be declared external:\n\t- [Test.bad3(Test.testStruct)](tests/detectors/external-function/0.5.16/external_function_3.sol#L17)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L17", + "id": "a60742b3998c52eee654f61cfb5b39834d63a1b13212511a01811206ac445dd5", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad2", + "source_mapping": { + "start": 427, + "length": 43, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 16 + ], + "starting_column": 5, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 35, + "length": 532, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad2(uint256[])" + } + } + ], + "description": "bad2(uint256[]) should be declared external:\n\t- Test.bad2(uint256[]) (tests/detectors/external-function/0.5.16/external_function_3.sol#16)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "markdown": "bad2(uint256[]) should be declared external:\n\t- [Test.bad2(uint256[])](tests/detectors/external-function/0.5.16/external_function_3.sol#L16)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L16", + "id": "aa4b0cae64f1a6f9f11d3f9981255fd04f37f558c960195ee46413ca4b142822", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad", + "source_mapping": { + "start": 384, + "length": 38, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 15 + ], + "starting_column": 5, + "ending_column": 43 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Test", + "source_mapping": { + "start": 35, + "length": 532, + "filename_used": "/GENERIC_PATH", + "filename_relative": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/external-function/0.5.16/external_function_3.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ], + "starting_column": 1, + "ending_column": 0 + } + }, + "signature": "bad(bytes)" + } + } + ], + "description": "bad(bytes) should be declared external:\n\t- Test.bad(bytes) (tests/detectors/external-function/0.5.16/external_function_3.sol#15)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "markdown": "bad(bytes) should be declared external:\n\t- [Test.bad(bytes)](tests/detectors/external-function/0.5.16/external_function_3.sol#L15)\nMoreover, the following function parameters should change its data location:\nx location should be calldata\n", + "first_markdown_element": "tests/detectors/external-function/0.5.16/external_function_3.sol#L15", + "id": "df1688f3d1120f9600f61accff294ba821689c45dc261f1a9b94f23e6a402367", + "check": "external-function", + "impact": "Optimization", + "confidence": "High" + } + ] ] \ No newline at end of file diff --git a/tests/detectors/external-function/0.6.11/external_function_3.sol b/tests/detectors/external-function/0.6.11/external_function_3.sol index 3e9204c96..66bb19e86 100644 --- a/tests/detectors/external-function/0.6.11/external_function_3.sol +++ b/tests/detectors/external-function/0.6.11/external_function_3.sol @@ -12,5 +12,8 @@ contract Test { function good3(uint256 x, uint256 y) public {} function good4(uint256[] calldata x, string calldata y) external {} function good5(testStruct calldata x) external {} - + function bad(bytes memory x) public {} + function bad2(uint256[] memory x) public {} + function bad3(testStruct memory x) public {} + function bad4(string memory x) public {} } \ No newline at end of file diff --git a/tests/detectors/external-function/0.7.6/external_function_3.sol b/tests/detectors/external-function/0.7.6/external_function_3.sol index 3e9204c96..66bb19e86 100644 --- a/tests/detectors/external-function/0.7.6/external_function_3.sol +++ b/tests/detectors/external-function/0.7.6/external_function_3.sol @@ -12,5 +12,8 @@ contract Test { function good3(uint256 x, uint256 y) public {} function good4(uint256[] calldata x, string calldata y) external {} function good5(testStruct calldata x) external {} - + function bad(bytes memory x) public {} + function bad2(uint256[] memory x) public {} + function bad3(testStruct memory x) public {} + function bad4(string memory x) public {} } \ No newline at end of file From 1414de08d8f629a93ae695629bf46c0fab9321ed Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 27 Apr 2022 11:13:50 +0200 Subject: [PATCH 051/202] Document --checklist flag (#1190) Make the --checklist flag public Improve documentation of the related flags --- .github/workflows/IR.yml | 8 +----- .github/workflows/black.yml | 4 +-- .github/workflows/ci.yml | 5 +--- .github/workflows/detectors.yml | 8 +----- .github/workflows/features.yml | 8 +----- .github/workflows/linter.yml | 3 --- .github/workflows/parser.yml | 8 +----- .github/workflows/pylint.yml | 4 +-- .github/workflows/read_storage.yml | 7 ++---- CONTRIBUTING.md | 5 +--- README.md | 7 ++++-- setup.py | 12 +++++++++ slither/__main__.py | 39 +++++++++++++++++++----------- 13 files changed, 54 insertions(+), 64 deletions(-) diff --git a/.github/workflows/IR.yml b/.github/workflows/IR.yml index 7b5d214a9..0471cb876 100644 --- a/.github/workflows/IR.yml +++ b/.github/workflows/IR.yml @@ -33,13 +33,7 @@ jobs: - name: Install dependencies run: | - python setup.py install - pip install deepdiff - pip install pytest==7.0.1 - pip install typing_extensions==4.1.1 - pip install importlib_metadata==4.8.3 - - pip install "solc-select>=v1.0.0b1" + pip install ".[dev]" solc-select install all solc-select use 0.8.11 diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index c1a999b80..5292c1b57 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -29,8 +29,8 @@ jobs: - name: Install dependencies run: | - pip install . - pip install deepdiff numpy + pip install ".[dev]" + pip install numpy mkdir -p .github/linters cp pyproject.toml .github/linters diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1252e385a..5add68130 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,11 +65,8 @@ jobs: - name: Install dependencies run: | - python setup.py install - # Used by ci_test.sh - pip install deepdiff + pip install ".[dev]" - pip install "solc-select>=v1.0.0b1" solc-select install all solc-select use 0.5.1 pip install typing_extensions==4.1.1 diff --git a/.github/workflows/detectors.yml b/.github/workflows/detectors.yml index 4d8109297..0745de802 100644 --- a/.github/workflows/detectors.yml +++ b/.github/workflows/detectors.yml @@ -33,14 +33,8 @@ jobs: - name: Install dependencies run: | + pip install ".[dev]" - python setup.py install - pip install deepdiff - pip install pytest==7.0.1 - pip install typing_extensions==4.1.1 - pip install importlib_metadata==4.8.3 - - pip install "solc-select>=v1.0.0b1" solc-select install all solc-select use 0.7.3 - name: Test with pytest diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml index 3763faca0..d26a68980 100644 --- a/.github/workflows/features.yml +++ b/.github/workflows/features.yml @@ -33,14 +33,8 @@ jobs: - name: Install dependencies run: | + pip install ".[dev]" - python setup.py install - pip install deepdiff - pip install pytest==7.0.1 - pip install typing_extensions==4.1.1 - pip install importlib_metadata==4.8.3 - - pip install "solc-select>=v1.0.0b1" solc-select install all solc-select use 0.8.0 diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index c1b31a1c4..f3a66063e 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -29,9 +29,6 @@ jobs: - name: Install dependencies run: | - pip install . - pip install deepdiff numpy - mkdir -p .github/linters cp pyproject.toml .github/linters diff --git a/.github/workflows/parser.yml b/.github/workflows/parser.yml index 4c3566904..d3facfc79 100644 --- a/.github/workflows/parser.yml +++ b/.github/workflows/parser.yml @@ -33,13 +33,7 @@ jobs: - name: Install dependencies run: | - - python setup.py install - pip install deepdiff - pip install pytest==7.0.1 - pip install typing_extensions==4.1.1 - pip install importlib_metadata==4.8.3 - pip install "solc-select>=v1.0.0b1" + pip install ".[dev]" - name: Install solc run: | diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 692a981ab..199d1bea4 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -29,8 +29,8 @@ jobs: - name: Install dependencies run: | - pip install . - pip install deepdiff numpy + pip install ".[dev]" + pip install numpy mkdir -p .github/linters cp pyproject.toml .github/linters diff --git a/.github/workflows/read_storage.yml b/.github/workflows/read_storage.yml index 2ca618a19..b4c1d545d 100644 --- a/.github/workflows/read_storage.yml +++ b/.github/workflows/read_storage.yml @@ -35,11 +35,8 @@ jobs: - name: Install python dependencies run: | - python3 setup.py install - pip install web3 pytest deepdiff solc-select - pip install pytest==7.0.1 - pip install typing_extensions==4.1.1 - pip install importlib_metadata==4.8.3 + pip install ".[dev]" + pip install web3 solc-select install 0.8.1 solc-select install 0.8.10 solc-select use 0.8.1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e93b2557c..75c470456 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,10 +23,7 @@ Some pull request guidelines: ## Development Environment Instructions for installing a development version of Slither can be found in our [wiki](https://github.com/crytic/slither/wiki/Developer-installation). -To run the unit tests, you need -- `deepdiff` installed (`pip install deepdiff`). -- `pycov` installed (`pip install pytest-cov`). -- [`solc-select`](https://github.com/crytic/solc-select) installed. +To run the unit tests, you need clone this repo and run `pip install ".[dev]"`. ### Linters diff --git a/README.md b/README.md index b160cd9be..4010448be 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,12 @@ Run Slither on a single file: slither tests/uninitialized.sol ``` -For GitHub action integration, see [slither-action](https://github.com/marketplace/actions/slither-action). For additional configuration, see the [usage](https://github.com/trailofbits/slither/wiki/Usage) documentation. +### Integration +- For GitHub action integration, use [slither-action](https://github.com/marketplace/actions/slither-action). +- To generate a Markdown report, use `slither [target] --checklist`. +- To generate a Markdown with GitHub source code highlighting, use `slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/` (replace `ORG`, `REPO`, `COMMIT`) -Use [solc-select](https://github.com/crytic/solc-select) if your contracts require older versions of solc. +Use [solc-select](https://github.com/crytic/solc-select) if your contracts require older versions of solc. For additional configuration, see the [usage](https://github.com/trailofbits/slither/wiki/Usage) documentation. ### Detectors diff --git a/setup.py b/setup.py index 1069f8aef..5a0548a24 100644 --- a/setup.py +++ b/setup.py @@ -17,6 +17,18 @@ setup( # "crytic-compile>=0.2.3", "crytic-compile", ], + extras_require={ + "dev": [ + "black>=22.3.0", + "pylint>=2.13.4", + "pytest==7.0.1", + "pytest-cov", + "deepdiff", + "typing_extensions==4.1.1", + "importlib_metadata==4.8.3", + "solc-select>=v1.0.0b1", + ] + }, dependency_links=["git+https://github.com/crytic/crytic-compile.git@master#egg=crytic-compile"], license="AGPL-3.0", long_description=long_description, diff --git a/slither/__main__.py b/slither/__main__.py index bc34e7081..dd195b65b 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -299,6 +299,9 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_detector = parser.add_argument_group("Detectors") group_printer = parser.add_argument_group("Printers") + group_checklist = parser.add_argument_group( + "Checklist (consider using https://github.com/crytic/slither-action)" + ) group_misc = parser.add_argument_group("Additional options") group_detector.add_argument( @@ -392,6 +395,28 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s default=defaults_flag_in_config["show_ignored_findings"], ) + group_checklist.add_argument( + "--checklist", + help="Generate a markdown page with the detector results", + action="store_true", + default=False, + ) + + group_checklist.add_argument( + "--checklist-limit", + help="Limite the number of results per detector in the markdown file", + action="store", + default="", + ) + + group_checklist.add_argument( + "--markdown-root", + type=check_and_sanitize_markdown_root, + help="URL for markdown generation", + action="store", + default="", + ) + group_misc.add_argument( "--json", help='Export the results as a JSON file ("--json -" to export to stdout)', @@ -429,14 +454,6 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s default=defaults_flag_in_config["zip_type"], ) - group_misc.add_argument( - "--markdown-root", - type=check_and_sanitize_markdown_root, - help="URL for markdown generation", - action="store", - default="", - ) - group_misc.add_argument( "--disable-color", help="Disable output colorization", @@ -487,12 +504,6 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s parser.add_argument("--markdown", help=argparse.SUPPRESS, action=OutputMarkdown, default=False) - group_misc.add_argument( - "--checklist", help=argparse.SUPPRESS, action="store_true", default=False - ) - - group_misc.add_argument("--checklist-limit", help=argparse.SUPPRESS, action="store", default="") - parser.add_argument( "--wiki-detectors", help=argparse.SUPPRESS, action=OutputWiki, default=False ) From aca172b6d7a4f397a61f5c7be90b22e3edf2fd39 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 21 Apr 2022 09:18:34 -0500 Subject: [PATCH 052/202] fix language and pin linter versions --- CONTRIBUTING.md | 2 +- setup.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 75c470456..75cf4ecdc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ Some pull request guidelines: ## Development Environment Instructions for installing a development version of Slither can be found in our [wiki](https://github.com/crytic/slither/wiki/Developer-installation). -To run the unit tests, you need clone this repo and run `pip install ".[dev]"`. +To run the unit tests, you need clone this repository and run `pip install ".[dev]"`. ### Linters diff --git a/setup.py b/setup.py index 5a0548a24..d21934d51 100644 --- a/setup.py +++ b/setup.py @@ -19,8 +19,8 @@ setup( ], extras_require={ "dev": [ - "black>=22.3.0", - "pylint>=2.13.4", + "black==22.3.0", + "pylint==2.13.4", "pytest==7.0.1", "pytest-cov", "deepdiff", From 21d5dba4020836dc874534b789ef72cb9abcd1d7 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 29 Apr 2022 00:21:20 -0500 Subject: [PATCH 053/202] remove dependencies in lints --- .github/workflows/black.yml | 3 --- .github/workflows/ci.yml | 2 -- .github/workflows/pylint.yml | 3 --- 3 files changed, 8 deletions(-) diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index 5292c1b57..94eafffeb 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -29,9 +29,6 @@ jobs: - name: Install dependencies run: | - pip install ".[dev]" - pip install numpy - mkdir -p .github/linters cp pyproject.toml .github/linters diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5add68130..831f205dc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,9 +64,7 @@ jobs: python-version: 3.6 - name: Install dependencies run: | - pip install ".[dev]" - solc-select install all solc-select use 0.5.1 pip install typing_extensions==4.1.1 diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 199d1bea4..2fe575c79 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -29,9 +29,6 @@ jobs: - name: Install dependencies run: | - pip install ".[dev]" - pip install numpy - mkdir -p .github/linters cp pyproject.toml .github/linters From 68819d85e94bd5abfe1a367f2888516f933b134d Mon Sep 17 00:00:00 2001 From: Josselin Date: Wed, 4 May 2022 14:24:52 +0200 Subject: [PATCH 054/202] Fix pylint --- slither/solc_parsing/yul/parse_yul.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/solc_parsing/yul/parse_yul.py b/slither/solc_parsing/yul/parse_yul.py index f303647ce..8b62dbdc9 100644 --- a/slither/solc_parsing/yul/parse_yul.py +++ b/slither/solc_parsing/yul/parse_yul.py @@ -798,7 +798,7 @@ def parse_yul_identifier(root: YulScope, _node: YulNode, ast: Dict) -> Optional[ if magic_suffix: return magic_suffix - ret, _ = _find_top_level(name, root._contract.file_scope) + ret, _ = _find_top_level(name, root.contract.file_scope) if ret: return Identifier(ret) From d3eea7b64e3cf28d5f1aff3812b6c47d66411177 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 25 May 2022 16:05:27 -0500 Subject: [PATCH 055/202] bump to python 3.8 --- .github/workflows/IR.yml | 4 ++-- .github/workflows/black.yml | 4 ++-- .github/workflows/ci.yml | 4 ++-- .github/workflows/detectors.yml | 4 ++-- .github/workflows/features.yml | 4 ++-- .github/workflows/linter.yml | 4 ++-- .github/workflows/parser.yml | 4 ++-- .github/workflows/pylint.yml | 4 ++-- .github/workflows/read_storage.yml | 4 ++-- README.md | 2 +- plugin_example/setup.py | 2 +- scripts/ci_test_simil.sh | 4 ++-- setup.py | 7 +++---- 13 files changed, 25 insertions(+), 26 deletions(-) diff --git a/.github/workflows/IR.yml b/.github/workflows/IR.yml index 0471cb876..434cef75b 100644 --- a/.github/workflows/IR.yml +++ b/.github/workflows/IR.yml @@ -26,10 +26,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index 94eafffeb..b805c4d9d 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -22,10 +22,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 831f205dc..097f83914 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,10 +58,10 @@ jobs: echo 'C:\msys64\mingw64\bin' >> "$GITHUB_PATH" echo 'C:\msys64\usr\bin' >> "$GITHUB_PATH" - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | pip install ".[dev]" diff --git a/.github/workflows/detectors.yml b/.github/workflows/detectors.yml index 0745de802..8f3b45d15 100644 --- a/.github/workflows/detectors.yml +++ b/.github/workflows/detectors.yml @@ -26,10 +26,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml index d26a68980..8757d654a 100644 --- a/.github/workflows/features.yml +++ b/.github/workflows/features.yml @@ -26,10 +26,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index f3a66063e..5d9ff9017 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -22,10 +22,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/parser.yml b/.github/workflows/parser.yml index d3facfc79..5e11420cf 100644 --- a/.github/workflows/parser.yml +++ b/.github/workflows/parser.yml @@ -26,10 +26,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 2fe575c79..04334a2d5 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -22,10 +22,10 @@ jobs: - name: Checkout Code uses: actions/checkout@v2 - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | diff --git a/.github/workflows/read_storage.yml b/.github/workflows/read_storage.yml index b4c1d545d..8a423d6c2 100644 --- a/.github/workflows/read_storage.yml +++ b/.github/workflows/read_storage.yml @@ -28,10 +28,10 @@ jobs: - name: Install ganache run: npm install --global ganache - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v2 with: - python-version: 3.6 + python-version: 3.8 - name: Install python dependencies run: | diff --git a/README.md b/README.md index 4010448be..a7b30f9ae 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ See the [Tool documentation](https://github.com/crytic/slither/wiki/Tool-Documen ## How to install -Slither requires Python 3.6+ and [solc](https://github.com/ethereum/solidity/), the Solidity compiler. +Slither requires Python 3.8+ and [solc](https://github.com/ethereum/solidity/), the Solidity compiler. ### Using Pip diff --git a/plugin_example/setup.py b/plugin_example/setup.py index 9cef2aaf9..1bc065394 100644 --- a/plugin_example/setup.py +++ b/plugin_example/setup.py @@ -7,7 +7,7 @@ setup( author="Trail of Bits", version="0.0", packages=find_packages(), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=["slither-analyzer==0.1"], entry_points={ "slither_analyzer.plugin": "slither my-plugin=slither_my_plugin:make_plugin", diff --git a/scripts/ci_test_simil.sh b/scripts/ci_test_simil.sh index bad5fd067..7ef511759 100755 --- a/scripts/ci_test_simil.sh +++ b/scripts/ci_test_simil.sh @@ -2,8 +2,8 @@ ### Install requisites -pip3.6 install pybind11 -pip3.6 install https://github.com/facebookresearch/fastText/archive/0.2.0.zip +pip3.8 install pybind11 +pip3.8 install https://github.com/facebookresearch/fastText/archive/0.2.0.zip ### Test slither-simil diff --git a/setup.py b/setup.py index d21934d51..993862f03 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ setup( author="Trail of Bits", version="0.8.3", packages=find_packages(), - python_requires=">=3.6", + python_requires=">=3.8", install_requires=[ "prettytable>=0.7.2", "pysha3>=1.0.2", @@ -21,11 +21,10 @@ setup( "dev": [ "black==22.3.0", "pylint==2.13.4", - "pytest==7.0.1", + "pytest", "pytest-cov", "deepdiff", - "typing_extensions==4.1.1", - "importlib_metadata==4.8.3", + "numpy", "solc-select>=v1.0.0b1", ] }, From cc886a2f76ee3ddc2a7e06a925e97412d4e69934 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 25 May 2022 16:19:28 -0500 Subject: [PATCH 056/202] fix sentence --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 75cf4ecdc..35ff46b97 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ Some pull request guidelines: ## Development Environment Instructions for installing a development version of Slither can be found in our [wiki](https://github.com/crytic/slither/wiki/Developer-installation). -To run the unit tests, you need clone this repository and run `pip install ".[dev]"`. +To run the unit tests, you need to clone this repository and run `pip install ".[dev]"`. ### Linters From 61bb6d1dde8581285c5d599e3791b8b90cec2518 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 25 May 2022 17:17:07 -0500 Subject: [PATCH 057/202] set pythonutf8 for windows --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 097f83914..6a6f2f38d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,5 +84,6 @@ jobs: env: TEST_TYPE: ${{ matrix.type }} GITHUB_ETHERSCAN: ${{ secrets.GITHUB_ETHERSCAN }} + PYTHONUTF8: 1 run: | bash "scripts/ci_test_${TEST_TYPE}.sh" From 672c4b312ce1002a04354da5731bc386e66888cc Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 7 Jun 2022 13:15:52 +0200 Subject: [PATCH 058/202] Improve support for IdentifierPath (solidity 0.8) --- .../expressions/expression_parsing.py | 4 +++- .../solc_parsing/expressions/find_variable.py | 13 ++++++++++++- ...odifier_identifier_path.sol-0.8.0-compact.zip | Bin 0 -> 1507 bytes ...odifier_identifier_path.sol-0.8.1-compact.zip | Bin 0 -> 1506 bytes ...difier_identifier_path.sol-0.8.10-compact.zip | Bin 0 -> 1547 bytes ...difier_identifier_path.sol-0.8.11-compact.zip | Bin 0 -> 1546 bytes ...difier_identifier_path.sol-0.8.12-compact.zip | Bin 0 -> 1544 bytes ...odifier_identifier_path.sol-0.8.2-compact.zip | Bin 0 -> 1535 bytes ...odifier_identifier_path.sol-0.8.3-compact.zip | Bin 0 -> 1537 bytes ...odifier_identifier_path.sol-0.8.4-compact.zip | Bin 0 -> 1540 bytes ...odifier_identifier_path.sol-0.8.5-compact.zip | Bin 0 -> 1540 bytes ...odifier_identifier_path.sol-0.8.6-compact.zip | Bin 0 -> 1540 bytes ...odifier_identifier_path.sol-0.8.7-compact.zip | Bin 0 -> 1542 bytes ...odifier_identifier_path.sol-0.8.8-compact.zip | Bin 0 -> 1533 bytes ...odifier_identifier_path.sol-0.8.9-compact.zip | Bin 0 -> 1545 bytes ...difier_identifier_path.sol-0.8.0-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.1-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.10-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.11-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.12-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.2-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.3-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.4-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.5-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.6-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.7-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.8-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.9-compact.json | 10 ++++++++++ tests/ast-parsing/modifier_identifier_path.sol | 12 ++++++++++++ tests/test_ast_parsing.py | 1 + 30 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.0-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.1-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.2-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.5-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.6-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.9-compact.zip create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json create mode 100644 tests/ast-parsing/modifier_identifier_path.sol diff --git a/slither/solc_parsing/expressions/expression_parsing.py b/slither/solc_parsing/expressions/expression_parsing.py index 759d3d6a2..b0228e094 100644 --- a/slither/solc_parsing/expressions/expression_parsing.py +++ b/slither/solc_parsing/expressions/expression_parsing.py @@ -636,7 +636,9 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) else: referenced_declaration = None - var, was_created = find_variable(value, caller_context, referenced_declaration) + var, was_created = find_variable( + value, caller_context, referenced_declaration, is_identifier_path=True + ) if was_created: var.set_offset(src, caller_context.compilation_unit) diff --git a/slither/solc_parsing/expressions/find_variable.py b/slither/solc_parsing/expressions/find_variable.py index d1236f78e..c908c5d16 100644 --- a/slither/solc_parsing/expressions/find_variable.py +++ b/slither/solc_parsing/expressions/find_variable.py @@ -155,6 +155,7 @@ def _find_in_contract( contract: Optional[Contract], contract_declarer: Optional[Contract], is_super: bool, + is_identifier_path: bool = False, ) -> Optional[Union[Variable, Function, Contract, Event, Enum, Structure, CustomError]]: if contract is None or contract_declarer is None: return None @@ -197,6 +198,13 @@ def _find_in_contract( if var_name in modifiers: return modifiers[var_name] + if is_identifier_path: + for sig, modifier in modifiers.items(): + if "(" in sig: + sig = sig[0 : sig.find("(")] + if sig == var_name: + return modifier + # structures are looked on the contract declarer structures = contract.structures_as_dict if var_name in structures: @@ -294,6 +302,7 @@ def find_variable( caller_context: CallerContextExpression, referenced_declaration: Optional[int] = None, is_super: bool = False, + is_identifier_path: bool = False, ) -> Tuple[ Union[ Variable, @@ -321,6 +330,8 @@ def find_variable( :type referenced_declaration: :param is_super: :type is_super: + :param is_identifier_path: + :type is_identifier_path: :return: :rtype: """ @@ -381,7 +392,7 @@ def find_variable( else: assert isinstance(underlying_func, FunctionTopLevel) - ret = _find_in_contract(var_name, contract, contract_declarer, is_super) + ret = _find_in_contract(var_name, contract, contract_declarer, is_super, is_identifier_path) if ret: return ret, False diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.0-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.0-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f8a3c1a16ac6e8ba34e5df8d09f7796ca198ac85 GIT binary patch literal 1507 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5fb6cde6b1ab3ec7bf2cb5ab40dfe88cdb4a2b24 GIT binary patch literal 1547 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 R|NII3=(!)v`{8>4_#2?1%v%5e literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.2-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b5fea85ed10758b44f497479882939b141ff6b84 GIT binary patch literal 1535 zcmb7^dmz&Z0LOpKG=)%>x_Km;_iVN0)y!)%&&X@GDJ7#!WLJqa ziq26XDMhU9yfqaw^6I+gaCP_h{c+##AD{0(-+w=7H;|kiAPXo10O6T$?+XQ*4Hy9Y zH2}aI0D!2N2m+pfBZUwmaM9#{XKWbx3_LC-G6a_t8$%+8gpsgk2njeiF)k)rK@JQA z0YEwc*yQG(M*M|1$9eOr8KqR-6-_W~*U6@PYuf4x;@Y4;u81oqfsf#~pNEuX9chOk z4;?n<;aU0zx_YIH)b$JsCRF+i>i|kL$}`kWWI?QUXe4-Qs>YgR!Ta2IB{xCL>7ab% zMr4Gg!JL=Rs-Sys#t2^b7JP1rpN;VY+qgMys3>N*yP{`0Mdh$1giK@lurjzqYnk&^ zTz~Lv6*Od~<|w0@(qqx5e$JvlU{IA(J+Z2(`o{3OI=M7tWI0bshuZ6?ulF*C7!dR# z&T?KhB%&^F7I@O^S#&72iB_dOzKZ1^-p)*74X_9Mqzt<+!Po5sdRLV)TWcgd`FAYF zto@tG^4KNNp}ax$60*v`R{cL`-0zib$!x~J20d2=E2b4wvX^R05DjH}!vYRE6w}lw z+pOmj5J0t225`p4haIW=sl_QrM-rUxUat9R#7XrWFMMAawb80O@3HT^u)xW*|FD8g z-()w7YvSx#V?N9;XiWa(h@X5LSnFC~-#)pp!be|lDS&OTQo2*a6BYU-280?%{;41h z*#>a}eq?S<&NhDKPH3-w^0AV%N2s7Kr0Vz{QxMby{{9Fu%vh?IDt7Vb8NLk0zOz|g z`luBabK5)g$s@B?_oORI%-V*;8d61>K!~>W?|yn4YHVv^s}tW~a>*lH1?~ z1fiR%BLzG~VGs^8{Scq|*km*+9zTPtSb6l}F;}g#!w`}oB!%}#Hboh9D)CgC*t%dv zDiQ5hd4GdkQbsCPetUsY#i(GJuYnSC_mp1#P3{TDC|GWUb7%L^D+o$C8&o==tUm3r zEE?$K5(NFIOJ*?evwYJiMS9#N9e;+&HY2m5ZRNB*jToYqi{};ByTV(}?+ijKDqJk> zXvvyrP!TQ}JOn;CC7=F$V|OlW-_?Ri1YBD}>adKYBHvaQLIZ277*P1-2d2rCNN)>| zvO$^1Wa`dfEx9pgse3=4VPmSdc;*&!%L($%_hmZd;q(1wc4L+@K7~t?!LMrY-R;69 zcNeAcpL{&5q>}TPZ29?X55&Bal?s7JIy!1v*R3+kmK=U>tL#B~`Q%(^@Hk3q9&fXGM?KfdH2*({EM`Q(Vb3M;UZ^0eUwh| ziXJ_#Q6kEIb<~_I1gGdRdk+*3=RM3XT7Hxu_uGBPwWluLo2(p?LkiP5`>;o*nOBwcI2V=uR3suUqoMdoZrC;AHc;d5bk+o8Z&?>3m-dcPmSvIW1; zHDwCUmwdX32+$=xr@q+S6wq1<(QY!bcA)>3@i!m;lXRKy_`hmKyMg7u|75;3_!|qp IX&wOn2A-zQod5s; literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..728beb81f1b5d58e398ac780e49e1a6831ebadaa GIT binary patch literal 1537 zcmb7^X*|;n0LTB1Im!`h>`^qbk>yxx(}P-cJq#)3Lt?ql*lf-@Hkznh6{!$oG09Di z6m726Bohx(LZRh(u*va=r=I8a^WypaUVMLVes8}HcqwTdAPFb|k^$Z4bRzu?aUcMQ zfC7LC005Umy#ss$e8LC;-aa9ee<#s{;%`I_4JPVC43pc`P@*q|6Tl2;Xn9ac@^~CZ zuE}b1-Y99WaVKwmf%=^u<9cbm+sjHS5|Iku6PYDv28Kr1Yp4*BNk)8I_2>pUlQgMo zrklauhjfK!9L2+3I`lDLEa{nW@h!vE33M2Ld~=5a-PXoomOGWFw}_UgrHv|q+IKG% zt$nFF7{pW~%(9MUl*IHL;6q3U`dtJnF(n_w8Y%|`U-9?Qa17+8mNiHht$P-l=;+=BU}XXtpwqwB3f z?3>j?UFi#~YW9@^|Dg8um{idn1OM}`I8IMwIQiYqge*B2ZTfrt#f5VZ^VA!~ES8R1 z%oztWr-<|Hs(k2?L2lFFNm1h9RMyEf%CV&@HOf(jC4Dm;Hlx=1VAQW*VtXomT8NIu zLaZ@%%o?Rm>re#*Oozn!u5B-u*VxNr+*t9uOy9VodAnAw7PDz$fM2goGxR)k6Hx-K z-t`Ms{(}9Q6_PJ5rm2^W$t@>`J5%B{nK4BMAwYTz}J!@lHkikwey z_d+(Jp!U#ynuPs^bQgp-Yx0V*Y0TJdiUwKk-}zRCNp(dyXO6zv>wgBlVOq;EzxSfs zt_4PoExFE*{e-%uS4=+22;Z_8q>I~zN@IfcsJwc+oBz1};GC6VWxnuu-QY!VC%#6DH`m+z_0H-#!h_O3+KQwNXgv>wdp<*yE0tA=Xz)ko0}DB~9nzJelQTO4 z@fK?*ngdFu3ksUNn`7dh0r-TlIN64jK);DR^M1;RWA>rV3`NL&SRGc|nV2(^+j$~* z+4-|$VT%>k!dOABkpJQd-Q+3F87DG6uL&j>h$vS|S+ol8uTmbZ>+yZ)%DH1A1Iv0pjA;uG5v0cMhR zeX^&RVOB=#lCUgig6^_cv1>=limq$_5*j zE$)E_GEk@BQFD0&nu8nQD4A@P;bbZX3SCK26 z&cZ-6Hn?=yaW!H60(a@!y=`}4`!#nt`s1Fx;Ncx@?54tNPkoYa5o_=l1I2~FZB{;!-J@F1C=KZzf8 M|G~5$q6dJ#0c7dMw*UYD literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1eb88493e65a540d7a635b94019e1ceb5f093d32 GIT binary patch literal 1540 zcmb7^X*|>k0EYi_IA$A1?9Y{qXc%&aa)eMMvyOB)a>Y#Km~l1@6+dHyFfwIar42dP zFm7@VW)mW!Vb>Cg+=e1Ev)cW*Ht#ftmwgKoo!k^j$7u;>Ron0DvX~ z06G8w1mpYyumPAbuK+(xNW{Mr?-Sv#6^;w?!VvJdum~@oFkk6S=z=FX0?NL$ixw{6! zjh4I>t$1bap4WTp(cCzqyZ2t7uO;NRN)i%rJ44u5QYOk??lAsDyw(6(`c9p&PAVk% zG%v`{@c0)eXU=%9QrsjK-L*}uSA_5wMl-=qsVj+?V9scdpr2;rTFT7LK+9*7%las) zJ-yb*C3{w;lBJ0&ud=A0(RA)wmaoTkPfxvE$xAu&9ywiDsMJa);2QlaQvW$glktd`)qq|rm70yZCL zjoBd=SrWhUR2&)x7!ziO(wDbGX(mU*0<)fl<&6UJGb6Y&(taJQnHKLhw8Ww9pm@?6 zinG!}s&6!2YlA3bvQHz$(J;gzfg184W4e~YC-R#EEhU6VX%?Goy{2k6klC|xryifam!ghbXqTi(4nIwkGq}N2Emw>4a&>5%Fo%^!ek>S%@{#b3 z@hMcJZ)?i!k&n(DdIZ?doTkT)(*KI;4sE)!6}*#^PW6Z@uXLz7%}*Xf+dy+ZJa2YX z)_pOpo?f-Z9Zn?-VM;SLs=B zQ+C!3eTqAj1bgedpZo2=2K837v2rYueO-sJRS17?Gm#nDNgE*ALRi2stj|%tpx-0z z!v4Tu?TuOAk=<(8kUxJi&izv3F|v8Hp$u)mQ1&JL&V~W68b~tyW>|uY zd5Xw61&urJPNx2`Ui{LDjR?j2TOuS$>w9aeE^v;b$@*ZSlnOOrY}zr#diSL1YB-7j z5(+xG1lE?j%@bGTvF9#|hZaNRst{#%%XMXGn_m)VbngA>U7E)6h>5N)K9BFzs~8%O z4(}>QtB>~5r?QG(FJjYU!7{R|3{dho!5IIdLd0O7dY_4<`>%}{b;x@zKs9r-6i;}% zu{~jUd(7-T)}jp4p& z13uw)MZa>B_rXbJoUDj8E;Eh76Y32m?x5mRbh)K5(CWf3P&3tICHxm#lkngWuAH_X zJurK5Q6-D1n-gpAlW#LiW`XnhZ$t90;-WQRR(yxZ-nhC}B4PU6dBs)mJXdLD zB4S>{NTtk%_Ayd_V$epu|UQZdfO03!IMc9j0n%&5993XU8>A>f~M&b0HDTz$|9u0^uF< z>^;F;`1Hf2=wfJWSbls>a9!cJwAB={y=l&r)q+_b_!>3+xgyC$k<+esMnti!Z(m=> z{pu07_UDecw~vN>c5Ed`of(_&8Fj7b#k+VyG~rSEk)?dpiWj7)Y__48T$)eca90&O z?AG7BkTcnJQ|ukKwRp{&%#sK32eD0XM>`PM9P-~rK9KT1i3R<@|Mjz@oq*tvALyW- L2c#Uh9svFZQ2Nv* literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.5-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..316ec58632cc9b25f57cccca07cbee229b659590 GIT binary patch literal 1540 zcmb7^X*|;n0LTAGSur9vVQnHT**u1v&s>q4CgH(mn``bnIUgoN<;bxZJ*CH0A9F4# z_s8QZnxn<&py5NyEqe4kub&ss@Au;Sd-HqywYTOwW(4p8V1S?4?;Mo)0&mI>0QaQ; zKobCfAQG17N5qAB5wW=7h<|5@cLV_*P73tG#e|T;BD}oAdK~am|W+hmE@PK@ODF3|!F0MDKB|M(f(`d3=Cr`MVXQO1|w= zx-O=8L8@**gH+RC(mb!>)U_hlOzNIvJzg!leVJ(^JK7~T8@KMwdT`z`G%Z&!acs<3 zt#?K>Wibqu8$kShLw%kpdpTBR5cHlO{+E@bOK1$4V}XUi3Z%2i)2R)0h$ur?OVaD; zH?;hV()2eJWXdkDLbrHgql}fi5;T=j9A>e+s#X}AZ9YpMIHBxY6IvjqZr4rJHSXAiyqpxN#k)oEw?#y!=vj8x9H5HI)-MYW2~8Z&!0PD;_k($$Li-!$|(xdlpx$1 z`yGf~7(#Q(;bbtDe2nQ_UQie63=g6 zKLac@VaMBsbdJ|=IOBZJmXz&Vw9ig>l?&z*7`{c&{J8wJ5Em&Gxh>;nnou2D01n1P%f{3pic@0j5r>rCWMW4K96*SOQFl$%o^1V+jA|T?yabHgq$w_RhL1=D=wQ6QY%@NS>;y#=`_~-`JrE|%&aj=>t<03Q8 z ztaM5Vnl>TZJ5ies&4w2F>HemimOHGjo8R$7Bc`eu~n$!gc7S;HmVQ&#ktZKWK^3hr#Gfo+Pu-%Ydix0TOh6Sh37-q zq?tVVKpA?Me(^zR)gJxvU?hPwd&~9SP_m?q3sJISit%cxVo4a<_~A?UOksS(z}2?m z&K_nm*_1r8B#5k_x9#s-?OGRihyxCK--@T4GP2Wv5(?AeLtr6z zO@iH(j&QRuLHcSeCC*j&N{j! zyJs)REGKiQ=9p?0HpEQZpt0=pk1q~Pu)Q@8uMyvW8~I4e|0Id$C;qRW?XCHb|NQYB N)$@pXN3I8ezX1he%fKV}dc!VK{s&*7P)uOxh+50)hY_ z6#$N0ycmfPA*kig2Ad9VXL3n+{Wk4%hKHstbb|Is%|f_zZ3f_h#@9y`B^{FY%QoAK zS4`=;X57ASf~4LECCqEfS1Z$?wkE9{5!eYids#Z zOB-;uFz_n53j(eQ=~xx}@4X*mRm|0@5_!c(6~SVmS3MJMtF|eC<>@x|RrsnQrR@-z zt|;F-YWHN?xPeCzt*s_~pILNl_Jb2UZrJWg)bZIMZ(e_eUA_~~(a~BM*Ir|13&x&B zfJ&YuX7H9G71;09sC6PhHL)y-n-SfpB(vz(J)x>*v+1u zNNN$+*w!uGTW?eqXB3;#-kA~IF%ep`@~IMf&Qi9ZVH`7z7<8{`d-qzF^yS6j2)wOb zIk>RAh)lM&CJs{?a`Q{r4AAxZ-LJeUNRDzj_GJTm~#{vU&iw304v6wBDiG` z;mT`C_}vxxx!7f1E>Vy)fA*np8KKGzO*oKR$uC1ZIO(>lWp5cy-wHi6;ZvcQ@Tjwk z$*#V>{ZW7|c+lB4Q=v2abBdn7wGSpPaN|Hbmszf9r`+03nFBpM2-KQlq6^QwyC|(O z(yYo{3|B3e5fl&3MZSF_JnzTLBq61zJBcxzyJyds=^HtSQd*Fc4tIkZgqBoFZ&mq8 z(%4Y->=V7OO6qihw11qU3dC{AZ2U%gj^&;aZ&jGsTErdB;63(^&6R7^M$KmysJFU| z&ay6Citq=MuAu|ukr{$Q!%6L{*_&WH$b$n$2oK`q9YgeN{neD$P5Z&9HhZ_(gc^fMPj44mlt0- z+`Te}{;s&fmz+*-tVO+@M3Ivmi4a`-1a9i_^RRvwABhJtakA*4(=UB|b=I1tMz7dB z&z8d|m8${Isnwr^u;hMsXwdQ z*~I$@Hy%2->-lQnIsA2cw-41G>SSj3cv7eUhfNuFhNKUx5D$f1M9GWP7CzE@sjr~< zU*j=QI-C}j#Bus{u2c5S=CFOsTD)9sV*U#?GAekRO OiLIiyn7ieA0QehI7ShE4 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..041c5ea9eae38b1ceca80bbaf2342fa0adb0a084 GIT binary patch literal 1542 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 G0pM>jV$f~? literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.9-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.9-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a06a3c57b31ede0971d44cab7c828531b42e627 GIT binary patch literal 1545 zcmb7^c_7mZ0LOo}(a5o|Ig+6nxpG9xRqjZxhQ}PaSKch!a};vrKAMGDV9`}_UzzTZDS-+#XUeq0>E5DNeVhyx-x_GzElrXo8*0LYdB z09^n8evb^sh2lb@{Bgk{c+$UhzzKiED=H=7F;h z^CNXdA zxEw2pX3uxFeLP^UAQgBH=`5$eA%m89&oO?sYuIcfCoFROeW=y z7mW1y{xR1`z4~K4KR_>V*;RZfg<9)rbJvy$GGmUufPGSBk^65IZ2MI=2PO42FiAvi zLr~sE;%X151STr+!^C71c+h&IdPpxB4h$(?@ySQK<9)ShV zOe@ib`o@_QhO*PHMUC86AtYyh*yhn1uM_lmH~$l(`Y9DJb)mlMfXVe>)|SzO&?Uoi zW<18bm8YQM*w^!=cKX$$pu?C`G&sDZcvnIOZLU(@&eJp})pCupJNI)AO`fxHB64!S zabNxxypD`cf|uRhC3gK#LWX$;d}n=&Mz6mAHm}=?7hNMIp=D`qRYk>ZI1OXK4c~4> zQ5H(GBSeYdl;z=MiGEu@1B`;SBh}fO5)_~J44Lp}8tQFA`^;q9x7>S|G(LDplz}xe zTQ|o~skd5Y)wL`(EHTj<@C|;>!796(BX;=8t=q z@Z&M|>g|1(x@~gk3ns!fg7))o7lQJh=a! z(}s2wpS1~1XddNTT|9KZH%`Onl*veyWL$K~*Yg9~M_4!FcV6CEEw9fi@=cc59pUlt zJel_y+ zkZa#LJEe!w`~!`R5YX~w)3I)}v=;^t{vx1sN@ES>V~xIk7lY= zkNm|+N!09Ab5Op6n9B!y%?Zbk-SyV%f?C_j;X;k>qcG|Af%!3Xzz^oSx}J2r9h2!E z-nkVA+A(XRU&Y*;4fxWm{*R$afS|jrAxST1j1))KVa5D>6NG zv*y|+Jut-?%Q)>~Dg{l~`;h16J>o)^oA=5f`A^&!fwAv$_S6v^`5B=j6hg+7ukAvx$p!=FTyt2IZS#($Ue zAQId<9=Ke8EkgUjPYZ_Y&wd>35N8bpX~~^X-1*QkT;k#=0I~r8x0ZjJ`JW^S{KEg0 Vw2Pyl(667s&-(pj(NEz6z~754$7TQk literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/modifier_identifier_path.sol b/tests/ast-parsing/modifier_identifier_path.sol new file mode 100644 index 000000000..196de8d61 --- /dev/null +++ b/tests/ast-parsing/modifier_identifier_path.sol @@ -0,0 +1,12 @@ +contract A{ + + function f() public m {} + modifier m()virtual {_;} + +} + +contract B is A{ + + modifier m() override {_;} + +} diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index eafe6a2f3..c8d24e741 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -404,6 +404,7 @@ ALL_TESTS = [ # 0.8.9 crashes on our testcase Test("user_defined_types.sol", ["0.8.8"] + make_version(8, 10, 12)), Test("bytes_call.sol", ["0.8.12"]), + Test("modifier_identifier_path.sol", VERSIONS_08), ] # create the output folder if needed try: From 3416d05d16d4966ecc8c30405cd497869df63317 Mon Sep 17 00:00:00 2001 From: Cosmos <42707185+CharesFang@users.noreply.github.com> Date: Fri, 17 Jun 2022 23:40:12 +0800 Subject: [PATCH 059/202] fix wrong argument annotation (#1233) --- slither/slither.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/slither.py b/slither/slither.py index 6c4caaa99..4ad9bda19 100644 --- a/slither/slither.py +++ b/slither/slither.py @@ -53,7 +53,7 @@ class Slither(SlitherCore): # pylint: disable=too-many-instance-attributes Keyword Args: solc (str): solc binary location (default 'solc') disable_solc_warnings (bool): True to disable solc warnings (default false) - solc_arguments (str): solc arguments (default '') + solc_args (str): solc arguments (default '') ast_format (str): ast format (default '--ast-compact-json') filter_paths (list(str)): list of path to filter (default []) triage_mode (bool): if true, switch to triage mode (default false) From 6a2e1e0819f0dde932484b20bb0e0d3e39293adf Mon Sep 17 00:00:00 2001 From: Mathis Date: Fri, 17 Jun 2022 08:40:42 -0700 Subject: [PATCH 060/202] Do not fail with no results and sarif output (#1229) Close #1228 --- slither/utils/output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/utils/output.py b/slither/utils/output.py index 16c9f5bbf..6ee59b4c6 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -160,7 +160,7 @@ def output_to_sarif( ], } - for detector in results["detectors"]: + for detector in results.get("detectors", []): _output_result_to_sarif(detector, detectors_classes, sarif) if filename == "-": From 793c4c4ee4580f2df91b0a7778691b0b1c192999 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 24 Jun 2022 14:31:30 -0500 Subject: [PATCH 061/202] add failing test cases for user defined types --- .../user_defined_value_type/argument.sol | 17 +++ .../user_defined_value_type/constant.sol | 7 ++ .../user_defined_value_type/erc20.sol | 107 ++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 tests/ast-parsing/user_defined_value_type/argument.sol create mode 100644 tests/ast-parsing/user_defined_value_type/constant.sol create mode 100644 tests/ast-parsing/user_defined_value_type/erc20.sol diff --git a/tests/ast-parsing/user_defined_value_type/argument.sol b/tests/ast-parsing/user_defined_value_type/argument.sol new file mode 100644 index 000000000..7bdc7d560 --- /dev/null +++ b/tests/ast-parsing/user_defined_value_type/argument.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.8.9; + +type Fix is int192; + + +contract FixLib { + function div(uint256 numerator, uint256 divisor) public pure returns (uint256) { + return numerator / divisor; + } + function works(Fix x) external pure returns (uint256) { + uint256 y = uint192(Fix.unwrap(x)); + return div(y, 1e18); + } + function broken(Fix x) external pure returns (uint256) { + return div(uint192(Fix.unwrap(x)), 1e18); + } +} diff --git a/tests/ast-parsing/user_defined_value_type/constant.sol b/tests/ast-parsing/user_defined_value_type/constant.sol new file mode 100644 index 000000000..0cab2a6f3 --- /dev/null +++ b/tests/ast-parsing/user_defined_value_type/constant.sol @@ -0,0 +1,7 @@ +type T is int224; +pragma solidity >= 0.8.12; +contract C { + T constant public s = T.wrap(int224(165521356710917456517261742455526507355687727119203895813322792776)); + T constant public t = s; + int224 constant public u = T.unwrap(t); +} diff --git a/tests/ast-parsing/user_defined_value_type/erc20.sol b/tests/ast-parsing/user_defined_value_type/erc20.sol new file mode 100644 index 000000000..29f315d5d --- /dev/null +++ b/tests/ast-parsing/user_defined_value_type/erc20.sol @@ -0,0 +1,107 @@ +type UFixed18 is uint256; + +library FixedMath +{ + function add(UFixed18 a, UFixed18 b) internal pure returns (UFixed18 c) { + return UFixed18.wrap(UFixed18.unwrap(a) + UFixed18.unwrap(b)); + } + function sub(UFixed18 a, UFixed18 b) internal pure returns (UFixed18 c) { + return UFixed18.wrap(UFixed18.unwrap(a) - UFixed18.unwrap(b)); + } +} + +contract ERC20 { + using FixedMath for UFixed18; + + event Transfer(address indexed from, address indexed to, UFixed18 value); + event Approval(address indexed owner, address indexed spender, UFixed18 value); + + mapping (address => UFixed18) private _balances; + mapping (address => mapping (address => UFixed18)) private _allowances; + UFixed18 private _totalSupply; + + constructor() { + _mint(msg.sender, UFixed18.wrap(20)); + } + + function totalSupply() public view returns (UFixed18) { + return _totalSupply; + } + + function balanceOf(address owner) public view returns (UFixed18) { + return _balances[owner]; + } + + function allowance(address owner, address spender) public view returns (UFixed18) { + return _allowances[owner][spender]; + } + + function transfer(address to, UFixed18 value) public returns (bool) { + _transfer(msg.sender, to, value); + return true; + } + + function approve(address spender, UFixed18 value) public returns (bool) { + _approve(msg.sender, spender, value); + return true; + } + + function transferFrom(address from, address to, UFixed18 value) public returns (bool) { + _transfer(from, to, value); + // The subtraction here will revert on overflow. + _approve(from, msg.sender, _allowances[from][msg.sender].sub(value)); + return true; + } + + function increaseAllowance(address spender, UFixed18 addedValue) public returns (bool) { + // The addition here will revert on overflow. + _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); + return true; + } + + function decreaseAllowance(address spender, UFixed18 subtractedValue) public returns (bool) { + // The subtraction here will revert on overflow. + _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue)); + return true; + } + + function _transfer(address from, address to, UFixed18 value) internal { + require(to != address(0), "ERC20: transfer to the zero address"); + + // The subtraction and addition here will revert on overflow. + _balances[from] = _balances[from].sub(value); + _balances[to] = _balances[to].add(value); + emit Transfer(from, to, value); + } + + function _mint(address account, UFixed18 value) internal { + require(account != address(0), "ERC20: mint to the zero address"); + + // The additions here will revert on overflow. + _totalSupply = _totalSupply.add(value); + _balances[account] = _balances[account].add(value); + emit Transfer(address(0), account, value); + } + + function _burn(address account, UFixed18 value) internal { + require(account != address(0), "ERC20: burn from the zero address"); + + // The subtractions here will revert on overflow. + _totalSupply = _totalSupply.sub(value); + _balances[account] = _balances[account].sub(value); + emit Transfer(account, address(0), value); + } + + function _approve(address owner, address spender, UFixed18 value) internal { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = value; + emit Approval(owner, spender, value); + } + + function _burnFrom(address account, UFixed18 value) internal { + _burn(account, value); + _approve(account, msg.sender, _allowances[account][msg.sender].sub(value)); + } +} From 809a24260e773064e0f7c4ab9849b655ebc14bac Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 24 Jun 2022 14:36:12 -0500 Subject: [PATCH 062/202] additional edge cases --- .../user_defined_value_type/calldata.sol | 49 +++++++++++++++++++ .../in_parenthesis.sol | 9 ++++ 2 files changed, 58 insertions(+) create mode 100644 tests/ast-parsing/user_defined_value_type/calldata.sol create mode 100644 tests/ast-parsing/user_defined_value_type/in_parenthesis.sol diff --git a/tests/ast-parsing/user_defined_value_type/calldata.sol b/tests/ast-parsing/user_defined_value_type/calldata.sol new file mode 100644 index 000000000..feb2d8ac3 --- /dev/null +++ b/tests/ast-parsing/user_defined_value_type/calldata.sol @@ -0,0 +1,49 @@ +pragma abicoder v2; +type MyAddress is address; + +contract C { + MyAddress[] public addresses; + function f(MyAddress[] calldata _addresses) external { + for (uint i = 0; i < _addresses.length; i++) { + MyAddress.unwrap(_addresses[i]).call(""); + } + addresses = _addresses; + } + function g(MyAddress[] memory _addresses) external { + for (uint i = 0; i < _addresses.length; i++) { + MyAddress.unwrap(_addresses[i]).call(""); + } + addresses = _addresses; + } + function test_f() external returns (bool) { + clean(); + MyAddress[] memory test = new MyAddress[](3); + test[0] = MyAddress.wrap(address(21)); + test[1] = MyAddress.wrap(address(22)); + test[2] = MyAddress.wrap(address(23)); + this.f(test); + test_equality(test); + return true; + } + function test_g() external returns (bool) { + clean(); + MyAddress[] memory test = new MyAddress[](5); + test[0] = MyAddress.wrap(address(24)); + test[1] = MyAddress.wrap(address(25)); + test[2] = MyAddress.wrap(address(26)); + test[3] = MyAddress.wrap(address(27)); + test[4] = MyAddress.wrap(address(28)); + this.g(test); + test_equality(test); + return true; + } + function clean() internal { + delete addresses; + } + function test_equality(MyAddress[] memory _addresses) internal view { + require (_addresses.length == addresses.length); + for (uint i = 0; i < _addresses.length; i++) { + require(MyAddress.unwrap(_addresses[i]) == MyAddress.unwrap(addresses[i])); + } + } +} diff --git a/tests/ast-parsing/user_defined_value_type/in_parenthesis.sol b/tests/ast-parsing/user_defined_value_type/in_parenthesis.sol new file mode 100644 index 000000000..d45dacb4f --- /dev/null +++ b/tests/ast-parsing/user_defined_value_type/in_parenthesis.sol @@ -0,0 +1,9 @@ +type MyInt is int; +contract C { + function f() public returns (MyInt a, int b) { + (MyInt).wrap; + a = (MyInt).wrap(5); + (MyInt).unwrap; + b = (MyInt).unwrap((MyInt).wrap(10)); + } +} From 7d11f06efe8baeb41e7afeba398c8f1e1e32c565 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 24 Jun 2022 16:21:57 -0500 Subject: [PATCH 063/202] add top level identifier to test cases --- .../compile/yul-0.8.0.sol-0.8.0-compact.zip | Bin 5500 -> 5732 bytes .../compile/yul-0.8.0.sol-0.8.1-compact.zip | Bin 5614 -> 5840 bytes .../compile/yul-0.8.0.sol-0.8.10-compact.zip | Bin 5770 -> 6020 bytes .../compile/yul-0.8.0.sol-0.8.11-compact.zip | Bin 5774 -> 6020 bytes .../compile/yul-0.8.0.sol-0.8.12-compact.zip | Bin 5763 -> 6029 bytes .../compile/yul-0.8.0.sol-0.8.2-compact.zip | Bin 5702 -> 5888 bytes .../compile/yul-0.8.0.sol-0.8.3-compact.zip | Bin 5694 -> 5891 bytes .../compile/yul-0.8.0.sol-0.8.4-compact.zip | Bin 5773 -> 5974 bytes .../compile/yul-0.8.0.sol-0.8.5-compact.zip | Bin 5807 -> 5997 bytes .../compile/yul-0.8.0.sol-0.8.6-compact.zip | Bin 5816 -> 6006 bytes .../compile/yul-0.8.0.sol-0.8.7-compact.zip | Bin 5790 -> 6000 bytes .../compile/yul-0.8.0.sol-0.8.8-compact.zip | Bin 5752 -> 5998 bytes .../compile/yul-0.8.0.sol-0.8.9-compact.zip | Bin 5773 -> 6010 bytes .../expected/yul-0.8.0.sol-0.8.0-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.1-compact.json | 2 +- .../yul-0.8.0.sol-0.8.10-compact.json | 2 +- .../yul-0.8.0.sol-0.8.11-compact.json | 2 +- .../yul-0.8.0.sol-0.8.12-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.2-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.3-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.4-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.5-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.6-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.7-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.8-compact.json | 2 +- .../expected/yul-0.8.0.sol-0.8.9-compact.json | 2 +- tests/ast-parsing/yul-0.8.0.sol | 3 +++ 27 files changed, 16 insertions(+), 13 deletions(-) diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.0-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.0-compact.zip index d9fd43cc22d5037640e2b9196aaf4077fd421417..b302d81295eebe32f31f9ac5b24779655c9f344a 100644 GIT binary patch delta 5645 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 V03iSX0001!Ar?Ib7Zm^i008@jd(Qv> diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.1-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.1-compact.zip index 44a7cfee227469361d9d8987eb336ee239aec3fa..cd27fa7897fee73b33f07fa376c3fe1bde655757 100644 GIT binary patch delta 5754 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 s*=Nu1P)h*5P-36-5SX761SM0JnrJLjV8( delta 5547 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 delta 5684 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 aR99LEP`Bn4000h%lQ|bf1|=2%0001lw)n#U diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.11-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.11-compact.zip index c6561a90b6f058c07e3aa7b0e3d6d174be584023..51f9bfbd668157fd3bc5bbb5923d89ec31e59d0e 100644 GIT binary patch delta 5936 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 S005_tlS39o1|Jsy00012uYJA% delta 5688 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 bg4k3@RXzae761UJkCQkSMFuDr00000@{MUr delta 5677 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 delta 5615 zcmV@KL7#%4gh*_a8!lf#;Bqd003Kukr+#VC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6*-3T%h=49l%Ar)wM0?-amh_*`lB(0+ zG$9+y!j)aI=h($bWRZr{cf$3?;}}w|<OH(v>N*Fs|JfNInYc@phxs zvabOu`*EaNT@!qNzWhgrL?pS&Z>(+n;+PTjLNdX&^l4_VbwHmNPQs~W`0+aR@!%G$ z(f?kHWS`e#>ugj^4Lh7CSXom~rZA4NxjmNV>F4T@u%j<0Od{2-ksktnP4D~z!%s}V zbQm&LXV|oFP=E6{?xU#IyB5tj35|@1Rl3LwZmd=ObZ=FE=3=9=h%7tbf5KR$HCN3O zrErA(yAcg6;O_E*TF3sybliydr5lklKRtXj_8tYO zNec|T^15__%PcK=^=z3RqsztlMr+D3?H?U?x%k%Icz6Q1(D6aO*8^^iitIvmV4~~$ zU|-gOGry+Ki@M=DO?=c1H`Vbg#ZocpG};A+rZfP5`xz*Yx`V` zTp0PnSF~N)jeP@(-CgL)X+1k5;&~>`_k!Tg&4Rw?ctk^q^B=q8zUJ2$FGw+SEhxz$z&U)e<=otC0_)nK7iE?y65B(BEws{3Jo>RW3dca(8O><^qwEmWbW38N&BC(Z+v z^RtmqTCgTB&%-N=hb}V;cNyx5qb|dRDHwz2o=7~C&)Ytr)R@lS5%X%C%!0=EE9`vb zPI*bJ;O}Bx{*-*`+`ZsNh}|ly(6Ti4W9y>0isHjwwZME_R1T-Q_#hF?V~EA)B&URb z0`h3qcnqi~W+nu^iiA=#rr0E*I6!U=#r55`OEcHQg-!@s5TE4y2w7n`3Q-<_NdnJ( zZ_8$UgE;r7rcxEqVfLk4F>|l?S)5~!Z`ya__;VGYn^dl{T?<&@>Fvp9dY!r~--s6C ziWpPl3Fv$)G}^JI?XR&^5vY+!cNH~%H@1>DsUwztK?|<~L*3APT0|`E|Ah7Dp>9m~ zj2LiB6U?mC?hY4zm*t@?SxaU1q90=zVXqGM-?s-(tSF)BCDPVH0badE1IlX^B+B76 zadG^F9N6mM=f`>Vv4=OzbS^@ZUiI73T);cda5yel5_bllt3Ld0{@VB3tR=610BD*d zCASFjCE9e)8#O4jd2mB2Jd1Wr5_L9g*@;N*1(jP`#D#34OM7%X?0K6OF!NYnYIFy+70AGX{uzalsd#7nR9zh=68|)(tTloAHmM~6IyZHbCBc=DOe*KjS zV2xbQ{NIt`2jnwALD^TB%ht7jh*dLQeS<5iVC{jgO;7Qwh}nYh$+|NCd}g?r8N-p^ zejOS$z)UL>Bd6U})8sZwHjHk6=-xLPOX{qs6icF@Dq(c!66@6l@aO3Md68C1cc&m$ zQHY)aRjTf{2R%EJ%FpkB1DX51=n`v zPFr99Npreqa~`H%WBJE{lA2on@20adZ=m|egX83uE+zAa-S^}A`2PP(sA~E%lFb(Vn-=|lcqMu++>&e%tC}JSFpKIiI=M_Sq@SHV^ZA9E4vr)R0d4w z+htqfn_>%oEp0n4urLi5dT$Mb2}M`~JRLwGnLhUKTxVH_rX6BhLrc6s!pW&Wt0~XW zdJ-q{uv|SKU-aXPHFowP`5Y6@H}}!O?v_*MC(2ots*8{V`)=HS3pbVAXu~$kZI9tt z%fp}B6lw}Z5{ILj`%jKMjNn$7F5evJ(JAv*u|mOR7}pqrPF5Vq+);9Z^SG@w{kKx$ zL1Va)enS|q@@F2^F`1>l2ozM5^k2KL9;5;cLJNO7DkWrtRJl2vD=zr-7BohY(V?%qKPELX(bQs4(HC@gnD9ibNJr|xZ1kn zFafmw`?^^ZMcxh*gksNEm-)THip47pio?!hv7$9TivVnYS!wlChZ<0c zPC^@v8c`f8JRK*Gkh)*j>2ZDdgtr$pO(((VyQ+w^g|dsf_mcLsq)z{y2wQ?OeU%ta zYkJ2doE>5;es8&p1(oDZ-wLc;E?4NDNcX94Ytdv`m@B$|)#rvQf|3l|_kqr?G+V__H=uEY zDF@zCA{dKxTo>u$WoQ!L+Y9Uq4=xDfU+k)R#F_y4t9s)$4z>0Xgvm@Z5l;HIl+-_0 zmDY}mPSR|aQG{*Ui_#?-;*Rz@+F6^>G(WL_%iWrDJ3yz}a^c-fQvpx4$g1V!WjnEn zb^5^n`&x|KQeD36rO=a@2n-yFbP10_8j8s*%6ZzP5}hL9y7 zdSsYP$r!7=2p81F|KSrDU$qOUx<)1$FFbm+ul*TX$1kkq_pJPkr2_#12D3w?MfOL3 zz^{qY9042V8a0jWS;6CQ!C2T2Mm!S9#Gwl2)-dZVt&UWPbM)3^u^2VbRgRKRV(H}# zk-Iys3(;{{!<$>7%TOE|t=aQBg%^rh#29Bb1RXRv9Y$dbk&I`kaNv@ZNfg_@lPKj85u@Z9{5z4h#%0_*P)6M<44>7`0 z0oFW=iet%x0E9TZOY6i+u=l%h4#7ve)Y==R;XTM=yy(&9et;dgv&!k5Ue+IfPr^EI zFJH7M*u_HOHUz4u|IQXV3i)6XPI9v zYbrJ-EsS^QN5X8GSDn*sZ^09G+%qQaP)} zjGv89^@{KxzP}?Pek#c)rSS&?$|q*RIX{Fucz$0S09_9mT?OctSxy3fy;CD%%eu)X0Pt)dRn;#TYCF_e)0@lMOYp}3L6{b5!TojotE+)*As|(MTp` z2ZrEW_13b`Dzs1O*$H~o_Q!~rO+xjMnIkjw(>L8anwo7*^3}3q zSH9fk_jR{Z3gbjJ=#L^#fx;y*t2zxC68z~lp7-M?bYCF;U#;|bc+R4IjCA$Ekl>4* zCNn06#eX3R)fB0r)rK#9RekavZ|Mgt^iGRPvsxR5Uh3&}r5A^P6yo?&LbLWcQtYH9 z+q@+qLAHz-@-9@jrG1D+O1E^vbPe8r2Qqs9WC=P=v20tmBcZH+Ta<7FTH1+vp`I^4e5}TDL#0TAJz%jem@O)NO>8d$aP(;kklk zb;Ge>y&-TkbeQ6QUqUU-lmGkcQus40b{Q7o#Y#ofh-lxsNKgCuP*4g+Wf_Nw2WeBuXVjPFK55 z&9njih3{YD!sI_j$f$4|7cQ|Yg4okwjH-YuCP=xv2)ed^C4IxRCkD$`$`ghNpDrd= z2zk2*Y?i#eJgq4qMlSEnR|NUx)=BSxPedC8Tu-9b=CDpOzP>3Y+%Zm5bsx-ErE*2Z zrMD{kT1v>D>dxYX0X-M!)gmj#>avWz>Ps30rTNg`(}JV@7da^xcN@Rr7(FmFb*S6V zcQV97SjI|!UspJd05uKRisupp$<~xHI&7r$nSguwO`~Oc?D<+(uMj3A(_N(bp;A2A zygBKuNaExav3#pa6E2C6btF&la)wR+`=B(lr64BjkQe@K|3fpmwGQJbIq*2BiD=w9 zjj7V-npcYl2UG0+Y)engY)@Xxhb^@g)2Av}z1&@Y%mmi!m0pZO5)9P!J&tsuN2b*L zo|7L;&6qxHnJN^6+bDCcoevhS>JGf|q8j##6wb`lkN+yMaP|8@11ByTp!hG>>9n_DFbg-{+HWm(JOz%Z z*7jLK3Ag5HHayg@MC5$R$iL1&rGKS_*!tstkx0J!Og(=Pc4AM@;acgj$WM~xCQ`{L z@nA1}tkIylt#(@zEX<+ene?!LzDyet@dxat#G*$6omjO>Z$D7k)?7NhLp%PX8s7tQ zT6~rctDVf`rA~|G>is0pda`rysV*MeGPp^p8oDVtlS|@{@m_ILUU)55pAJ)0wyFJp z+D5f^{Q!-XqZ<7QV9`-)nu{^)RQ-y1-MB)A3TJbzUWBpEu6jG5x$_S+dY;ybrr%u% zhXrji=nHY?`^izs=3|m!=}orS!S7T5J+ILwA9LHK(}Vry!nd~-MP1MGT=B+Y zW#+ik9VwC`{!p3nnlaa0eEE2(Ds~f5LJzd66X#CTyOu{$p;H5*jcJfTBX9PoE2X*N zGVClQv@L3q4%i<|4}>ltYQK`ZBqcYaEsaNJU~+-&@0M0Iyn3k4*b^6J* zYXoWel|!#WZ3V9UTv8Sm#=Z|~DaEw!mv>Oyl%;VfoKju2M=Yki_*z_kjOr*Wp`0MZ zXgbLmb8>*OX_4N)0JgdMixyQwZ1~(}oKpB%C2PMC6yWOf9^pXx3cuacY(x+i%?vu7 z`#Be*5nj}31m0kg%qn%*!>4h7H=idirJtDpr#O4J+)QNK#HP_T#}yx;WQu&KTvU1Y z96A`+ZO23#pjgmz%kY^)9N1vvR7hxpeto~~`4R~d1~FpH1Bp*=e#kU2^B5~J~-p(^66?r-wqTAE1*Ats!m4dzK}|L@j9pY@$R}+v61XxQ5h<&x_M$YOrsgX9XaL zd`Rw1M7Zd6#!;z~uVM3ySG7#2!H%j^+Ujl+q`L;-PVUW?*;%E5g0Yk9`m#aH%FD3( zUgF4Eo6iKt6O&lH1iOEKaVNW;q9qaNkr^kWzm|N!9^NaD&sGayY$&e0b%hu6qbbO} zj>!31cQmmiCzl*f{(h-KGe!A5-xd_b6I}mtzuvD@8~liJpX+-Q7i>VTMXAj-UE!X( zHx>2Y7b^a;1Tsszz*X9YFt2W7Ox(|yN`zF05a8@hF%9rpPFbaY0DOE){==r$Yn|$p zQVFRb*XSDslvB2z+tSMl;S>HKejw&~P??3-A;bn}=pnE~Jr#&p=)_ob&;I)-0aKRBS4uT(6 zcRv_)U=XYQOI{Mp9@z;$fh?*^D(VdFlI0ksW({Gql~O>XCXyr=?RpO>Ebvq6j5y1}f=+^Tz_dN`dnmU~l6&5+betez>klew|f9 zN;6Q)T5ec3gC67120ZupOaC(1z`=P>)TKU!=n;CUE^FhlHl+T*w_b0n7kA}iF6(`v&otohjSIoOh(5gyO%Qay{Pd`+RkLZ*bz0_A&4m^PSDX zEr%4!%cA#5&I!-Eaxeakev}XK#)`7MOvbzlM2~1Xj%^E`m&FH9vfNrmGW#+5OJqG_ zk*qGdv?VU2@8{JE+gVq6ftMIUa<1h%ppnBYuLEX7^2Flm>B9d1kJ|MA#C$xurH0zU&k00ICG0D5t7RE6HgsG=1B09%KXwH8GN J;S~S?005U?49frj diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.3-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.3-compact.zip index cc9b808bf75bfc7dcc022ab805257633b397f8f3..f88b7f600c87697ee09b3d0a53d4cc43f8d98b43 100644 GIT binary patch delta 5806 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 delta 5607 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 diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.5-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.5-compact.zip index 3c3cb92b36be27ff2835df745598f1cd6a158b42..baa3f66e7a1ff1d1ecf9822314bd986ae17773d7 100644 GIT binary patch delta 5931 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 LMFvV100000xl|&m diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.6-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.6-compact.zip index cee76626a6c69923d41276371844bdb1e5611c96..067e12293774af7b808dc9e8ac0579ef8554b36e 100644 GIT binary patch delta 5938 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 U00000005JB7CQzJ7XSbN0MU7NV*mgE delta 5737 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 diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.7-compact.zip index 8345b8931df6484ec0ff8700f017a82de1e36e08..1475b4e6da739bc9ae98da748291c2630c3de210 100644 GIT binary patch delta 5931 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 NV-__A3l{(Y000G_Z!`b^ delta 5704 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 diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.8-compact.zip index ee0310ead0ee80fee91468e07b850213b48d808d..f2427cdea3e629bb7d67ae483c3a66180612f8fb 100644 GIT binary patch delta 5938 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 diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.0-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.0-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.0-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.0-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.1-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.1-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.1-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.1-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.10-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.10-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.10-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.10-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.11-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.11-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.11-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.11-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.12-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.12-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.12-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.12-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.2-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.2-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.2-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.2-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.3-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.3-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.3-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.3-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.4-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.4-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.4-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.4-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.5-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.5-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.5-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.5-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.6-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.6-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.6-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.6-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.7-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.7-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.7-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.7-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.8-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.8-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.8-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.8-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.9-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.9-compact.json index c7716d2db..b58e03af7 100644 --- a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.9-compact.json +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.9-compact.json @@ -1,7 +1,7 @@ { "L": {}, "C": { - "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: EXPRESSION 31\n\"];\n}\n", "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/yul-0.8.0.sol b/tests/ast-parsing/yul-0.8.0.sol index 38f7a7e09..663c3372c 100644 --- a/tests/ast-parsing/yul-0.8.0.sol +++ b/tests/ast-parsing/yul-0.8.0.sol @@ -1,6 +1,7 @@ library L { } +uint256 constant offset = 100; contract C { uint storA; @@ -18,6 +19,7 @@ contract C { let aLocalA := localA sstore(storA.slot, 0) + sstore(offset, 0) paramA := 0 retA := 0 localA := 0 @@ -31,6 +33,7 @@ contract C { mstore(paramB, 0) mstore(retB, 0) mstore(localB, 0) + mstore(offset, 0) let aStoreC := mul(sload(storC.slot), storC.offset) From d0a4f5595d7177b3b7d4bd35e1384bf35ebc22d4 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 13:30:11 -0500 Subject: [PATCH 064/202] add up to 0.8.15 for ast tests (#1268) --- .../assembly-all.sol-0.8.13-compact.zip | Bin 0 -> 1340 bytes .../assembly-all.sol-0.8.14-compact.zip | Bin 0 -> 1336 bytes .../assembly-all.sol-0.8.15-compact.zip | Bin 0 -> 1341 bytes .../assignment-0.4.7.sol-0.8.13-compact.zip | Bin 0 -> 2555 bytes .../assignment-0.4.7.sol-0.8.14-compact.zip | Bin 0 -> 2557 bytes .../assignment-0.4.7.sol-0.8.15-compact.zip | Bin 0 -> 2558 bytes .../compile/break-all.sol-0.8.13-compact.zip | Bin 0 -> 2826 bytes .../compile/break-all.sol-0.8.14-compact.zip | Bin 0 -> 2820 bytes .../compile/break-all.sol-0.8.15-compact.zip | Bin 0 -> 2823 bytes ...all_to_variable-all.sol-0.8.13-compact.zip | Bin 0 -> 2638 bytes ...all_to_variable-all.sol-0.8.14-compact.zip | Bin 0 -> 2636 bytes ...all_to_variable-all.sol-0.8.15-compact.zip | Bin 0 -> 2637 bytes .../comment-all.sol-0.8.13-compact.zip | Bin 0 -> 1270 bytes .../comment-all.sol-0.8.14-compact.zip | Bin 0 -> 1268 bytes .../comment-all.sol-0.8.15-compact.zip | Bin 0 -> 1268 bytes .../test.sol-0.8.13-compact.zip | Bin 0 -> 2482 bytes .../test.sol-0.8.14-compact.zip | Bin 0 -> 2479 bytes .../test.sol-0.8.15-compact.zip | Bin 0 -> 2480 bytes .../conditional-all.sol-0.8.13-compact.zip | Bin 0 -> 2565 bytes .../conditional-all.sol-0.8.14-compact.zip | Bin 0 -> 2566 bytes .../conditional-all.sol-0.8.15-compact.zip | Bin 0 -> 2565 bytes .../continue-all.sol-0.8.13-compact.zip | Bin 0 -> 2823 bytes .../continue-all.sol-0.8.14-compact.zip | Bin 0 -> 2827 bytes .../continue-all.sol-0.8.15-compact.zip | Bin 0 -> 2825 bytes .../contract-0.6.0.sol-0.8.13-compact.zip | Bin 0 -> 2572 bytes .../contract-0.6.0.sol-0.8.14-compact.zip | Bin 0 -> 2571 bytes .../contract-0.6.0.sol-0.8.15-compact.zip | Bin 0 -> 2573 bytes .../custom_error-0.4.0.sol-0.8.13-compact.zip | Bin 0 -> 551 bytes .../custom_error-0.4.0.sol-0.8.14-compact.zip | Bin 0 -> 551 bytes .../custom_error-0.4.0.sol-0.8.15-compact.zip | Bin 0 -> 551 bytes .../dowhile-0.4.5.sol-0.8.13-compact.zip | Bin 0 -> 1766 bytes .../dowhile-0.4.5.sol-0.8.14-compact.zip | Bin 0 -> 1770 bytes .../dowhile-0.4.5.sol-0.8.15-compact.zip | Bin 0 -> 1767 bytes .../compile/emit-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 2100 bytes .../compile/emit-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 2096 bytes .../compile/emit-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 2098 bytes .../compile/enum-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 996 bytes .../compile/enum-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 997 bytes .../compile/enum-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 995 bytes .../compile/event-all.sol-0.8.13-compact.zip | Bin 0 -> 1537 bytes .../compile/event-all.sol-0.8.14-compact.zip | Bin 0 -> 1536 bytes .../compile/event-all.sol-0.8.15-compact.zip | Bin 0 -> 1535 bytes .../compile/for-all.sol-0.8.13-compact.zip | Bin 0 -> 4806 bytes .../compile/for-all.sol-0.8.14-compact.zip | Bin 0 -> 4807 bytes .../compile/for-all.sol-0.8.15-compact.zip | Bin 0 -> 4808 bytes .../function-0.7.1.sol-0.8.13-compact.zip | Bin 0 -> 4431 bytes .../function-0.7.1.sol-0.8.14-compact.zip | Bin 0 -> 4427 bytes .../function-0.7.1.sol-0.8.15-compact.zip | Bin 0 -> 4428 bytes .../functioncall-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 7103 bytes .../functioncall-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 7097 bytes .../functioncall-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 7089 bytes .../compile/if-all.sol-0.8.13-compact.zip | Bin 0 -> 3355 bytes .../compile/if-all.sol-0.8.14-compact.zip | Bin 0 -> 3356 bytes .../compile/if-all.sol-0.8.15-compact.zip | Bin 0 -> 3356 bytes ...rom_top_level-0.7.6.sol-0.8.13-compact.zip | Bin 0 -> 1354 bytes ...rom_top_level-0.7.6.sol-0.8.14-compact.zip | Bin 0 -> 1354 bytes ...rom_top_level-0.7.6.sol-0.8.15-compact.zip | Bin 0 -> 1354 bytes .../indexaccess-all.sol-0.8.13-compact.zip | Bin 0 -> 1689 bytes .../indexaccess-all.sol-0.8.14-compact.zip | Bin 0 -> 1687 bytes .../indexaccess-all.sol-0.8.15-compact.zip | Bin 0 -> 1683 bytes ...exrangeaccess-0.6.1.sol-0.8.13-compact.zip | Bin 0 -> 2352 bytes ...exrangeaccess-0.6.1.sol-0.8.14-compact.zip | Bin 0 -> 2351 bytes ...exrangeaccess-0.6.1.sol-0.8.15-compact.zip | Bin 0 -> 2349 bytes ...it_conversion-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 4223 bytes ...it_conversion-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 4226 bytes ...it_conversion-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 4226 bytes .../memberaccess-0.5.3.sol-0.8.13-compact.zip | Bin 0 -> 2594 bytes .../memberaccess-0.5.3.sol-0.8.14-compact.zip | Bin 0 -> 2593 bytes .../memberaccess-0.5.3.sol-0.8.15-compact.zip | Bin 0 -> 2591 bytes .../minmax-0.6.8.sol-0.8.13-compact.zip | Bin 0 -> 1611 bytes .../minmax-0.6.8.sol-0.8.14-compact.zip | Bin 0 -> 1611 bytes .../minmax-0.6.8.sol-0.8.15-compact.zip | Bin 0 -> 1612 bytes .../modifier-all.sol-0.8.13-compact.zip | Bin 0 -> 1350 bytes .../modifier-all.sol-0.8.14-compact.zip | Bin 0 -> 1350 bytes .../modifier-all.sol-0.8.15-compact.zip | Bin 0 -> 1349 bytes ...newexpression-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 1821 bytes ...newexpression-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 1816 bytes ...newexpression-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 1817 bytes .../pragma-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 1023 bytes .../pragma-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 1022 bytes .../pragma-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 1021 bytes .../compile/push-all.sol-0.8.13-compact.zip | Bin 0 -> 1961 bytes .../compile/push-all.sol-0.8.14-compact.zip | Bin 0 -> 1963 bytes .../compile/push-all.sol-0.8.15-compact.zip | Bin 0 -> 1955 bytes .../compile/return-all.sol-0.8.13-compact.zip | Bin 0 -> 3063 bytes .../compile/return-all.sol-0.8.14-compact.zip | Bin 0 -> 3064 bytes .../compile/return-all.sol-0.8.15-compact.zip | Bin 0 -> 3059 bytes .../scope-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 2557 bytes .../scope-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 2551 bytes .../scope-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 2555 bytes .../struct-0.6.0.sol-0.8.13-compact.zip | Bin 0 -> 1425 bytes .../struct-0.6.0.sol-0.8.14-compact.zip | Bin 0 -> 1419 bytes .../struct-0.6.0.sol-0.8.15-compact.zip | Bin 0 -> 1420 bytes .../throw-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 888 bytes .../throw-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 888 bytes .../throw-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 890 bytes .../top-level-0.7.4.sol-0.8.13-compact.zip | Bin 0 -> 1617 bytes .../top-level-0.7.4.sol-0.8.14-compact.zip | Bin 0 -> 1617 bytes .../top-level-0.7.4.sol-0.8.15-compact.zip | Bin 0 -> 1617 bytes ...-level-import-0.7.1.sol-0.8.13-compact.zip | Bin 0 -> 2839 bytes ...-level-import-0.7.1.sol-0.8.14-compact.zip | Bin 0 -> 2837 bytes ...-level-import-0.7.1.sol-0.8.15-compact.zip | Bin 0 -> 2834 bytes ...el-import-bis-0.7.1.sol-0.8.13-compact.zip | Bin 0 -> 2409 bytes ...el-import-bis-0.7.1.sol-0.8.14-compact.zip | Bin 0 -> 2407 bytes ...el-import-bis-0.7.1.sol-0.8.15-compact.zip | Bin 0 -> 2410 bytes ...nested-import-0.7.1.sol-0.8.13-compact.zip | Bin 0 -> 2277 bytes ...nested-import-0.7.1.sol-0.8.14-compact.zip | Bin 0 -> 2278 bytes ...nested-import-0.7.1.sol-0.8.15-compact.zip | Bin 0 -> 2276 bytes ...evel_variable-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 1946 bytes ...evel_variable-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 1947 bytes ...evel_variable-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 1949 bytes ...vel_variable2-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 3374 bytes ...vel_variable2-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 3372 bytes ...vel_variable2-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 3368 bytes .../trycatch-0.6.0.sol-0.8.13-compact.zip | Bin 0 -> 6479 bytes .../trycatch-0.6.0.sol-0.8.14-compact.zip | Bin 0 -> 6477 bytes .../trycatch-0.6.0.sol-0.8.15-compact.zip | Bin 0 -> 6482 bytes ...pleexpression-0.5.3.sol-0.8.13-compact.zip | Bin 0 -> 1743 bytes ...pleexpression-0.5.3.sol-0.8.14-compact.zip | Bin 0 -> 1742 bytes ...pleexpression-0.5.3.sol-0.8.15-compact.zip | Bin 0 -> 1737 bytes ...aryexpression-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 2478 bytes ...aryexpression-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 2471 bytes ...aryexpression-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 2470 bytes .../unchecked-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 2460 bytes .../unchecked-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 2461 bytes .../unchecked-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 2461 bytes ...bal_variables-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 9657 bytes ...bal_variables-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 9667 bytes ...bal_variables-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 9666 bytes .../using-for-0.4.1.sol-0.8.13-compact.zip | Bin 0 -> 2364 bytes .../using-for-0.4.1.sol-0.8.14-compact.zip | Bin 0 -> 2366 bytes .../using-for-0.4.1.sol-0.8.15-compact.zip | Bin 0 -> 2361 bytes .../variable-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 4293 bytes .../variable-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 4292 bytes .../variable-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 4291 bytes ...ledeclaration-0.5.0.sol-0.8.13-compact.zip | Bin 0 -> 2891 bytes ...ledeclaration-0.5.0.sol-0.8.14-compact.zip | Bin 0 -> 2893 bytes ...ledeclaration-0.5.0.sol-0.8.15-compact.zip | Bin 0 -> 2888 bytes .../compile/while-all.sol-0.8.13-compact.zip | Bin 0 -> 1764 bytes .../compile/while-all.sol-0.8.14-compact.zip | Bin 0 -> 1766 bytes .../compile/while-all.sol-0.8.15-compact.zip | Bin 0 -> 1766 bytes .../compile/yul-0.8.0.sol-0.8.13-compact.zip | Bin 0 -> 5771 bytes .../compile/yul-0.8.0.sol-0.8.14-compact.zip | Bin 0 -> 5768 bytes .../compile/yul-0.8.0.sol-0.8.15-compact.zip | Bin 0 -> 5773 bytes .../assembly-all.sol-0.8.13-compact.json | 5 ++ .../assembly-all.sol-0.8.14-compact.json | 5 ++ .../assembly-all.sol-0.8.15-compact.json | 5 ++ .../assignment-0.4.7.sol-0.8.13-compact.json | 5 ++ .../assignment-0.4.7.sol-0.8.14-compact.json | 5 ++ .../assignment-0.4.7.sol-0.8.15-compact.json | 5 ++ .../break-all.sol-0.8.13-compact.json | 5 ++ .../break-all.sol-0.8.14-compact.json | 5 ++ .../break-all.sol-0.8.15-compact.json | 5 ++ ...ll_to_variable-all.sol-0.8.13-compact.json | 6 ++ ...ll_to_variable-all.sol-0.8.14-compact.json | 6 ++ ...ll_to_variable-all.sol-0.8.15-compact.json | 6 ++ .../comment-all.sol-0.8.13-compact.json | 5 ++ .../comment-all.sol-0.8.14-compact.json | 5 ++ .../comment-all.sol-0.8.15-compact.json | 5 ++ .../test.sol-0.8.13-compact.json | 7 +++ .../test.sol-0.8.14-compact.json | 7 +++ .../test.sol-0.8.15-compact.json | 7 +++ .../conditional-all.sol-0.8.13-compact.json | 5 ++ .../conditional-all.sol-0.8.14-compact.json | 5 ++ .../conditional-all.sol-0.8.15-compact.json | 5 ++ .../continue-all.sol-0.8.13-compact.json | 5 ++ .../continue-all.sol-0.8.14-compact.json | 5 ++ .../continue-all.sol-0.8.15-compact.json | 5 ++ .../contract-0.6.0.sol-0.8.13-compact.json | 19 +++++++ .../contract-0.6.0.sol-0.8.14-compact.json | 19 +++++++ .../contract-0.6.0.sol-0.8.15-compact.json | 19 +++++++ ...custom_error-0.4.0.sol-0.8.13-compact.json | 1 + ...custom_error-0.4.0.sol-0.8.14-compact.json | 1 + ...custom_error-0.4.0.sol-0.8.15-compact.json | 1 + .../dowhile-0.4.5.sol-0.8.13-compact.json | 5 ++ .../dowhile-0.4.5.sol-0.8.14-compact.json | 5 ++ .../dowhile-0.4.5.sol-0.8.15-compact.json | 5 ++ .../emit-0.5.0.sol-0.8.13-compact.json | 5 ++ .../emit-0.5.0.sol-0.8.14-compact.json | 5 ++ .../emit-0.5.0.sol-0.8.15-compact.json | 5 ++ .../enum-0.8.0.sol-0.8.13-compact.json | 3 + .../enum-0.8.0.sol-0.8.14-compact.json | 3 + .../enum-0.8.0.sol-0.8.15-compact.json | 3 + .../event-all.sol-0.8.13-compact.json | 3 + .../event-all.sol-0.8.14-compact.json | 3 + .../event-all.sol-0.8.15-compact.json | 3 + .../expected/for-all.sol-0.8.13-compact.json | 15 +++++ .../expected/for-all.sol-0.8.14-compact.json | 15 +++++ .../expected/for-all.sol-0.8.15-compact.json | 15 +++++ .../function-0.7.1.sol-0.8.13-compact.json | 52 ++++++++++++++++++ .../function-0.7.1.sol-0.8.14-compact.json | 52 ++++++++++++++++++ .../function-0.7.1.sol-0.8.15-compact.json | 52 ++++++++++++++++++ ...functioncall-0.8.0.sol-0.8.13-compact.json | 10 ++++ ...functioncall-0.8.0.sol-0.8.14-compact.json | 10 ++++ ...functioncall-0.8.0.sol-0.8.15-compact.json | 10 ++++ .../expected/if-all.sol-0.8.13-compact.json | 8 +++ .../expected/if-all.sol-0.8.14-compact.json | 8 +++ .../expected/if-all.sol-0.8.15-compact.json | 8 +++ ...om_top_level-0.7.6.sol-0.8.13-compact.json | 3 + ...om_top_level-0.7.6.sol-0.8.14-compact.json | 3 + ...om_top_level-0.7.6.sol-0.8.15-compact.json | 3 + .../indexaccess-all.sol-0.8.13-compact.json | 5 ++ .../indexaccess-all.sol-0.8.14-compact.json | 5 ++ .../indexaccess-all.sol-0.8.15-compact.json | 5 ++ ...xrangeaccess-0.6.1.sol-0.8.13-compact.json | 5 ++ ...xrangeaccess-0.6.1.sol-0.8.14-compact.json | 5 ++ ...xrangeaccess-0.6.1.sol-0.8.15-compact.json | 5 ++ ...t_conversion-0.5.0.sol-0.8.13-compact.json | 23 ++++++++ ...t_conversion-0.5.0.sol-0.8.14-compact.json | 23 ++++++++ ...t_conversion-0.5.0.sol-0.8.15-compact.json | 23 ++++++++ ...memberaccess-0.5.3.sol-0.8.13-compact.json | 6 ++ ...memberaccess-0.5.3.sol-0.8.14-compact.json | 6 ++ ...memberaccess-0.5.3.sol-0.8.15-compact.json | 6 ++ .../minmax-0.6.8.sol-0.8.13-compact.json | 5 ++ .../minmax-0.6.8.sol-0.8.14-compact.json | 5 ++ .../minmax-0.6.8.sol-0.8.15-compact.json | 5 ++ .../modifier-all.sol-0.8.13-compact.json | 8 +++ .../modifier-all.sol-0.8.14-compact.json | 8 +++ .../modifier-all.sol-0.8.15-compact.json | 8 +++ ...ewexpression-0.5.0.sol-0.8.13-compact.json | 8 +++ ...ewexpression-0.5.0.sol-0.8.14-compact.json | 8 +++ ...ewexpression-0.5.0.sol-0.8.15-compact.json | 8 +++ .../pragma-0.8.0.sol-0.8.13-compact.json | 3 + .../pragma-0.8.0.sol-0.8.14-compact.json | 3 + .../pragma-0.8.0.sol-0.8.15-compact.json | 3 + .../expected/push-all.sol-0.8.13-compact.json | 5 ++ .../expected/push-all.sol-0.8.14-compact.json | 5 ++ .../expected/push-all.sol-0.8.15-compact.json | 5 ++ .../return-all.sol-0.8.13-compact.json | 9 +++ .../return-all.sol-0.8.14-compact.json | 9 +++ .../return-all.sol-0.8.15-compact.json | 9 +++ .../scope-0.5.0.sol-0.8.13-compact.json | 8 +++ .../scope-0.5.0.sol-0.8.14-compact.json | 8 +++ .../scope-0.5.0.sol-0.8.15-compact.json | 8 +++ .../struct-0.6.0.sol-0.8.13-compact.json | 3 + .../struct-0.6.0.sol-0.8.14-compact.json | 3 + .../struct-0.6.0.sol-0.8.15-compact.json | 3 + .../throw-0.5.0.sol-0.8.13-compact.json | 3 + .../throw-0.5.0.sol-0.8.14-compact.json | 3 + .../throw-0.5.0.sol-0.8.15-compact.json | 3 + .../top-level-0.7.4.sol-0.8.13-compact.json | 1 + .../top-level-0.7.4.sol-0.8.14-compact.json | 1 + .../top-level-0.7.4.sol-0.8.15-compact.json | 1 + ...level-import-0.7.1.sol-0.8.13-compact.json | 5 ++ ...level-import-0.7.1.sol-0.8.14-compact.json | 5 ++ ...level-import-0.7.1.sol-0.8.15-compact.json | 5 ++ ...l-import-bis-0.7.1.sol-0.8.13-compact.json | 5 ++ ...l-import-bis-0.7.1.sol-0.8.14-compact.json | 5 ++ ...l-import-bis-0.7.1.sol-0.8.15-compact.json | 5 ++ ...ested-import-0.7.1.sol-0.8.13-compact.json | 5 ++ ...ested-import-0.7.1.sol-0.8.14-compact.json | 5 ++ ...ested-import-0.7.1.sol-0.8.15-compact.json | 5 ++ ...vel_variable-0.8.0.sol-0.8.13-compact.json | 5 ++ ...vel_variable-0.8.0.sol-0.8.14-compact.json | 5 ++ ...vel_variable-0.8.0.sol-0.8.15-compact.json | 5 ++ ...el_variable2-0.8.0.sol-0.8.13-compact.json | 8 +++ ...el_variable2-0.8.0.sol-0.8.14-compact.json | 8 +++ ...el_variable2-0.8.0.sol-0.8.15-compact.json | 8 +++ .../trycatch-0.6.0.sol-0.8.13-compact.json | 9 +++ .../trycatch-0.6.0.sol-0.8.14-compact.json | 9 +++ .../trycatch-0.6.0.sol-0.8.15-compact.json | 9 +++ ...leexpression-0.5.3.sol-0.8.13-compact.json | 5 ++ ...leexpression-0.5.3.sol-0.8.14-compact.json | 5 ++ ...leexpression-0.5.3.sol-0.8.15-compact.json | 5 ++ ...ryexpression-0.5.0.sol-0.8.13-compact.json | 5 ++ ...ryexpression-0.5.0.sol-0.8.14-compact.json | 5 ++ ...ryexpression-0.5.0.sol-0.8.15-compact.json | 5 ++ .../unchecked-0.8.0.sol-0.8.13-compact.json | 6 ++ .../unchecked-0.8.0.sol-0.8.14-compact.json | 6 ++ .../unchecked-0.8.0.sol-0.8.15-compact.json | 6 ++ ...al_variables-0.8.0.sol-0.8.13-compact.json | 17 ++++++ ...al_variables-0.8.0.sol-0.8.14-compact.json | 17 ++++++ ...al_variables-0.8.0.sol-0.8.15-compact.json | 17 ++++++ .../using-for-0.4.1.sol-0.8.13-compact.json | 9 +++ .../using-for-0.4.1.sol-0.8.14-compact.json | 9 +++ .../using-for-0.4.1.sol-0.8.15-compact.json | 9 +++ .../variable-0.8.0.sol-0.8.13-compact.json | 5 ++ .../variable-0.8.0.sol-0.8.14-compact.json | 5 ++ .../variable-0.8.0.sol-0.8.15-compact.json | 5 ++ ...edeclaration-0.5.0.sol-0.8.13-compact.json | 5 ++ ...edeclaration-0.5.0.sol-0.8.14-compact.json | 5 ++ ...edeclaration-0.5.0.sol-0.8.15-compact.json | 5 ++ .../while-all.sol-0.8.13-compact.json | 5 ++ .../while-all.sol-0.8.14-compact.json | 5 ++ .../while-all.sol-0.8.15-compact.json | 5 ++ .../yul-0.8.0.sol-0.8.13-compact.json | 7 +++ .../yul-0.8.0.sol-0.8.14-compact.json | 7 +++ .../yul-0.8.0.sol-0.8.15-compact.json | 7 +++ tests/test_ast_parsing.py | 2 +- 289 files changed, 1081 insertions(+), 1 deletion(-) create mode 100644 tests/ast-parsing/compile/assembly-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/assembly-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/assembly-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/break-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/break-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/break-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/call_to_variable-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/call_to_variable-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/call_to_variable-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/comment-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/comment-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/comment-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/complex_imports/import_aliases/test.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/complex_imports/import_aliases/test.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/complex_imports/import_aliases/test.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/conditional-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/conditional-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/conditional-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/continue-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/continue-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/continue-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/contract-0.6.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/contract-0.6.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/contract-0.6.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.4.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/dowhile-0.4.5.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/dowhile-0.4.5.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/dowhile-0.4.5.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/emit-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/emit-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/emit-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/enum-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/enum-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/enum-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/event-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/event-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/event-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/for-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/for-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/for-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/function-0.7.1.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/function-0.7.1.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/function-0.7.1.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/functioncall-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/functioncall-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/functioncall-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/if-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/if-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/if-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/indexaccess-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/indexaccess-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/indexaccess-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/indexrangeaccess-0.6.1.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/indexrangeaccess-0.6.1.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/indexrangeaccess-0.6.1.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/memberaccess-0.5.3.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/memberaccess-0.5.3.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/memberaccess-0.5.3.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/push-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/push-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/push-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/return-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/return-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/return-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/scope-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/scope-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/scope-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/struct-0.6.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/struct-0.6.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/struct-0.6.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/throw-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/throw-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/throw-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/unaryexpression-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/unaryexpression-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/unaryexpression-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/units_and_global_variables-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/units_and_global_variables-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/units_and_global_variables-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/variable-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/variable-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/variable-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/while-all.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/while-all.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/while-all.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/yul-0.8.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/yul-0.8.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/yul-0.8.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/expected/assembly-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/assembly-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/assembly-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/break-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/break-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/break-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/call_to_variable-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/call_to_variable-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/call_to_variable-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/comment-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/comment-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/comment-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/conditional-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/conditional-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/conditional-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/continue-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/continue-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/continue-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/contract-0.6.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/contract-0.6.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/contract-0.6.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/emit-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/emit-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/emit-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/enum-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/enum-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/enum-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/event-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/event-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/event-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/for-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/for-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/for-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/function-0.7.1.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/function-0.7.1.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/function-0.7.1.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/if-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/if-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/if-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/indexaccess-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/indexaccess-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/indexaccess-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/modifier-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/modifier-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/modifier-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/push-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/push-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/push-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/return-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/return-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/return-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/scope-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/scope-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/scope-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/struct-0.6.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/struct-0.6.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/struct-0.6.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/throw-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/throw-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/throw-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/variable-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/variable-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/variable-0.8.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/while-all.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/while-all.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/while-all.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/yul-0.8.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/yul-0.8.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/yul-0.8.0.sol-0.8.15-compact.json diff --git a/tests/ast-parsing/compile/assembly-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/assembly-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..87ef389a3d86cbc0466e717c5453f681e49ca98a GIT binary patch literal 1340 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/assembly-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/assembly-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..30420079bc327ce36f0e13ad2b64b41a17d8d3e2 GIT binary patch literal 1341 zcma*neK^wz00;1&*=$Xb8l9KClw3tP7Rk%l$r1CqP;S^UT5a<(Z#iyb{{3-xmIb2#5TF2L1kYi6Wt0(j zzyJ`Y2mrbO0N|-q0{I8ht#f!1$&eaG3LwOVhebvO;3I>s6JrR5H>hEh17HY%0{}Vz zShHB6raPt)oPn1D%R>)3D8y4OnkiYHYBpLU)IU^Av>uN!yCn08?+EQ%q+e)it%274 z8?E0^pigVCQJB1H;a2clua2J-N0McDR5U0+xINmoJ_c9PfQHn6mh$4?6i+RY86AbW z?`=XkFx1zkNV}`!la-H1Su#xz!N%Uq(TFKQ4UGqqI>b;tkc~d+KHjzCdnhEF3Rq#@}UX*LR9SCizs#6jZU()?;mCiY|kR)`|ncW6zN20R%N^@OE z;%KYeo`oVBrKi?Baq}EQVF>jY*c;r<5s)u<@oeYL{8nO=Hf+*D)N7t`mG~w#Mv{~h zb}wCHHC5TM<`T|!Zssh4 zSnpr9k@B4+5Ua$+%t8CC?6hsT8vH{_k>l~dd-1=z_lnJMciWU;FRIO!-)tp1`&KLK zWU3}je8=sRF7gXF5SOOyoa$};v27Iq+xHH))aB55u%eiqZo4TNrsD!1f^CorKdu07 zt#}i^H4llNa^c&#X`Jrut4>D3f@3cDvYndsDqN}^Nj4~oK&yPRoiPCcY4xY7WW^Zd zu4rA5_aPnPEw=Df2cprb^-s^-wJxV1rEX2nEMb-CKKQuMTd}f_qF?e(J4l00cbgoK zeqDRud3X5wUl-6sI!tNv=Dg_7WkJtGwCJg)gpu7AIbR~0HW&fbb%9Ju`)NC>Jq zZv@R$4?)(cU+HdEKxov9y$Z$VE0%e=jaVI@6TSEAK->h2gOX3+)z4GhVDez4CVtlr z$=6F>En}QnRHtQ5eKLQpKUGfLP%>L^yB0|-@E@hpb`fqd9v4}6D!?ob4}r3}9gEpI z!C-ki+05oVxy8+~#GFhyrg#7HP)$*iz@jQ2>zxhjcHm|$9AQ4r^D|2oF&EUFN*W4{ z%0x(*{Pl@a`pGoZHqyc0__%z$Q$OhJ9KqyJ#ev=Bz zew-!Q>9&n*e&)&^&ftrw!B-?`VR&8WG-D=T6?)D6^nmyK(xaCVW~!b;W>!b`h)+0x nyR!@kCHvp3?aTIW=rUjC{~+h?43YctmD#W7{toRU2>|~9O?Pr{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..56a56a4aaa59a25f88ce86f8fbd6f67420d1460b GIT binary patch literal 2555 zcma);S2!Dt0)}IYz4xk>s#&42LW{Qcs8OXABUTZ$wJ5bhl~6H?@Y^X>BPy|Km*1?K zMM*_dqsCu*=JY@J=XuWeUA#Bn<#+K~nbOee0jL3N02G{T>*YqE7y|)-j9UP}RR93s z8XWB7h4A-4gea;gsVPB}f&=_u9uZFhft< zfzQE#C11vxwOI@M5k4}VVu@+@gmlGcgFEB&1BYP5pn3Ahc&t21^^*Us+2(NXXVdF(RD`Hn* zT+iay%h5&)NUWv?zf*%Fz|t}!WO)Wjj$X*u*#0-a7wLoyv#=*lwVm^KgK+)x1J$4f zN&CY*)@>-;j$WKNqi0Wf&_!D>=G$+bTk;WMu0CvMj-|6IaoAu6M6Ug?dyj64WNn|1 zt=<;JchP&|GeyWb;GfxHFgEr}Aw)FM@zt%2qs#ecxKHkH? z^o_MEd)=mFv=rRZE2#~nULb|NTPpt+{U|#4Ni6Uej;dRYV|%+ zAl1LLUJxsI3rZ92T!5UnToV;6=`&c}^7#1Jdck?{!7r(?nP(m)V>UBDD{5OjeX^mkmc%^toFOx^7K*lxN7oD{LrO#7iih zCi*r#1k{;wxF|ufN0y&G(xq%5fkJJrZ+NbxOWYkvQ0lOu<)XAMI~n~s`5f#tlpL`g zSe8ERtucS7du~D)8035K9x}TcAF$pf5;nI_;x%jbV%kZddRZnOg2v0b0CPE$Td&rA z*TFmAx#~h_VdwD2xhmfC*+nU=gt$y!2$x}R-l4gL=IWb72eU~WwC{GKPXPe1--XP5{6z2O@Z z3VL7Vu7|G#%#ac-n#!-@xHy93rQ_ zb`)UHQm6evzWooD0xa)r<}``ydF2%F@obsix%QAtp>|K4xDb1rxNw&EvUZy}-PVvc zlEXZ0*#9HQ=QO|RizZ&gz2C~!k%c05H6s$a5}q+TvDk)tqWh~sG5kV;TzB#bpIkyZ zWF?u52X#Ys!Yx@0Zdm@jt|qJq>hk+3vk6VhUbLx!?@O%;j2}@i!xLXasr}yV6U&)Z zBCSUA^x~dvm_EQSiIC6LUx`@+=329W4jn9itSn>uy{CPG@8ne*i<4WK{Y__266#)+ zzH(6HK)_et6lGJ4o^yaPO!&%$2Y~V%jDn7YTxveO4Z7KrpBI~E8Xn27SmCwa@cHkJ zQt)8B-pe$jvx3EM6>6jY(n*Xg)B5pNlj^_{wt1wJ-L0xd(xW&A!jPP$o=^Rt9bB(7 zNkL>VQt0-cAG?EN2kevDXW~r`fNP%K)~ZzJC-%fRUze zK3vOlt|ByDW4xYAYgcUM3*uSJy&_QzatkIA!v z+;O?+&|$t)QgtCgpdpHPo=nVKuSd_6pi95DtX@*>)(>~`GE_Ui92Bvd>K;YV9lUAk z7#d0S%77!X;0wLsqDZTs`y@Ov)panxf17pUa-)G|oMkUCWw#LEYmrAyqN7u-9mOdcZmpGn&Y2(|()hy!Wn3e}TzhT1~a7rg9bfB}~b#iSD6Htx?FfD#fz~q{+M1eMD?P#AhBsntZ8c&tGV{I=6u9zX+&x zLCxyNunU)-y>*(azgp;%>^FiTWid`9H)addjGJqKFYdG=3-N#D zuk~pV?(bzkzp+HB@!gCtqiT;FV>x=oUS+Z+R1{U$T0T&C{BI%q<7EF$EY-jGfA!4Dl#c%2J=LGu{~_v+;sF5v E0UeaqivR!s literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/assignment-0.4.7.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fe97cd4979271a1484fe657ab4b6c51168f5099d GIT binary patch literal 2557 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/break-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/break-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a627f5cc4676d0a7a32d4c4681ff2ea1819ad7cd GIT binary patch literal 2826 zcmajh_dgU40|)T4_sWcHCtsYA6tVPuHTUFH z+ofWWg!io9G+IUeTp<{C_55sj+-9p$#DeBoXxdJ5wg?CW7xJ;_f$L6l*y9R3vef1W*i zBs09>#kxxu9sR z%edS>nbDWP;QKep!Rp$;lVLucG!>W_;O_2=^YF{5;oggIKr<+5Us7wj2}4-X2C@Jpn*%vqi8+Mbrl?=vCz?I{>yexN*UuJ=h-Y?(E5JbJ4d0UdO7Ce7y}IR zfKlRem-Uj760sYsM?Xq(eI3!g9-1>9=R4}SDs;~D+EQ#`N`c#!j***Ow-OoN^-{bc zo!=Z@Uxuo^bVb(mA{+=q9~N31=j27AcQ{BJVvSAg0hedL8(E5?XN@xiG>^R}RKUvhkuy~0S zt|h6U)_8|UAb>M5s1TXgT-r=5J$>@)qj6!B|7y9}&u(*^f)RQm%pNOFX2WB$b@M;} zrl0m0f>(Kq*!s&lhcyxKAe)4Aoj@r^yQ`~U!X?I=Dla?&^{5FC>D6*N1EQ4$lMBdQ z=DpR&INr-B3B!5z<*gdsLzvB6lCQNs1B+-7g6&RiP2y-=YFlcV@vK{x;%z$6%!_Ce zOx!4AC|9lgIGZ0qM~w`y>xyqPhc=J1Dl^;J44c)zHDA4LDmCzGfH&EnVsa%XfvW?7 z*SXl_d6hV7gJfQXk4?QL$YF)K!cuthZuK$VlpN2NjZyxSOVk?s# zBl7U63P;fHp(NwhQg67yFHi!|fiKoN1!@rW{pq2bMg4-%L%l-aG(-%qKx~z*V*^)B z>q^50FckY?dVzkMhHkKOn4!(~ZaLn)(u?$n(g|B=U;Mmh<^;4j#!88WDjzzC%7c-d zKPQib#1HNcPb%x-XQ7*Ouj`Ek(%n6I1rM0femEazT2ZEiVb5G8%RF2?Va!2$A+Cz4 zX`dsO*A2x`-;k>TAY|w-s`;%4snz-au<{>c%QJUpwsNAOym@J=kx=P%cGQ26!e zFr7rcu4rShpoIlj$In}7U#Rz&gQNX7O8%!vS;@4iExJVt52(Z zT8gG0<(~=PJ=gu<2sqD|b-t)b>Nob+2 zTP&T&8rp5xJpWA*yv|pzYP2)W?TgGXP^wYvO6!Gs`}gp!V%2pFsOm;I%p8G!8KHFD zCIy+7^3hbAOsyrxGu~v=_M~9LkjhZel8CO8y2b8$nC%rOXa)b1dEo;ca6IcrZqH<^ zAi;(F_t~zho|V8y38kUNC?T)5VsuwiwEo5Dlaqh?)UA|-ooeq8Eq~FiZNJC~r8z48 z=KI!SF(M+dU@3K?p%0_MCu0!vsyN{fAeoPoXK_|E@o3Adu$BF(TbLvt5>;N;5vFmGW$jhdpT)x?yx7wEqoto#Hfoe? zL({l@@pR+moB(G`V6lmi%$+kR@>mtqm>fQJKHie0!zN|N)!=nGq~G(ViGj!HJN5U>taVs%e4@U$lg7IHukHYn`8?MlR29S8AE;2TCH=nc zp1AZAHycRZQsK%JPfD@2Bx<+|$ho^{J=JV%mh61VDD+TvK}>dDrj}1H$4!GtBg@p~ zy2LiS3qRY-&_A}^Y4g`&iaxPQa>0(`>rv8Pap&D%LegCs+{=m=5^A(%pT*Mh?>)GG z^#*m92SUy1T*Th~KHdI|QTpAcH|uq|3ydhIuOG>RmwxvQti9<-kw%*lPbK&B)Xi?n zzB*ViQp=vH;s*dm2MSv6D{>4tty0O{!Y6R2PB^0Kn%1q;^@{fM4NtbWb%SPtQJB|m zFXhvJFv*{CZuD|2lhsXJmKdgKU=^P$UKQPvGFeRrN4I4(q z+|ptZM|8Gm?`n=vnmgRItcV0l>&))0^LC^|w{1?^yLeL`?(U|B0)u78N4`U!$eJBA zu_8JuTz5h|bkFl(ufhGegL~Xnory6uOrIj0>VK0&_wW2)wAxuQ TG5>p{`&-+;`}nVT0f7Gi)@Mw5 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/break-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/break-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..9f2efe6fac5b7006c903115b0c77cd3e6fa46d31 GIT binary patch literal 2820 zcmajh_dgU40|)T4A{{eyA)da^@6YS`e17=+^7#Ya#(GrL$^c3L6CloM)if}kq0gQk0GKcY0PX<*00)#a z(o-1et*L0?B|OLutTC8-P{A6MLhg{eXdf|01yBG1^`fui*uDcmwfzYe56SM znAhv$&PTWto&1PXiF?Yw?WP2G?Q~TCEcxl0bI*wv7R}jZuQ+ztCGJDpSYsMskcsGS_3!uA+ValhgP!zkuok<%`Zub!!2!jaaALV zX(%d_wt%D8sA2Nk6xKbKNkHuJbx8e3n)?Wz=39}N!6kTg)Pv0@^ZJh!xDdr=gf zC9dP&h_KMm-!T7lKs ziZOSndOzE@WUk|Mc6eN#hh^Yo&Ac${GWf|x7g1Q)AAE6*KTBkIJCT|0c}KnmqDMAy zJ3jGejo^qQm4;N7D!+D*tx2>4!MmfevCwEiO{9A1P(!oOI4aw0!htSLvBly*yW4#5 zUh(ayfMOc3{4vU9(+vl6wYI4e8C)@fiFP~Ju8(w!t4v8HKp1WzU(W*%%_x`*N)2t{ zffbSCrX|8!Lak4Si`VI}%->BUuiS6l%V*@Xvs#Qw>ArY>chgAl!YcgiL}@pK8WKQQ z-#C_;cft%zO^aaeK&4srI`JTKny%)hHJB8TyVrSL>?yED<~V0Q0wFShE39u<=q4i+eR%K>4EkG^o;T4)T==#I~Iazm*(~X+Kq@GKQ(VOU;rGYln1Tjl!dDEe{J!2A~-#TDiVf zjv0i`CiUGU<@j~PMpA4pQFquCS1!Y}l8oM$C2RO$Gy3Jd3McQ^FO0jQPOP3SA=})4 zE$HeI-LgtXQG^KQ=J!ENL{5?2Fz=SR1v$6sNSb&WsH7|`paY&9+wO~f!_e3l`}3zt z{8g3!cKm97-Y=KmZ(&oi64BJ!Td4qa2;!TgONa%wf_}cm)1PuuGh;UgzfMp6QXRMa zQfkaz=-{S(5N%*HET}FfiP?Zb4I?P-9!3Snx>zb;6D9t_R&=LTDF+S4dedI zWH4G(9|&g5RyvtZ5MJCZ)-COJ$b1Z+;aOEBV>H_*tW%Nke$TCkejyXnqmCYDt$`L) zX+t`9aw(^e6=lPmn+BsIrl98=U21Vvox)F~R3nmf^rN{JxjAS^wdeqrvK@*FRPUkNn|YSOe}x?K!++_d1t>e)8>NXh5vm)(qhgGT)79V zcO69e5qitzu!%a@V~Ygbyc{_t-S@)-2aFkk{-IRDRON);0Wivl1IE>pz}7 zlQ?RKo<_{3S-Cs8)4+J)Swypqtjz~k8(+{>HE3>KZwjgu19`nlKF%noP7dDG*CRc$ zbe9Jc5>Xv!FUahK_97Q~+zDDEv@Ey9#Wx6-E<(_my;E&p6}+%atO0NB=1uwDGaeIw z0VONtl9b+xD!Y%*gtl{)^HW3cKG#l%o_pYh4+^u#baan}k|5luS_WEQp1Y~;XGBAS zz5;K|#&wqU!Q9BAug0;xk+KW%zIujnl*9?qqMNloUtvU8b8 z_Jn0oT1&J<;5OWrTdM&a%nVm`-a_jw0f&%($7e-H3(e`TSOP@QuzCrPE!|#S{`LNfjZ-ZYp;8LuJLS+@TmR_MvQCRH+;}k#ejx+fY|e-@75ZB)*w& z;}0c+mg?x@c?r?G!Z|+qxAG{4!TOR$ z4qk1z=8)ZyAFf1UCnQ%vkwjSYRnd!Uq7pmIw(=OI`+`cZQxb>N`2+tA3M-Ugfm`})A28}IC{ zD8-l!b_be_QpIJz;h8&nH74!1?pWC{${xCC3wVp_^m)v;w}<1A2`P8wl+!eJ-#{04o;SU2%hMWx^w11GTBBi(x7)&SL) zq1eaSqSOMe#8sFZ;t_uTMm_mZtka-Mp|UK&%j8_cR=Hra{nOGH?46HcQ$S&1B}{EG z-R4W^@NUvSp9@pAJ}0OJ&+$g?b7vbGS#5+9u8X!5QHP)lK^6!!2 OZ;k$L!C&hF0RI7%Ygm5( literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/break-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/break-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..33b07f2ec3a85320f6227c3935e751223ed55c13 GIT binary patch literal 2823 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 O|J3l$=KtX?0Pr7px?GI_ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/call_to_variable-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/call_to_variable-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b7b06e7039d622d16a4253543f97a98af6e26b2b GIT binary patch literal 2638 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 bGyIGH$M&qvSXlr4F#IjzFDZYm5dioPH0DuSp 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 b)4%wCWDf>qJN55}>2GcSa`vw@0s#L3V_g9g literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/comment-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/comment-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..69aa742a296645ca6a57a8270a6cfb3e9f3f504d GIT binary patch literal 1270 zcma*neK^wz00;2jhP9GCD0Cz1LS)O!Otd90U1=1fUGo0AEi=QmG)c#!*AK)!PcD*Yt zmh>If4~VRDxzf7zFnJy+8+xVcG>P7zM&G~>rP&VjK*%+{l@8qy7Rj`$cQ$J1=Kz1p zV{v|`qy4&Ay740P+`dhUy5Yi_FE1d0HLo#8#LFOfxbS8w2kpJ2$ND>KW`35d>coKt zOD65oQsBE2$X>+73y+0!zV_ve#&3^M2cy}yJi6R}`f+T*r~2#fak%F zrqnzN%Q2WrJC}ixDRV@71Wobh<3F0g9KMlf&DeO_Wl;e~$GpLNNil}Q*77N^iMbDk zdtXH$-foq>*rEg?p?9?`sp5fQS?h+|$=gRk%&eCYP07>kS|{s1_~$sUN2wsaHmW{j zoXbmNmX#}qdQ?jU>s@`h_)P_F^4Wk;os72-6zCVcr?~92Nz(g^cxWZ10wouq5_L6O zu>95HM_z*z{^vKWWsl#LtYxViwAIb|q#1=t-l#%Xvo?do6|DB9up3OQEV>MInmyW1 zg|PW|a-ogw^`!*9JyItRbSA4C*0MYvXLz=w+ei2vR%5OQq-gG8G}^#AxH^?>h_~Ew z9{Y=CgGRrzqvIPZW>m+g_ha@ zssY0}y6HK3LaisQmn$5>#`DQCvcD;xZcyi_U3|^-m{h;`6KKBni_jsnQcImjh z@;KVB_%=PP8RnXf^L(dvmroCc%h17jP;Ci<#I{TX>|n|k_MX|E5-r;edl z3M$&Q+q$zpR&KA3gmm<%o~KEw+9s${n>aaXQDgubOv*3%bktM@JmN0JxjXJd+-4BFt)##i;-sEjThtEI$f?zSjb&EO$~Xk%O{{MO^^^MOd)YMlPwyd z^4ZRb9q7?K#jN>*#eS6I5(j>3xvX{Tm!q5r7ppJw6AC`T6$G|d`frf7P5L*9ps({k Vcp|u}K)zl<+x6Jq%x&EO;2-EQNy7jD literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/comment-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/comment-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..44cbee76c1f6ec8bc73e9e32bf11fb05b5a2ac34 GIT binary patch literal 1268 zcmWIWW@fQxU}E57=udeT^0wbT-G_yN!Gf28L79PpAvr%cH#M(BH!&wiuQ)#^KDDAC zzo;ZWu_!qsvn*9Ft2jT8lZBNbmVu#xfx)(;Bi;CqapA&C=eAk%&N-Twsk&dTwKqu0 zPX2oFUNIy2jkj8k-+58{JoU(roEh~}hZ1Zrem!KE$G&w#NQv*%bvu8g+?<{|iKBe8 zTWa1O-n`$Q*SjsQUSLbxc5$u48McyCt(Uw_=d<8ngVo$28$ksDtx{qW;F z_cHtQGFAnTd%~T+Jj+taDtLJGWu!=Cefg|4pa0~ax;p7@@C3fdmZ^KxAM$zr%|BUb z{*GJdCG6Kk|4D&9D?WX0cAo2FJSD=B%eO&x7E_JV!vixVs;}g$r>e-e zxYg~oGTq9X7|eBX>PDWkjX&BpGQStww|>*Y8QH-)k?IwuKd#T#Y>RbvuU@%*SA3oF zgPe-Sq8H6Vc}p+&o}95){r-0+4qHy{>#L^Ovc^P7xs)B`6>@&fY2Uxex z*OB?2Wm(7QaOYV2!5{e(nGcAtUVN|jeEt5{1@F4&8*=`?e=(8w_{q-5LqYeWEN$Y_ z%ES6IlDAZLzr1u}+onmcwr)DTE9CoBXX|?PDee^pb2fk0kh;<8o9U^s@j>qA>j&eW z|9bdDYL(q*)n%JfuK!To`99l^u`&Eh*PAK#p8fcI=Tf5el)t`HFI;(7a8G`-llV{L zz4{;jUoy$M2EI8)+;N~$P zD=#IR{u6S#^2iS5}_aQ@blkCrz0KP^OwClyf?v2 z+GN!fzFKupF;Sgb&PO$Gw!bMjn=MM zua-27!a?zCGp8hj(cC#cFpsCtx{)O{GD@s+WM7(6W`12myXRim98P@pEw~V z>P{%@@m+i;SBrG;{MB>{;XJ?YO)_WMa_tSXxPO1KW%rtwJh3r)c@u{Lk3*0Cy{Xgx zZMfujXFF?8bkVQ3r7Z07!ILsJ&w2Og!2jKkyk-P=GcwsT<1UVXB@!4kFoGx|3a0>X TRyL4QMj#9X(!Id4je!9GsKQI6 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/comment-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/comment-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1424b07d8d471a90656755c2cd6c363881e9e27d GIT binary patch literal 1268 zcmWIWW@fQxU}E57=udeTlKXbHoev8Gg9R@GgE9jHLvns@ZfahMZemW3UU7a-d}>8O zeo;w$Vo`ENW?8CUR&jnFCkrb>ECWLW1A}cxN4oJJvsM~xj8*`5=Z%F zx755nym`MpuXkHqy}*{X?c!R8Gi)WPTBk2Q&A+}pF4oX;rpp1d#D_ntFJEcaJm(>s zAbMWV;#T(8j>0tEklA-aA07O$EK6+3w7ZvHee8aDef@C*kIM;dcczE4L~eY&^uv$y z+{^6G%UBgW?g@AP@+?awtKi|$mysfo_2skHeEySv>guGs!4vo*Tc++&f5_+gH~(a% z`BS!rw>C`5ze6}9E-q@hc=TKIC8r(Xt%~xCKK(ROmRQxXE>63$Oz4s39=n{?jE{u) zeP17G`=PtLV`k`;matzF{U-(btoZb~*?F#y@stQhF5d>(Sxhxb4-d?gsJ@b~o~k0> z;#RlU%5*DlVldamsT+CDHvVYa$oyVx-}+4pXJiNKM5O~oChN59yp`7wyeCcH`uQT4jU7`fJQ5g8vUj;j zifZJHw-*Y1XwT2M<5F>YbJTwS=jtlejLf&o>z6ZjUyrm~5FPSO zZt2l0D`y+zzH+jBv|e5^j9=+d{5_fJZvQI75r5YJ^uGY_CtjVsY4D|0``XI{}bq3zUi0H|5RSb*)QxC zEl<&pZvKCt?Xtbxl1=HuUENtoA$~pJPlvm1T2xjpn(xY5m7h= Uc(byBlrjQgAdv0_mTe3S02$I!82|tP literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/complex_imports/import_aliases/test.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/complex_imports/import_aliases/test.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7358784481d91dca77d0e75111c7f02b227c9b5e GIT binary patch literal 2482 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/conditional-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/conditional-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b421fef9f690496c08bfe14367fb4ea51beed5f4 GIT binary patch literal 2565 zcma*pe_=E0nF*PI>ygR{}|nt2gr1 zNw00YaGLwBNoH3$12mm-g-DXe?ty58)Xc(>>)@6HqzXNPhF`~R^9}Lomr~K7*6RGW zdfGt0JOl+@ooGIB#>!10o$c9&bEg8a4zh4n=-xdA8v}=TLL`@RZ*4?2cv*T({1gxD zToB+{0OiwWY}?#(Mv3vq3dd70Qp6K(hr%x!bW=7dmt(eM3j-o)9&YI+&=VytlFkqh z-Q{V-+%~Ho(-eK|$HA-XuA(YMMOK{~9HHPgdq`BX#Z5ZBcXm{SUhQ~Ku}qS^YmyLy zn3!xkUsn}F$XP!bNLrUT!yqeONq;5C>Y3PIbmSYo@fhRTNh$8hd#$h%{rx2wxL#)9 z4f+Y@&?C}uAhiLsAh)SX>!>zt{M_-L&An$a{6Y}%ymTE!%Wu%9rCvl9A8xrTb*^aW zq5yJ?x3hBLl(i7O-$n5`C>EPYdiY{D`C1&zkeR=k}8MZ1!;Nt0q({WvUxsZ@2fgE{={9%ef@9w6R zlt^t9NYs6Jkg9!`uq+WQ@lSE%oV`+hn#FCj{#D`QT8}2#v{{PmgSneOYuM-A_*_pD z-r4R$a)Z`5G&e=zNVD}}-@s#=`u-Nl7Tc%??f97s(zzH6PJ`{?`&n|zt=>5H4p~pa zgdUT|n_#6V|#1f1$y)#RDQ$(Dnh>``SKr}=giCnJ;W`Q!PK>o-Zg&c~mI z>UZS!(ZYn~dM%R@e|gKbwDRJc!CoX*w#oJ9z19$CmFYhw(~Z_Vyxz{dYCp@5m%`PiFXgoAN3LcN|vQ_r!?O9gOeMjwiWv1=L=H7aRDxS zV1%bh(%mW5I8Y$D>Bpr$c;5DWVTK1#bx6>TE@}^lR-$yS}w=7XwEwU-#3*ZT8e#=ut2rXr#z?pp=-zENH#qI_#JJYH6F*$3f zCR%-F`X>-iZ4ky>F!|ijpp0%~*0AlG=&BRmM&C}NE>OVPqwzH<|AIwX#y1h+6@V@g zEi9fs0eW}?Jl=LuKNAkK4DX;Q6%w+8ync`D=!|u~oCInSKlfksOZR9oOuZGtB<_nn zpJHY@&csD}c5+~Nqppv;1oD9v?Y0WtR;-i_!to1m%{4s1v+lnCia@IZKD1}DV&zwJ z(QU461~sPEiB&NwC@e@Z?ZM1D>kOAw6wbiUXnVb!u_mu}hnH}&e$gVqcH`asNpSv# z1M3PiMgzrHv!)X-sN_3$R+)OnW6OHM)lhfo;AqE0KS5BrPe+Y&QT>Bf^BFMCWC2Fh z%Q{Uu(bq@N88V7L075p#=S=u+Ol z^(Gd0RQ%g@U?lwYs{7jQTlkd=sWftDFK(vfwStXXnQ!R)(r)r9Mm|5sv)dei}wI6D% zJzwg}#i8f|z1IpPGDK*;i^6`1KI*A|Yf9)65z-8GqI_*~989*xodaGRmYTun^ym2F5SXyXf=d+WA<=AV0sp zPL&ypWgxLY*O)pzWN(huo73u8*bZw1h8z_g`}Y9l|O&acIgLbWR~>-WXi z7r)hHuH;$j5(8~U^TP~YO?esL@ikqbXHsj?UU^j>FNU}iTXpa8ykG!`EhSL;>k;eV znXtQO$h*wO?fAq645$3s5oG<2u)hxm1Ft>Hf^fL^C_I|o{%hX!`w#g*x$71!=K{0V z%LEfl%y%1>F8`t&RX+7w{M$&!8v};wyKcLASJ>R!M61SSM`mTqtQ~G@c^Z7#>&+QG zHkGj~ix^c~8GiE1N2oDn-4#hO>!Ij)@eFG%KlWbs$?7=WyMAE9`_hHg$e=L$($rdZ z*603Lxq)$CoF^G}p#hoT#`Srql*Da@VRyKpa)Y_Fn2qW8$g9YUT?3m5RL5p zT#eXbdgv7}x8%Xf)s7baSAa`Yl0FPbqC)z=ZT6dI|4kV1-}yhKrVk^#^Y0z_yT-pa K=Qs8Mfd2rLRnS%d literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/conditional-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/conditional-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..53fac4b2bec8b5959754d45ec15156d7dcd42f7b GIT binary patch literal 2566 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 L?`Hkg9suwk&a&I% literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/conditional-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/conditional-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e3e2adef65eed4683bfafb1eb8bac9514f0afe70 GIT binary patch literal 2565 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 Q?<~KI`MvjkV-EoM4>VK7mH+?% literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/continue-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/continue-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c34c7794e8002161454052f111827e83f6816cf6 GIT binary patch literal 2823 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/continue-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/continue-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fe086dd31fad0ae3f3a4e0e6147ca37f5c468513 GIT binary patch literal 2827 zcma*p_dgU40|)T4DLX4WGn~Cws3h~uLgUPE$%!-b<+#eoJlT7lJ&wqpWyD>^afq|G zLkXAp^nHGRUa#l#`Qh`+=MQ+B8&go~0LTH10Hn*hbq;}=#_<{ea0>(ghyVZpXQ&s< z!^_WA+R@Wf#uw@db`A7~`oO@BKF;nQ{;o0*U#J%yB^BTq000L7w49&88fKbO z(?W8Y+B9TMxuuZ2djp0}0Gg0LR>;&cVO?2yfIi8SWq&!poPtP`*#elnJorlc5nOgN zMVR#@v%OXzacS#6YfYrz5Bw2$U{&fC zx1^`o)hrnfbwV5NZBCu+;675bh{>KeDofM3s=T@6?mc8~geg2(cxxK?n0+Ww!(9xlaE1bV*>< z=M%S|Tt+8GDzJOsY)fiWtuI24gCf z4E`X|O8Duyd_WN*c-7k`p@#R~=DVGl!RIl?E_)P;@g~Q+=Fk`;n$*%*Or-q;htPL@ zj?Tm%<)dErrac$4%#&z+nek5#&t6sA6{l(C+a2sHSm_1ElP%&j@h4)k-aZ5lk70#! zW%A-D?3Gnf!<_ht{4w7JG@B6HT8A7noC4!(n%11-(<|(k$5*@ zb5hiTrkKjOZbON1`o}`a&4)~zgnw4n>FRmi0THVq20YQYmIv$6yXAkt@Dza=k11L{ZmIZLr=D?IGEV!4>p++@God!(9GO12*jJxOJEY||Si zv3VCdrkc7)?8|TSv4+s_D$+Mhyv0lm+_&6A2r1w*|J7KB(r46BUcz?*o?N#T_D?8Y z+*AZ(Ds^M1&_?T`T6K3!tEy!v%=BTO*wo-Zn5%Ubw?53wG_9@j&o^DA>j54FRkH$i zU3bWij_bB*kT>1rZJ5^l-i*YCSWhXsoi><-wNe7o`?~B+S3V^Z+UZ}T=i>Glug|I><}3+0d6m{!TEh%%K6<1*dQd*f;&Tk zu%IxWl?G}L+0HC1wLpH;0dW;|);H|BlImWxzhz^uxA zh=0Y4FUZJG^cr<`Ba%-qm;kiF%q3-dqUf0)~eLUUj{m%Az8f~+-2EjHzT;y#euHneB^Q4M3 z8>p9U!Bum#-k5i39Y6ZpK-xp3$>K+z)<79xw^ik2;ky|{mt>y}NxI+gx~OLY0e(50 z;SJZOu$HJFMn4X>-rpGXPrFS4n^V!!ui%96RX{+biU-{1FDCZhyZ)MyE$0MweE(A7 z;OEDAk%l?w`Mz@UVrU;CIx>+&8{XWJnM8oi_b#+2my|B*axg#~-2Lg_be0Eglo^!> zNv)Bd&L&07lr%8QLu@5I(=H3+>ysx-<@TgtCQJU4y)s3rpAtQgcuIy zh=`>!Itv)Dhb2~9h?0N)CD;ptKfIDP&RnKSjF2t9>$dztkted=Ac!%vS&AMZ zSuY#dkt4xCIm9dikFy%=fe^S49ybZ5A0qVYh!(%p?$epK(?1cnH|&8L@YUhYHpPu7 zN~#DG`GwbqaXh}(-oKPtttlT^hlZ4J-qAV^4NBn;hm7}Mt`2>7GEdr9q|e_zPHy3Pu*FPrC z-jXdJpp)N&bS^^XhiNJDADsIy@vZS{iw>CW)*9Ridqd1n3Sjk5UXt-4`!xypKvQm|q?s1TW8| z%;dQ)#&nKNn z=!8ze@lxZ3n&ac(szCc07TvLJz6a}71!<*%ymdlaQ_xXU|Y?V zq0Jg!HM?L?;*kN41Po+>FvP#8T@fg@e)v7cqcx!*&dMUWAwv0J{b7X3t1DLBt0e!j z`*Q_lC1AV0nj6DJaVhGH?hLV&R%|meqn0`oUf2+>0~Rc^o-5dOiw?Jm-%9lIkw8sZ zPQ+#-&pmn>{2Pw?6hJZ(RB)%3wp-RK=l0_;b7L}c9g6>r)W1&sZ{TGA&i_MJb7Ly% Rf4^jZYx#GJ{*o5}_z!RSWW4|Y literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/continue-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/continue-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..03b7d5b7dab2ee3239b52a75150933ccebfd554e GIT binary patch literal 2825 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 Q3;f#$f4Ar_cmaU_02SL+MgRZ+ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/contract-0.6.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/contract-0.6.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b3397b955c8f70443664aa59e5ada2c5328ea3d5 GIT binary patch literal 2572 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 P&hMK2-qPRX0|5R54o}o- literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/contract-0.6.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/contract-0.6.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5fc388cc653b31339a7b11492fe03fe09a9af26d GIT binary patch literal 2573 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.4.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/custom_error-0.4.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..15f1623ccd9b3f7ec9381099237fd67ffb53d85d GIT binary patch literal 551 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/dowhile-0.4.5.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/dowhile-0.4.5.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..273da3edb33130339af6d7ed302db9f293aa60e5 GIT binary patch literal 1770 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/emit-0.5.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/emit-0.5.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c2847ecbc8e5b17520cdabdd071dc94d0f81df13 GIT binary patch literal 2100 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 Q$?((WKXdTsF93l50JbC96951J literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/emit-0.5.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/emit-0.5.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..511c40b94569834f56bf7b225539c643e2d4d699 GIT binary patch literal 2098 zcmai$S3DaE1H~h@Hi=D*prx%9O5L`I-A1c4G_4i0wTTsb?{QHsSB=z&BDh6r2elJo z)^1g8L4$H{QS&ck^*59jTFkOquQngAdG3`lvojsnR@M5M3+09;T2;3@zB zaPV-!$}7TDV2UtbPj?%KKrc@ptc{(|3uhO92bim`Cx)Gg8DIqfL;?Wt#6&0MQ)Tbs z@sUO~5Uvm7BGmznOEnSF5S#IB=T{OVevYMl*$AUK^d7nALVdbc+9OuXNrXF(hx5F51p&6B-A4YH#>HR0gq-{K9V#kz!R zLfY;jxVD(TX>2d?2Dp(nQ(pknzw%FXdDETGRU|U}?S&8HwBgEij1BKowGce~^ar>$-l(b}X#+iafrK;txs-5dOnp47q86c@qS@ z6p%~WmI*TpFAQV6`>Bkq*23SQLS9Y=j4F#gOcN-gj1U2yGW40W4N!Qou#G7pIgv^JJr?bZ&I57{FndW_Q?=nu4J{1BPal9|caW4)C zPV%xWGe2Ot>932AV|SlB6zOV|(>n})d3ka>_Tuj3S*yj}E^@V}!d-|t``d6fnut}yC0Gr5%V#AiPdx<| zBz_IW(R7H?R3o+%Y_C+q^U8DOdlD!~DGgl)@pBk9Wct$^mki#bpQ{l3)sB%CaO_l25GA)4oY}L5N|*((#V7Edxtgy?jtG*d>$;Th(VXdikDT$3hvX&S zyZwgKPDI4-1k_g&J}`*?KyO6L6V&z!`)|h&zw1C19#Ej0_+1nw{2#Dm@qyjhf$9u^c_II=H8oRj?mDe+{CLJNdw+oy zIoqggw=6>!q2`)|54DSWO&)zO3Xpr6N23rMlZST07Oe#W#0A6RxUUmhFYJ((imqm< z1dDDur?=Nb!O``tPJ~a?5aP+D_gy=~dXH+^IgO7@GH?ZmB}Q1T z&8EY`4HJBdA>G$3_}Umw2o^VPY-sVj=e0e}D_P3Y;c@gK#0TI-uES8qFZfQz!!cv$ zd+VMo77^k5ta%ZYm^&f88x&C?Hr7UuckY>p5Oq%qeX6Udy+M5yH-~P%cwBk!GX2)u z>nYwzZXVFJmhXB_gF0E{&Q*H^cYB`MX-G|t(5UKhFkBs?C2pA%KH4L@T9kNT&1V~t zfs?jkHjhW-86QD2qH;P;a3G~VeU3i*TN(T8SUH`CytA~0)%@2No{T?ZqLyzN?7-MW zqZc5d&l``TT9#5#=**_1-fy(rJ*2Qy_y#Z%#@!@kd>f3vig{%|=Y#kl-h6;DQx!$% zMQ*jy?{QQTD;R0X)6%wz;vS-$LQZm=J@p`*(euv~q@X7T_4#$@^?emk@N9kOSC7a` z`okPhtO;~!vhLVH2?lvj34{~CUHsEl$!PTS6TxRxYu62hQ+oAB*)E`ONnewevw6(^ z&vrp7^#*a5-xSUcdK0Ol63Uccot!DOU7PaU#z3#fON3YTI1;g@05zX06u5f2vBw1) zUMwhS2LBZPTrMv|*b1J1eLG2u*i-kUH|A-6w5H<+_SMlCAms@Q!$G+&w?n^;cQQ3( znTg-h|3$p^IxkOFDItz(V3M7wW&UVSS>{|8s*5yW0BSP+Z<_xC`hOM4@NfKowj&Lg TS^jM@{4(-a4*hxt0Kk6$?dRkK literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/enum-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/enum-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..0535039b05ff06d748905f0bcc42e8e2d0712a56 GIT binary patch literal 996 zcmWIWW@fQxU}E57Sdj88WU`0L2Rmj4hI^b03`z_P45@jgxw-~=7J3GH#rZk$sTBqJ zMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~)%|jmkED_N^O2N_?lT+xa8q+J{4C{DN!l zCEwP+zs|ud!F-pYSH7s!61`~;U;V4T@^Y_gP!aoScZT0?CinK}GgU>!CkkFzpe?gk zl<9VvuSi?L)MZ%_`S+jZHt9^&2Ut+Fa|r%(y=HMdM|uel|rhxsqBy6!mZYF_kV z;iNUj%VsT#NqH)E@{PIB9SPBXmnEIb*(_6Q)lK+UwU#*gre5)U$$j{gEla+`5iMJ# z>WLiDJIVy_F5$Ye^R(-;Yd1{~JoK0&e^;gXdi-*M4xe8P%6v=BGlJ|)Ls`o0(k{uA zz54Bwko8nok~4YfEB&uiR%=wseLve?{X_J~%&jt)uHN`~tMmEP*Ae}x;U0Ln>*f^SyoS4<;>UY~250P5^gh!-=-y*XvF$ui1BX&xZBu%m4l^U$!s{_miWAhPOsQM%WF|z&#nw3;qVU+R~N5PiTScA#`?JF0lTBs0{iB$n`Au_ zF*v;AZPFa&hF0eG`C=0f-ctHgc_rn)DztPOr^v)BQygf8W`a zv?XC0-_*?p;s5kkYVJ2<-?OD^oix*>f=bJ(=JQ2;?K2j#{l3-qujXsNbW+x%?xrCA zN5*f(u7A;9U=huoo|h@2x!>#loE;C$4DSD`I)C`<^zbKUjBf8euTSg^@Hoh^$>PT$ zDbGuGtN!rVf3`ZkvaI|>c9TZVpBH5oGuGdcyY;m-+xMOE+V7Vt9yl&Zcz9GdThNC) z>&rRzU#r+}>qU8p?>G>6+O>E=?fJuMg{z;hw9G%nr6zUV+-&FFix+?NtYb9&vt{OS v&Y*uk4H6Focr!BDGvm&Gz$^#`4U8a)aBd9nW@Q7ZWCX$hAYBK{%M1(v27Jc| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/enum-0.8.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/enum-0.8.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7b9bf9990be4aa605619d97ef3bc0569cf863a12 GIT binary patch literal 997 zcmWIWW@fQxU}E57Sdj88q~}VPlsz*8!#z$01|$TwMb_3q1q9;{2TW)QW=q zqLTQ;qU4OsvQ)jS;`}^L7FLE>28IR(2HTE~bmKq9g$pm8+h)x>=V)H0>VCP_-XJME z`Rm1d#f;=P-fB61=SA)F)FVG~X4Fd^O0d27^^jp6`_>I1CB9SF?fj8)?ZY86e!(^O zl5gwZU*}+!V7|-HD_>MN^X*JUD=H`Fir zlTdH^uypnn_PT(&j}jKQ?(*N_n4M92`9|Gst&?GvUv(XB=7_j&Sl{)y?$Aer^&59; zOF14aJojMZxp$p6JPX&^E@GJa!{^Ip>4#D$Szn0cGtA4KnBEy9yH8bVvpb)`&&d8+ z+qx56SJt#%vkLBB5iD1}x^Bf&&AaN?Z${p~Z`QQ5Bt7TAthGi8-4!!`sjg#t7WePz z`*YRlC{N@GjR%pb2qP; zY>0oQv?t=l42jA>jXEb*#OygW@6+!sy#B1L_jMG*;g8==1}B}U@t(KmPS3+jlN4Ld zJec|5ZR?@jBi3uQxn95Hcm7>^m+z+V$62>u2&|iwsrhmKi6yM>e*O8jDmYyyzHV0g zv>jJt_FXyU;j~tNSqgu)%kPPP|3dv{^QA2>5?DBs;fj*_)>+R)%X>`ie_xs`(R%;q ztCc%Vj_}MnTz2@^C9d_4J}=b~na+QEQ;1@}0%Oz*d84TwdMB><-E>_ocPM3@-IUOM zZ=VFNj1TbGF10?lho{qDVE61WDFwz^7LvzLXtviKJr*1JbyHqP#tgNeug!Y)|KQ%S zv`>42fI9O(pB!N=?>{MBl?QIF$u6%tSlG4jjQ^Ph4<|cJEk7jQB5romxh2h1aI31> zKX$*kGiT<1a2smo9YUZrTTb=U+le038o{o7ce1_0@LU}k1u001FS$-Dpn literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/enum-0.8.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/enum-0.8.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5604850051a5124048aa35a3c9888b7036a072f6 GIT binary patch literal 995 zcmWIWW@fQxU}E57Sdj88WQqD0D_dp;hI^b03`z_P45@jgxw-~=7J3GH#rZk$sTBqJ zMJ4fxMadbNWvO~u#rb)hEUXN%3=9nn47ME|>BfJI3m0BGx6PV&&e6O~)%|jmkED_N^O2N_?lT+xa8q+J{4C{DN!l zCEwP+zs|ud!F-pYSH7s!61`~;U;V4T@^Y_gP!aoScgBN@POOO%*?p=?o89>gen$4s z+SZ-my0WJAnpJT3ieS0&)paYLYTi}9elzm^eY2*eCFwZ_X00_+=&qRgOLZOFv$%gx z-!7i`e@E>0J+XC*FGU1Jw6jco>D(Mxk!9=|c>lu0C3EI^%}ny&Qh4EQFyD43g{=X% zPhB`$^lHwVwpiBgw6wjcH@(aFHDl6Nu939c@LY zx1M;OV?yO?Eizfyujs4o?tJm>Qar0;H`ktuJKyX~rv44^*;@09W&ZPnX+Cz1Vio=aGlZmh^{APEvf< zyBGbwxvhQX+tVzfEDQc>n*6!w-9AmKDtWfTDz*fcy;IWOo-dxcDw$#FThj+u)*o{a z%~O(mZ+-oeXyu=(rYe)z69Th?uD*?w4of!TPumZPtdkju-hBAM&G z{MfGXf6y(BVOhO)h40P>r>uut*B zLB+sZQaA4;xIE*{Y_)2-<~c3>!VBhCU59U**@|Di&@Fm$(bC8~r*a2o`HxCxw=pa_ zsB-9oMbPZoWhFYr?&}LChFdHQI72X585im;=F}fe}Oz&Wr)xtZX2aj6fIwq-%j$nSlWSAg0FL literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/event-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/event-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..8df293c031e537583c90e0860951d30c1a8114a7 GIT binary patch literal 1537 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/for-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/for-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a0f36910fdcf064f6c0be67f618e46b9a425768f GIT binary patch literal 4806 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/for-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/for-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..be8cabc87f0f8246b549e2484521d4d0b03bfcae GIT binary patch literal 4807 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 Z{|B8kAvn1Iyi=1*|9BMu@ISdSKMMc= literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/function-0.7.1.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/function-0.7.1.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d49dc3e3e90e98ab71ea1c181228c0bb3575d512 GIT binary patch literal 4431 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 EKS4xV{{R30 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/function-0.7.1.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/function-0.7.1.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..546cb8f3f1db8c6dff918ee0c2d648435fccddce GIT binary patch literal 4427 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 Yz^0`NK>wcv@_#b=&$a)b3U9; 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 EA7W;K#{d8T literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/if-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/if-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..309ebec222a5b7514657d9149170357e5e90e89f GIT binary patch literal 3355 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 Z^Zy~Et&WHP?+fdnYW%Y;{}2cO_z#pxP%Que literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/if-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/if-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..184f8275329f761eb6c686a436e3231023e3576f GIT binary patch literal 3356 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/if-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/if-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1851aff07a5e4143334373b98690698403c3ea52 GIT binary patch literal 3356 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..2a75f5def68bd63c5761f65adc524fae2907108d GIT binary patch literal 1354 zcmWIWW@fQxU}E57n3?h{B&Kl!cNhx;gM<(RgC_$6LuPJ4eo;w$W?o5ZQCebhYJ7QS zNk)8eNl|HXNqkySer|k8enEUrYFTQIu7RGpo|#^8eolO91z1;NQF2CRS*l)Eaef{r z3oAn`149D?gKbAgy73?5!iAU4ZL{W`b2Kkgb-!F|Z;+Io{Pp6!Vn*^CZ?zo1^P={7 z>X9EgGwP)dCD>m4ddM)3ed~sh65pxocK%4Y&Ny*Nq0QN^Ix#QY%{Q$uzk8Qo?aKxC ziig~1os9L81kEJ9AC+-;|LRLw_4L?*xqENNm7i44YR^tFx)MIyj{oLd^Mhw@+EKEr~2yLOWNCoQwt-^`r99-ew280zIMLZOvTjPgP{eRSA>=y_6(T1EPY$J zvD{9dbKT|7(?0xsk!_mfmg1c_S=g(1b$|N_b+K*y=dym5rB<1}KiCoeR4FdWb*9OI zon}|gsK-wVzk82ou8YBGp640+*ri^FztY?z%ya#WT?Yj;~hC?KhVexZrG5fBXNLI+2Sf zb8=ji)%5C5uCw-X@;q|j=3c+9t(VW-v*@mCu+R~WobMa;gm-58fvq3@etBHw>V1Xv zb4=9j;`IDb{auEcDz#c$U#0%*@#vDDes-sPwwhgCsE^>{S=lUCj_i88t3EN|lANxk z-y7o|4wGQ;2vz@|K;G5vxj5yU-@ut(kj=r&Cv}%E}$RQt;BoL$I0SD>RYRgANr$t z%HlaDX}?N-w%fHz(Mx8RUgozMyFTfuNPM-sF=0>5(dUMnE-AJA-w?JeKB7AI^-I13 z!j6hA#~yaA(_?f$&ES~p%e#8H?XG=EJ%!sIxK*8aTmI^T@^7_lL%fyZAZbzP+oa$|!W3jJDG}Gl^ z>N+K{%&N3q%Qw##(>lbWey}z&LQj2N=mD97)gp!xH{yy`=@N<^6sZQ0Mqw@1b)vSI(vjFMYIEerySFG(({ef#LN zG_&Fpu~2u3>3bd)UA!tZmBY{cO{PzS>#kRczmqpHFP+uC$f4)x`t6U8{hxbzcY|b| z)8n)>d2mvi)ao71M=RbfVR-fb6}R)0 zfG?ZZ=e72X57UWuml5x21XD?wZbgGo0Sb@AR`c# M1L?iM5|e=e0P#?3#{d8T literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..9a4b41040c7a9acf10ab1785959508d6d01ed794 GIT binary patch literal 1354 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 OWV`;`e6ejz0Qe7r`+9}| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/indexaccess-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/indexaccess-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..0f1e4e6be2693355f722ac6b3dc3c00d68bbdb2a GIT binary patch literal 1689 zcma)-dpOez1IK@3lxK(LAT^hq!(4Kidr?b6$u_o_5oUH~7&9~nb0p?AMuj*oJw$Gi zV~2%~yWFBss<}myaLjoL4+rDzod4hFdB5L3KF{}gzW;yl7)h`VAOXk$d469Af%J6P ziWC6IDguBG004BRA1#_frP5d|Lkfdo#0q7QY0+V!HzUZDo76yhB+V#@70Q$WO93PR zhz9^9mm6SqU>08bW~AwY?1Mfg9p0&)oaq9)bVkT(KWTdA_o<|TndMtcwBB7t{%u%~ zFY@(vj|ubGQ$8WWDfhQ$yMB|*{J!p>y!hO->n+QTJ-zV8tSsj<0^=^qPqkP;AP;o|%n3 z6M_v>X;J-A=kIy(PIza=i=3wB)OYNLS1Vr2{ZiW}W_D!NIY=enSuRdxmnxFAW?gte zW(rO9wPimg$br ziUHSpG?2JEF_qM}(DB{D`(CNM$}S~R>3~Vm=Y8XGJx0NA&nrJI{`myatmrxBT0Ze$ zQ=qB|&i;e@Yw^#1Qdyb8rg47VuOBB!RzIRXT&%W|$WbP}(4dbxO9>nVE?Z`Zl$PS8 znMY03qk|+hWL$1igKl%??J$o{qU`0HZ~dd&xRIClu6_Xu*3kQVgmq3KwkC_?1|i2)?VAVOzOa6r?Dwi#MIWwOu;&u-o(cs%pu1EzG_wLG zqG!>U(<$~4G1WM@csq;k<*_9o~E?SD^>nHLBOPYl{uX z*0G~T)a8qYmSu6g#UtVSuC+k8`Mk7bFXMEC7r?R3Nx*&m;=Z2M8dK)>PBP?4D&$c_ z&px!0aErcrNJ?b9bUTY#_`44dV`}f|JYOgWCfpi#3QQ&}jnphWU${3@7OtxXmR!0* zN_^d32eD3n^;q0pnaayG6)h-Kje8R5nbS+eI3lx3|m^D3p_5u58h_K=7 zltQw~-Ie6gk>#e#nN(SByn=dcB?#`lXq(MSjx|nEKvovb<*eELpKCGv)%YVUkL?bI;&UvDgZ&uJ^+d zyTa0hi*Uz*2BCKfiUP)N*&7BoOM|Yw!CZfq6*3fw!?x%V7p7hDEpJMp+@=-v>}{wT zE@Jt!t3Wny*@7&ZceR84e8XC_o!Lxuy)iVkzBc9RskwzB-I#xtcwsA{yc}0z@`tHo z8eZ6mo(}Y91gwVGrxcD^i66~O9u(%Gn$^RH;7Q<5<06xyo?Wa8#8MlrVEO~=@AM1= z#yfG`u095VdP^fre_iw$&@+2Z;Wl_?mnZ3CqTS^GCZam}oo(Bw-`@zkTsd8UH38 Y^bh_|d*Crr(*N8+-|F^_M*pt=0>eBMJ^%m! literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/indexaccess-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/indexaccess-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c4d10cccf9c4d5059edb7c204edb7f265526b52c GIT binary patch literal 1687 zcma)-c{tMz0LOo0=1A{mB3C3#rfKnp968_AhTJK+vN>i+PlXmQ0h(u|j&4W3Th=egA)-=ly>F_&nd|`Tqa$z)FMd04d-HfQg&&nN88L z70Up?&Rqat2mnA-EDoO-8Wx79P*9;nq6vjW48|wMk;oT;xC1-HVME(uN$TQty1VA2Y6JiVZ1gY?f@N#=zo&EwKc1Hz4hd>y?E zBc_9~y@S&99=q@XgtIPpL`78IH2X|Fyg|}5%0>-v!#N@5p#vq~u8k8W4Pmbr;4KpI z=Lg}*TY%O}rEw2Io}!^Md|BDsbFObr#b5H)yzMT0X3i<~jtdX&$-|9)Jtrr%nZ{L% zAGiFP)PQrQ(^Ok@D~`cQThyiOgQkuNK=R zkF(<8wPEG6$}tPvm3)~hH=on8qKT4W_x353v=S|?8-e<0?QD$*?tIMsWJh5^d%RkF6aSBpc8 zAi28{>|ar4IXT!dMALg-p_YP9Z{VS`u~ty|wbP6dfz8S3ho-D643!4?H#p~dh0UL8 zT5ggpU;G)B8ejX3=o&cEX1nqX?Khky?bjAX7dM}0BF@d8SyC>y+L1UoqIp!)WcJ<( zD#^LTvkE3ydYijLI_c8^R95|Z^5pgcESmPgIO4|a$JJj@Gk+u;yHR8cu9QdFF!4>~ z_#ri8D|X|@878UcD*D@R#9Q%ze%_Ok{PO7JgOBu9h3OOIBmFz)!@W5<_xT(ZE-isE zAhvegjs|sx*fBbIp|u^NLR{p%I%{YF($IkxIiVX=r8P*i7DVtZ{UQ9!oC9!Jv}ro2 z%@>qeYSx%DzbLWqh%9KGgpdb0}VV?y{16jD0CRlMT8nZWdyk zf2z3mvT*}1PewVt5AN&K^y&WK%6xZgC z3zaPO?gpQL@y|CcFE=~wdP+C7TFye=`2@0gJa*9)mJT+7xqH}Qp`zwo7jvs~L{v{{ z=Mm6h(Edgx%%ZqksFuu5o)8o0^hE~m9whn*dWYD@Ck zEEt91IrlSPm2Q{nHa=DO=4JYN>^2B?(-?wKwczutFlHa@E5My-(Jt{#}0qYyS;) literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/indexaccess-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/indexaccess-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..baca125cfd10238c3f87725be9f292e0fc993a9b GIT binary patch literal 1683 zcma)-X*Ao30>%G9Y?Vk2H4S2)gc3?e`>avxlbRBt)wD=S3_@sZ)scjTsHaLTwYJ5Z zr&Ud@MeRlyt*x3^GD^x2BgJWnXoqJy^L@^ldq4cnJ?DP^`Cw(`oB$aB3KWN};j!}DvYBGTXo!H_ZDP}`2xOBW|Fbw` z_)0Lge_WQ`=@hO>cGd5j)mVB^zdmxDT(?&*=r-r}k$XdIh}`n++{MUcB#gJI#@Q2X zG?P>Q4`@#wUG$mDQ$e~yyAXoKA^yFpjPf>j?@JOhyBBfZH%?`uJ!S@Mz!fiynlXc% zr1A2VXIV;bU9}d6EzUiZS)?6N&s(WQ+9YZ1`ly>OVbNC*B3R($;gF@K`T5l7vR`xT zf+06xT~E1P(gMEM3wVo6u+lO(sSSQdOy}(@@j?}W?m6ykW}dlAi0beeB5PI8F}nL} z)+zVP)eWQ*2Q!x(0;+fe&;=98wv;htiwa2h6|UWb#1qy4c;u~dO2_)`L(oi0`t-g_ zxngL`-8T&3MDPwfFirV+NBV;xEY9Fle!^#i-L8=RNaZA8X@qB5XVmq9Oq|JaAt|aiFLWp+^h^{$H2Fu+K zp6q#d*5+=KVZUK!Hgpz`8TmazY12g(==pI>!jFxb!SA#ilS8-SY1C51TD6KaWzhzG zF(~y|^SZFk9#ZXGnNA+-dUQONUljWu;w~kAV>O_M4SyV<B?uDr8zet;{Hbh zjFUfZYVus0JzU&Fl*J&m?=;VS=)UdWnWA53wbXm*O&&RQ@$LHS4R6>jkXva1!}Dm! z%?YzB-BCstsf8pEd^X)u@!wVnMhkVX3IEMC;3%K}>a(1SoZ!Iyk$nBo2u?4%oiS6? zlc6?mE*kFLyeLYX?)a#KXEE<6iKprkgvkMxbW0v|%*sh{TGhDEHaXt>rfFeMjVCYd z=}x^!v8~KVp_;H}G=D+CLd-#H^<9PAgPZwsY-gAUCpoTZ=4#=1prCH$rCol%_;J?R z7PQRTA(a+h?DyVu_YqI8rO_5KQ|aqaz0TP0=Pb^_ihiEMu(viWR&j7NQ4I7XMjVu|AGDY?|vS-HS zLx`NmnR%TsKnb1RsOo0J0G&$kleE{XbEm2IetGiNjBa>(8GCae&Ik1FS|sk3g^3XneQ?raG6nBXU&;k$gwG%h>Qn|q?$;<0ICg`=mi5O&;W zg2iFU%LI@_=W5Dc8lP{+H$dGR7@Pp@Qj`?cIE^8@O{)7*S&3!E*%~UIgP>QOQnawTQ6zO_XmE~Dhi>3m=u51SF7bJ2I42-!rV7j4qcP=`PycA@7(%KKdVN4 z!bLQH>aFb@nwkyWE&0KySh}SMHY-gHi>2a@dQuahZ7h2AkUf874o^ao8%LY_j~5t+$dAPq|sVk^{LSP9bv)1GzM~X*yQtG z>%W4$9}tEwW=`xf#pPp8a|nt9G-FU_yowM#RGv@;)omlCGg^4`dX)-SCYZUs?WOK3 zHf9QTi{R7tty3_IGQ8yOb-MIh60A>4xXkX@skv~cGEiLwq3WTMk9p7)G2-;Qv)R

C#I(E2s*nxZV;yc0kPgS$L%*QS*Fv zBux0+Z)ZWpZ3?565U&bATIxEZnp)hkY3%Dat@;_Ng9ZtH#M(<%X5MP5-`3l<#~w=% zpX;-fUtnnKq{vMR5Pc&|B=nFB^dfRxEuzc1C1t8R$%pJkfR=~cxkc}p#e<18dosoC&-G~KrD+s0 z`~26HH(G&Sl)^DVSzo_*SMA@;>f@WMr6}g!2=PXdkhgJ?xRC;l@V9&PYV|~42vva&qR1W4W}xtY;yjxEv_%DocqEj1Ce%2TJ-!*OpCQ?+4$_{ zas~^x?{Os7Q_L64*iHtJqWA_9D)wT8$95_>%ahI?#u6kwnf;P+$6^6%+E*U8sl6eO;8{4gGS$EBd zJ+KpBkmUw;#2{GtdA)mPA#2aCw{|hcw>Sq9X8uYcOya~Y)wTSIwgqXTB|_4Q&nIja zy*eFDTX1|2S_gqTtyVdX(|j6mQywZ=d_<*459BOPpada26c9q*S;%yGoRaiULbrPa zG0|gJ=SLfI^jHa~_0hyG(ClZBE}%`Ls(_@a$G7&~s`h-)Js__5t~~bb0~yNUSn3B zp8rFJUOAmWSn=+Q*AjYR@60P zvWOZ#@P-e=g`@3V=C8-l(gFWcR3It7efgiQlnL^L*F-B?Pz^cI3!;AJkHwVztPqyL zrK?l?kUvcxfYqh4;6&fFy)5CH0m(B2xI6!Fb>UI5`X*SY$vS4@-JG5XabarZa>|1o zc4v*87Nbi`6Eq|{GqtT8wx=90%uD5m_w^h%!1=-QF64HTjp6II0S#maf&YS0IG#ct z0$nHZP`x7GOnT4dNU2KhWc!QId3wnp%Su?!K0T31om6>P3B6t3&V^r;Wq_z^`Gz6f zcth7cRP1^UJd^Lh1)doeGi=OeEwpBEL7xme7mhh;gKa)z+|ln^2BBikSHl;U{;@=f z-b8as4_{CtmdmZGtdA__-YAoNkg~vvf)#y{V%Zv{4s4rsT~pt0Y>fy;bCXUbo5;7u z-=D;H9l%YKRceE?WszF{A<}Y|4**4A2o|YDl(G!ti_95>Ru~>_M7;&gXlfprKD}0- zX&}xp)R%~m$VUnpTgr_TL7`H4Cxy`N5h<1|0gvc|>&#C8bLOkuH-^;Eed4I=4nBB} z?+V?RXbBgJ?N82d?vZ0zmSL&{Rss`aEE9EcSV5l9T14)Z`|Df_dJt&)}c$X#iQn$Tr6YO{B3FTI8iJ9@5+-B zLlm(&xbN#^E(*Oz)7{oRrzY0zB>I8Uo1_JE_KqKlbAe~juIXzgNi%5+qXP%&-ZDom zV^0GF9O;+2=rY4l3#G0)6XnVtOXmAaMHNX7E&B@$(pjM=(jLG~!?9y&0j>YAmZT|A zeN3kd*r|n`aWCzjMdmnG?>+OcHH9`A^iq{sI0WW7oyD8UFxiM_nY6a^9xcxeKruz| zWAbliFZX%8)s0R;!MF==^9Cxo?*$Eq-Ou~IXI>ZPFm0A}h~;*63=1*OF{`Ze@Kyv~ zwl;|lJTUm_rDtyzn46rhLSU-^cB9u^sYZq7KYCrkzf=Z-P8non_n>hC)A3()&w^&e z^WdaZpNdPgAO+eLL+7^7Lpj#(4RWT>ClMXZgmk5sOI4X8 z=`IX}J`GVo8=NU~3hyBFa804_p{gLzMI5 zzJBD=DEu&z8=2xrH`nO^Y?iU-lagJqz(;YYTJM7|d`7MI8{oIX7nX0y@KuQWtiOsp zu%Y1?Gn{XozkJi6e@h19FAMU!6?5X(DqG&5R$*F&>4`}HF5?YipU zHEE%V)QG0F%hwCsx8z^kwK|tND7JiTU4*XJ5Z>?oJ_OK~v-d2n@#(aee#Z+2{uT>K zbgD_&JN;F7+d4S7;TmRp{{hlCp;e5$j{qPm6m6uU1Y--3mf!q+F(Po3xF19JVedV_ z19~zhB0QiZa>Mbn$ZN7B#?Ie$On3dyT@UZRDvq;rT9wA|0yQQ2lbp@y@#f3wyD|pJ6<^+i4WMJ5ZG zs-MFjc~Wf&OW_s_^vLSCYJ(!n{kwUD!!SO9>aC7x05%#V&1C*(#h)!)B`&@UK!y9q z<(CAQW72lKRP-U5>!~&`HmE>;YYx{qFJmfze)78rmTN+~|K^*Qc)VXUIoTSCCcV)$ zt0_Zh=YD}zNe@I>-NG60YW-6<^npU#d(d)NCN$y;*{CO^1?Ph?O_1COsXsh8m+xAc z@M~1J4CZ?57ME=z?CCImA++D6tl*VA-m_=V1{=hsf%uX|Q$V{4@;xPLbhN2Jg^7Yl z*br@tF2RFEevpbqXjGlnUm;Qm<3QATVFOvKdn;$|4VhNkRh z10a~;pY!L9l4NJ=eavs+l*dj!Ll_!?aCL*`Gsnxxf+|4ViOB@>sdB3D%^ z$#$NC#HKv6wpK%= zZ(tln#cPG}fwIvQstFX+iXh}|dGB6cVd}C*(XHfHi7S2Ud1=r_nNnoLQ`JM^D$#;z zNYRZn3`XpbCa?(asFt?y+P0XHY^j3@{1TBOUIfaq?^aof&MfD_Sx|V$Co4h_r7Ny96 z^zaC(3$Y$>j=Jo}GFY_x0!t1;Xvx`gj+(c^3LRcCFg}U&+dyk>{R>y(PJKVzvb*Xs z>{YH*<%0Hy+WA2!?q>{`2d~!4;o1nzeBFvd_EEs}r-FEq(`s#1q7iEb?%Ghp^0I{q z;j%7>O5TQ&`jF~=O6gyYDfvNR$J_DMnZ|{gt14Mhc-@Cw=PEnCg-I1C6p&jN2<}j z!#f10<8L*tF{4YV8(#((27sk~LAUXIG|g=UW*%KU-`m^8pjE4w@AlXCPgQ@xVbaYW> z_yrPV3;B8Mq-!S4OQ;RiIs2dkgKSA$m>w^Puj+8*%0Q>msii}n)q*n+BK=4t=$N%^ zIkuv^XV-fz@i6fk0#B`fEVnzOs;YbNCrqt?hfTqu(PNXb_N^{qX_!`(%HOX9pz6V8 zHeOFobQQ`XQDDLdz~^0HO}+31OCt8fmLRd4{I;bONh~m*gq_R@-4Y-kZD<=8;haPd z99rBVj%~RhtzBAUMeq8)p&;0Bsp3(>}0)*vf~t!ceEMHk^+#S3|ZUMyv2{uRq0m&^}-hK%{zTP zipbyOgGhHT>jI=KMY|x)c=1bRqj_n1G(|zPF+;`YHlMTjf7l2S?`&Zly*c0xTrOX^ zvU#dP+SW*v`~S7HrJ{X4X`wXQ|9DT$ut|tvno57`2vq3?F+8AaF?#g2@!*GzW9QC3 zek#BFt}EN8JlII=#yTRDdfWj1ZG{?g$MrFFg}`Zxgqrj_biz$|n=ZC}FvnvvHLcl& znA5H;B!!`b^-}tCRHK5i2BrxmVgm1u6txL(l}f^$4aptCFe)Qnz5Yx*Y?MPb7>e`HoJE?kYmpe;yant2|T8NjMmd8=MbW$_yv+iFHW;8m%HK+$aNZSo@L zZ@RTJw7*#D*?i?{nym7M6z#xPk{USjBOoU~9Yi&wT7^ZT^`#b5f~>Srw;WSG}sVH3r{Xx|Bxx-67!M1i6V zSH)3+{Y0uCfqOtz_EQgjz&^VkT68LymZlt2VT5>Fps6+=5`6y_y;{{I(r;%k{t{Xw zh-Gb78=6461hIL6I+X$YmAS>8oUDR!329`(r+pI-M!b|LWYu7>XA@DC)-mOCil&_g znCo`B%^B)4U8_g4Pm1t6Ps@*$+&$=^E;#$EVXX`2!Y^E>C^*KBJpdg*(kYYuDLPz5 zSp2A3+f@Nl7Z#K>y-(cYhKtbUoH>Rnzs79-2gfTTvI(OfL@R2J@%{hqL>_0)*5r=02&J0&K?llM(!(kV;8rB=Vj4Zp01j+IUawg>z zn1!AFP;CHehA+b{G*hKwrf^z`U}V0KQ0FoItNq}@ii_&JgQ2-*5;BzOyxcC++|}`< zvE{MXf~#;7*M$v)5rmy{X8M6@{?!LfK9AW7IJa=iA88esoZGdKciaD4Xb<6n$VWUb zKlu#hbXR6N=FU&}H&28_HY9PbN_7v3`{_G^f2*c* zLvfKlSLvRJ`S<{yn~L;Wk{kj`B8(_66=v{G6`1a>ly&pI90X_k?Lu^Vz%JuI0RFT?9UAikXWtYaB;k=2u*^g^n1yIA8XbFv(@Vvg0CW{5oSHC(%ia!vE z+F=`pGQ8hk(vxPuyb>^|)AiUOfpk4c(WEGFwi{5$#|;_h{uKb<&Tp!pv0)wvN%hjr z0Tb|`#y1gM{hF=aFofkCLFJWzm=UzZu(l1PgNT_J3^st9<2CYP;ddi9{d+_>S@8m~ zUA!cBrFWxeG~lcdsNSxDw98uQ3=+EOMLY-X@kx8n(X4^DBfJ5B>9`(*~hyf=;A)jy(cx?%Es za8y8xO!~Lc{94@Df#5-8Ki;*Ap{?iKDoDw#c~Dr%T1KpEUE!3lmQsLS*PvKq;y^<+ zk~1***Ku;PM#aA*dI=f#emdf1o|XBe7d9w@3S_!Tm&LR>B>R%Yh5N(xt@WB@1T}v2 zzP*fteThN=bLigQfLifTO#Cq<58PI6GXV%crgavK z8jJ!GPQd2YWkpu!0XcCQ-s0;R>oiX#GtS)+BD4C;)3GHmd4iBAnQiV+?wsnzDPG%@ z_KHM1TcaGCeHzCG+-k{;w6>>;GJEQ(=Flx&pP-~kDTxZphO2Wd6G4c8=4^^1%um`- zt~GV)DnfIesd<*%#ye9n(cJLvRAu;ii(TjL(f%dUtQe`_kw9fy*3tBj-3Kamj~{tS zsR-$P9?DcGCM~R_j4@w0thbqbFtiI>-9L~G8jtufM8`s62ZWdjL^Jy@Xv1DBI+5LT zy1$PxRU#IAP= z+mvYfjFCfx0QhJ`ucg;N*;U!{4wIuYIaln~`K~^lhA*cuHDYGzm>j#~1m2-s&?ZHU z{Sda_@K0^u(2#9uF6`kjMz2+ZkgL0^iz`Y4o3CEWI1T?4e6gzI64Av~mht8ti$-li zWrJ~LG;{xjt^x*wFxejD?Ig+toDB5==6W(+cKiOLwmI0fu)niFjf=A=C<0w&Kr@B% zFFjdI6$(aSm$=@7bj}DtR}R|#%=PKFRf?Xwf!c@415Ri@>tzN0vq^QI1W?Ft#$tm!N2m;3idcO&3~QMURE9>zJ=z05w3CKRn|4s-O+ zR!w6=u=BpaPTvJlgI2J+duXyj4ol~KGJ+WTt74CGu0AkriyEeagz%g zm@AKGD}N_3$jB(jJkmMaDsf-eHh&wlyo)tOT&g*s;@0gYR|Dw$Wktf!UhDI9$*OHn ztom=Si>4%*&O0_bfp{N^vL1a-HBuHD4E?Aem!NHv_=f05y`+;v=D1Rz$cQNp2tb6Z zUvKzlfu}4tI5n%!zxeii#(2#h)vrmd|7fMR@f-1Aj;dv8ZrH5Grn=1;Z2!WZr%NPx zvdMRUCRE`W8;{nrmon5a@jwdcn$ap-hNdl1%3&1K7NiH9`W<|8yf<#&Not42wec+( zpy8SkW=(e(x7a;0FyzK@yt0)mgG@bChxHWFmLe8CO?T0pJ zPB9@i0%Nrh)I>?Tc_y>`<3%8sCZcbb78Oi}I&M7ccM{`e8ad4v^wI;O=b{jiadO$* z?x@}Mx;V-ViBxh=Y^%>!Fsc_rjO9YarOhU%|%Sr$S?0EQ89TLjPk6bAv@bDij#o#&%*FCqFTkVV(I z+3o>{E!Js>O}mE|3bZD;Bd|mux3Tz!|Ez7kb6@#MvoQKr$be}6Tk6wC1OJuqy#}-S zD#yDo#CDpGS*HMV(*=LcmEXNzG%L&)dXjenx+rRmAwj2t>W>re+k(}Q_YCAtz`@s3F=QKBtq%`wS z=8&qcVNQIf-%K;+Fo*#a`7UuqHxpV~)P^tUleo}`<`M--ovwLChuG732OQ|HH}jBW!X4~ zFSbpeWrsDk2-t?$w>rGQ3Za6)f}}|EUm?d?a_gnJofiDLqmTVlNkHkhB+(1@VL^f{ zjEeJkOS?AN8|{jmc8}0L^eAFu0S>j-5}|>nM}xkFd=@7p%FFnNqf-}1i-TSmai&C? z9`WmklCH@4GcwiB06UN;Y9DS71z|xca9(Zw-Q3XLzfs6t$GAY$Y5a;9{kFz_OT1GW6IRTup=2_YOR@)i)&B}}&zUSTj= zlL8qY%M`nKw`6sIWt~kMho>AXzf0vat(}b%sa!cG;1Ns?PlHiVVf@Zv_c=|xpg$vN zFB@9rwc$k6!VUDV)nJ;7c zft$HS6VM$-aK|F{q2+nSk&#O$*hwcYfSg-re0G`gt*f7X0D~hWPe5IwvCa7;{hiL2 zs;i@{G3PoBZT0r0#$x{4>Qn2d6PHMp;ae-PHVMTJ7#q!<^PJ_+&jhc&Kgf>npmWNn ztYcRi^G|01Uz2FxZAxbgN&~L65`bToq)i}OQeAgf(h9DE{ii?(%!u=HXgQ{zRDl-C z4tc|kczZYzObst3+%rXZZ!1CQg?rCLt6y6=MBUQoxdpY1W;)7gQTulFPAV^%AQCnJ z3@iD~Glk9eflp1?hs2MWBE*CYC>cZ~Zs^xc01uPO%S-KYkePr!3#9ekF0D9d#BeFx zFlc6SBLx}bvy73BmSROsfa3_78tU7417Sts_gq~Aeg zUz!i`=Zt#^LU{G%iDNF&kQ4*f0fBEI4TLOg{&;x)SD;1p<0+`o}S+lA60F-JMX?9|Qo&V@2^ zrt*+<^Nm6=$AmeSEQU-iwtxZ}s|eJ&90&Kac>|Zj0Ujt2)#xiDP4!Rdf49Up!h^SQ zbK7$?6Wl&_RVCA+IWQwHNV?|vs~c{TZU)82VwEl zGdb|~*aN{J!F+3yl#q`X6#My=Z@?sj>3RN|X?HpT8fDvXtcegK$n5;FRAAG9UD%YN zcRCKFh>5Qlw*XL*b%zAxsuFRJAQFr=7j^Y3HZ6=V<4u)eOcJnjH-!LG6)AuYrpfmw zjoyf~NgeIc@7!-SnZ@^Mr!iNEoy0ne*1MNU3Z`5>bGH*Z1Sum&*%hV6V5O2+eB2GkF>q>} z5cI6(yGVPttE2*-GCzCE|KA0J7QNcz(bA$}T1BzE2prMRH0gSdh$-=d3RR+lD!6HE z^C?SDdkrIBHL`CD+lNZCET3B5*NVWNV`Pi9GqqUIG=iHq{93Ei&#MYZRpxHIN=-T? zvg)ore&?|JPAFA2R?tfvG;xQ{g)Mof^81Pl zVML(hRmkX9V~TvRsi%VuB1@5TkNK|9U*O#5J*bxQ>wj3JC3KI=uUiQ$K)Gf9^b-1{ zW74BfP4GQb0UKVLi0JB4-qh^JLMw33{St#bi;%hSBvUc-|%#LUM; zCZ7QO_08=PLLy;}z>~Y%l?puh=SlyLwuioGeHLP2j)P?&`plmlPagugr4lqcA!W?_ zLWC)7v6tBlhh>ICPM)2H_)&s9bL?hiM`O#FP{zp6VG=YFF5+y-yfeA@aqwY1x$_ zSGQise`qjQ+Per|U@;toS7#uVk&eC3<0zV>ojoZAkp<%H|3C$& zFj1fAjbMAAS22UR-)_zJ#<6+>y0`&e__F9I^2tnIzfrBDsHZ|(`8>U_e*2_I8xVbP zh(lj&J%|0reH9EQ;UFL+ZC7B1Fto(fpSVgy+6@sXWN;dw)^MLN^U(f49T^S@FXf5{ za+}f!6B@x znRuGeK=LYtG4q)By}T#pe)=&#@t8?w`C?wU!w9pWBG5Quh63C?!wZAdh>j+VN37|F zGFdqJ%CDeVZ>z?~MPyMMYKYNZREM=z@UQR7vzq14#Leq9O1jBc1H|1Ofj~{U0oTC0THY|5*k8FUtRQ+ka00KtTTw*NV-N literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..36b5e01437a308502feaac81d43939d188516669 GIT binary patch literal 12308 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..41dd2566ceb8de3aeb691fb93b5cf38f506e8862 GIT binary patch literal 12314 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1752e6322eaa7172e8907695138c8d4a39fa729e GIT binary patch literal 12316 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..0d3ca25a0f6780d768b417e381ab19c14f26be29 GIT binary patch literal 5969 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 WbtNG3|7;Nci{XF0`Jb5s0RIo@M1f5J literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a9f8231db16a7d78fc02b5f4b3101693eec39515 GIT binary patch literal 5972 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..65636b54f0b0f6f3d87b1fd45a3f3902b1414548 GIT binary patch literal 5977 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..aaff7aec640b0df359395b5efd8b437487b3007d GIT binary patch literal 5981 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 ZMR;o{15y5GgYX|;{_Cy(#5n-){{R$Fc$5GD literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..56b368c60c41e527780a379f333e37e8aa0c4949 GIT binary patch literal 5936 zcmb7|RYMdEplyegk{&{k2Famh01=QzI;8|by1QfO?vU>8?jAsi5oGA@&Y_$8o%?IzzzTaEbV?c7&)2RxmcJwTRL-a zfdu};+1}=dsfUBTlgkeyCu0jsH&c+6v%MWADjGl^0PqI@gu}zld7pS4^WozyLT|H% z>?|33sX}7Z-ic7pId_xrP}eU8|5@Jm-7_7$vq^)zgBl7?UPHO<-Za-~xG1L7wBMP` zf#o~y&{T!OSK}4mir}3ZAhB4jzCMK1K9i$h64C4VTBvrZ_21m7?3>$2k1N`pi? z9x}F#sxAFRKT~o*P|xCXd`V;d;K>jfW4LjYnVB)qihWY`$o)>B*?h6wuy_A#tUugC;R-~Kd&Q0K`Qlew9kgN{lNHBytFbwjnL`p!?_U$uh*sWQvNOs{ zOr>$(%!7EA68X4{=V=v;__VLlP(0-?&tm=E^nuyR@h<7py~8|{A~xA;EL{L>K+WmI zSQRf+es-r~l}LDQ(d#-SW*7M(OlSaBl|4_S^W??ayB%*m;CAGw7*ne9jJ3r3h2U>r zzG)!an{vMBk8XIy=B)XxX}BJ;a9z=d($}pywb9WmTkOn6_MqjjWO^Pwknx_S%D}fr z^>dtOj`RLm&5?-GNE^=^DzP*675PljVTgX+1W%ELICJ=_+;zPZF`2pt`*@Jv>aOS3YCgch8YRIXQ zqzCTiR*N+x1&q4F(&_ys-+MrC61!gl>5C(cgYCNGrC*J~nApeYR^b?VVrcqsiKCp0 z$rPWC%e+!JEI_I4Gi>FI)^e+-n&?_pgW8T(2}kV}#6yhZD?CPhrPf3ybKfqsZQ*z0 zRk1Nwl~AXKs#*-ol6qoKuGsrtjyr-;H`F@3YlFpSELGH#&*dEO2F0Qemca2_Qg7O( zO`?qlm|f(-MyM(*Vk$b5dcTb7lEb~rCyvpFth4mGy_$P>=Ud0H4_)WED%gvS4+Hhz zsTcN)qfU-%9(?f{MQ~K4rvRQkb74HNFM_40a_8P6cvZ`IVeL_0yBlSgpZ2tt5DU3J zB+^B1mZ)+9s=pUVCQm|dpC1K^-Lr8UvRHgc+^?VNhVYtgPp~Jpe}X_8D!8NrT|^Hy zQgYI@1qA~ucB?eb<;8NrWnYh>6e1huD_9PbPt zWRPC$D`^RNxs(`m_4}2#hm1XZ#98^wB4zRhj@1qNXxAKuSGUew053-A<)pY|X|#{TB(mkinC$3rag6Do)T_m0uaF`k2tjoRi`MO4nk z&RQK$#%^V&L4lj87tc|@iYi3`@pl$j#>VLdgRO^?((7Ky3#FX6@)C|N6};4v)8Avt zoJSw8RrXVH{iSSjse~r&W7m0B;}aRx>iN4-nS-P>_upG`->f}l#MF*A_MO5lLj+#j z>W24B2n$6?Grj@|@Y8ZWN4G|_t`oL0ns?*GsA<+t8Gl2s(x2T)`I()J*S$o^by0nZ z$}0dq=YX!TKJ(3x%PrJs{>C5g5*aN1qdp8ax_f4ZqrBj5}+FX+JUq$sV?g9C*;OxSJ}^SbafGTP|yQ7S`QeaL1!W15Sb z83Vbh{;rDG=!Mf=sgb+TQ%J7KO;ozX&SEiyhf9hnO2jcW8 zhc%k8se0e?FZF7qB=^d7wUfGMXvKcU;YCXjH$}82&NQgb*~1c8*>cAx2HFA$k}&L{ zV(A6W1o}>djm$@IuBw~IR#c+q&0iL3IpXsBg4%hqu4nFl_C~WhB4VsjsZR{=&v~3v zajzp<2J8F%RXynZx_kua*dGRWY7}i4pSs7Z!p5>F);!8HftG>}$38X;*0kOrfk*Y` zzKICIACUaq^C$D>8d76i4ASTAQE2wRpuiMVI8xQ}mC;g1O$u*wR~l7=jpe>d7P@=g z=O2DF>l;}CrNjq?4!#&_)WtvTVV-<@*V9M&|LW@!)&(?dZ$!<}8z;M6|KevFl?VPElyvAH#=urCX##A7c^YGhQy9!5QVCX<#)pP2 zD+_w;R{5H}#!Gt29t``46)B55=H*hK48Gek8_+~2HH~W4a`lFSisUA5>Tg9wlL$&9 zv2`BW)cb~)c@%`=(BP>Mo}LIHRnF?V!lbTT?5pYpKf}+nwRmTJu9*RFOtl8JK(C8i zo_xr0Zm+Z5{&V}H&e!7M5ah;CBOADp)oqtBTSg!@exH^yTLEFw%pX3sW|H*doC@ST zmkoYA0+u`}t_ew}6->s5_Qq*s6Yx5hktTP2o^1e%cNqgkC&+(ADDmIq#mfDXf6B_j zgLdu_<9LkTcHH?3znA0Wg;A1LA%obD^1G#^;8>x*-ZD##%>3m-)LF*^%uAVYZJ?v$ zakAz&RydfnRYzBkzfUnh9I)q)h+q=eMZ8FfmlUL*>+U2^_yGQ$T~F88~+GGW(OmlDm%wkX{sKL@+LkAw!DH8c z?VWp@%7HBEx0=NoQ}K#vuT&Wry0*3Qknr_Y7&eh3>Neu>fG`2`Kh(Wlsr@K zJa##)gM3YpYr)K_-Ao|r`QF#l!t1Sm=u=9=RfLi1hZz`-(k{ZQa6QAnY8wx-2xMvS zQ*KudCJB?9*Bmwa;ijh~Cgjy`Gt#B&)@`yx8QD1fp3DX}Y==rCmNW#lm_bQA?@34s zedTMp>>>$)kVQ}C9&ga22@;RtaY=P)t{JDcHhb-xw;qz4l_AtV%Q{YK%j$oF6%I)U zJA*jdA?E{C=qIeX7^lP%9uA$3Y-U4k0u}6KrIHOuj$5xPpWHN^G7)3OtSL*3v&JIS z<7ds!5Yf<8E#eOugJ8CVnw=#oVl z1VqbMcO}}h4H}~L*L6E;62|NJq{~+SWM1X7rZQRYzXM0KZ@>2h!h5$18`D!=_F8Jm z!IrbP&m}(u&fCnar7gWBOtn}S7NZSM+wj_4Y&Qf zSmZIb13E-Hl7@)@l`Hp;jwIu%0plve-qT*-EOgr-zgN8BD&_a`09fnlzjb=Y7w{vStM(vf0i~1UOH2MqGOp#wG z#wagS3ECg@&I9`-#q)nY7&vJhD2E^en~LK?_Y08gA?lRuFT0OLlLG8$qjJOg$Hjus zX}m(eO|p>q<$@u>$`nX(}XMm4}RB<&E^|xh<^e1cc`S#W+D7=}qJNtPn_sAStX6G~O z?3!!7^S9*2vL$YycrR#hL_Iax%&GSb34eg3Rn(x5JYInMx}mu%cQ^i_*U#&i{l5GVYO+a zrs_QrHQ#AyXsH`27RsjHGOqNWY+#f zxXG`uLrK8MS6qa8K!~=ueQR_8_N2>-pJ!kK5kzzEO$ojw5)$|NLO?Fn2-3#bwR90P zEu|0~!-HQ!X5I($2LP9YJWAR)p*vD!_`Dh8Z4yq`2$t)2eB_nWBAV|MU6m%Ww;NwD z$CNI&?0ywt*cZZ*-%b48QDHu{RsSNr4Dsa2hKiD}83lL;!MKzpRK7T)d0d<9lwW^hfgsa>gt4iGH=^DR+3+yBpkl+`av>_^tKfLtdE0K}O==21F_DF3H(UIGO&jVp#{u zk6q4Y2`cH4R`ocLpbR)2r0XAp9PU z<&9$4{Sy>mO*Zfpr~MQu18=oJ+N92itbt8MVP8Af?xZ|ahp)jPe1Kdg-hy-t+`!af zqbez_UX_cu4&EA|`l)jhYd9Kcg^18kWRPc>lE3J>e?c+M03L1KlieGKYRq_59?tx; z-et8!WvT=%k4^z`CgOWdNr(;3*)@DWbcADaQseZV2+qp*c!z!Cr8Ix)l{};u5ia^@ zl$ihXHq)}My~AE5W11Wz_|3lfwm%o~@i`L?QWZ+6{?G@aZZ{qj<(2R)5u|T{Vl=t+XAoNk=dZ zF7jX#z%URjoKSbJ^`;vVG=EvCI~?k8qtu$YJHHy6f*AdcaFtlau&8*7o~Ayp{=m-# z1vf4uNz0?^Rb|+Ln>YJjt$|cyK07Z2ZEbf;PJ9U-aHLmf)&BCMz6``fXLzK&{snIH z{Qd}ag~Y%a@p=eSF66l;u&v$o4pP^3$4mX#7;RK-3$73DlKn)e14#g9OrB%=(}@*U zGZi(rz8OpRRpk@H!5B>)(22)5?N&SmbF}@wna8Ji)DEG~VbQuM)jj16%o&O|_cVPY z@%mLv*ZmSIkQO24p(i|2MxblIugvgbAD(l+!wWrq(M8?XKrsocCP-0?pnCsHTop}% zc38>txnw@uqA|Nuc4P<-WsJ-8vgcs9rB3%`p;N%;wM93Y$D$luK-+YxaDC-1Vcf7# z88JQ*{!8*Sy@r$v|0LXgil~}oJ7EC|N<|p1?Yw4UFkEI+{N`~_8F$kh^+H6WGyy9T zK8l3wkcQFb;)S!+nsSrfZ~j9OFnid8)-ctyWONEtsTN+$3sigoa*pk-=9>l8Y zj;EGl)_HK($7Oyr%vc(ST@02sLOF$z*yw|{P50Dk1z@Q>+B8pZwWy%D6&dXy<%C}p zBzySwheFW2vQ_X0%nTvv-uQUYPRf7hz^rWcYwEezQ$IQrV~26~l*H{tPcRn1W;MvH z)2@-&?mD`BSk}d@{=CONAamsD{-Eoy3CcXridc-72`sQE9wnVd*fj$);ua}w=1tk? z>$q>*%f3ZM$z8`lII<|XHt{6rf$t$uCH+)%C%xZ{zUtov&1jz3RaovpJz7jIRO5Pq z`IVC}AGx6!`sb?=DK^--NQ0%0ta(W3mxA#H9ZZE!|6UeFdB7+dvV%||&n|sEDq%Tk z#Zou=3wj|#sje8->+Az_iCeHi8(zStCz^Wp9xHjNso15x&Yyo@52P3YO7bP&BoE^5 z1MrIo^w+fhP~NW0oOt{A7$GAEpb_ZbA#*>9S4iK$MF+pLI*cVSAsb|&LqAqp--LZo z*$-no$*}H^Yg)oG75SGgW~!!t)q(__Bu*6Lq?)O=lBRNA3|x>JYNee~B-*oEnSZVx z4yL({AZbxl7jWrU3kH2*>=xtqQV6eIVfr1iz2$K`Hr;8pA@leW#ta>`3Ko$4@eTXK zSK_M#$}&CuK{^JAoS(aSJ3q4z2=R6Hmz0ru_%HrGp7zeczCOqRdq*U~)h*Cj%H7|``!*RlzzzUF z0|09A@h)##>Zq3kJR2gnD>lQ=V|D^UnEqv4VIT7Gj2$w!?AG14Pd^FFE@h z)TU1QWW8@S*P8_xX4SP5pUpjhej<{asKoz#ZAhz5e*gzcY?9lOVKU;S&Bs1}BgvSn}QGzBHv&7wU}8$mtZD zyhTx^ho7ki-F&F}4iooa^?i-!QO5J(eNTE%OKR(Ig6@enW!iN6v^@${w`ks%Fm#wR zg?aQGUK2$(#Uad@@ZN`y3iAK5#TM(_S?P7-`UFPquI{SHYJ!0E+?_91kn`oDmtB&5 z0iv-Sr3^%!I`q2#y?bA%^zo*|AY$(HR)kzi#9&a0KBen&qE#ww`{~&GhgUpiV&|U| zWtU|`w>SzH7B5myVBQT@ZwZ7x8jr|xP1C~3&+9N zKVq%4tg=09FriKH%hf@B3U=m|QC}AKi@e#BG-Vkc%(3c^n=!~&4k_cKes^f783cUz zV5-U;x;-_}mN{v5RHdIJ4R3c(kRMaOc`hs3jr+(3xLAcZLx7qvKKdj3lafParM;Bq#4D&FbzXYwOe)yAjBTIA~Whi_2bSy90Y z4O2Yt{F731HV=|}*UX$r(#!_4M}=QW6u=2q)0FKFy7apfA``eYG6w|_z)V?~LFnIr zv1sp@J+K+0V!1KSfR$x>_V#47z8IDe7w9;4PZ2WfXOf zy<6~QCHW{^-Y_Ti?VCm0dp?E&p)FO*Gs-<))&ONF4Jx~v$BXnh?1d$_G$u%mSC+`9^HgAEiE7y=jNT8zsh#6s zKwXaQ9KM#@J4PN9`3KHd%K>@V?7W$Pbm8y)nvO+pPTDJcU)0zv2Me5k#6e z5tICCji;IBat7n&_c{r~rab$E#M3v2X62i`P7rQmEJv+T8}x#>oP%)lgOwq7|E9}k zL{r2yFfh2Cv7=Z)9i!K_F4MM>kC`h}zKe+t0{iD=XS~8ddZ>q4C>Y#DPJL7%tv`xw z#J{1d1)IAMLhZJinwv|zFCndYku~txBmHy|<}4~Vd*e-_3VLWL6Wd9uudM}KPA_=0 zx}?4C>b{`?+G;CX3y-mHjYshCD=TJ0P+loLUK4FTsXcAGp({Qk3>2!zCjPmozYrtI{*Txd|9e0yGAT@ilA+*8SGsh!EvVAIdmV6ERe#|!mx5T&x?J%MVz7@Z6f5R^Ca{tX< zPN|4TGxE{g#yVq>5_(I1DM2GNNl$}q@=Lu80mnW^DgmqEH$N@BCOcLIxdfN0a-BA0 zR<;%j^I91BUJHHH_z}chXz(@Vk5W`J0>17EFYG+@JhzS>Jvw2p3ZM=)K_xhrQOe*| z2NxWYM>Y^jS~Puk2q82K%&8q&I&vl~j2Hj37g#9cbrjt3yN&hl??S#PoqP_~%<^@( zos!j&S?5q=bE!hm{~q7bMFXPpwz5UJq*rNdRbzaSsM&%cX)^2$CjW*XHzP;B=4${S zlkk+%)8&PW_Lw#6;YY^nWgIQ#BeQWTIYPPIuP%GSroqg{~bdxMXpgL7RnA70Jw`a6aM>Y~5GmySVQFd{8 zD#(`{Ebwk0(s!yaVt?c_AI-IZP;+9N)6EeIwn!7|y;q`pI?5yC%>h?l#b%V~Yo(X5t&re;=@k6Fs2rf%aosxqY9iBx-exr;5ojOLChR$6 z>Ix$)|GqC|^4uU=*oZD+z`#RFug<&QQz`Mo+C9<%jU&0RqO&srEdu&tz2;VrPRtvf z%;xbK7MTV%R=c*vJ&fzT0KN?OF0re83%>JX>%isdMsA3TgfUVE^f2a-t0%NtdEBoc z@U#79U$22%<~Zliv}z6twgP(&Q$&{l2V;1#*B*vsyg*sqwtPLEUXkLWmqJWtP#-eR z^dj7miZ+YP_%ka-qsE22UJdxoT;sa8g$i#itG|=dz&J@nDu#?S&$N=0;x-`mRGhEtAgSA zMSXH0?A4@HyY&-@rKgUS^A6>WKhHq^X!4}O;|eF z@=td~*G#Sw5lW3~%8*yp)D^tj-VM%|~Dtp)k%Of$4Vl)XQSj91jCdf@xe^ zQcm)_81LF#i@B&7ZS)a>X=lz~VeG7V6%`U$taofbpc=0qr)_L6I@nFtxxmj~ZnVwn zRolrcza0W}ZuvOED+JMeq`{mW+&zwAizE&s(z(L@bhLCp0-r0vOqre`*BL!xcGi82#(MaqR0CI6oK7QHBfD^4onUpK zGejoekzwKC%OM^D(-NIAcgkTadgal_UEzi!eg)jC>K|0!`Il}kD5&BrLagCA*H~!c zTBAM6HLJ`r1HmY$CH4fEAm>mN)0g?joiOUqH0%%Tw$=P0P`Y=Wlo>Q?8aZ=TA9DO$ zeN(2r-Yp|;Mvf6`!%vsCaTY_2FpEook$0EQpL1>VB2v1in_0-l`VX78E z0e_rJO?gtk&TOY}^E-!C1qKC@fJy&vbNE*t{x@jgfA#l=fEYjrm`VLlvB8Ley%aF0C^Cz73Js2ALIUV@i~S@o;N<+_!~$be@7l zmYV6be=9Q}F0}faZ!ENqQ_i<2a*SK#Xkr+QPp{g@v*1Co(e>m)JN4y=A#OvCcm|I3 zAchwaTEmL3>s!e0y9D6XIls5Sf87eWb;ro8KlFvXitkTU5p2%V&PZ=6c6Z*+*$RO+ zO=e$p$pWr%Z^8t;X4drj&#WH^S@h194s-9xoX8gpiDJd)bb5Om3;hMGgzvc7=E5hC zHSZ!?4~jJH)Ax_H)DOV&N*S-2w8h){Jog)Jtz5;0=+KcPvDmgrclT*4U^FM#|IfFM zC~&4NX?@bgs^Z}7ghYq&F98*sAf39GpSn# z0OWp6HkH}jfn$`A$+y$la7GK5gb`98v0jbpoBz`+e8Wvz@GCXwoZQO9OOCZ)m8Rx6 zYmbfj6aN%KON)$;^ci2mL&t69z#&1`dnK&<2}RF7D$8Ouv>Vo1=;mES1yaKq3im{P z8+CsCmVp9AsBaO(q%q3}L9;RC8;9nt(HGewp)sDwu{qt9s&`yXXtq|i^T)toFAP3) z>#n)zhpChF%g^V+Ak!mY6IO*mfnZ!N>%Z-zT80*I}&IeUL~I+u@^lq%zSagS|?F(c^K9IoD`z-2CeT`$*7CcO2oB=S3WLG z#>+Pz-ilqBgsjJXnZ0Ycl$<@DVY*8v_J41%XG97!BKEQIt|RL4?z?j4}Z-` zmn2TPUSp|6ix?%D!+U5|6ua2uSN#+)2YkEbttjRkW?0t*EYSz?DKlaRPwh-r61MJZ zuFH5t8j(=^N zz$~JNy)KOo#JRDv9e10&*!wb5S9k|r)HXFQA_2^gen$?I#|-$NjjYZA2a~C5bc&Mf zm@0~0z!(mA3kWyfmaJsYWpn&f!Khs^%h&q03_|<8XVkboA}^16${+IAKG7v*>y?t9 z#zP`Qw=caLIN{7YNwH_}j=vd(j}dbupoBW!1$2ZNHUuHS<^l};@(T|E_0`$__+x%k z#1hNK*GNYY7HO^9+LsgsN*U~&hDb1BVh-{+svsL|ZzwU$a(&ZsRpf@e-j4pkadK1; z*bQcEwG??`ej}cZ%5S!)#dQ_LNABH6G*;{3@idDHpqk4|pPE0(rc8YLBG}b_wjyVr z^to$!N}t2`s2W8*-Gak2Nk$wE5$iwV2HLMj@{uIaOo zJsDE^k$m-C^Y0eFJBqI^ojzJ6NCtbDe6t>u?5vC;-gcw{GHTBmmAcFrChVaplDD*y zH{}`!-0h*FCP*+t>FLzEPkdu}JY^h;R}~!p z=2{4F)ZkyfA+7wG74bpl?;f=?TE8tiN4(yt&!F$TtPeI%u!N^i+w|IFNmR)1_FXV` zKu6^WlgSgpQ}YA=8K-vG2(7lf!IJ`n2bno)EO)A)MUQl=p+{Fqopq<%^TOoQ;S$8u z^zIMpdvo*|s|C}x{op=Lgl#IDx1klRlBkgu)zTFoMRSkWAaf&Vim+^|q-C2Zq>^wx zN1I#LLl8@S&T*r>LW8py&9PB1uwYz`Y54RhWk2%aMcO-I%kyTW!_Vkh(+ZOjzLX-2 z1faRRTasMJ==zP-O)4I2fbo~U-(lUdor+X~>urKzB}cuN_oO_Zu07`{DIJ#rNiL{I zI6o_&n)DhT0wbQTr+B)&KL&FrR8Mg;ZkEQW@NqcK^8p2yqw7)R#nvOKhvCkG8D-R# z4+fU_h&8!>Is}{q2uaW>YR#}sPDUccdY^5+zs+MmGnU>Mm74YT+!&E!|B74o&+Y9Ly{9;>20 z*!{JqS`=83_5jEzyS+rTYd-5iX^BcM=fpcltx&|eze)bncCXVQV&_8^p-a7*hM_IZ zn=82=f@M}lp*&!>QjvK|>W%`x%5J*xhO*)>bCtBk({vSDV2nR@I@`ovM>L35(JOCJn(a3F;2Z8+pLp-WscPL}wrnoF#); zJ+S5SP2e|^lu=ZCO9vaArQmtBJ~5crRDYf3=ES>TC}egO8xcAaWAn@p__YhMq4y*$ z1$p2zBlj6svUm03Bq+{3*<`s@h<0>9DY9@iJm%*skSe z*}XZt1RU|Heq4Sc2VT?I(9#^QHesm};-H!pg&MccouLfX|=^DowtR3A0;xkm&RO!INhqEU} zuqwr{?fpF3w4n1>L_NC#{{6E@Zw++Ev8jfZ+27dPSl~h(KgI`kl)X%8YSZd7k7+-h zge8y>k0$iPNW7h%NT2`a;WDqFc+}Hd^V6ZIaF)3{mulcEj|}Q1F17JM0t4a>x9t-a zr_h)bZRB$f5WC|?DLw(>(qoq?&YwxwTe(p)X6RQ?Le%7;q9hqprZN{3QLB>=I;x&l z8v=J9u+7A}?UvpfZL~LdSN8$0Wc-4zY_4BNd!FXaaz>~jZkRtTb6H>Jxmv>0$XhgH z-A=%2E5jhgS^xa!Ba7js=@F#?dMHHGj;n~}ZEV&tpvCiv19=7*=JwikwYb%;K`TM+ zp7GFTIHV?T$XMmQ>W4KW4laX=zr|Eod}w?6-*LJ=<-T7IEUGsvv{Uf8X<%Dl^#P z`HBh{E$sB7Df13CxzkH_HYvn@x|yq6B#IP$t@~b+{+3yc02Kb$jfF{GkUYB32>!-|Fy>J^VLVqJQiE6$w2!8Tr3IqJOaYr{!q=UH<_Q C+ZyHo literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..751c2cf7cf9f3c9a6fadc5032f627601aa824168 GIT binary patch literal 3243 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 D{Kz24 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..04156bb2a93b614432b3e76cb7c8b3d3c61b4a6e GIT binary patch literal 3245 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 Jt$6L<^&goX6;c2I literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..658877ed7243c4cb5861a177c7d7fc5f956862f7 GIT binary patch literal 3216 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..cb45a229a --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,7 @@ +{ + "FixLib": { + "div(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "works(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "test(Fix)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..3ebff8630 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,10 @@ +{ + "C": { + "f(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "g(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->3;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->4;\n2[label=\"Node Type: END_LOOP 2\n\"];\n2->7;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->1;\n4[label=\"Node Type: IF_LOOP 4\n\"];\n4->5[label=\"True\"];\n4->2[label=\"False\"];\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->4;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n}\n", + "test_f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: RETURN 7\n\"];\n}\n", + "test_g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: RETURN 10\n\"];\n}\n", + "clean()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "test_equality(MyAddress[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..d8c9a5943 --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,22 @@ +{ + "FixedMath": { + "add(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "sub(UFixed18,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ERC20": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "totalSupply()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "allowance(address,address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "transfer(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "approve(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "transferFrom(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "increaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "decreaseAllowance(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "_transfer(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_mint(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burn(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_approve(address,address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "_burnFrom(address,UFixed18)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..272a4265d --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,14 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + }, + "FixedMath": { + "add(UFixed,UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "mul(UFixed,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "floor(UFixed)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "toUFixed(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "Greeter": { + "constructor(string)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..06367c7cd --- /dev/null +++ b/tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,10 @@ +{ + "B": { + "u()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + }, + "D": {}, + "C": { + "f(Left[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/user_defined_value_type/argument-0.8.9.sol b/tests/ast-parsing/user_defined_value_type/argument-0.8.8.sol similarity index 94% rename from tests/ast-parsing/user_defined_value_type/argument-0.8.9.sol rename to tests/ast-parsing/user_defined_value_type/argument-0.8.8.sol index 55fe237e1..8d511db7a 100644 --- a/tests/ast-parsing/user_defined_value_type/argument-0.8.9.sol +++ b/tests/ast-parsing/user_defined_value_type/argument-0.8.8.sol @@ -1,5 +1,3 @@ -pragma solidity ^0.8.9; - type Fix is int192; diff --git a/tests/ast-parsing/user_defined_value_type/calldata-0.8.9.sol b/tests/ast-parsing/user_defined_value_type/calldata-0.8.8.sol similarity index 98% rename from tests/ast-parsing/user_defined_value_type/calldata-0.8.9.sol rename to tests/ast-parsing/user_defined_value_type/calldata-0.8.8.sol index b69e2e0d6..dff2146e8 100644 --- a/tests/ast-parsing/user_defined_value_type/calldata-0.8.9.sol +++ b/tests/ast-parsing/user_defined_value_type/calldata-0.8.8.sol @@ -1,4 +1,3 @@ -pragma solidity ^0.8.9; pragma abicoder v2; type MyAddress is address; diff --git a/tests/ast-parsing/user_defined_value_type/constant-0.8.9.sol b/tests/ast-parsing/user_defined_value_type/constant-0.8.8.sol similarity index 89% rename from tests/ast-parsing/user_defined_value_type/constant-0.8.9.sol rename to tests/ast-parsing/user_defined_value_type/constant-0.8.8.sol index 70b395441..0ea1e5df8 100644 --- a/tests/ast-parsing/user_defined_value_type/constant-0.8.9.sol +++ b/tests/ast-parsing/user_defined_value_type/constant-0.8.8.sol @@ -1,5 +1,5 @@ type T is int224; -pragma solidity ^0.8.9; + contract C { T constant public s = T.wrap(int224(165521356710917456517261742455526507355687727119203895813322792776)); T constant public t = s; diff --git a/tests/ast-parsing/user_defined_value_type/erc20.sol b/tests/ast-parsing/user_defined_value_type/erc20-0.8.8.sol similarity index 100% rename from tests/ast-parsing/user_defined_value_type/erc20.sol rename to tests/ast-parsing/user_defined_value_type/erc20-0.8.8.sol diff --git a/tests/ast-parsing/user_defined_value_type/in_parenthesis-0.8.8.sol b/tests/ast-parsing/user_defined_value_type/in_parenthesis-0.8.8.sol new file mode 100644 index 000000000..739221fb9 --- /dev/null +++ b/tests/ast-parsing/user_defined_value_type/in_parenthesis-0.8.8.sol @@ -0,0 +1,48 @@ +type MyInt is int; +contract C { + function f() public returns (MyInt a, int b) { + (MyInt).wrap; + a = (MyInt).wrap(5); + (MyInt).unwrap; + b = (MyInt).unwrap((MyInt).wrap(10)); + } +} + +// Represent a 18 decimal, 256 bit wide fixed point type +// using a user defined value type. +type UFixed is uint256; + +/// A minimal library to do fixed point operations on UFixed. +library FixedMath { + uint constant multiplier = 10**18; + + /// Adds two UFixed numbers. Reverts on overflow, + /// relying on checked arithmetic on uint256. + function add(UFixed a, UFixed b) internal pure returns (UFixed) { + return UFixed.wrap(UFixed.unwrap(a) + UFixed.unwrap(b)); + } + /// Multiplies UFixed and uint256. Reverts on overflow, + /// relying on checked arithmetic on uint256. + function mul(UFixed a, uint256 b) internal pure returns (UFixed) { + return UFixed.wrap(UFixed.unwrap(a) * b); + } + /// Take the floor of a UFixed number. + /// @return the largest integer that does not exceed `a`. + function floor(UFixed a) internal pure returns (uint256) { + return UFixed.unwrap(a) / multiplier; + } + /// Turns a uint256 into a UFixed of the same value. + /// Reverts if the integer is too large. + function toUFixed(uint256 a) internal pure returns (UFixed) { + return UFixed.wrap(a * multiplier); + } +} + + +contract Greeter { + using FixedMath for UFixed; + UFixed public someValue; + + constructor(string memory _greeting) { + } +} diff --git a/tests/ast-parsing/user_defined_value_type/in_parenthesis.sol b/tests/ast-parsing/user_defined_value_type/in_parenthesis.sol deleted file mode 100644 index d45dacb4f..000000000 --- a/tests/ast-parsing/user_defined_value_type/in_parenthesis.sol +++ /dev/null @@ -1,9 +0,0 @@ -type MyInt is int; -contract C { - function f() public returns (MyInt a, int b) { - (MyInt).wrap; - a = (MyInt).wrap(5); - (MyInt).unwrap; - b = (MyInt).unwrap((MyInt).wrap(10)); - } -} diff --git a/tests/ast-parsing/user_defined_types.sol b/tests/ast-parsing/user_defined_value_type/user_defined_types-0.8.8.sol similarity index 100% rename from tests/ast-parsing/user_defined_types.sol rename to tests/ast-parsing/user_defined_value_type/user_defined_types-0.8.8.sol diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index eafe6a2f3..0b791f0ea 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -402,7 +402,14 @@ ALL_TESTS = [ Test("custom_error_with_state_variable.sol", make_version(8, 4, 12)), Test("complex_imports/import_aliases/test.sol", VERSIONS_08), # 0.8.9 crashes on our testcase - Test("user_defined_types.sol", ["0.8.8"] + make_version(8, 10, 12)), + Test( + "user_defined_value_type/user_defined_types-0.8.8.sol", ["0.8.8"] + make_version(8, 10, 15) + ), + Test("user_defined_value_type/argument-0.8.8.sol", ["0.8.8"] + make_version(8, 10, 15)), + Test("user_defined_value_type/calldata-0.8.8.sol", ["0.8.8"] + make_version(8, 10, 15)), + Test("user_defined_value_type/constant-0.8.8.sol", ["0.8.8"] + make_version(8, 10, 15)), + Test("user_defined_value_type/erc20-0.8.8.sol", ["0.8.8"] + make_version(8, 10, 15)), + Test("user_defined_value_type/in_parenthesis-0.8.8.sol", ["0.8.8"] + make_version(8, 10, 15)), Test("bytes_call.sol", ["0.8.12"]), ] # create the output folder if needed From a4a139ecaa3b9ed06d1ac43824d67e9470ba331a Mon Sep 17 00:00:00 2001 From: Vladislav Volosnikov Date: Sat, 9 Jul 2022 14:34:26 +0300 Subject: [PATCH 070/202] Add check ElementaryTypeNameExpression in copy_expression --- slither/utils/expression_manipulations.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/slither/utils/expression_manipulations.py b/slither/utils/expression_manipulations.py index 24d43299b..1a300c39b 100644 --- a/slither/utils/expression_manipulations.py +++ b/slither/utils/expression_manipulations.py @@ -9,6 +9,7 @@ from slither.core.expressions.assignment_operation import AssignmentOperation from slither.core.expressions.binary_operation import BinaryOperation from slither.core.expressions.call_expression import CallExpression from slither.core.expressions.conditional_expression import ConditionalExpression +from slither.core.expressions.elementary_type_name_expression import ElementaryTypeNameExpression from slither.core.expressions.expression import Expression from slither.core.expressions.identifier import Identifier from slither.core.expressions.index_access import IndexAccess @@ -80,7 +81,10 @@ class SplitTernaryExpression: if isinstance(expression, ConditionalExpression): raise SlitherException("Nested ternary operator not handled") - if isinstance(expression, (Literal, Identifier, IndexAccess, NewArray, NewContract)): + if isinstance( + expression, + (Literal, Identifier, IndexAccess, NewArray, NewContract, ElementaryTypeNameExpression), + ): return # case of lib From 800504238b98280ae196219dc599451f0ebd56b8 Mon Sep 17 00:00:00 2001 From: TheStarBoys Date: Sun, 24 Jul 2022 11:11:27 +0800 Subject: [PATCH 071/202] Fix #1296: contract.contract_kind is always None. So use contract.is_interface instead of contract_kind. --- slither/tools/flattening/flattening.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/tools/flattening/flattening.py b/slither/tools/flattening/flattening.py index f067bde6d..26f979648 100644 --- a/slither/tools/flattening/flattening.py +++ b/slither/tools/flattening/flattening.py @@ -111,7 +111,7 @@ class Flattening: to_patch = [] # interface must use external - if self._external_to_public and contract.contract_kind != "interface": + if self._external_to_public and not contract.is_interface: for f in contract.functions_declared: # fallback must be external if f.is_fallback or f.is_constructor_variables: From e64de7f7b35cee88ba94127c1e77dd84a1585ee0 Mon Sep 17 00:00:00 2001 From: TheStarBoys Date: Sun, 24 Jul 2022 14:03:37 +0800 Subject: [PATCH 072/202] Add feature #1298 --- slither/core/declarations/contract.py | 9 +++++ slither/solc_parsing/declarations/contract.py | 2 + slither/tools/flattening/__main__.py | 7 ++++ slither/tools/flattening/flattening.py | 40 +++++++++++++++++++ 4 files changed, 58 insertions(+) diff --git a/slither/core/declarations/contract.py b/slither/core/declarations/contract.py index 2db1cd964..c70711502 100644 --- a/slither/core/declarations/contract.py +++ b/slither/core/declarations/contract.py @@ -78,6 +78,7 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods self._using_for: Dict[Union[str, Type], List[Type]] = {} self._kind: Optional[str] = None self._is_interface: bool = False + self._is_library: bool = False self._signatures: Optional[List[str]] = None self._signatures_declared: Optional[List[str]] = None @@ -144,6 +145,14 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods def is_interface(self, is_interface: bool): self._is_interface = is_interface + @property + def is_library(self) -> bool: + return self._is_library + + @is_library.setter + def is_library(self, is_library: bool): + self._is_library = is_library + # endregion ################################################################################### ################################################################################### diff --git a/slither/solc_parsing/declarations/contract.py b/slither/solc_parsing/declarations/contract.py index efc53f2aa..8823112fb 100644 --- a/slither/solc_parsing/declarations/contract.py +++ b/slither/solc_parsing/declarations/contract.py @@ -157,6 +157,8 @@ class ContractSolc(CallerContextExpression): if "contractKind" in attributes: if attributes["contractKind"] == "interface": self._contract.is_interface = True + elif attributes["contractKind"] == "library": + self._contract.is_library = True self._contract.kind = attributes["contractKind"] self._linearized_base_contracts = attributes["linearizedBaseContracts"] # self._contract.fullyImplemented = attributes["fullyImplemented"] diff --git a/slither/tools/flattening/__main__.py b/slither/tools/flattening/__main__.py index e0888f222..977b84896 100644 --- a/slither/tools/flattening/__main__.py +++ b/slither/tools/flattening/__main__.py @@ -79,6 +79,12 @@ def parse_args(): action="store_true", ) + group_patching.add_argument( + "--convert-library-to-internal", + help="Convert external or public functions to internal in library.", + action="store_true", + ) + group_patching.add_argument( "--remove-assert", help="Remove call to assert().", action="store_true" ) @@ -111,6 +117,7 @@ def main(): compilation_unit, external_to_public=args.convert_external, remove_assert=args.remove_assert, + convert_library_to_internal=args.convert_library_to_internal, private_to_internal=args.convert_private, export_path=args.dir, pragma_solidity=args.pragma_solidity, diff --git a/slither/tools/flattening/flattening.py b/slither/tools/flattening/flattening.py index f067bde6d..90b751afb 100644 --- a/slither/tools/flattening/flattening.py +++ b/slither/tools/flattening/flattening.py @@ -51,6 +51,7 @@ class Flattening: compilation_unit: SlitherCompilationUnit, external_to_public=False, remove_assert=False, + convert_library_to_internal=False, private_to_internal=False, export_path: Optional[str] = None, pragma_solidity: Optional[str] = None, @@ -61,6 +62,7 @@ class Flattening: self._external_to_public = external_to_public self._remove_assert = remove_assert self._use_abi_encoder_v2 = False + self._convert_library_to_internal = convert_library_to_internal self._private_to_internal = private_to_internal self._pragma_solidity = pragma_solidity @@ -146,6 +148,40 @@ class Flattening: ) ) + if self._convert_library_to_internal and contract.is_library: + for f in contract.functions_declared: + visibility = "" + if f.visibility == "external": + visibility = f.visibility + elif f.visibility == "public": + visibility = f.visibility + + if visibility != "": + attributes_start = ( + f.parameters_src().source_mapping["start"] + + f.parameters_src().source_mapping["length"] + ) + attributes_end = f.returns_src().source_mapping["start"] + attributes = content[attributes_start:attributes_end] + regex = ( + re.search(r"((\sexternal)\s+)|(\sexternal)$|(\)external)$", attributes) + if visibility == "external" + else re.search(r"((\spublic)\s+)|(\spublic)$|(\)public)$", attributes) + ) + if regex: + to_patch.append( + Patch( + attributes_start + regex.span()[0] + 1, + "external_to_internal" + if visibility == "external" + else "public_to_internal", + ) + ) + else: + raise SlitherException( + f"{visibility} keyword not found {f.name} {attributes}" + ) + if self._private_to_internal: for variable in contract.state_variables_declared: if variable.visibility == "private": @@ -186,6 +222,10 @@ class Flattening: index = index - start if patch_type == "public_to_external": content = content[:index] + "public" + content[index + len("external") :] + elif patch_type == "external_to_internal": + content = content[:index] + "internal" + content[index + len("external") :] + elif patch_type == "public_to_internal": + content = content[:index] + "internal" + content[index + len("public") :] elif patch_type == "private_to_internal": content = content[:index] + "internal" + content[index + len("private") :] elif patch_type == "calldata_to_memory": From c1ed068ae178b62f807bd888821c0758d1d2de37 Mon Sep 17 00:00:00 2001 From: TheStarBoys <41286328+TheStarBoys@users.noreply.github.com> Date: Mon, 25 Jul 2022 09:52:35 +0800 Subject: [PATCH 073/202] Update slither/tools/flattening/flattening.py Co-authored-by: alpharush <0xalpharush@protonmail.com> --- slither/tools/flattening/flattening.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/slither/tools/flattening/flattening.py b/slither/tools/flattening/flattening.py index 90b751afb..e88c10e3a 100644 --- a/slither/tools/flattening/flattening.py +++ b/slither/tools/flattening/flattening.py @@ -151,12 +151,8 @@ class Flattening: if self._convert_library_to_internal and contract.is_library: for f in contract.functions_declared: visibility = "" - if f.visibility == "external": - visibility = f.visibility - elif f.visibility == "public": + if f.visibility in ["external", "public"]: visibility = f.visibility - - if visibility != "": attributes_start = ( f.parameters_src().source_mapping["start"] + f.parameters_src().source_mapping["length"] From ce0a4006b904e626dac9fdee29eadf12ad3bc957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= <2642849+elopez@users.noreply.github.com> Date: Mon, 25 Jul 2022 10:52:59 -0300 Subject: [PATCH 074/202] Disable coloring if output is not a terminal, fix Windows tests (#1244) * Disable coloring if output is not a terminal Color escape codes are most likely not expected if piping the output of slither into a file or other tool. Check if stdout is a tty before enabling colored output. --- .github/workflows/ci.yml | 14 ++++---------- scripts/ci_test_kspec.sh | 2 +- scripts/ci_test_simil.sh | 4 ++-- slither/__main__.py | 2 +- slither/utils/colors.py | 8 ++++---- tests/check-kspec/test_1.txt | 12 ++++++------ tests/check-upgradeability/test_1.txt | 4 ++-- tests/check-upgradeability/test_10.txt | 16 ++++++++-------- tests/check-upgradeability/test_11.txt | 8 ++++---- tests/check-upgradeability/test_2.txt | 8 ++++---- tests/check-upgradeability/test_3.txt | 24 ++++++++++++------------ tests/check-upgradeability/test_4.txt | 20 ++++++++++---------- tests/check-upgradeability/test_5.txt | 4 ++-- tests/check-upgradeability/test_6.txt | 8 ++++---- tests/check-upgradeability/test_7.txt | 8 ++++---- tests/check-upgradeability/test_8.txt | 4 ++-- tests/check-upgradeability/test_9.txt | 8 ++++---- 17 files changed, 74 insertions(+), 80 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1252e385a..f2a295452 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,8 +3,7 @@ name: CI defaults: run: - # To load bashrc - shell: bash -ieo pipefail {0} + shell: bash on: push: @@ -52,16 +51,10 @@ jobs: steps: - uses: actions/checkout@v1 - - name: Set up shell - if: runner.os == 'Windows' - run: | - echo 'C:\msys64\mingw64\bin' >> "$GITHUB_PATH" - echo 'C:\msys64\usr\bin' >> "$GITHUB_PATH" - - - name: Set up Python 3.6 + - name: Set up Python 3.8 uses: actions/setup-python@v3 with: - python-version: 3.6 + python-version: 3.8 - name: Install dependencies run: | @@ -87,6 +80,7 @@ jobs: - name: Run Tests env: + PYTHONUTF8: 1 TEST_TYPE: ${{ matrix.type }} GITHUB_ETHERSCAN: ${{ secrets.GITHUB_ETHERSCAN }} run: | diff --git a/scripts/ci_test_kspec.sh b/scripts/ci_test_kspec.sh index cb0a131a8..3bd827e69 100755 --- a/scripts/ci_test_kspec.sh +++ b/scripts/ci_test_kspec.sh @@ -7,7 +7,7 @@ slither-check-kspec "$DIR_TESTS/safeAdd/safeAdd.sol" "$DIR_TESTS/safeAdd/spec.md DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then - echo "slither-check-upgradeability 1 failed" + echo "slither-check-kspec 1 failed" cat test_1.txt echo "" cat "$DIR_TESTS/test_1.txt" diff --git a/scripts/ci_test_simil.sh b/scripts/ci_test_simil.sh index bad5fd067..1d405191e 100755 --- a/scripts/ci_test_simil.sh +++ b/scripts/ci_test_simil.sh @@ -2,8 +2,8 @@ ### Install requisites -pip3.6 install pybind11 -pip3.6 install https://github.com/facebookresearch/fastText/archive/0.2.0.zip +pip3 install pybind11 +pip3 install https://github.com/facebookresearch/fastText/archive/0.2.0.zip ### Test slither-simil diff --git a/slither/__main__.py b/slither/__main__.py index dd195b65b..c062dbf7c 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -659,7 +659,7 @@ def main_impl(all_detector_classes, all_printer_classes): cp.enable() # Set colorization option - set_colorization_enabled(not args.disable_color) + set_colorization_enabled(False if args.disable_color else sys.stdout.isatty()) # Define some variables for potential JSON output json_results = {} diff --git a/slither/utils/colors.py b/slither/utils/colors.py index aff4fa373..14fc4b345 100644 --- a/slither/utils/colors.py +++ b/slither/utils/colors.py @@ -1,5 +1,6 @@ from functools import partial import platform +import sys class Colors: # pylint: disable=too-few-public-methods @@ -73,7 +74,7 @@ def set_colorization_enabled(enabled: bool): if enabled and platform.system() == "Windows": Colors.COLORIZATION_ENABLED = enable_windows_virtual_terminal_sequences() else: - # This is not windows so we can enable color immediately. + # This is not windows, or colorization is being disabled, so we can adjust the state immediately. Colors.COLORIZATION_ENABLED = enabled @@ -83,6 +84,5 @@ red = partial(colorize, Colors.RED) blue = partial(colorize, Colors.BLUE) magenta = partial(colorize, Colors.MAGENTA) -# We enable colorization by default (this call is important as it will enable color mode on Windows by default), -# regardless of whether Slither is interacted with from CLI or another script. -set_colorization_enabled(True) +# We enable colorization by default if the output is a tty +set_colorization_enabled(sys.stdout.isatty()) diff --git a/tests/check-kspec/test_1.txt b/tests/check-kspec/test_1.txt index ed0482c87..d93356685 100644 --- a/tests/check-kspec/test_1.txt +++ b/tests/check-kspec/test_1.txt @@ -1,7 +1,7 @@ ## Check for functions coverage -[✓] SafeAdd.add(uint256,uint256) - -[ ] (Missing function) SafeAdd.add_v2(uint256,uint256) - -[ ] (Unresolved) SafeAdd.addv2(uint256,uint256) - +[✓] SafeAdd.add(uint256,uint256) + +[ ] (Missing function) SafeAdd.add_v2(uint256,uint256) + +[ ] (Unresolved) SafeAdd.addv2(uint256,uint256) + diff --git a/tests/check-upgradeability/test_1.txt b/tests/check-upgradeability/test_1.txt index 5681c4619..48d8484a7 100644 --- a/tests/check-upgradeability/test_1.txt +++ b/tests/check-upgradeability/test_1.txt @@ -1,4 +1,4 @@ -INFO:Slither: +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing INFO:Slither:1 findings, 12 detectors run diff --git a/tests/check-upgradeability/test_10.txt b/tests/check-upgradeability/test_10.txt index 1e0f99584..1527735c5 100644 --- a/tests/check-upgradeability/test_10.txt +++ b/tests/check-upgradeability/test_10.txt @@ -1,13 +1,13 @@ -INFO:Slither: +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +INFO:Slither: ContractV1.destination (tests/check-upgradeability/contractV1.sol#2) was not constant but ContractV2.destination (tests/check-upgradeability/contract_v2_constant.sol#2) is. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#variables-that-should-not-be-constant -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#variables-that-should-not-be-constant +INFO:Slither: Variable missing in ContractV2 (tests/check-upgradeability/contract_v2_constant.sol#1-3): ContractV1.destination (tests/check-upgradeability/contractV1.sol#2) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#missing-variables -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#missing-variables +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing INFO:Slither:4 findings, 18 detectors run diff --git a/tests/check-upgradeability/test_11.txt b/tests/check-upgradeability/test_11.txt index f6e8009f5..e2ad677b1 100644 --- a/tests/check-upgradeability/test_11.txt +++ b/tests/check-upgradeability/test_11.txt @@ -1,7 +1,7 @@ -INFO:Slither: +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +INFO:Slither: ContractV1.destination (tests/check-upgradeability/contract_v1_var_init.sol#2) is a state variable with an initial value. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#state-variable-initialized +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#state-variable-initialized INFO:Slither:2 findings, 8 detectors run diff --git a/tests/check-upgradeability/test_2.txt b/tests/check-upgradeability/test_2.txt index ecff55f48..7641e8335 100644 --- a/tests/check-upgradeability/test_2.txt +++ b/tests/check-upgradeability/test_2.txt @@ -1,7 +1,7 @@ -INFO:Slither: +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing INFO:Slither:2 findings, 22 detectors run diff --git a/tests/check-upgradeability/test_3.txt b/tests/check-upgradeability/test_3.txt index 8b40490a8..b3c7c0a15 100644 --- a/tests/check-upgradeability/test_3.txt +++ b/tests/check-upgradeability/test_3.txt @@ -1,23 +1,23 @@ -INFO:Slither: +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +INFO:Slither: Different variables between ContractV2 (tests/check-upgradeability/contractV2_bug.sol#1-5) and Proxy (tests/check-upgradeability/proxy.sol#7-27) ContractV2.destination (tests/check-upgradeability/contractV2_bug.sol#2) Proxy.destination (tests/check-upgradeability/proxy.sol#9) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-proxy -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-proxy +INFO:Slither: Function shadowing found: ContractV2.myFunc (tests/check-upgradeability/contractV2_bug.sol#4) Proxy.myFunc() (tests/check-upgradeability/proxy.sol#11) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#functions-shadowing -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#functions-shadowing +INFO:Slither: Different variables between ContractV1 (tests/check-upgradeability/contractV1.sol#1-3) and ContractV2 (tests/check-upgradeability/contractV2_bug.sol#1-5) ContractV1.destination (tests/check-upgradeability/contractV1.sol#2) ContractV2.destination (tests/check-upgradeability/contractV2_bug.sol#2) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-v2 -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-v2 +INFO:Slither: Extra variables in ContractV2 (tests/check-upgradeability/contractV2_bug.sol#1-5): ContractV2.myFunc (tests/check-upgradeability/contractV2_bug.sol#4) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#extra-variables-in-the-v2 -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#extra-variables-in-the-v2 +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing INFO:Slither:6 findings, 22 detectors run diff --git a/tests/check-upgradeability/test_4.txt b/tests/check-upgradeability/test_4.txt index 7411e06cb..4e32dc904 100644 --- a/tests/check-upgradeability/test_4.txt +++ b/tests/check-upgradeability/test_4.txt @@ -1,20 +1,20 @@ -INFO:Slither: +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +INFO:Slither: Different variables between ContractV2 (tests/check-upgradeability/contractV2_bug2.sol#4-6) and Proxy (tests/check-upgradeability/proxy.sol#7-27) Base.val (tests/check-upgradeability/contractV2_bug2.sol#2) Proxy.destination (tests/check-upgradeability/proxy.sol#9) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-proxy -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-proxy +INFO:Slither: Different variables between ContractV1 (tests/check-upgradeability/contractV1.sol#1-3) and ContractV2 (tests/check-upgradeability/contractV2_bug2.sol#4-6) ContractV1.destination (tests/check-upgradeability/contractV1.sol#2) Base.val (tests/check-upgradeability/contractV2_bug2.sol#2) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-v2 -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#incorrect-variables-with-the-v2 +INFO:Slither: Extra variables in ContractV2 (tests/check-upgradeability/contractV2_bug2.sol#4-6): ContractV2.destination (tests/check-upgradeability/contractV2_bug2.sol#5) -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#extra-variables-in-the-v2 -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#extra-variables-in-the-v2 +INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing INFO:Slither:5 findings, 22 detectors run diff --git a/tests/check-upgradeability/test_5.txt b/tests/check-upgradeability/test_5.txt index 99bdf0bab..805602ee4 100644 --- a/tests/check-upgradeability/test_5.txt +++ b/tests/check-upgradeability/test_5.txt @@ -1,4 +1,4 @@ -INFO:Slither: +INFO:Slither: Contract_no_bug (tests/check-upgradeability/contract_initialization.sol#11-17) needs to be initialized by Contract_no_bug.initialize() (tests/check-upgradeability/contract_initialization.sol#13-15). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function INFO:Slither:1 findings, 12 detectors run diff --git a/tests/check-upgradeability/test_6.txt b/tests/check-upgradeability/test_6.txt index 842708b8f..663cb62d0 100644 --- a/tests/check-upgradeability/test_6.txt +++ b/tests/check-upgradeability/test_6.txt @@ -1,7 +1,7 @@ -INFO:Slither: +INFO:Slither: Contract_lack_to_call_modifier (tests/check-upgradeability/contract_initialization.sol#19-24) needs to be initialized by Contract_lack_to_call_modifier.initialize() (tests/check-upgradeability/contract_initialization.sol#21-23). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function +INFO:Slither: Contract_lack_to_call_modifier.initialize() (tests/check-upgradeability/contract_initialization.sol#21-23) does not call the initializer modifier. -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializer-is-not-called +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializer-is-not-called INFO:Slither:2 findings, 12 detectors run diff --git a/tests/check-upgradeability/test_7.txt b/tests/check-upgradeability/test_7.txt index 160cd95e4..9f232338e 100644 --- a/tests/check-upgradeability/test_7.txt +++ b/tests/check-upgradeability/test_7.txt @@ -1,7 +1,7 @@ -INFO:Slither: +INFO:Slither: Contract_not_called_super_init (tests/check-upgradeability/contract_initialization.sol#26-32) needs to be initialized by Contract_not_called_super_init.initialize() (tests/check-upgradeability/contract_initialization.sol#28-30). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function +INFO:Slither: Missing call to Contract_no_bug.initialize() (tests/check-upgradeability/contract_initialization.sol#13-15) in Contract_not_called_super_init.initialize() (tests/check-upgradeability/contract_initialization.sol#28-30). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-functions-are-not-called +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-functions-are-not-called INFO:Slither:2 findings, 12 detectors run diff --git a/tests/check-upgradeability/test_8.txt b/tests/check-upgradeability/test_8.txt index 6a7debd30..38c71e28c 100644 --- a/tests/check-upgradeability/test_8.txt +++ b/tests/check-upgradeability/test_8.txt @@ -1,4 +1,4 @@ -INFO:Slither: +INFO:Slither: Contract_no_bug_inherits (tests/check-upgradeability/contract_initialization.sol#34-40) needs to be initialized by Contract_no_bug_inherits.initialize() (tests/check-upgradeability/contract_initialization.sol#36-38). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function INFO:Slither:1 findings, 12 detectors run diff --git a/tests/check-upgradeability/test_9.txt b/tests/check-upgradeability/test_9.txt index 9c2fa353e..a67578a08 100644 --- a/tests/check-upgradeability/test_9.txt +++ b/tests/check-upgradeability/test_9.txt @@ -1,7 +1,7 @@ -INFO:Slither: +INFO:Slither: Contract_double_call (tests/check-upgradeability/contract_initialization.sol#42-49) needs to be initialized by Contract_double_call.initialize() (tests/check-upgradeability/contract_initialization.sol#44-47). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function -INFO:Slither: +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-function +INFO:Slither: Contract_no_bug.initialize() (tests/check-upgradeability/contract_initialization.sol#13-15) is called multiple times in Contract_double_call.initialize() (tests/check-upgradeability/contract_initialization.sol#44-47). -Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-functions-are-called-multiple-times +Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initialize-functions-are-called-multiple-times INFO:Slither:2 findings, 12 detectors run From ad60e5e089b08d3850dddc612571eaa56e2bd49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= <2642849+elopez@users.noreply.github.com> Date: Mon, 25 Jul 2022 10:54:45 -0300 Subject: [PATCH 075/202] pip-audit: Use our official action (#1243) Replaces the manual use here with our official GitHub Action. --- .github/workflows/pip-audit.yml | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/pip-audit.yml b/.github/workflows/pip-audit.yml index c14674ce7..d0fcb419c 100644 --- a/.github/workflows/pip-audit.yml +++ b/.github/workflows/pip-audit.yml @@ -11,18 +11,25 @@ on: jobs: audit: runs-on: ubuntu-latest + steps: - name: Checkout repository - uses: actions/checkout@v2 - - name: Set up Python 3.10 - uses: actions/setup-python@v3 + uses: actions/checkout@v3 + + - name: Install Python + uses: actions/setup-python@v4 with: python-version: "3.10" - - name: Install pip-audit + + - name: Install Slither run: | + python -m venv /tmp/pip-audit-env + source /tmp/pip-audit-env/bin/activate + python -m pip install --upgrade pip - python -m pip install pip-audit - - name: Run pip-audit - run: | python -m pip install . - pip-audit --desc -v + + - name: Run pip-audit + uses: trailofbits/gh-action-pip-audit@v0.0.4 + with: + virtual-environment: /tmp/pip-audit-env From 63a154fbb03e7c9ad9d16405fc6d5fa5ea0bfe46 Mon Sep 17 00:00:00 2001 From: h00p30 <105890602+h00p30@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:57:20 +0200 Subject: [PATCH 076/202] Remove unnecessary Check event (#1277) * fix typo in `--help` output for `--print` flag (#1149) * fix: #1275 Co-authored-by: Erick --- slither/__main__.py | 2 +- slither/tools/erc_conformance/erc/ercs.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/slither/__main__.py b/slither/__main__.py index c062dbf7c..f6f84feeb 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -315,7 +315,7 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_printer.add_argument( "--print", - help="Comma-separated list fo contract information printers, " + help="Comma-separated list of contract information printers, " f"available printers: {', '.join(d.ARGUMENT for d in printer_classes)}", action="store", dest="printers_to_run", diff --git a/slither/tools/erc_conformance/erc/ercs.py b/slither/tools/erc_conformance/erc/ercs.py index 1c64dc4a7..afc9a698a 100644 --- a/slither/tools/erc_conformance/erc/ercs.py +++ b/slither/tools/erc_conformance/erc/ercs.py @@ -192,9 +192,10 @@ def generic_erc_checks(contract, erc_functions, erc_events, ret, explored=None): logger.info("## Check functions") for erc_function in erc_functions: _check_signature(erc_function, contract, ret) - logger.info("\n## Check events") - for erc_event in erc_events: - _check_events(erc_event, contract, ret) + if erc_events: + logger.info("\n## Check events") + for erc_event in erc_events: + _check_events(erc_event, contract, ret) logger.info("\n") From 98e6d8c13e5578544ba0396b1b331ee93559768e Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Mon, 25 Jul 2022 09:01:00 -0500 Subject: [PATCH 077/202] add support for enum max/min members, fix min member on elementary (#1276) --- slither/core/declarations/enum.py | 11 +++++++ .../core/solidity_types/type_information.py | 3 +- .../visitors/slithir/expression_to_slithir.py | 18 ++++++++--- .../minmax-0.6.8.sol-0.6.8-compact.zip | Bin 1672 -> 1861 bytes .../compile/minmax-0.6.8.sol-0.6.8-legacy.zip | Bin 1591 -> 1769 bytes .../minmax-0.6.8.sol-0.6.9-compact.zip | Bin 1644 -> 1839 bytes .../compile/minmax-0.6.8.sol-0.6.9-legacy.zip | Bin 1562 -> 1745 bytes .../minmax-0.6.8.sol-0.7.0-compact.zip | Bin 1592 -> 1792 bytes .../compile/minmax-0.6.8.sol-0.7.0-legacy.zip | Bin 1529 -> 1716 bytes .../minmax-0.6.8.sol-0.7.1-compact.zip | Bin 1592 -> 1794 bytes .../compile/minmax-0.6.8.sol-0.7.1-legacy.zip | Bin 1529 -> 1716 bytes .../minmax-0.6.8.sol-0.7.2-compact.zip | Bin 1594 -> 1796 bytes .../compile/minmax-0.6.8.sol-0.7.2-legacy.zip | Bin 1531 -> 1718 bytes .../minmax-0.6.8.sol-0.7.3-compact.zip | Bin 1589 -> 1795 bytes .../compile/minmax-0.6.8.sol-0.7.3-legacy.zip | Bin 1526 -> 1718 bytes .../minmax-0.6.8.sol-0.7.4-compact.zip | Bin 1594 -> 1792 bytes .../compile/minmax-0.6.8.sol-0.7.4-legacy.zip | Bin 1530 -> 1715 bytes .../minmax-0.6.8.sol-0.7.5-compact.zip | Bin 1590 -> 1791 bytes .../compile/minmax-0.6.8.sol-0.7.5-legacy.zip | Bin 1528 -> 1714 bytes .../minmax-0.6.8.sol-0.7.6-compact.zip | Bin 1591 -> 1794 bytes .../compile/minmax-0.6.8.sol-0.7.6-legacy.zip | Bin 1528 -> 1717 bytes .../minmax-0.6.8.sol-0.8.0-compact.zip | Bin 1593 -> 1796 bytes .../minmax-0.6.8.sol-0.8.1-compact.zip | Bin 1595 -> 1794 bytes .../minmax-0.6.8.sol-0.8.10-compact.zip | Bin 1610 -> 1834 bytes .../minmax-0.6.8.sol-0.8.11-compact.zip | Bin 1613 -> 1835 bytes .../minmax-0.6.8.sol-0.8.12-compact.zip | Bin 1613 -> 1835 bytes .../minmax-0.6.8.sol-0.8.2-compact.zip | Bin 1608 -> 1819 bytes .../minmax-0.6.8.sol-0.8.3-compact.zip | Bin 1607 -> 1819 bytes .../minmax-0.6.8.sol-0.8.4-compact.zip | Bin 1615 -> 1823 bytes .../minmax-0.6.8.sol-0.8.5-compact.zip | Bin 1623 -> 1825 bytes .../minmax-0.6.8.sol-0.8.6-compact.zip | Bin 1617 -> 1826 bytes .../minmax-0.6.8.sol-0.8.7-compact.zip | Bin 1621 -> 1828 bytes .../minmax-0.6.8.sol-0.8.8-compact.zip | Bin 1601 -> 1823 bytes .../minmax-0.6.8.sol-0.8.9-compact.zip | Bin 1619 -> 1835 bytes .../minmax-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 3684 bytes .../minmax-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 3684 bytes .../minmax-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 3683 bytes .../minmax-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 3685 bytes .../minmax-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 3686 bytes .../minmax-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 3684 bytes .../minmax-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 3688 bytes .../minmax-0.8.8.sol-0.8.9-compact.zip | Bin 0 -> 3686 bytes .../minmax-0.6.8.sol-0.6.8-compact.json | 4 +-- .../minmax-0.6.8.sol-0.6.8-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.6.9-compact.json | 4 +-- .../minmax-0.6.8.sol-0.6.9-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.0-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.0-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.1-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.1-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.2-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.2-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.3-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.3-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.4-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.4-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.5-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.5-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.7.6-compact.json | 4 +-- .../minmax-0.6.8.sol-0.7.6-legacy.json | 4 +-- .../minmax-0.6.8.sol-0.8.0-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.1-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.10-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.11-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.12-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.2-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.3-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.4-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.5-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.6-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.7-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.8-compact.json | 4 +-- .../minmax-0.6.8.sol-0.8.9-compact.json | 4 +-- .../minmax-0.8.8.sol-0.8.10-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.11-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.12-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.13-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.14-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.15-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.8-compact.json | 7 +++++ .../minmax-0.8.8.sol-0.8.9-compact.json | 7 +++++ tests/ast-parsing/minmax-0.6.8.sol | 12 +++++--- tests/ast-parsing/minmax-0.8.8.sol | 29 ++++++++++++++++++ tests/test_ast_parsing.py | 4 +++ 84 files changed, 154 insertions(+), 103 deletions(-) create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.9-compact.zip create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.9-compact.json create mode 100644 tests/ast-parsing/minmax-0.8.8.sol diff --git a/slither/core/declarations/enum.py b/slither/core/declarations/enum.py index 76a43dc4d..c53c1c38d 100644 --- a/slither/core/declarations/enum.py +++ b/slither/core/declarations/enum.py @@ -9,6 +9,9 @@ class Enum(SourceMapping): self._name = name self._canonical_name = canonical_name self._values = values + self._min = 0 + # The max value of an Enum is the index of the last element + self._max = len(values) - 1 @property def canonical_name(self) -> str: @@ -22,5 +25,13 @@ class Enum(SourceMapping): def values(self) -> List[str]: return self._values + @property + def min(self) -> int: + return self._min + + @property + def max(self) -> int: + return self._max + def __str__(self): return self.name diff --git a/slither/core/solidity_types/type_information.py b/slither/core/solidity_types/type_information.py index 0ede1f6d0..ccc84e8c1 100644 --- a/slither/core/solidity_types/type_information.py +++ b/slither/core/solidity_types/type_information.py @@ -13,8 +13,9 @@ class TypeInformation(Type): def __init__(self, c): # pylint: disable=import-outside-toplevel from slither.core.declarations.contract import Contract + from slither.core.declarations.enum import Enum - assert isinstance(c, (Contract, ElementaryType)) + assert isinstance(c, (Contract, ElementaryType, Enum)) super().__init__() self._type = c diff --git a/slither/visitors/slithir/expression_to_slithir.py b/slither/visitors/slithir/expression_to_slithir.py index 0029c29ed..3c4595b92 100644 --- a/slither/visitors/slithir/expression_to_slithir.py +++ b/slither/visitors/slithir/expression_to_slithir.py @@ -9,6 +9,7 @@ from slither.core.declarations import ( SolidityFunction, Contract, ) +from slither.core.declarations.enum import Enum from slither.core.expressions import ( AssignmentOperationType, UnaryOperationType, @@ -403,18 +404,25 @@ class ExpressionToSlithIR(ExpressionVisitor): assert len(expression.expression.arguments) == 1 val = TemporaryVariable(self._node) type_expression_found = expression.expression.arguments[0] - assert isinstance(type_expression_found, ElementaryTypeNameExpression) - type_found = type_expression_found.type - if expression.member_name == "min:": + if isinstance(type_expression_found, ElementaryTypeNameExpression): + type_found = type_expression_found.type + constant_type = type_found + else: + # type(enum).max/min + assert isinstance(type_expression_found, Identifier) + type_found = type_expression_found.value + assert isinstance(type_found, Enum) + constant_type = None + if expression.member_name == "min": op = Assignment( val, - Constant(str(type_found.min), type_found), + Constant(str(type_found.min), constant_type), type_found, ) else: op = Assignment( val, - Constant(str(type_found.max), type_found), + Constant(str(type_found.max), constant_type), type_found, ) self._result.append(op) diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.6.8-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.6.8-compact.zip index f7a88ba89f618bc7e7a2c856e9d431501c9dadea..212d4fc534f2721641f97b11c287aa222ec58946 100644 GIT binary patch delta 1738 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 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.6.8-legacy.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.6.8-legacy.zip index 7c6610e624f65c8c603062a945f777d83ded52fc..97a4c65a6bf1ec666f7e7e0cfd1e1536f0c4df0a 100644 GIT binary patch delta 1645 zcmV-z29o)=4CxIRP)h>@KL7#%4gi>Y=Trv%n^Qjq008MPkr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@mdFej{l&N zR@~ZW>{YrE_gd+H^2@XN=#Tl`p0%|&(kD_})ag4e>)v9*2m>9ctEkbpi}tZc4QoPo zfE>#o+%4#K+v;QRY z{Jh}W7mO~E#$4Ra0B_caVMCBN%t=7>iI)ttZb1Y04?n#xiEy4eqzZ7vBtC<&E~)1S zx^qmMQg@Ai7-Hy8ih;9s`>!gYMM>+OD;rg`V4a3(deel;jnEvjRJZRNCCH1JkyC`O ze9WH!UQUuPd9ab^JJN5&7ZWNZp5WUL>P0FMEB@KITY6hEQ_Wz&NbmcVR&q460#V1Z zJ6;`ZNFdxqU)AGC)A{9Sdo?mfp%y;80K9GY>mVF|!RTQ`6*??Y||TQQL}!f*xgd=kbhhu#}B6`zECl8axMS_H`&oL@8adF-NfiN7_6rvvD(ggv44 zEI_4y1R@r}J_%%j8THAVre`U_$%;(My6xEn=_0K%n)IPX|W_Tn%^sUafe3j6*S;BIt2v`i^I~SRq=HI4de7(`gViDI@ z$tY_@uUOBoMlls(WJ6pR?+ej<|G6ECUR-Fu`xJWkN0cP50j zcksm_N33pogs5ZNc((FV4%u2>_rYDyIl1>DsV-olBe;qTrPXw&PkG>xE-u_H?e_k; zu=%U`oEc=5YVqN0EBwOOClnq6 z@}n($M7GX3q!5iCr2D-21G+2)eq50FSNpY(k8&AuaLj$+&)X26>n!rMsyYP5zi1qh zUO#w8leOTBPq$P79_4Yygh6WKix7wlsTxKk-0X zOUIX)jEmJn)O+RSUZtXU&d%g_nEj!YhaLB-wHoihid~W{4VtJ%RnaME z@~tbFim$w5Tu8#GD{eTGWIt-0uo?bfdH2uB>udao#DqxN{8Cm8;4 z+YGS1_sZyyx~aV(G_i`6~nF7#;GQ`*{&IL2LYsLbX8 z0iXBkcBzxg!dyPWTH*Ua=qXPJQYOPT_C?^u`peQ8FrXD^<&m8ISyW^E0Xi_m1y=vn rM57!~O928u13v%)01g0{d*@UJ{+m-j1^@u*FO%s7NCtrh00000yhJty delta 1473 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

gt(a}&tKlcs$xc{hbXC8BNK+f4d2V=TwQ+@ z=r83~bR4csPmI16K zZ3R4Hffy`{(ECNLzONehYa9o_5n+GX?1@(!=n_OQj;NmZ+U4fAD53Gg1WJjtbc21W;?T%JXK7@G25vAfo^a!{g#f!6_|=KMSaYHM zNfY2{Syx93M%fM2%(s31p*o&}+Te%(X)p``P)h*@KL7#%4gg?ta8$M(y#B%k004Ovkr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d`mV~m0Fa)(=sU>Unec2j_k;3!Xe5X}K(M8Xd0P+|}F(SUR zS)rb*fRXerr4SW=%)eQL8dK2(?P!QRJ$-^yB4NfXl_#*B3w!bs9uGPVeR==bxHel^ zu(4cf2w*y$lc3vI26oDH6EkeHHod=~x$cvIsc_m{ke=lMG{+Np^wMDlu?b_hY=ngO z>B<{D%B{=M%_=hNSuYue`x|Q_vMTWhH6w}`nM4N5&BOYCGhk{5%7M+!k+7CwNkavD zre67VY1RXgMrdU;EK3R4C+Fv{$2V}1#ffi7IS7&e)ROZ~0-VkP(>l>+b%j#xmblGt zs?~Mh%U?cnZcNr_zdx#=--R!MwYR7FEvlEO)$hb1(Q1a!AXHrAjfFYLm2mfUGi{@f0tcK7@aSh*!o^a=W<$SRJOnHj%wLbO^1$q=xgr+w<(< zV4kOg{=*_NasK9UP2NoTcM0cfKGt(FHqcJ;YJo^2}QX0`(b zUcW$WuhG@iaT)%JCS1hzg!fHLh0PF}&dLDFDL)qS11+s6)HVh>1%oqkopwt$cDgYl zY~R2cywWs8s|#R<)ta3R_ab>#*pCFHF+Y{~c`nnE)jT(VR-;K0OGMI0MY2abX6Ux(C$#ytYEXMn{#Ul9)8*b=>cD!HW|U=OC74~lxrNZBg{)f6vMT& zYjDkp1>fB$6Y|7eNJ@jZ2tt>UBJL7Y8OCa!%Tmvn>pio87n5;8fJnpqYj!CyU9h)^ z3Wx2VR;Gqyr}Sn&rZR<6O?vgBEaqRoz7p$%jQ~N&r^SvpjvJximGb;{h)Y z0k~DltLpW=chNCdV0=oZeYec`^$I#pSYgJBB7a?PRHgPH zK61G5Luwdq071SL=H-K<(AMaVU7ocLpK6!F>=+H#Q3(h)=}d~Kg*_NsMO!AmVsR0F z-3X3-2Z=4sr)r4L*wHbQ=TaELp2>Bbh{?yZJkJ7Y<^Cg@tMvYxvF^qQkbPq%1Vui2 zk7=KA=`D?)q(Im`E4Re>{6SP@XBFP?q3$6ns z$iysCKScl1hkruQ1_F|Bx8R9!8?H~?x(V-*Q92xpbKX})DJGjO)`Cx!yYEUT*T`qT z2zcpxEV4{OVbLe|9BRZ)pkg2ctD6%FQ=Y+G(aT7Iqflw6H6>jFre+t^W8b36GEJBI zUeCzv4W+cvH81xb%?wW!Y;JIW7#gXCX({Ilg@7em+}6j?=#*%hkcgHl%b@fEo_<7(=xg`f0n1mU-@t`v9GvgODcKQ(O2$nOf1VaY1Ql zkSQd%*fM^nbz`Um2j;CGYs9h<-82~ogrX7SoBmzMMo>!u0zU&k00ICG0AO=)RJI+w V{=x+S0C^RY;RZ+s1O@;A000C+;y(ZY diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.6.9-legacy.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.6.9-legacy.zip index 9aaebf2d6e4a8ac5f483dc4600af134a51383e7b..8689e5052ddfcaf611188c9aa11c3939f9e33c94 100644 GIT binary patch delta 1628 zcmV-i2BZ0!4ABi6P)h>@KL7#%4gi^Z=TxByn&u}4006)*001PD-32F+LL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{xs%`;R?8rNT#4=;pG&ZBvK5S#YjMw}#DtlH>Ok zv@IRhzqTDXo|y-PJk_(Pp-q2@EtEqY#Q~{AcDOll?HqAWmuB5++UsUV7PFgC7It-} z5|2jHpT~8CMl8N489H2KUedms)O5Xe5bGc(MK8)t**i4JWfYr1e+a<#vJ-`!;WsgT zTpnRi8z)f-?=r7WP1JN2o{ZW}I3wk0TZg|9FMAbIj3K-k&bXST<7*o&d4=Uphww$jlNTASyG zK;;Ct9-GT8lD2^GPv{HkXjHAY96>4WLDDTGm*AqLc9gOmQ6Fk1%Ww}p+N*(#R(Bol zwzz3a27}n`&-YS|S+jU7fF(D;V~rYuK6ezTH+i=#Zs|x}n#X^B8}V)n(zLiJ!J9{@ zxZp8Uz)`~0jw07wS4k)x#?iQ=%=R+yv(;ns z&_|Az_AL@B40VC><*NbC{0|5FHmQUFfVoc@gPVgmlhXNldpPJ4u?*c7j3~a6^`{$W z6NCqMIVpkZkxhSD%d}oiVtTTf5M_qb8AmqHeF1#7MYIwayC$&0ty|*>AaM5i5QIkU zHCQ>VLuE)>Co9scKWRxY<_?z7PhC|zoMSPW=za3}p*CsK);98j%{_m^q8+zHQn>7iMgnFeiH!{gb!;&UJgjoBt3TXapWn` z62I7s_XK}zw$20JoG=J0cN)XdN7#dy0~U@_e$S7sPer56$85bO^ubb0cWWidtn?

u0@2ZwYz&PQcE)GBBB20*a(3n6dvesw~(X+?IBmRvL1gN74(RbP)u%ur9@lCY##VOxD=SN7{h0pb<*Jf4?F!pnZ=8(rOW+t66JjJL5ShG zkRpfvloiVr=lniBLC{ZCA|3d2W1~9fKU7K|dSSK(oV~aF#F}IGGFYpv7zGGWUSJ=& z{DHS)+r9DAHG&;}U7t+cshCOD1cB|sOt^o=BaqUV`d0+VSWA3}KKjQ@ZfF#5U9tLM z#8+;;!h<5HHtyVN=uLFcJWuzsd95D?%nX%>22fZUzbP~qus zY^?gTHuvUe!Zs4OV*&mfAyg0; zmus~P?{JzeifkiFt{&49aQf!o6?zMAtr~_?5xycgO(;MrJ;q-gF{5LEx>qQDnG)g9 z5-kx!I3QC%rf32C$1F%4*X8{`afm7DISXp|;nlN#T>tYBjN?#C0Rle*KL7#%4gi^Z a=TxByn&u}4006)*lgtH325ANW0000D1{HDu delta 1451 zcmV;c1yuUc4VnxXP)h>@KL7#%4gg?ta8$jLDo1by004v(kr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d`mV~m0Fa)(=sU>Unec2j_k;3!Xe5X}K(MF96%hxea#k>y5 zq>k68e25WcP>?WxZ71^1DBL*+h)$AY8X{d2!1B&DTyK`rC`)R5%zmWfAD9-_+F`JbKTm=X3(-N)h~H|o&E>~c>@2kHE4AWu z#iZc_MHb082X$j{?s{=uj^>`heA)L`_U$CKpGsqSESesiWv`ahUj&1XxvsS%~4r zeopi{Pq**_yl3B5I!quc$-{0Zvx9mgNa(jiS8kKDu;BAGh*Xp~<5=_OG;0d;8}aeD zpH*ucPTMlR#{y}`n8Fd{1gXHhlVUVckw_@La<|xjtAKCvY0cVJX!R?qxMUO>LL5t0 zKu}#ifxGq;r7*%aKHdcAI+2?H9hZaU@gMl#EM{Y(SH!O$f_UF~mP2sl=@dN1i8ffV zWpx$)Rle?)d6PQvAHtU=ml13D7Sk2znGgVofg$ZRU_5x2!0rDt5v#rh0Y zgl{;EY@wmgwm>4fKUQ8kmNpcG@AN|iP2Kf>6ENjAiTaUIHRrjAQ}QKcvrx=b+)tQ{ zMfs~#)3gZ3_M7N+={K85hN{0NU}prTfHU!1?8v8Orf?~E?i5dC9HD=QG zknwiJlxgDbaEV~9ScKm`9VXGdFrKkuPVoqp_x&HA`93UgiJvirqG2sYu_1ms*@FCk zr>KcnV$*P|ZZ%lske2$^d$pj9yTPM2+4r^sn%5}67X9cRwKx}O#6Bw&MY$KN5k`(3@xPk z`b9jWE1atRr7M~V)17nX_10rt^tGFRV$Gsoz$kFh2I76WrJL5?{5I;?V%`=Vx%J4*#o^_*K=KV_-8}{8{<|1z|Ia6j8QJJrzyDpMS`irw}gUE zUasdxL-IP+v%@FqrJE;iuTW9UTFxc7UhudI7o~aoDL#NGXXk8=dbu< z@u#yj+nmVo@Dq4j?w6&p#I&N{Pqj!5oONZ_fO}7L-xNW$ zhEHj+fY@V8$lK>QnH)v8Y5ZptrE{Z$|H7ZBR-9wJGQLU=XU+QoX7!q}QrrzHr~mMu z;<->u0Rle*KL7#%4gg?ta8$jLDo1by004v(001Na0000000000004lKk_I^jvIPJD F004#k$^ifX diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.0-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.0-compact.zip index 40c8f7ae188a294f01acb38d04e78bfcb1198889..110a18177edc6704b05bfcceaf543929f5ba098e 100644 GIT binary patch delta 1668 zcmV-~27CFq41f+8P)h>@KL7#%4gi^Z=TvI-FZ@;p007!Ekr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@mK4;_LscFX+y*C#pXamxhZzYY=I5r&6(x6tHP;Igl{Cww1RIn z26i6;WwdnTGA~(hJ-g?-A#n*Ma^j`~11h0cc;q90Ig^p{2y30L_aOY@Fah> ztp)~vU|=oyD3z6GND^P5Sh~XPr&}18>Bv$D1FvlaeuBFC5T}yrJVn;yx zL{QvIJDsuf#}+2DHw*z+)Ec0K=>ey=X}V`@=GddHg#tJ?0;ti-$`^7^OJ^I$G44)| zw)Su|qLUCxAL1XQ(YQrzmEuPq9|MsgI@6_pO`1UH8y}6Qi855)c=v_Xj`85zZWfdP zu*W#OT_PNU3>0jd{4v3&07n)*JC19W zbLqtB#znhpD?wAQp4QKn_ItMtQ7n7`sW&{_LEg^7BRM$6y`vB)+4!XACzk>hxi^)6 z=)7!3ZC8;3%?LYhzmT4yw~udFW|tDzE=H6J6Dx{!!euq?fPy!%5mL5deO~w|ZBqeP zx^<5!KpNWPs=rez4{oCDPXep3BYv|Q2Fx=`Pz8e$oT<%H-Qq1W0jj#DFgd3w!JSp% zS-wqVz}ow@;St8V2sz`#2anPo=}7Ng>F8#Zvt*FPzGlW9-h7r z#E7E*;Ds8F;b)=KPK|jKR;7XWvDPNwpQ8-rl=B{){U#@%I?+~tDQ|%9YW+%o3zCYj zXuIgJzri2!JW!!sh~y{;H=sXr@!VO6-?+x?oKTiANc=|JG{hd(z#OBK z(YY{6ISmF@nIU6*3iM@#>y_<)U`?=R8GBy(d4J=&*C=+7mV37g!_ZK-ptq;h;KAO# zGmP^VTdL+1XoI;JVZ&S+`FL(Lba4jd9zIpT^>2_9B4sLo(CKinwT`aTAf?qX0F;lo zH>UlFTph$X*YLVY=#xX5N(B)crAep(x;iJ@wO&63ITEl4qi0xuV6FkHPs#0< zHM-M_o}oKkapFmLi<^Kp&9E~&%c$FEUak>tc*G#s&K4SPQ1;bF&?NobZd}ZT>!2`X znL+;k7N}8?h^6nX;1y4^7X`!xT(p1QHI7mgOVTvATW6%gVS-3r0aE^eSo|4w!XYd2 zLQHB{8Mi`V9daIafqJ-Dm@lR$>HZEA2^8q=-a5|n)Kt;bHKD_ef)hBnhxv@KL7#%4gg_ua8xcHXv>ZT004Iskr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=LcR1E!1m!y>!^)gAH#(Lf@wHjww7vt2WwGj+3E9b6 z4NsLHVp^;--h=Re(nqx@c1r{6Bw50MQ<)$c&B&w5vcHxKo%g-IY+Z8PT@L&*!oGM~ z2yDwO&{t{c3bb)00;Qrn*8nVreaW}xJI=5_Z+f0Ow=#$@k~Jf(dZyeC7l*+d;0l8) z_!ciiGHT+t4!Feycr$xvJgiCe)T-btPoaxh)J?|PPk^a^3(?3(dYtgm>GD$}E(*Y& zBq`BdapkM{O+%&AH=|F;EZ_yf&#%8xkx(8JU3O4vH{6rJJ$gcocH7BE5qelTCNXLBoxIvg?y%EHo`YLvGVKPiu6ulIiZe zzl;GE{&XmwQcVkp-(~D%gmXuHa~Au=*`kC(14`Ch@y05K!$~@JQO71T!5RBgd+D%o zwFBfx(Q4qeSd-zLKswvCV+irlw?vX#eQ;%ld%eF@dHXra|GzNvhi_dJM^lJ>+2XZqpcGP@!XQE&Ij^)T@@BiB!OYa&KK>WIBpoALe)rK6EtcHtg zQ;ly3^-|d^e298Y)R*HTOyV^Du4%m;AYAEAK7-;x+H%f42}-3zgT3OP@*fQh@XmIM zTvX|^$;yH4ae~*)mb7Hu|2w=wJf$`TlU&LdHBJJ zCH8AP#Q@RNRIP9eOlho}n%rNN-FDxLX@ehbQ^9Y*$n+AK%)g8m+zY%Ru(W?_uK2Ql zTfu#Pd|3ya{FPp%a!H6~)7e&QI{rf;uaPyK9G*->2EgUZ?B6ID4HE<5;`+lscfa5l zSPQOVWC$?IRH535>tv}E(;4PSxWPM~$@$J)-*9fIvR3Fvx zQs6d0CL4vp9+`7eC{R5Fd%db2gpIk2o_n{FW`pxrQU*>7j|zW^dA;7`&Qfa`&expt zQ>QO^M15dUL#_BoL;IN~#!}h@&6uxi!!eE=L}bR6D^4khna!@I9!*Rhqbg&67RD{! zXcU@!ss8#Bq{g}@PG-3cG&2W|w;hQINhzv!2r4ii>zGL9Ik!U16q?;^Ga)*8;@} zhd~u%JTP<>m!c1wi!X$6PhMYtkYwOTei;Je?rKghUWFxvi!K+ym!P6XcFizSzau4> z=K<1wh@TRrY70u}YwZLHU;v9xF3)AImuY$>cgt*Ty_wIE;eT78GpwR{xo3#?52-du zN!j75e6nR5&U9SlIFRob#R9FV=U;-*1~(M{LY+teP)h*#A0CyCVvIa;7&;@KL7#%4gi^Z=Ty4RUp@*3004R{001PDyagwbLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{xgTZJl5-BCTEJGz)(!dVR?7*SD*sf++B>4=w}) zs;>EnzfyblyR&N?VnGYj8Crj}6^W-x;e?5$70oO$=0Ao{qyO=}xB%PVqO2wUTBLM| z^d6nTU^UTJorD{o-?}9to-}~}VIkp?6yr%Fu4Eh{zsnilTEj{vh0L@l7fFIO zi~9$P;o*moNd#yvJfAqE)0n~)0m}>KF765%$Um+fhSn#40Cp`uja)28_wg@!;QU01OK}C{{*TOFf7Gum} zyuPJ|F2sIEqgGvA`ENAdayBDU50G=QU(K{*;_ze*`%HgmBA(}pA*N-dC%MNO=goo7r549OpRj8hgKFP@h>e6n73I`|?cwD#Auy$VW=< zTXSlNr>;C5_6v0rmftnJ1}y|er$6fFxRJUu@$XmKXT>n1---H+p+0`8djwi_y$73E zQi7!QRUdy@Im6HO$8_EoFL&@Fa|=J_(^iS3eEtapTlvcr_5%9?9ZPDRL;u%AoSmA# zDhA%;)^DXR5dwJ4I>M;%KLsN{M4q_oBUXPpq>uPZC4=Q4O3k~;L>u2-!pCeccP9`I zpDgd37i#`~N}LZ7#IfR)=w}%oyU3=V1!DM`C|Q3QX~U6|RqED9FaEZq@Bn}ekJOW0 z{Fqv5D^aEU10)LuOutDhHm71T%O&MY4`k(T50t92K<8Dv-VxCn+4bjN(2XYK`@dr@kY9EQ@~Z3AG(vK1xpxZGokW8RmK|7u0em)>PI>;38%vhFvJW)kw4O1yPs>TIKv)_ zMLAx78@7D!31%&#v4fzWgP)h>@KL7#%4gg_ua8%95M$=CP005p7kr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=LcR1E!1m!y>!^)gAH#(Lf@wHjww7vtBa#yojEjz6D zi$|0(Vx2Ot654)$;s zq{LI3%GFJr71;}}nj&S;iw(BWps(KxlXV`C<`ad87M22W5l@QYImcx2U+Mv4MQ+8j zpnD8J&TbJTEqBYsLRw|4eR65l#DavtaEIH5#%iVYlP%bPJNt?So)&0iv@R9SZ#r1% zkF=Sf((>SckvZz7sttXe6Hrq*edFln%vc+Fq(j+!#W{6?=a!N94*> zgSt|s+b+Caf(n?q5@o)`EI4n_X`ms&($N?X^rmWb3C;e{MwN}*xdzY?#A*N-p?IQs zCfMqQsoj|GYf+Gc41?G>x6~o0Q|RM+PK1Wm$>sfj4YjEwtMMc_Z8(uJ-vY5j@7DF= zlBe|Z4mDb#FU5yQP8ewbHv$cnmsB+1c$1l;1h?ubU)`ZP+jlTw=3^yj*cxh=6zK&K z<~RD|HphOaeJYLF6gqngc*%|w@?nsC+bL;Y-kt5(4LQzWrZorGNF42QAn8^(H42ae z2|fRRF*wSjn%w2VrZ$geF_6Qs#72YQ#lf*bmxTnkZrl78P zl7Exo_fa(;j{ha!NbTX_)%64r)g2)hs8o^myq52ZmlEE{FIolH?d`wme1=$S$(Cf= zw%*^ngVl&08H01@GLV(G(dAH$mH)&rq*}Ir#E2$YwbA&^)4VP$r-X#g>=qqYJ|mwV zAkKf-aUPd5#OQx^{rdL=dR5NgL{tfLhe^RJPi8kz_|f?rTL zqTU+nraQq{JG)7U`S9{VQ0*|hZ67$m-v#GUG~y#>9V6b;=I z>duL>I5>)U?cEaclN8l(!Vfy!u_aJ{4{fh^)#1rD^loI2tN%U|_FVavT#Bbl?m_Bq zhLeDjRZ>mvYrUB!bJZG?$4~eO)ZH<}npCEn2KU(NeQt$#_G-EM_disyh6w`#;A5LC z6`>s>yLdxLx2az5td*556+@>af`YETK zydl*r-Yx{luMA^8RhJYniNkUx-G<0ZylPc8_3M4_{A+h#P1NVFd6GrfYI7}&S093n ztgthVcfJ%JT8`ZMcJc~*`4f{utW*>vF+flv2@t$L?kq{4{;$ZA98ymP<8zkufah)k z9%UCw7ZE|R(hXf+^}5$v@*-GI5;L)0aYDnIUcR|T`B#)XU`3D1@KL7#%4gi^Z=Ty~8K^RyD007!Ekr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@m?w7-Kf-vL^e`kae`2j{02@R8TgKY=pU781 zs0VW^mXyOL_GP&fsC*MR8d}?vsjB}5x!hTu`T+HiFv=2t3gSsnmEu5}v|g+vmMvAc zO-v0|i+f-i&KEFGg%wFs>Ps-nC{$$_WbX{fTH|7Qhw@=!^RPDL@O~jd!zL1vwSFFZ zy5PYbAthTOTuQb;RL1_Prwhy!HVC&$a6kBsiBp8TV8SL7myQ)UAY&u3n{8PhN>u3f zYwy@$bn9AwQP6vB<2@oE*7MorDhN%Z_HI=jGs}Aje7KIZ2gZLK1@WYq2i(xuEkVG^ zUV%X5Rqoz8C^8gVgrjb%y{{I9#{|o7?hdk$FE5&Khq|wUIl}&hfRj)N7-l-Fr%$Xb znH2U^G;*d!&K@HxDwYfR9ZIrUV6L|km#XSU)-nEna?X6cmrvr)7s=*j-0#saQCBI8DFl`;&6ehJmO?F<2n-jDqKr4#U@vKlH- zFTFv3Z8TaekIU`x4C09qM_hRQJT25ID%e)2O7SXIe)O1(aG#~z>s{a-AA;4SB7nETlrb1=RL>In~#usB7jAgr8-OX zP74agSgr^hY#Khx9Tgi+u2T@n6X1_S^0;uzyW#X3MGVB0&@X~U-GDZ4?X7gdQ<cSK;!y5Fi{W=4R$%PuIu$| zcdEyk<4>A1?PRp~f368`>&bcV=_#CH{^7!4`;2@w5wx>(h86ylNU*)|T9UVLux`x3 z6p}e~fEo8~Ne;2cW+IHER{uGruWx#PThU>&Tp2P&UNcC;CN%v{8PnM4$-@8Ax@S~X zM~LUjz+=_ra1n(FaD!~&w~=od?ZxJfgPJUp0}G%7cM`;I>c7eR_b5W%kPze8q&7D7 z7L^|dg9o4w7$WE5^FP1SGX1W4u=K6DQ1b0BzHY@ceW-Ympe7nYAiTeml{ZI}1IgP1tS zRahVX4iRH!ANdNMC%$f`vakH|xu{n2K3uVsLs4XlaY+sTh=!EcJ&TZe*7qLvE{>3@ zi}w_7#&(?a)RfVGF&|G_v{kO1+q;0rYn3785FZ?};Jd^B7|qdZDt1*3)g*+i64pid zrXz`1D|}=F3!GbktV@DB1)_^Fm@fJM4N;;1P)h*@KL7#%4gg_ua8yRDIM0p+004Iskr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=S>_e9`g-%#6k~Fi-!$mlMb+X)Tjm$nw+hT_UP-07e zxo}eZj!DHQGyYP4Vf+jt^ACzwXgvl>>18|amsONbPK+*MdX7LNszD?If&MYX=?_c+ zB<&;1BerT`Hk(Jcz?$SH&Y^9J^+)x$>WGR*ZJ9N}4TOjSGuIR0< zJ%&{uTz;r(ZHJ{#1naXzhUw?+1+QRS6IY@N-sC?b8&27OJS--EW>E}1&f@}X)5p`I zNDz~Poo|*&BqtT#>_tTigo z>%8A1z#(^8q~6%IU7|3NC{+Ysrt-w6KlPjzFSO)YANMo3OOlKtBDLn*JwS2{FkB$N zpmZKG)ng%hSUb}*1W^)25_}QN7%K}sl!f^9jW3OV23lmo&j0ZfX8GD57}U@+i$MbCN{2l7a0J^WuReO0QcKBV13EaU#0n=p9^LJN<7bSLUv{mA(|)1s61t zmOONS^8dT(nZzY6dS=r`$p@zgxJaj0b3isAIo5}R*57$J>WguQH4`*A4+`ClhH-4< z4>qvm+6~;Pys; z!yvf6g!K|0S4l{W813fje{T$>nA7`lGmzi6P<^;a0Nj1SM+3>NQ7TUuDG2s+Oi2W*KRJ**S|w zh})XyOxm4#J_S4mh|XdWHFQzrk1snULeiprg)_XpJ=C@f(AuU+38*ZaDDL;&YY2%} zTzG6Rs0gFvWIO`8pDcqM$3*s6v*gsS^R~TsymWn`QgHdypwcZ2dUcnW(3&V@+sPiW zDZOhDI#vUODa%8w>uLbQcpZd)>Epi@s!ZkxGgkhVo?SuHG$tgQ7w#S;GHd}1`LP0Y z#(#!*6HX%nj0B2Qx2(t9g6pG9SPTg+&CAq#=`jm+!X}k+)w&rtDQj`PE-|RXT%)+X zkB$&q^?h(Q7xi-=Ouga!yiXznn>jHqh@`py?hgILP)h*@KL7#%4gi^Z=Tx*-;6e%p004R{001PDyagwbLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{xgTZJlF~{EzqIHoNMFXdig2XBDhX6AqOsA~4Eh ztKYM4ec(NSlLVsEXw7Fz5&nO~7?vp6=Y8C;Sg@i-2J0h-tF$LSAx;v&{tr+40p*aH zQ0Y*+aijhro3u#;-_!R|Dr&OpjdvQ~*!~&F-s8nIXv8mxT0B5?!MS#e#Q6=^fERkt zYb%m4RZy)Wr=6J$+sPkHYu9*pY|O}##!!+epN$Btq_s7X8Z&Wa=aGNh?X;t=d5Trw zJ8@WPQmL)_9L_UxF$E zA<8nB%<2WC0vRV!Vmx4>gHKcMPk0Z<2*V0;CO&|sYk74{5(`Li;?vLoy04JVC+?#t z=r$~88UB5wyH7%xxIcf}fD2?9H^)MX{v!KD&_85m^IhlP4I1d;DalEpbD%(IEW>#9 z3|MKaQf%Zp{r`Rl~blP#nkQjA21up$2yp1#ODP1%)4I53btm{{?IgD zkSqQo3T~%FupSPGBP!TJQ>^jhrV6f@tM4?Qk}($KE0HhK-?D$4%6Ukper8g+aqeiE z&N*;wZ8Uzw3sJ$E)Kr*{BtIl+-dAcsW^Ax-n32Pm&9p<4Ej!Hlwr`pPcU5AP!r{)de}@VQ$@?75yq-d>3Xmb zK*-3lIA55%-b{bg#JbLs(IZ+p(^m@^wz#eneR7Mc7BvLw?R4v!=UE?~Q_Si8C=I}z z7$=?By~N)oB@+%beaN0A)k@|J6Y9Ps+Be0YI6m(-Ln~mD?|ZUnb0M0DT7ZlYdhZDU zDRGxC@&iiS;+PirY$n{p^k{ax!`mIuDNY{9jb=-_`1f-pU9>{7`u$C?;N>=Z3z zJ5jgQqydXh9las0h*%5H3G4{aPMP!@hB2i|cMO14*GAwyIsO56T; zm@eD85q=MQG>c&j!(};xB07uhUJB4d{^(+Bk>QfZ<1?apO9W;xlc|#kHQi9`_sPM? zv8i5k=gxnEc4NOI>p!eg=`iq(z&`g2sk5EE@x75d2A}Pn5@0C7+JkBoQFg#pO%H9U;mi{D{};KL!t5;9-U#ZQc7#pYw1B-;GHij&9e~ zTb>Z;0AHx;TVj@BnhYZEKxC`sd1m1lM>id?*G*}9Ue&Jp$6&`#6~6yXD-){?ud`Hk z*!6$UM@0&`S|*Lo?Ame&1iAiw^(~(Z#k+Iyy~E%krf{jXZRqaN0BB8AR)YSCdeWUhzFnn{igu6-fz-T_(P?WZer2sF< zc7ok_@>HOAoUSoqauWQ&j&asReG)u{&Np3J1RVRUtHhIR!e=c{S>2-G$o*2=VymD1 zP795A8qynXv!U2N+&%u)h~yn(qK+k-=zM*GY)aeZ`ayAZ<6SNjwb*)RTjhyWz8Zi0 zc2N3lQm_#F!d*V*5v5GHNP)h*1%&#v4fzWgP)h>@KL7#%4gg_ua8!gyhIdZ|005p7kr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=S>_e9`g-%#6k~Fi-!$mlMb+X)Tjm$n(TF64OwPKl_ z?C(FFphlL}937;8Jp zu+`mIWBbOodN;kDULrf)BI54hvQ0Tr()V8p``bsg;ATjF4}qe|c+9u1njv+tj*9Yz z*z{GRP^gTK(*2fLCzigclHofE0a5rc39oZis#O%LWR9$2$Ogvks}AX0oB87@NUov$ zdwFd%ezR1$E;xOf=>`M!Ai_!}cAk+ho6W-yJ- zV!{`QSDN6pCPsLE`Ad_IG} z=tz>)S*Ie=3UjbF@iXSw|R*S1u*4va3}w8;9XxiYu!<#Kzr zf3zv$NbyysusY|oNSzrY{oJ7AeyM>x-yL`sE;=xOI<3jqG0f%{qFiew_h*2aiIktj9{DS-MQ!m+KQg>>}3XgFC@9Krc>{6I0{qo(gdkDD4G; zf_IC0Bq@do(D+GNyc|k_rC+i>8cC$8@s;iyn~!*fb|B^wA5txtUN&r*lo{-@J7o!( z>4{5!!M>wM{=J4!P{!__;NSlS_^a=F^mF=fm#b&-rY4C2NZ(XO?rrZSsfpbj9obrV z+{>1NTG1^P-iuQSSubY90ggzY!`)iC#_W($G92o+O5>L>^uTf?-rWqK;ilh_eQ(rW zm7mVzw$op`nCauM)tvvEO?#1D3;M#U3kIftJmCm*Kq_2_qRL;D%l#t-84HI;^<%HD z$QDbqqf)lH{`xFn-LcG)0o#Vccs`JiDc1veorvl#|ti$CT;H8&=RS}g; zjtFaQe!IfG)WKDQ!Cxoa2b;Rgc6t~CLE@-Rb;!8SucnCQe=8YDi2Ey`GxCWbfIlSQ z(p@KL7#%4gi{a=Tvh5VvSk`007!E001PD{RJnHLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{xgTZJlPy!iRmgePW2CHMK7luVtv1T%@AN`X~S< zI-K1fM4P+wIg3KCFeCRzIWT`LzWw|~Z0ae>3te7-^d8xDw{)U8r;i>x*)N_y^^_N$ zx(84%zELV2WEqcP?^vSz95D3h5SUk$a_hjlYl;KW{N!W?VQ>agZKu7QEp1gtI*O40 zRsm9uo~^^8&*?7KA}J*ox)J~Xl>ug^Dh?kKf5s@zfu|;eIMkzz!peU${^74rt=Xo7 zW5MaXp+s4l)PEc(b|hDOc1;G7@`gX`>+ehI7EQj|ypY%lNLXbI+bIT+BRhGBTRh~# z1&&)h@?~G4NSNiy8g65`FLl1v-Xm1;_PuMX#!ocKpEwt9nx{)!*{xO-csX>x8y+$= zrVK?q-^VZCoW~kOMtXk^=ZChLciksH7&K>Px|CFbd-g3*anIR*=yHcH$Og*~BhnKi zzX~t8@x||(=@eoq(_qyNpcBM-G2GUwk|`09-HiRN9V5ZId32Fh#3D1{T7?v#B+2tZ zdP-6~h?-7==@0?0mrTLS1^;BHT)S}(FUSN$3z>1xJixWf4!3_T;ixkl_nLD1&TfPW zn>$53*p>l~sMw;q`462$l>PJIw`(}WR1(-RWLkFItpf>}4mx?d@>CfeQE^b;Sa9s* zm?s<=NN#&}d`&Val7#UPl9n94gjN1-lveghPhED~yOs3-!al9#-&l=wMYkh6yzhE_*{TQ+PQQww@q>jZ|&!IPR)BAPMU?IYe? zIV8&A(yTSizr1X`nJdMJCGI_Z3*kDiNFda(-Xc9GwNo6JKGJQHeE>E9>U4XB%$qS} z>FbT&CJ;F0R+dc;hJ9`KR$_E5Cx1eF5Y6u)@^F)NhiQLOg=^WxRl)7f9obYO7E47_ zZ-!;&<%BO5n+fWJ$BGK0F#)MYB%k+9Cm#NPnQS@lbx)W83!e3-CQP%{8bPRf4BGtm zpVU%pt)#45U^5NKnmn}Rh&I)&tts@itRN%t28S>69*ok)q(x=$7{$)@h?HOWZ z4(>I9`MHA$?xpWi+)3uie&YBYwqi_MqPJR1+*k&($Lbr(V2-HvH!G2E#&r3z}7iD z%hqJ!8PD3r+v?l0HCB+P z8V-L6p*6>{m9iz~LX*`^EQ$vRzQuo4m+cuOiwL(x&+WomF|3f!Ca^D*>DUZr zCEvIpG3phoB`Y9o0O~CGj-70;VMD(mJVrEWebYS^Uk=&_Ci+=nfgx7>sTpE|@mzlf z_p%E%y?y<`i4xJ z4sBnoKolxQ8JU(}ER0=7VmHZhHo1@11s(g6a6ppe^5&S0zU&k00ICG0GfN} ZRC54gjami(0NOK?>;*^$oCW{@003WVD-r+z delta 1469 zcmV;u1w#6S4!R5&P)h>@KL7#%4gg_ua8wz@<4TYP004Iskr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=a3~{=Cf+i}5^%X9zF@4h(Ah$-BR2Cw_4Zs>Pq5>F& z7LTUv#WZ;`5JSa(f+wA* z>Uy{-V1+#;h0PFXy@(P6A}V$nb*q|6vw32jwA4#D7;^}JYHm9ql(%a57PIUet9vNE z2m9=#c3`n#N9Pd)x#+?b;r1gW0}cFs^cGc7KW5ohk^|15GbzEd0?t^R}Byz;CjFWF?K zt(&Vll_BzfAe9VK!^b&JdI$9j?p&Ck-tDWb7QzXP8!k2gB6XpkIXgQ6#Hmdx*{aTR=>Tn+oq|2RnIKJFhn5FBEu+F4lHj8TyLlmG#<-PgG(rOiVG9Z8YiB`P z7FVA>1FhAZN*ruhtYKkB2}W;Lc$X4Ox~GXjjs5X|Lv67i*URl~M-_NjM-OUbC>Go? z*BgtrquCa0ymdR9ma*kY(fCI*|JMGe?4IQeUce|Zhj4RklxhQ#7qW2bE6W?I|ArE0Q1mY$G!5B7;7r_(zBRMv@2bK9w=@s>G^Sy`~Zx8 zv-?zkKA_sNChRz&u~?tLog}6SC0A9$4rreYs*h-AN5qRpkYZ93xS*62I7b9OlIelW zLP|guNz+9z#9Wg{w#!MsoF|tS=#N>;!6o&7`x{Ch&ZbpN9_(xvUw{cW?$Qqt#s^A$ zBctoHa%eZ{NlLCa;;7cx!_z>EcTNew!R-)E8N(W#>o&|mrPTIEs48oz*Gx1BqHI#K zgXrq?>O7Y0t9PVphtY7^B}xc=+@|5HsLii)|9iAoc`it27XGyNam2u8Q7iyk$9^`OZsr^L*a*PE#_u+9eyRldBmq1oj6M^@onfcD7>7#_f}V1{hkzIxYS+{4YXY z>-ex_uu+vV%sWe1uoQN$_|;AHi4+La%nf<8_^+*%wZmGM>}bOv0Wu>lm&}RnThOf_ zovUrdq)mZ*9G%YI#dAX82)0z|j6D((Z| zzhc}sV^tuCzanCei(et+@F_Gt#RYuokuE=GOPPf9QX+E%u05-0W8}x0Vu7`PvST&J zDtpO)A&w0f@u#f`Y7@`&)mrHvk<(#{F0q#O7BTa`+M;R1!ub!I_eKi9dOn=Z8S%=4 zLm(*Kl(eq;%c(yRj@v|8vvfpYq?Ft0Rejn3f=m5vG#r_Fy}URxQZJ~TF;G(GLPY5t zRa~nT)Zrx%c5m-zZT+?-f&RdM)0m%x$5n8qc*mi+m3|D#zyuia)vA0Y`&%f|(_uOs zFECoXd;=-Sg&K{H^H;GrrhYOxXRkWO=9$%6rf!!G6R1`j7zxYT?qF^I4iffGOuZd@ zN8k=itYpnHIHtGO)%EqhLP#L}EscVJUXCh=ivRj}`Y2FK0Rle*KL7#|01g0Qb8u7{ X#N$ek1pokd6qB|FNCwgc00000%zeae diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.2-legacy.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.2-legacy.zip index 29d5bc9c84932e142519131109f14c5f63e3c034..f3e120bc8eba0ede78f79ac01e0751493a5cd210 100644 GIT binary patch delta 1601 zcmV-H2EO_G3$_g#P)h>@KL7#%4gi{a=Tv}j!KDla004R{001PDz6B?dLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{xgTZJlPy!iRmgePW2CHMK7luVtv1T%@AN`X~om z=tLcSxFPFXaU;{Eo8C(ou3CRZLN6<9C@1R&AHbZ{#Qvw?OV_2p&Fia5s^)pH4Bq6; zq%oKUf#dq%;>Zxm3Hzz{A}n=;$E`-F?&PV8a)+p8vesO|@u|E*V>$&-Q^?rYis_{H*gFa$T zPDyTn?;HpGRx={&d_{z5v16n1agX+y^RYa*9xp+y!cDDG3GA&FWfl7<&h`goeR#l# z*7qZckCpIE4ap4Ixxnc&qcSNpDvz?u{Bw1epU+3Mm_)3&4L2^zG^+tBCuWl)R3!c|Gy_4JuhpLLdmP%qN721M6R|-5D>nyw;?dikG=g z>OQ^_ASIB)B>l}q@%0UaHmxMRadmARYFQu6p(6dZE)8jhpcZ&=CE$1sJN*(s-j#|0 z$PzDpWGGqYS6FY=5row=`^K{8S#4%UhHl(oE^oY7^h4#}_rBXU@FT5Y_Bk6^q6)<8 z(JIp;yqHaFS(|^gekavUw>rZ*n3EtddI4YRQ=4%Dx8#)+)QY8tr<;rlK8oy1C-|J+Rdht_$(FqxZYG$ya`vQR)+Q(ZI9i~ zwsH`H>Bi>2i;RrEfbLGuc#<&`+@~Rur+_MSE1mPMX`X8jUTp9Q#pGI*2M5c z{-;7eGL`n(MKK!D930}Do2CE7ZPa>j&;)Pd;#8%>+wwNSQVRw$pyVOXmKs-6DgTC+ zuU#6G+Niqv%1z}~l*yguhiy$0gynxUa!b68`EhFuOzQSY2VN1=r~!5z1Q5`4Tr%&P zA+Ue2(={rZbDw&eU+&~zvWNQxB zyO8B?j@`@w%g~v|o$BCK>vBFo!8m0(ZAyETZ#ONpP5!f!mIg!k&Q{@8PJF<^raKc&rxyzcO-3Xw-gMX;v_Z6k0Wzpc%kHw!@KL7#%4gg_ua8&tWoXAlH005p7kr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=a3~{=Cf+i}5^%X9zF@4h(Ah$-BR2Cx2OFncYmSe7i zWuj)&@e2`qi!MQbn6=WT(^}@Xs|aJA>O&*Hwr$ZU@?d2m6! z8<+Q?_^C&95`(d9HdT=dTrF#@W1sndKI-CKbFqq(-^1%IDiMRB&fFXP{xrQTiY#Ys zZGghb8)!GF`_rVoAy36c}ThK7DQ$ z@CEH-Qfm!JF~G5p^ilgF-E?ZDqV?OK;32+$p6)kUoC0>?k=xdEFlXC<4Q^zt-uR{V z$vzO68T{A{Io2Dp1ZiS5nFl~4jg60~;09gJ4Jxi40Ka(T!6RlKxsQ6zsvVc`Ym5TUg;iA1?pgEznt#%5c9Q3R;+J(?--YgYLY%Lj5(ps6CPt?*|e*BF4dHOx+yy~ z_UO16lR7vT8>VUe;xyYvXRVw5308*z|LA5bJTPPt8Jc0>2M5G51@*K-guAR7gE9@Y zYtt1%!5E>hy2pPyJ>~E0gsu7vG#@t9_?Hj7=|x;s*GOa0uJDQ%SV2h|-7{7@(-1+y z8OHpOc0Slq)Z$(S?Fo2gV{o=n&Bm_r$ke6?j0aK+O0Hv05Q*}T&*$=diDNvSGymza zyxKNNS&W&4t(%BiV9RB}lbiqhokY)2O928u13v%)01g0Qb8uAoVVuZO1pok^6O(8L LNCuMy00000Cd9T7 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.3-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.3-compact.zip index 2dbf4ac6f415f6bba26ed539ff2071a5cb26e1c0..4dce33e808f9818a1767887730f61c8a4180d135 100644 GIT binary patch delta 1671 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 G0000j$h1uW diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.4-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.4-compact.zip index 0d10f765b1f6424a82bbffd23245ffc31caff6f1..0dbba1f16fe6b5c4f43e9039bb6b8d4c8c4d920c 100644 GIT binary patch delta 1675 zcmV;626Xwl41f+BP)h>@KL7#%4gi{a=Tw1Cg-BKg007!E001PD{RJnHLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{xgTZJli>#3vwj0`S3{sKJ$$Y7mN^z+$wxjypJb z91BT9-He`1VasA#c7CMHL)Cwp+=OJ(`A$qxlG~_jiG3{7m*C?L7N4PU6pHs;a5sAW z06pZ1^RN=5H2vq7@4*OOPJBcNr3L@^Yo%}9Qe}r;OCSI(?a5#RBl{7ayb!u3lpPPfbZ@x3&ZK|4exKi}{kch`r6@*c3$AHrp`w>98`Y!r4`` zlCg2tnBt=m(0Rd*IyB%|45>Y>RzG%>)zqVb?#=XYgGT(A) zt(sgO7S$kLfj?A=0r9+H9PU>egb6>P-DVs7)|}KPbS1i2Nq92tXSn-q4TwMn5!a8C ztue#MWUFd_$%wS^u2df_)k9YrzTfG8vZ-zeMBUo^qW%Us)K9&nRT@Z}U^cWg@=0q210C~Tj z=z(5IrPEm>$G$G!zhnTm2*Y!oiVg<2vqg%ssulYQZ^gG?(?<5OAc@SUy?&^JB{F)( zG0Wo6R3(2p^x%pIcwd0?+E7+DA@F{qT;$F4Y4f}%w_qio6`95wAFb1XT+FpjjoRE? zDhh}+Dh54{V(l)Y9+qQ?_@(RL7dIX9U+bJv0!i#x`vb!B84Z!41^7)?ILI0(v~pv} zZTQpUi(@12VE0F96QAMVz%tmz)InP*dU4FF1kZng_sLg4N$Sfo1^;7Q^IqG4GqDw1{g} zU6Frat+*lbR*Frn@~JUablxYS!09_|*?eFux03d4^<|;bl%4U?uA}Gh7)F>zpo&E{ z7%?%>uFU1$u4|O1Tp%csV|LYlrIvv2D;oRF9W0?5sI{Bp@=Vu8SIYQT@g14eAuoJ* zYW64rt)FJfqj)1Y6uBV`m+AR{Us%1UW)Xh|VZSnxZ}K|%R)*R>J?cPRJ;36K2rHr5 zp@cD3a#}+c4$(i@=c~x(@(|9`TvXXQBAPxB*NPv9Le{Nc3zF9T$<|5)({=IdzT4Ju zgLp)#B^dqzi7Y|kg4}r>5LYc>OTEUB<%m1bqDHffc$gQH1v*Hh5o?GwfonIS#)^MK z*E($BH1Ls_pd&_AD0nE=v5At>b& zwWWzNo`s*`X{;=$U~?5hdd0LFnD{i6AC%}<@YE*psRyz57A9OdPMnQ0W4VWlUiI1; zM0lvxbbd4SSHlLO62S`iaQx#?z)@KG*IoL$_B@#T(rp8hVPRwMg|$Tac3zvtRr+%s zcvQYkaNh7|_OoJ8m6T#Z>yN*E*V>nP+Mss9!TfA3F;GhZ0zU&k00ICG0GfN}RDn)~ VNLB^_0NOK?>;*^$m<9j<003dIIDP;C delta 1469 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 delta 1404 zcmV-?1%vvt4f+chP)h>@KL7#%4gg_ua8y21B}GsL005p7kr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=o8{z4;bkGF+(cce6KpsA1Ug;}ep5!ufc509SEz$c$ zD{u#}XvEw9#LYZ^K&FqSar*#`O*E8B6*8+!)&D32Yn)2c8Sx(@x_v4P!1;>w=G>j0&IX>&$tf3lz#~#Pq|Gq&W)4msV#bV$5 zT=T5+84>U8x>$v%C?TLgh6*cv249v0iOwpK5E>?sHmRf9TmQI0((a+?kNm`QH%-gO zfDD_CjWGt@aQx1j3=J3Y5AxUa?CVxbs&-F0PI(Ke5m?%6AqKjy(&cz3#cVGoUzNQ@ z29s!;#3)C9IQ{R~`b`8xlnXY*?*uF(_*sMZF*L=rCztJ|yKD0@$aN z;fKueI2*7)t6jH4qZN~F7IkNCv^s;wx0`o=MdyPl!NtM~(rNo6J_+VDrhGtE9SaNi zt7x9iE7*-85xEhoK;yOwF-CDapVEi5I=H6+JVD2QbiwAjo7Z9+d~oMp{PsjhAhFq( zq%50zqvk!Tz$JdEU*Xkpz@QmDIbd6K#k)r>0(J((w`E!oQ`ifYNrz-T*}IFoc7K!M zP3{KJ@zGSJmjR+sbWYhxOw$ZU$1AXN=6$mZTjh2?MX@qv0`dIo$JjesN#3W+VCw7J z6iTOmmNfM^zIfN4?oD2g&^Wz>k`#7_o^8r@CM)~eCkiNFl4Orn!(O9x^zs=Sfa0u? zUptkgy0(HO57#?qJj+$BL@!fA0iS^EF{j5MygsXihXFhfZ>}{;?j(!HwnS7F;Hh={ zV6u&sJ_~m0ZV4QyV>n*mpNAQpXSA|)-Ty*=Mls(1nkdXeT3soPJeX29da%8Q;aw^MH8P@;d7Z8%Bs7a{E%2Kt@g$QSb z|3r*6i4}udX)f1`o{1`PZ2^aDm<{SS^{Z0O#01MJRUOUD2TgOMZso& zk;SOp?)seH*&PIG`a%-r}mg9gaQi`y&q=PXx+K!LyR6k*}_p&R(V6={%qVQC^WWiKaCn!Aymd)$Y zx!W*eyScOh$pZjWs~cH9-Sej{BFtT_v(kxXaMzLKNfPRmc$|^!rXLfWRy3VKk)=rM zLo5+nr{z{4TV~n7sCEeC*B1Iv>DOGBrWJe?zy5x2;;`tD{8UPTsT2;LaYfWjz3EP_ zCPD`*m&{^Gm{X}yVDW%joc;JaGT=~40Rle*KL7#%4gg_ua8y21B}GsL005p7lVt`- K29gB;0001PjIFEy diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.5-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.7.5-compact.zip index fd8c2c3aecf88002e63520cad73225a33dc0fa98..74f16709c265f9fcf77a731c4325f561049492fa 100644 GIT binary patch delta 1667 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 Q+B1{s1xN;(1^@s604aJTkN^Mx delta 1466 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 delta 1402 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 delta 1468 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 XJxVQD1^@u)Gn4HFNCuh)000006U;QM delta 1470 zcmV;v1ws0P4!aB(P)h>@KL7#%4gg_ua8z5Jn@f=e004Iskr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5c~_YNDh6QC+bwuaSbEvB7^#vK_BPQ4vk5NSnv(IO%r3@pdK z#!!1(a8!=8Uw)~7hUY(x@Ge0`zrIzA75Ox3x^_DNY`W*VJC6eNV@<0WbN{AeY?1TQ z%In4N2*;UU(4G&xXjo*bmhNOY!8>O*1$8tM>2Vtr>Fg}9$D2E_z@y$hmbs0^&QL89{R zBrU>t{=*{OGj&fXY~C+LCOyqT8HT|2zji{fjE<3nA%)ir$TdAlc8mK%%Xh_snoCw$ zbpuZTD&9wb2m9vmvOu~aTe@ruc!}e|_+B#ieOUm)<8u2k&E<;(q6>@rY_x2z5MhR4 z8KEWQ@Jo5wxok5-PG;I)ifw@O8Xt1#)*B>ME4M zm1=O4gmry_)Vmk{mL`I5##M`->&e^NB(<$EOU;G`ftk9W>|J2NiFs!%mGyg+?o0<6 zF&chd%XFRsN1L?JA^wmHP|x!YRiP(7gjZVHK5$M-zSXE20OrR0fwSJYUn%R<7&kepU-GoAYt=_(AM@|?e^H!y_yFT$v)aKgwtB;{=n(Z96=G#h#^kCUK5~JFQ-M zx@G8_5C7DqFYrJhw8PSqqlQ0Lp`u*6dkS8E(syq=v&bJDIND}!OBS4M&=~X+^DWx@ zLR;n?I^H0;F-w~^CR>DgSl%9P!eGDJ=-1JFkn2g_=HF^y2Abkc2d(?a(pj?G z$)}xIXuIyr5Z86ZuNhHK*9+jsFpxEx%RbpmA_qWi+?tT*vfcV5?LcM*N)7t!px`|8 zc0QgK7bM?@%ebg@khCP&lhvuXC{JB~@&tAElG{0xA_XdQ96>k*t0?7Sx3|$5D%${G z;q5up%fQD8YKadgCHgMjx{&By=m=KqbFN%x$(QfDw zi`=Pw>j{-l(R)ErKm{N)Rl{2FvvDI+(tN5*$OKakr>+t6%oI@Yvw~?nDPfa;Rs0p? zlNx3#G1aksGHFTx{i^)2d=H6GEcz;7(o#`_HVN@kJS5iQGwg*)3gC53#?D^qT7FnU zVEyQ48@W@oj~ddaeLq3Qc+P(SQw|Y44Pg7LFRKE=kUd>Z~VV^Esj4aJ}Q6z@5rVgyb?SzCgd0H>9PiAsRL;CI6 zKHfI?!b5Oah&0hKRSLftt`xgopl;bpH@~h(z#%1Un{qJ0q_v@Om!BCeg4Tuc2N2Tt zxpr@@$(Y5vEiyrwlnkZuO;))?JIi=OOn(8?e}Vt>!1(A;O928u13v%~0ssyGVRLX) YTb-Lrkp%z%cNCMf21o|e1poj50D7m(X#fBK diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.10-compact.zip index f2cd5f3b890334a20125d9e003edee1bffb37f98..139bb5a727a8555fe5342fa33951a04c003d7601 100644 GIT binary patch delta 1718 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 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.11-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.11-compact.zip index 9684a559686f20d3e7e1f1521c04ff692fb25712..ad793dde63b30918ac547c193f916351e37ed245 100644 GIT binary patch delta 1719 zcmV;o21xnM466@KL7#%4gjEg=TyI6lr4b<005^m001PD5C$iaLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{wGjrIvmlt|^>ze(WnSHV&c(M<6P&AKD_@vtrm; zcgB^58izW%q1bBt{uu734fcN|2~V~kuZwUD`q2;%&$)a*1}opbpT`sc&5xD502;q# zH(3+70L?F&(23TQWPpI%YSSp(-%{g!xl3@|GWejMy4)K1Djtp~(LDh39Zz{m#OM-Q zm$#o11BkOcZQF|y>B`pFcNM!r`ds61g}Yc1^?EOH4JxwP82Kg=W|)7EE9B#H3aCiJ zh$M6W$UohF>xvX=JCrBCW>2b!j{E-4;eCCvj?MqBL1RWC1INA-(8x+21#nZ%Z-s$2 zm!^Wttcm`uEbx)YLI5M+*7%O6_yFUYyca$%VDrlgIX4_ke>z=W|)Wm)28xCZID`sZn z+=ek7VyRJ+EH*FI^O4Ik9TCi+d@%ko%DaJL5r`lCRwK&F^y6*E-mLU-xsw7?jbN~l>Ap(1bIWmtdR${#;ZG5LHl?%}g& z{sd*~V97!m1*#PM6C>QTVgy=C$%E8IQ<&` z6qV2qL_ZM#QI)aR*XR$diL0k&oX5djZA#(;U2n7?VA}GU2ZXA=ah@_KHTq0vuUXYN zBcXILMA!~1-l>1R2Dtt&-x^R={N#tn<_7J(8RK2DsZS>gF(!s{l^N$nnDF{bTj;^H zp=|Xy#kcmRKvm}f>2D&S9K(=W)MXiRCp|qU$RQL^Z)lySi=wEh<^HQ77&kwY+mmbW zRn)0|HTY4s7ka@`y~dOXbvVgLFHacg1lKn(u_V4AUekZ|W$cYFJ^WvYdt*mENo#u` zPc6?L9L_%|T{mwCTuy%(jn!Y#pn*R_yjZvmFb6Cu1~ttx2C(IoV*9BJof?3U`=fvQ zfZxfstIzR)@69l!o*a6mGdrvODOU*WjkA=f7Sdw)?Tp_oX6ty|*osCvXc&2{hBu!z zWfiB;Pg8#**%dneS*lVMoGO7JGEdZC;m~TiM9reLL`rfJ(;tPgTc4)*$1h+nN@7f& zh8R9G;9e^CHsr7HhoYGB}QUQ_BXM$|3@L<|Obue%*>&OKEO2u=x{5N;(|~`dw-EAdb!MK5FGB)c07*&;$HvuR0q2)lj9nw}7%3f<{6OsA}8__*6mTAvigS%PW7=wKSDa znkzM0v*z&c5DH^()*f-Jx!W~SBx;WoW!{$N@gZ{Cg4(ixTICT;uMcJsQp+AR3hHbp`QQ{bm(a=f?K_)I`uen=)~^gnF_=SHAzd2jYAmxiApr@KL7#%4gg|va8yqR%37lZ008I{001PD?gl53LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2%xr$gMTkCtB$VDN92(FoG zxWL+R>|{8Dtic2#_^yd^==KPiz4}-84jW_Un|jQgSTB~8_)4nn6$z5tBts$^#stsl zaDnn5dt{)$)@;b+KZT*TI}3jsI?>1#tHmBT$%oOyr&-tIui(HFAedM2!YfZoRb6)7 zFa8D_>$Jm3{?jj@gz!?x^)wQ`7~5|r)qh(rf*g?x3|-J`rHl*j>L+QQw{dx@LVT{ zN`okgrbf0aDmwNth=vZgnFGBbUl7ZQkkHAzD`&VTB`e2*KWcrDxg~=V7t} zCm>Mp+%*A9^z7xu6XAau{qVki{@Rxb=Ib*@#WSBLS+1p|@p2=$FYg|!=#YiE^qI6m z7Ot;)Kd1|l%Vhr@@$HQr;-AFn!>C>UV^=A;b43|B+VP4UjC1H6p_Yw%*fU|;=93Bp zqsYeyG~pl?awk9I`=^}+tKjSZN(DKV1j29DO|%Y8;@!+;929>E{^1Bh$wJ&!oA^i; z4Mu>Z|HYD}>L`kF0TZNJ>Fbs-coU6w^1Y28+5dZY#YikQ3mWXzafM3oqW_Qq>+qoC zIHfz!QFB>=s<%{W+0te3WavHXt5XTZO_fOKM@x^^qT2b3(Vy~Zg$Ag$cN~kY>)WSk zUc|ME&>8h@Jw<;!LdcqlnPmrN#22c43|9zG_Lz6zm-%j@C>I5(7nWT)o`^GkVx~LI zcqU=4PqN;u&R~fWbG=XeW)V%$5cqPBlXs4s*W%QP1>4i3enxg%pL>*6YfuxBc1NQ# zP(}DraVfaZjBSGdA02z_Z-qiQ-|}_NA_el_fNRBYmd$??x4$9Fjx|d$u&~gO63!(= zVtm1-2gwK)Fg_5dstChp>tk8kAo2;}o4GUkgf%d$RId**5B!vPmt|16ut_S7@m(ZT zY$1uPMImfGo%>hwXh*iDqE(!eN9y$_y+J&&qng1MZ&imvZF;F8399VUo`3EWBcSC_ zCAY$$B4U4!JorE0V?M_eZ3H)W!OH0bQp1hi{1cZI6ou+Tq?YlX2W*j9 zl`IikDdCU>_O%%m;vkq;Zk-^@TSGJwLOPX|d3S&Q|CT>f9m5yYdfLU#+T%{526>(} zUEFN}eW{0kPAG#Liq+gz^Ij4_9&6(2atN7SU%t26hUq+1_|V7ymEW2D4P4aNn{PL?$!n#C8&nW=Vs>y!yzXLG|^% z^AuC7E_ye6i5!9{($_CpiQF#yf=1Pj`JBBoC-3zs$otda&g zb@+3Zwqsxyh(AwGT~_{`u83-`%<|v0EIfZ+$5obPgPl7i$tG*&NvJ@!?8X_b(4M-p zb$dE)bH~FFK6URDk<|`G89$8}&U^rP-@;s0Siu^gKmAkleACs889O;VX+o{?oQ-$$ zo1$@=wp)-mWXY2$lv@1xG$#H5;7%%@2}5Tq8H4hj7*}_NdP*S!9N*@_!4q6(N8BVC xSmm8i|CgSqP*6(&0zU&k00ICG0Ah1+R8I%WTB8L30O%8w-3CYo@KL7#%4gjEg=Ts*ml^B5r005^m001PD5C$iaLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{wGjrIvn!;RV!*ZqJ|HzS8W7U&I@qE|ut|*m|gj zw$7~zNBE;I*GqA1eXL(VsWyM}(WF{t{zLh^xt$6PT-8OSX*_r6h7$ED_OD2eYiGnB zuw)Bbw6ZCiG(J=^oW;&YFLw9fEjDS{WNS@J}**sJqKLtsscdQw^FSyT|s$ShL6(;S(a^DKEfLFZYy(&j%Zw?cq7imsu$(X-6|1Qek+*nVi)#S|G%m06?<=4o&cKp!4N*NP;Oh1EFG|qt;y3rOk)TgGZ zHygZPRHDp?`+ztI;H;A>jn_ z1=V<=b7a?g4xWhu*y4B$=c4u-?Z>M|?@TuOcm_Vt$w!sKsNGQ2cGT zwK!vWI){Ic*psPC878H+FUkd^l-dOdR#Vmec|h503~7a6L=#b1G2TZTH7TrR+lYTC zq(?F>U{v{(l`F`*ivuJQp83J27DV3Zjj$P?P(O9IzP}X0|8PCB6wWTAg;gzw$P|qh zK*m@HctuIIO(-#sr#lUUj3}xq(WM&wC!?m&f=+**!kGWw*Ro#i5PWZh^8q}4XG(CJ zxdVHkUTfgW7peOxE!(;^BXv4h>ln)^A7Y?Kap^MQMB=Mniov{$8t(z@?ScvV7q$U) z6ocM(*=E=s=H={(?kXR|Qryw>s=WjoB6pc6e--8D^jB#Q3y79kPuBL+y!oPrI_Fo@ zjuC%81o)93eGd4jWR^b)VhlyBU3TWKOPBvsJ9!Gr@DiE)XOmBm;T0m+ltefsmvQb4 zWv!pJN!}r@S9~#RQ2;Xr@Tuo2MCu+2N_pi9>ZzbF)qylcX@qR~G= zHCeRY*VnWDSqmK|o~Dz`?{s1ax=KiOAMjI>i})hEimj7ZSgaog(#7Z?(gV$UF2+Tl z*tpwi*Unmw>E=t4)Dx2)UtxsCeVs)rAOm7mhUnF%G9gi)#aLoQv$w&hTA46)@rQpQ zf*&FljKYCpGmoQ6CciQ$aGTal=M9~N;o--`|F;xB>y)}uUZTc8t_`_M%Ud8?o=ChQ z24L@uR!AfOEY8Bl%v`+0PgpL`!Iq>LRJEs;w&?9`J!MdEnnKbk!0gi??s^u2^NEXT zb1t;ZmX^ZHX!Aqp-7+rAzN>^@?%;o`wd4kMjD4Jc$_Lh8*uzgMP^q4l6jh?P?rF%M zsS1HRdiO^X3d9_jO;p*@EKo;`aT|*q76M^nqC4qkfji&994O3><}!+) z=1_M&;fG-MA)r{zOCG+@n*m?{zf$J5P)h*@KL7#%4gg|va8#&{-?^g&008I{001PD?gl53LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2%xr$gMTkCtB$VDN92(FoG zxWL+R>|{8Dtic2#_^yd^==KPiz4}-84jW{*rsqvl7i+Kh6xUWYlfEchCB;Hz?w#Vl zT|E3_b8cIko35PFsM@eCbD>qz3p_M*bXvh1en%sO>14k=~GT+o;K zr3Zi;e*hHSy_A(MI6KIsqVO(>Jn9CdDo^_$*h%i18WqyPm!J@9Ni9D)1Cf{knKuOV^@x`S z{}rHlUq^H_aTNE?8)=_v-M*RkK$xd~5_M`Er05r_PDLCATX04uC7v>B4-Cz%oz)w5 zT8q6HDdn&37EnmM5p93+!dhyNH^6|$$|H6e#7`P907c#Svw8a@7}cKsIyggXBmNTC zF}{F_>85`x%-z8Dv)nZTV*eSB6EQ7ZAr9NFJ3y;|S<@5ozqQ9aFl$?tLxoYmT&W7J z-J)W#yPH3pa;6-H(zEaz`%;!Bk!|XJfk}D)lV834(54^;NHBj?Y%>h9htP)2pGl42 zi`NU!dZZRTWM(@1wk#QXqMC=7B$u#A4+DUh5`59*p#nJ>Vq&R1T%72evWeT3o70f zri6@l!npgC?mK_42V(NVNds!)D%rexFNSa>kb8_Q?;&nf4rAF);%GV2YV_1Pw0z0+ z@C*_B1N;l}fpBiceTCe;0u<(qPuy?-2A1?4n|KuT?HEH>Hy-&aF_|5rD^NHE!7tf1 zR}g1rX>Fcv2ORrZ;kp|~IJR2Py1=_zYVE>w+cxg24_JR?qv?|8i_J~Ra7;K!s!TvW z*$@)dTXkZhQ1NAaJRl~I!zxZU_~iU?FcvEUM*RJ5oh5H4s!nm01onxa#2uG~Q~BH) z`?w{Z`}Yf4T@OdlumZ6_Ww`;!IZ?rs>NAv@P;G~IJF*vTFds(wh1k%}c*<;!_)%qLz9MfziUdH?5 zKUcmEn_Tlc$i0fMaCj|V>S4_bbRb=kU)N^uuC0I2d57gqb46DDyt|(f3f_~<|zFT$w-Sb9&4PX=lSptA8g&mGvddGfWfqSmSLvNTz8cl)o7f$f!xwV zBIaV*Lr;xP23%Wfz+A#325!8wV6LKyHYR~o+TM5OG7ul>Ihfpm-Yr)f7Z@_h zGBUYfALF@nT{_wv)*+=+Zb~1)OsMZMcYqx}CPCL$d+T}FIL*r`XF5<}L#X8c5tJk) xA?uuMy8XIGk5Eei0zU&k00ICG0Ah1+RH%;MxuXRD0O%8w-3CYo@KL7#%4gj2c=TtK>cHeOZ005yhkr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@mLQ%>YT__R%yv6}*_LAZj zpY^cvUguZrd^{$9kj`H4`$p>*EvyCLF&T`8)aNz^of$)j((iuVGg^JH&+FpgsKKd$ z{hT)r+G?^X6Y57=LMdxWs<2qOz<7+j@)Je8Ff0-0xyZ&1ZVh3H{6Dg37M8L&ot?|F zaPWGx!1JWZpn)as2l8cGvMbJHoJ|)TNbO#D4Ra@y?8vfzuw|8loVuyON|kqnh-bn# zckG+%n=+0|$q+mQq7X03mS9)+cKVD>fTo}0D_Y)VE8b?{2^vw1Y&(jSE@-%t#J=I7!)p0ziDyD-WwcOSGu3^{T$#Thn!zFCbS-Wo zIG1HbMzqqL2L|2pdhCxa`K}u(nAg&UlH{Kid1AM%iI2?b2N*W^?FF7)$3e|=<#<~` zDTEcudqU+B91E@&Ou2b$DsRMLu+50^pxE#}UpyRtU9^3=XzA<-FtC@DtbIt|JyBj8 zxjf5$z`V|YmbaVF?A=xS(B{wJ8+y`b2(kOPC(9S=EQhfc4Y!wyibORLvBJj10`iF6 zr6)gi$dmPlC?nA_)esZNQdO}5YS$IjLstzV+Xbo*)F)$_E>?|@gr;#26VWeCs-hRZ z0iGUzYbUS5m$cE+0+}02p3}3My5{xTW0t4p0wJa> zQ#!H2j6|~oj80MX^bZ&(gCf6n!pi{TQ9g%0On5mxADS5XVN~xq|KHt!g}yimPWb5o zlO{=0!bX>lEyn-vL4dT2`<8=O6hHV*>J)^3*23tw*0;c58FT^xg#m{Jq~wFR2%(94 zg@wT|G34o+11{T4uA1tNV{dMTIPfK{OVHURJ>}>-JtO3l1E_$+U=U*_2eRskYo!ON zNH^zY4y?zH7;?7tM<)rZeMa0}(wUo5RPvYnS)9Ju9q;XTrg?-0p^yE(cl>Q2m^Su* zG~Kubo1mpO_-Wx8u$`?u4dq~yTT{Mb0d}iv`V-9Fs@_TW3;{BVIkmGR7r$P|sqhVj zfyYJ@8-mJKY)Fit++otse3U{uQJ`zHB*|E1jQHFql(@$i+C{wY9+0u%kp=F3Xf(M7 z4n^U_;%f%{VyRxdBKJB^<#h4u`30_jA!!XR&CLHm%bp!Q93&R!!-6Q{dQmI1G||D) z(l`uHPtZPqvF#BpVtl{4*H$|Y%+A56kB)9k4_AD$Ay!XUp={$RJdP0ScLhNJZa(;3 zuvh^?(x^$2pdtq=t@20V8sjE_d%WfCvheyvQ=i~uLZ?vyW#^Kq=TqC8Zs&7<>`#6t zh``53Gx+89@hK1^1czqNK2dJt1IX1a$uqFH6#D2gU!Mb=v-OK+i69|(BCjs`ls{2p znUyW)1DCJaT@VRGITj?=UJ-6=;$Qq7BKv+$_=b%Ncg-{Wp=fse z(I(o;Zw0KWKS#OV1npIDh0&p?sap{PS(U)3(9jHX8DS!A^UDoSF>9T?hbM&E;T|`Q zVmC5Wur-^E!{o zSl23fePVv%rC93Mdusc*!K45`ghHI?^M?jHtY1WcUNH)e;dBlSebl7Q(SNq-C$87aYw5=j2p4*O%#9_ z^>=BlX#eYPAH_)jB5++VabCBTMH8<@1Q@KL7#%4gg_ua8%mw+fAMY006`k001PD-UcU;LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2%xr$gMTkCtB$VDN92(FoG zxWL+R>|{8Dtic2#_^yd^==KPiz4}-84jglw{R+QT4>P;F7EiKa$SA)b>cx!7)ji*cKs?Am{#gcR6)ASUw8eSg_-d@BFnj~!AlNHX6UT!@C|Cxb5Z z(_{n$)5&bTdqk`;wm;{DmGrQQ?T|+i>=mlKrd37F{q@%=?~{yL8X)XoMt0mV^-vPC zR7>6Pg#M)f2(sN^BJ@Kw;oP0SDVI_UH=F2V5TV&q4_kbSwiOWs-uk$vieQ@G<}5fi z9QPAt-C*SY*T#(+vL$qZ21nJBJ~4AI*>qZC$kpG@wQe5OOLiTj)YzbK*8(ePU+ zJ7HzztM}*?M5(J^2upw9Xgn$;!dD2Uh0l^&t7diz&_Cm0`)Fa9F}`Y^l`!W?c&jiH z_C|y|J{R}ALQT~$XVe?Jt#?b0vt#efiLuLTodB?NS_+t^l-3N*tpx`v*+@I#a=6nG zQ9_Qm$&erK+o+)7aMFShLHrM>lQ#c@O=j0fPUYeGiMcml0p@>Qs9a$wYMn8{7;K); zRLNUI?t41oFeM$5j(rMzr3Di_ixUgWFFJ7AF1knJrn=lN9L5p5AkB^BQ#m)9eJ!_` z%1LWOF4wm2)>ASZW{S}7v~-S3C#^uzaC2RJo9t(NreaJ$IF}EgAl&c2%z}I)Ra~lk z+86C2QcR2|RBwN`5L7%?L=2?kD3&pim^j!t5lXoF_HGrq@Hs0gZK*X9AI9V}+S^9{ z$vBs+_TSe%LM^o~f35Mv~4j&Ab6l z;Ll=(iUW{aMb_zSABAN=7%ChP1Mtl(1z&m9x{rTlvsGzP%@#;(AAt|*boE7zW~O-9 z2Ut{JBKVC#nziSTcRS?{HLsb*^a;>5gkiXug>uyurf*N9$5znp-jsH5s$!``?y7BY-YY(PaqKx*F@ue zt2ck|D`x?|f;87BTRH*Su1qy<9_Pa74ma5N{3#wP?0}+-RFetz@L62D{ycvq>!RSG$Rd49GOM?Jym$Dp zfn%ARjVAz$^EjO#N%&BCuj24HC}-nbKnR&FAfL)~475dM29Tb6Te5P-JNHRymvtqk zm?@>YFd2P`S0G2N1S=giC^zCk@U{t-KeqaP`-||%p1#TqOseJ-1-j|*_%;8{@-QF& s_jB)&P)h*@KL7#%4gj2c=TyGAH{fvw005yhkr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@mLQ%>YT__R%yv6}*_LAZj zpY^cvUguZrd^{$9kj`H4`$p>*EvyCLF&T`8)aNz^of$)j((iuVGg^JH&+FpgsKKd$ z{hT)r+G?^X6Y57=LMdxWs<2qOz<7+j@)Je8Ff0-0xyZ&1ZVh3H{6Dg37M8L&ot?|F zaPWGx!1JWZpn)as2l8cGvMbJHoJ|)TNbO#D4Ra@y?8vfzuw|8loVuyON|kqnh-bn# zckG+%n=+0|$q+mQq7X03mS9)+cKVD>fTo}0D_Y)VE8JZkrn_;XkT0yPqaVapsMu9L%FMQZmU`^`fQhI zq1zIeMcLVZ3Psw(ZRv~4LnRdVl2c)~=)Yw>RVW%LaG^oZN=kAnG{ zbjE#Eg`f)TR=E`Q7uX;hQ;DXog0R6S;u+;#ZcCORO>~5io!{t7CGjDj0Zx3BHYUH)GmPO zI%)F{rn;jjCFo{cN2(zywWC1AoBv{>)iCMuuZD0#tg|OtC#oYb50r8C?`(avirk6u z^RI>Mw~y`RL&6OOMF{&7_(;(lb(REeEj&B_vt-3dY>>NzVnU5ytXiE+dlCh#?Oc;z$Ww zuI9!Vq5c>n;o!qf5r@_(ElOG;Tt2Y2tSpp&-czy+av;RTLp6$NfuLCe4>1~Fi6fes zWCYmRoSENcc%VqT=v(3Dyw6wdPezO-9HDHwV%S2v zTTQDyDPK2BRmYld)HE~OulJiFvMxDWXm{k?gZlALFXU{k-n6q~ofxuIzp(9o=rm}5 z(wweOwvH+S1F)_q7L1$m+HBri_Teo0Zl|^zY9t>B5!eT%0sX@Cqh@j$-1+PaFR1@u z+NT9=GP#1^?eoRItT+H>8RjxopIR{P2K-3sZ=Cz>nmWZ7ZT7bsx2+-RKIotNsOpa` zyKz}zrZ&I(DA(LxGEr@|%&vvaU(B7J-JIFemTV1aVibpCU1evCfy+diDuc9T%0YW6*0Upi?e{7qFxs(}QsHRo zav@7^x%k^|&roEtg^N|vuNm{ zjA`^-u?05b+e+YuDueRzxkSiZAH)1;xIoFv$Skm{T_fp9X~zxM8;#0z{x}Bq9fWfg z>E=tu-m%G4Ez*nu`+&qWX&wqRwz386WT<&&iwY z`Fm(B!4zjoeRtbVc^RVGL46E=5mVghoz+u+xpSlV4P6}NP`2KbtCWcM3KF0li>|tZ zbI9Yjwb@Jm)N;!FaW~1;Z1^7#3FzJL|G=kPumZDxvMLOM?efNZR%*a44|V0~(pt{t z_h+{=jWpq@cq)FB4^txw2kq7O(qL9?YilO(SJOgoafc>%LKt5cP%Gi~ZenLHG zV{8!|V<<78=Gm+!=W|l7_X!2I37|iQNBGJ1q|TRg%afj<^V*M`<>AWOjWFLPQ;UW$ zvo#XTD*oZMMPX|L3&vc3sulMa%H&QbGeVqlqI^MQ*Iw&if^c?KPbZPoR>%WoGa%at z%H1xkD5U@@y4(nlgu@tVe&0i*%9^JpRU{cbJIwFt%rbxE<~`6W_2|pL^*bgS|K>EO zSWrs=0zU&k00ICG0Gxa0RKB@4;Bf{30HHJh03-ka000000001!1qM6@vjzYF000Lw BQHcNm delta 1489 zcmV;?1upuV4#x}|P)h>@KL7#%4gg|va8%@oUTvKP006`k001PD-UcU;LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2%xr$gMTkCtB$VDN92(FoG zxWL+R>|{8Dtic2#_^yd^==KPiz4}-84jnDyGG8a0lhz-+C4-jv#;2M`u5q)$CZ!+l zD>a$SA)b>cx!7)ji*cKs?Am{#gcR6)ASUw8eSg_-d@BFnj~!AlNHHSW1jCn+qmczj zNwjmOh@m2!AKeNWPR3ZIJoRS|*Y;E2kCAXYSfTUU58doTgH@X|TtYiZQT2o(G*KYI zC%q!Iu|`b-L)#QsFr6kPK^EP)sWe$`^ktTb1p&QG;%oaNI5m7&SA$5?D0Iy z$FBVEfaIdPS3YGVPj-L#j2s^mIuxQJzKGV$N4nwWF{MP|7k}uV%K^^)owk2~vz5yCW+RvFN?mV6Ro zkvX80CK=KXW-T8+3p5SY3bA`IFF6^Wz97-02Wb zd3s;1MC3~R&*F41`qMp7_||F^+i!cxB;4t61v(x~KXGm(Uy}6!jhNS-)aMB>G!bC!P^)?|SVpxt@@#)w^yZu4u_;#yEZxslYZny=?SCEtmzNmSU=WaTL>V1Xxj>IL(+Ut= zq06uJ;j(Rn&{%{vq>A?x%agv&%s-Z-P)z&sCoH$-U`b@6F!cp}$`p2Rhi9JxCG_}u z@8-OtbKp`-OF;X9pMO+#3kkGbtRGZ4cpVJe-+gIGo%Da4Hue*JA3G8se?xb_Y=eLE@fM3%=Q%QzLWOM z3i8tiBn8C?q7V%r9TIQd3bFlD>a-#aQw09!3=sYzfMSbg)UhwCIKdTcBw`>gTjwE< z>%lnLa6Nw|X9Kd@+9U5u|^L~{Y zd5ttTaC<7w(IdOYmmm+o>zfxdR8FpBZM{7&IqO=>Cs9YFM|Mf_pH7ae_#s>FA%VK` zQp~SF{^^={$80^&1R)nQ98}=CeDUFP?UJAm6{vsSa|zCR-$ci4>@b~4fnI0()sirh zciaK%K0qxFP6Kp`%Z-G68FOm@D@l1r-jBDZgXJC!<1{i6YCV%mn;0|PB)VTqcugF~ zPT`D|L4@_}>)HD($!)?gNw{F-la_{*6eavpT zA>)6Nj+NZN>@PgIJh1vkppIWZ<*_;9@XtTulsF%;3)oH95&#Ya%7G$-WdnnQB*sjM_* z+0A9IL}J~_8mDujZkl(c0|+^#vFACqbPn03mUE1#vhBn$Mcui$rn$Xc((%^x?t%GY ziM|V!G<3G r|Gk`0O928u13v%)01g0Rb8uATh+b`-1polV6qC&cNCw{p000004d2^` diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.4-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.4-compact.zip index c432b7ce9e9365747096aaa35b7e514e794329e5..f8a2a13f524f845c3e3129a59779297ed8e94d59 100644 GIT binary patch delta 1707 zcmV;c22}aa44)1dP)h>@KL7#%4gj2c=Tt`Mxs!DU006Tzkr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@m>JEvp7u^88;w^LAi-Z0#P^q@Q z8!Ll#z<;Di3~uf0mLh}UTjoh2nt;|^-VZZ=S*=tl!_@}O|GzDiZ4^Gp)}Y#Ej;#)4 zj3_K@7fMsY$iG8ie4_L8mA=^!fP}|BXz7=Fb_%LNws~uR?lMtg2xVG@osX*Qayd%v z0ejkISxC`@F;-}laGNU0atB{Ub9xNfFw@9#+(3gC7#qTaneq^)PWkgUbznK5YP}=* zeKHfcgfE)jtxqeaD7pDs3NFYD2BmUO2`+*9@b=($kZc04CMzq(0OST`ypDr1+w!&2 zJH_l%zWOhJ8P}P#T)3w>cH{Qh)1i<{-{Qxy?EgvS*R!oRmqGfhOCgAIp@}%$V-D;* z`FO>`2tz9yGd-MGqj#l`ppwT+Z^vO^EYe0K+WbDRY2Ds->VULpxPUd$f#;M8_(bsz z<`=BOBNPhN{2FEAskM@ciXzuU%U9Wrr6O=f4wpQCe|9ZxZO-ttv;Ax^#*)2bM$zrN zDCa|&Q#g%^K{aawRX1x45bb?)80!S}H)9%u0?m45J`y~^s&({W_9)Rb9?vURD^maB zW9oG+bQ7f+-EH!ss1RM5=L&cVncc@VwHqm%VtUBiDT@d2x2XaZJhuj7G~#z*e8Z+V zvWDJ&ZOg#RTJrXaRB?3M9cbBE_2RQeH0gQH1ZCdV(L;4F>8RGr>>gdDWg@i*EfS`1 zS?ydk3motS`ey_B*+AFHt9O29L2sMQ z>b0*HPM2jdCmE%LWnx5DDFI3Y%c8jd)Da#qcl=hcDE*zk*&aL}ukpk2L{@fcw*zw( zj+P9RxXYbX#M9uVXv(^P6BdB>-cpPE4%XqLM*}m+r7fM7K0Ib+lE$u za528Mh9PD;5nbKv1BCwn%E>V2K=LdFBS(S>|A3cF;9&q*^oacX2jLaU?#<{Syo&Zn zbdrp{i0hLR`Huz-TB`^a#Mks8^h%{EX1RCCSJ`D3)#tdY)ciGhZek^{l2zLeuT6BR zOq4jy%4C*DWhs_Ks4Wr#F?^r2%5Z3Z$;mS09_ZgSN8h47y6{DBEU0GROdn-9NMR=D z(K?vI^bE*FLu<5}HprG|(v((aC*)$^B}legW2f^EbawC8o5T}>K+t*lxK7&13v<4o zTq4Eab&WABWGLjYL7rAkzdGEMpBmn++vRl*RbyI^BQ#2^1?IOtlf@UoM5SqrUrxIhW;dIqJ-+99!TKL@}onzdZT=@BF1YuJ#z z{|rD^08mQ-0zU&k00ICG0Gxa0R7U8zlXV6F0JAgz03-ka0001!2?jt0w*~+J006p` BKzslI delta 1490 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 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.7-compact.zip index 1de597e91d75bb7bd366ccf405bbb1db4ebbee6e..36ab7e423d220cd5b8f1bdea65f14bea62f755a7 100644 GIT binary patch delta 1707 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 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.8-compact.zip index 692b7992f41ab63c532ec95fdd9aed73bbffe352..478dc6ac0a02673c23ba91680c652b18019fcd38 100644 GIT binary patch delta 1707 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 G0001o;6xb! delta 1501 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 lIRCx={srLwFBad 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..6a8bb427859362480c0b8d9322c6644607afe474 GIT binary patch literal 3683 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..717a270942fdf49cd0cf636f06d1856b3dadf433 GIT binary patch literal 3686 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..02d59d00c67afce73be4d6f7a0bcd64c7871f603 GIT binary patch literal 3684 zcma)<^*Xh_#7%RW(=jo1-06;SV!E4Qn(6ME7$y$i zeZIecUa!yl`QiEH{SQ2vDmb`c05*UaFzK_Sb8xL&)@98 zrT9Nw9qmjZo=%P~Zl>lgpKNU1Aupk>jt)RvJitc)AOHY(6%k=Agb{MinHZ^)B1-Rd zuw`#&2#wLEkzt&1ZKV`steOw$U)=TEf%IJ2A>lM#X0OICx&#~^)mG}bsUgZ6uPkTC zUQ7D83^@y5h1-8?z!wHZ?651O+R@zBDIGiB(IMqF;l|+~^wZt^SrRTsaCYAdm8dSa z%+ph-sOtA3$D`G|_7zlBImNQ4WAtM;rkO;?VQV(iOSg{|B3{Wh=k2k&>!}`L#Ro)t z18=$;qVV%=Zuut6oJ{?y{vw;%r5{?2v|zX=mb7W7eFmhWQ;chjzhN|I_vJ$HM6f~> z_9F{}@7C*&d+N+lig_hAOa6ksXJPi+TMVxkA3i!E%#Nf(fU~+vcAV=`CoA5)USGtT z00x3(*~+?YWl0~Qq0c|SqdWbc`cv(EC!aNx5B4HTKpMLVOL>!SO4BE$(>^=wLRz{J zIV$1tsly+CU)?RlkpUKFrS=`Ni{xf>@cXmV4_J&waqDs_#-5t?wSPjNrjtV^0db{* z`Y~sZELUV7$&EFy?@HZ6+fq3~(?;FPyXa1V>HsOW>@Bvp{pnw+&A)j*#pbJ=8f2@W z1hfx+3=O8cvnODYHC86eo3KeTBbdKW9@x%7Ovs2)^^~uhX-XZN;bd)ac792K#D#ki zMg@NKg2W~36$7VQXuxCjC#xi-O)ovdQ-coz_yy)n-JN5B^m(kK7T3IXzwv%_Te!1l@fh9o&D(t;o}cRfVnIT4-WL*3 zjPl)hDn6qz&_KvUQY~5FUNv53nv!{wzB`8s^$C3U@qW+h~grYEtR`;Rw@PgkkO3kA~1U>DKBMFc(~S4q_Uig}u#`JJE5O zAGZ#9vmJ(|qb7V5=1gAi5za?rM-hZi3QV$+T{C1pCvC}I^WWjpMO0K6xYn_f?F*+h zmNN4Q9lrU+b^uL*%ZDyhlXma76%@bz$#q-@bJh}BS;KUMkXoTfd*sY%cfZ(N+UgOg z!*`o^ULI3j#CcbyDSkO!YO0@43w~qP{eW{1bD;~l3CDB9pqoB%h5j=QA8||5c`XVTeCpZ-SD)^ zS9lV2a13?tWK;})sIaFi?tG8Lz4(*(#_IF83iM$$M}&RYc9{8(3;CZ)ky;8h+PUA- z1uL$ssW_e{8tkQ2Iv7-B^}bXK8Vnm-PDQV?^j&SO=;M2bA%6H(+J<-KI#1hgk$U(Y z^pS04x?|z}n#av3;3b*A_ByG2j*Ix&;tGOT)e3hrH=jeObAm3u48+c^8~iB1Izzx= z3AMi~Gs8CdhUqfX%33=SCzL#JO-sDAB95$3alimJ&LUKJ&@b z+)PbIlIRpps=x`$r{k>{vWc_D|+Si9+SvC_2n2<5G;MYJ5 z)P!C%q$QOEpcz!7t-_lqXtC26){QjHP7y10F-^;Zto|YufQ^a}&dhqd3~7k9-i5CG zE&VX0A=z7mOC~aK&okBV0;9l5A+m~DFW{T}wJKZ2oURH+NG=y}k?gW14D3*xFl9~3 z4sX!*uSXf1?%#!kQ{&UfT2A7g*wP0+RtpIllX%xKx4qww-s;9)3&wU&ypQB6_kmq0 zh))Qx__RlLkIKErH9aNKl6a+@=!)qv$oXP6jHmhKE@mU=EK$;0r0kgrPPh31AK^Z+ zk&t50Q*&0KSx(Gd$K0xwxs?#dS1G6E-Mn9C(W)vjNAC;?=*tq!{n(= zl|6R>+*bN!AM8yMKK3T(yIVPY+*Vm}I#c7HaD|4sblaftX~;K9oO$@>caZ6hw~NQp zJb$}gT^8w{k*jJyhBM|OKgkeHpES?rsa5Jw)@OMjKE(@=E__1MT)y#Yn&XpEZ(^E8_GVO!b4OUd zWqjp@dl-SAKXQL^uuurAZaYO{Ar=PQSjQsR25A{wbJDCxH~Igri3ps3KfH6R!i~go z+d?PYT2oD%C{3k<>#y-OGGB}&Q)Pk|Jl&!_49oJO^q8~{>44HcOm#_H6QDO&m<#XU zywTvX0p=#_ntE#0Lg$j0{3vK16fhyAu+#91Y$=%VdAe3tn=c0BJ-<3aw)JY{ zc}tFYcoNV@>_3M(7uMxI&&~QLPTh&T+e_TfAC89v3@ttABk2tS{lYSPqOO{VM1MAbe7f z|M*S-Bre6!^CYOr6&Db~Yk_v^VW)KVZI@?EYw+e^OAAV_>_q+PQX8UI%9xF1u`&sP zMiy4f*sS3d4(p8hTL;AjnCGPsgPJlktCwkzjf4CqNZyVS`fH!g3W-~=wP>E|(d?af z#WBDVOuqUizJeO-?@jgCYQ?nd^6)lm2?x02u^Zqxc{-6a!nIH>QA277=-) z5j}l8;=&ib!)$6qHno?HRxFQCg760@kP+4V`9OXb82xFn9fm3xF^J-L5BGJ)ak+GF z+i=wYY3AM#Nk*XLw^gs2YeeHc`j)i8e@qNFx-wt!l;L?O$SL*cC_%Z`@!BBIFM5&tC2$t`ypqvFjDa zxZ61M-D_r*yqP|`kNC%0mY(3b%Mh*!|uOtG-laB{PDvqq>I zXTFeRFyW8Gu2~S#QpylEOHHsMSV4Buhov$UPRR(^I|Gjuj4Z0LS?s^W4i=Mcf=qZ& z;?J0iv0@>AE6P_Mu<2A<@vfoJY5}sXspm`({-;o1ikUZY6U>lP&A)K&Z!N<&PiPVP zy0BivDEEwqAyRDk{W70x-!WL`xVAt%|5aVmM#NYZ2yALHbMTXDK$uaWH(PRst`y$J znZ#^nlT>08FkNm$Tw%SQ<7_%<51F#n8SB4X8W+i!!D;)IZ6P%qZ|}R9ZM);aY7WmD zPGV6*c<6wbsxEH5^Os;;Sxv1z{DfXaHZnQ0Y13FjwamR(Q9V@v(-&B&WLW^H6h;Xm zK_i)E1Onyp z&_RH)&xRE>cV&cJ)%vwPjq2GLrfVc@tse>en$3#R%6-fCcdu9+c0MRlK$*mIFDX?U za3nXwx#n=P91?LAb9Ig5wdt+*d-nsDwb2%YqCaJzed@LGhBv5`tLj4rUBu0<2D%*Y ziF2Arl&C*(TCRtY0$))|s;6$?`TDtQLQiS8j!Y3WtloBF;(K%%DFPNxxBSE7jAT!} zh#G&P%vr6D4KAgXg6;7pGP#1WYUQ(t70G4?r=vD{IlV?T@-%HP@MtWiGp6Vb(;L=_ z4sPGpoS!E)WSO!C9Uy$7bUs^_i_mXYz!)rS2Ldm zI$ZNyv6YSVcQEd>rUsL@4f3X9_;xKKqTMu3wi(9!2raQWTdKz-#iPN7c)&O+$!e-# nVS{o0d;R?j!2e$W)_?TBw4kO69{zv6SpU%eXUxBr1OWaIeijbG literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..068aae413fa446a252371e6a11b9517b70aa2582 GIT binary patch literal 3688 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.9-compact.zip b/tests/ast-parsing/compile/minmax-0.8.8.sol-0.8.9-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fe9073e031078c00b2ccec61d64d91e4706617e1 GIT binary patch literal 3686 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.8-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.6.9-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.0-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.1-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.2-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.3-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.4-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.5-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-legacy.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-legacy.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-legacy.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.7.6-legacy.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.0-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.0-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.0-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.0-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.1-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.1-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.1-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.1-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.10-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.10-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.10-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.11-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.11-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.11-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.12-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.12-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.12-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.2-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.2-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.2-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.2-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.3-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.3-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.3-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.3-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.4-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.4-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.4-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.4-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.5-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.5-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.5-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.5-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.6-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.6-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.6-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.6-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.7-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.7-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.7-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.7-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.8-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.8-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.8-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.9-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.9-compact.json index 228af371a..5d52aa8ce 100644 --- a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.9-compact.json +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.9-compact.json @@ -1,5 +1,3 @@ { - "C": { - "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" - } + "MinMax": {} } \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.10-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.10-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.10-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.11-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.11-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.11-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.12-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.12-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.12-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.13-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.14-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.15-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.8-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.8-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.8-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.9-compact.json b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.9-compact.json new file mode 100644 index 000000000..d52d0b185 --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.8.sol-0.8.9-compact.json @@ -0,0 +1,7 @@ +{ + "MinMax": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n", + "min()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "max()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/minmax-0.6.8.sol b/tests/ast-parsing/minmax-0.6.8.sol index cb22b7d9b..ba5a9e6a9 100644 --- a/tests/ast-parsing/minmax-0.6.8.sol +++ b/tests/ast-parsing/minmax-0.6.8.sol @@ -1,9 +1,13 @@ -contract C{ - function f() public{ - uint a = type(uint).max; +contract MinMax { + uint a = type(uint).max; + uint b = type(uint).min; - } + int constant c = type(int).max; + int constant d = type(int).min; + + uint8 immutable i =type(uint8).max; + uint8 immutable j = type(uint8).min; } diff --git a/tests/ast-parsing/minmax-0.8.8.sol b/tests/ast-parsing/minmax-0.8.8.sol new file mode 100644 index 000000000..dc2f26665 --- /dev/null +++ b/tests/ast-parsing/minmax-0.8.8.sol @@ -0,0 +1,29 @@ +enum Enum { A, B, C, D } + +contract MinMax { + uint a = type(uint).max; + uint b = type(uint).min; + uint c = uint(type(Enum).min); + uint d = uint(type(Enum).max); + + int constant e = type(int).max; + int constant f = type(int).min; + uint constant g = uint(type(Enum).max); + uint constant h = uint(type(Enum).min); + + uint8 immutable i; + uint8 immutable j; + uint immutable k; + uint immutable l; + + constructor() { + i = type(uint8).max; + j = type(uint8).min; + k = uint(type(Enum).max); + l = uint(type(Enum).min); + } + + function min() public returns(uint) { return uint(type(Enum).min); } + function max() public returns(uint) { return uint(type(Enum).max); } +} + diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index c255f06c3..62a604979 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -310,6 +310,10 @@ ALL_TESTS = [ "minmax-0.6.8.sol", make_version(6, 8, 9) + VERSIONS_07 + VERSIONS_08, ), + Test( + "minmax-0.8.8.sol", + make_version(8, 8, 15), + ), Test("dowhile-0.4.0.sol", VERSIONS_04), Test( "dowhile-0.4.5.sol", From 167b4c0394505770eb66fcd49fd64dd38ad7adbf Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 26 Jul 2022 02:50:41 -0500 Subject: [PATCH 078/202] handle tmp call to library's custom error (#1267) * handle tmp call to library's custom error --- slither/core/cfg/node.py | 4 ++-- slither/slithir/convert.py | 18 +++++++++++++++++- .../slither_compilation_unit_solc.py | 4 ++-- ...with_state_variable.sol-0.8.10-compact.zip | Bin 1935 -> 2487 bytes ...with_state_variable.sol-0.8.11-compact.zip | Bin 1938 -> 2489 bytes ...with_state_variable.sol-0.8.12-compact.zip | Bin 1938 -> 2486 bytes ..._with_state_variable.sol-0.8.4-compact.zip | Bin 1928 -> 2467 bytes ..._with_state_variable.sol-0.8.5-compact.zip | Bin 1928 -> 2471 bytes ..._with_state_variable.sol-0.8.6-compact.zip | Bin 1927 -> 2472 bytes ..._with_state_variable.sol-0.8.7-compact.zip | Bin 1930 -> 2472 bytes ..._with_state_variable.sol-0.8.8-compact.zip | Bin 1924 -> 2473 bytes ..._with_state_variable.sol-0.8.9-compact.zip | Bin 1934 -> 2490 bytes .../custom_error_with_state_variable.sol | 11 ++++++++++- ...ith_state_variable.sol-0.8.10-compact.json | 5 ++++- ...ith_state_variable.sol-0.8.11-compact.json | 5 ++++- ...ith_state_variable.sol-0.8.12-compact.json | 5 ++++- ...with_state_variable.sol-0.8.4-compact.json | 5 ++++- ...with_state_variable.sol-0.8.5-compact.json | 5 ++++- ...with_state_variable.sol-0.8.6-compact.json | 5 ++++- ...with_state_variable.sol-0.8.7-compact.json | 5 ++++- ...with_state_variable.sol-0.8.8-compact.json | 5 ++++- ...with_state_variable.sol-0.8.9-compact.json | 5 ++++- 22 files changed, 67 insertions(+), 15 deletions(-) diff --git a/slither/core/cfg/node.py b/slither/core/cfg/node.py index a031e5a6b..5a824491b 100644 --- a/slither/core/cfg/node.py +++ b/slither/core/cfg/node.py @@ -39,12 +39,11 @@ from slither.slithir.variables import ( TupleVariable, ) from slither.all_exceptions import SlitherException -from slither.core.declarations import Contract +from slither.core.declarations import Contract, Function from slither.core.expressions.expression import Expression if TYPE_CHECKING: - from slither.core.declarations import Function from slither.slithir.variables.variable import SlithIRVariable from slither.core.compilation_unit import SlitherCompilationUnit from slither.utils.type_helpers import ( @@ -917,6 +916,7 @@ class Node(SourceMapping, ChildFunction): # pylint: disable=too-many-public-met ) elif isinstance(ir, LibraryCall): assert isinstance(ir.destination, Contract) + assert isinstance(ir.function, Function) self._high_level_calls.append((ir.destination, ir.function)) self._library_calls.append((ir.destination, ir.function)) diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 663d96abe..50090bc04 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -817,12 +817,28 @@ def extract_tmp_call(ins: TmpCall, contract: Optional[Contract]): # pylint: dis # lib L { event E()} # ... # emit L.E(); - if str(ins.ori.variable_right) in [f.name for f in ins.ori.variable_left.events]: + if str(ins.ori.variable_right) in ins.ori.variable_left.events_as_dict: eventcall = EventCall(ins.ori.variable_right) eventcall.set_expression(ins.expression) eventcall.call_id = ins.call_id return eventcall + # lib Lib { error Error()} ... revert Lib.Error() + if str(ins.ori.variable_right) in ins.ori.variable_left.custom_errors_as_dict: + custom_error = ins.ori.variable_left.custom_errors_as_dict[ + str(ins.ori.variable_right) + ] + assert isinstance( + custom_error, + CustomError, + ) + sol_function = SolidityCustomRevert(custom_error) + solidity_call = SolidityCall( + sol_function, ins.nbr_arguments, ins.lvalue, ins.type_call + ) + solidity_call.set_expression(ins.expression) + return solidity_call + libcall = LibraryCall( ins.ori.variable_left, ins.ori.variable_right, diff --git a/slither/solc_parsing/slither_compilation_unit_solc.py b/slither/solc_parsing/slither_compilation_unit_solc.py index b7a9d4467..a2813d6df 100644 --- a/slither/solc_parsing/slither_compilation_unit_solc.py +++ b/slither/solc_parsing/slither_compilation_unit_solc.py @@ -679,12 +679,12 @@ Please rename it, this name is reserved for Slither's internals""" for func in contract.functions + contract.modifiers: try: func.generate_slithir_and_analyze() - except AttributeError: + except AttributeError as e: # This can happens for example if there is a call to an interface # And the interface is redefined due to contract's name reuse # But the available version misses some functions self._underlying_contract_to_parser[contract].log_incorrect_parsing( - f"Impossible to generate IR for {contract.name}.{func.name}" + f"Impossible to generate IR for {contract.name}.{func.name}:\n {e}" ) contract.convert_expression_to_slithir_ssa() diff --git a/tests/ast-parsing/compile/custom_error_with_state_variable.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/custom_error_with_state_variable.sol-0.8.10-compact.zip index 01047e8a48f9854f508f08b3b0e0bcf1b6b64cf8..e73171e2cd24ac0bddf3e084d8995bb87941a4d8 100644 GIT binary patch delta 2354 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 Y000000Du7i005If2T2Ay2><{90D&585C8xG delta 1772 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 H00000e3Nx4 delta 1775 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 E077(wTmS$7 delta 1775 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 delta 1765 zcmV@KL7#%4ghjba#Y=+*{ik&002xKkr-lsC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6*+<%2#gfSO0ICXQN(SML9qbr9NuD{b z^#p)St2C=Jc(z{2EDM!2cM)r|4N|q8>}SPrZrr#GlBW+W$X_ON5NC_0ZPk6B&8l63)n(}HwfEd z;50!4++2IAidOl$(~l2BFFq7v#uuR*b@v@8VKPav%WX(iyecqH_p>c%S}wu1nXDGS zt~)L}5_QzrnHn=+4ajd`s@3^y9|Bfs*24oxR?ht6XPHueFqQ@n$~5689?b4O|28*c z_D5rYZyckkR{c2p@YXC`O^C`6>hg4dVO&JEU?Jd2{+bWWiNSFhYL!m4XRWjrlj&*8 zqUg&o=-=-P{c8LGzBJx+bHPq1oP(@JWP`5TYNogpA97LlU403#!q!%;0RFGZ1gI^$ zyaSdr*wdeXLJ_lD_s^-a>i0p2UV}6->Pli;yOxL(_p8u|9ZHR~-+HF?_LzW-_lib- zYtpTF5t?YR6d_pb&=dVe;m>=pgTBi!#h0_F^?$g+Mc_~xtqm|`J%%)CGmBpfk!Ln` zH`FIot-Q;R8b3+Y`o4cW`}Dl{jyxmv$YoRIq<-Un=E-~zU_Unb&f3RZoc4D9YE1Ob zrY{Gg)C5QwOHLMJ0tG&kqWNiY%V>UWS&H}_=u~1K;vu^Sb8g;|&o-Uyt#*TV{`K*{ zv@~lQ^$~Zw2iqbQ;{~Y*#IR_=Q@7$}jV-827K06*Yc4`|R{2X7HH(CN0uEflFzY(u z^6+4P|Nor9+d406Ul9~i8XDdf)9`@Kf@T`5)J{-e;Xjly+_qtwt@-MVt(rw@aIg3K?fM&dD80w2oqu3bMiUz3S= zxn@g0yHJJi3KeOeNjQ?s{*B|{FZpeO^D{<&7wn-yBVR@`;Sn5@DiL*bNp5#4u=Oo4 zN06X+{EkF}3`h9SI|^|#aUA+*8%i5o{-G0{l@gm!=WHJc_uO1(pn%|cNAVEx#egKK z%T#l)7e>U;lsC&b!K=o2rz7Qsm=&6xb0H{fdu$=?n`(b|QF@T6b=Dtv^kg6hX=%_xJ zEa(Z)-UaNw4>v1LvW6UtNriR}U`$8k1pp2j=cilq=V_92&5B(r503O3xln!0ujO!wAfgY?%SSmS zg!;jm#O0|@NfO}w6FYAMF*eTEYX_gIwy;HQs2LiFdv=kl zyqQO9@ol(v;Dsn{;hXSFh%@h00`@=307R?=OdxSt{v!0j``)y}*sE*qMaL*!IXc%0 zMqGBmEcsYl85LWS?jC}}NRlhpgFa^KX&NBFUqV7dHRXAKOX zlXSdF1pZPYMN0IHREJAPt~u#{@_$jFpL)m&&Ti_8@eiKE5y^y=tUI_<0OOLP1i!dHIm(&*7?cd#8q?Pz-4V=MAO8ZdQ z$U<>@;_N4EaU*lQVa$ItMI>h~MQDyDQZYr^k;JQL9CgU?pwqdLNl*KKp#84RD4q}i z8}N-o3Z6LV*xhgT_AWtgwpUp?AImM)+}GhY68k2B3sLN}SGFuV%Fgi0GA_YJP2lW? zGgNU>d|eWyJ8(*u!zMU~OrzPTEMJ79w_viPd-p~zC0n=kSj07pfuQcme&yndh|rC)&T;=4#bf|bO928u13v%)01g0hPjXb@KL7#%4geWs=2YpZXM5EM000{;kr-lsAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY*}Vi0td6p*3?k_mMLIO^?h9&#>bx zTnySXNQ!hQZ#V1a!(XyZjz*_+r`@b4g5ljr`Ek}=vXbXVsM@XwjwEm+aP<3A;IPK4 zEo~l;90Iz`gz)x%NEEV4SGEeqw3vBY0#3=cD6zrcZ5F}VLnD?up7-}9TznL!_)mbI z=S39QunQCsK-f6>+dmPVJG|cN3b@InUvkC^a=j#z(tU(TI>RG=&p>aMF#h?Wu6qEA z;!&s%DqFt_QwC#)_@jni9!&+PwCOU3@pv0-Anje-_*>h5b=VheO=1*UHGLn}%Cbdk zvd09t{)V$i#FQw!A2L4;fKv!hjE4=)ms|Dn7nNXEtq(i6>^pwBd^!C{9w4mlw;=#$ z`%jGdrqvJbrbdxJ=p2303#tzK!uh6Cm}l6L#AtbD*Jkm51yLOi*;uRN*&ZyjwiN)7 z+JF4G#kd52sE^5V^sfa>#|$W!x^ZS{(hcQ%=Yh2tQImP(#zN8p9rfcJV!G68{6w2I zN6Jl=Y@w_%?pQE#fZOr@3OegOrr@sj}$&8_g-Z` znizc2`&6-zsOVyNdXdZN_@%eI8%pH6x z{iU&Sr`$IKXz?o`+@q7q2Y0>Ff}K-&x@{VNJiT?KO(N|+DL4QAML*NbFMB{>3Quks z>@BM|ac2hk*anpk6u$gXAa_>pSCK4FyF^&O%>XBdzRK|a9VH&46zC$SB*qu9$^6&q z$M6ARwCJ}VBjgKS>#3xxa|?bCKAc)bPvES6`n_dFz#dy~Mds91?_`mH6}elPtO)*p zA$u4~)_=qA2${`g@$D{|husSW9ddguYCR-9%r8;*_v%7Pbcme-!u%Apn-Cu{bM%ay zrY$%VmuX=vtcc2oxM5eMNP7RDs&kDP8tCkKK^EZsqfjbM+$b7vj-1c3|91p1_Eh)~ z+_S*E)XR=)^W7!5!d0E}F>d3I^^9PD;*V?+iH4j6mBDvKBw(%EK?0gb9~(~=A$_&v zsZtp&@Cv@1zr05#vI zYH2x=wHy2Z8iHPip~ULs&HiAM!62ZgD!~ zUA#8NDzzfIM?uO;a4<#QC0>PpWM+70Xk`|`)KfCHnpv@7%))FffiLMW|BcxFriS6Z zVNIxD;O(!itDR2gdG@YZLb}6z5l8x!3n1r{G3z<%5w$-qhywj~!WUS&=o?(eI~$gD z1UhD1RG*E~S-ocGp@!P4N)=k($J2tjn*5fmZ~r5fnyMKXmrM%TD>|lsG;?o(nCMTx zr5nGy6LmF}B#t12H!<2Z+(saXEUwC(yz>inT;i7!$TOVKxtzcOz^TR`BIih)bkxLz z4<~*XyADksL|Ss)74HMtbWT~eZ|^U}rHou%ZE3^(r?**mX`RK9aY$-{6S3KfT(1{L zh+~yjTW}MfX7#Z`PuZP+y9yVE%Bv-l_E)&BdI0#4zzOON$YpBhE#utB#l~F?#S)}) z*!W%oKlx$@N}$lP$n;^{krDZI>WNYlVYR`VsCk4mEKHAN0uaJ#5O_#>`$YLmwq(*Z zNK-xXk=uDXlu}-Zd*C!ev@)csa&&0g{qdbXx5Yg-Bv|=Ah%#7zmBGkub1V&1jIj_% zB=#V%_sjMjL}#{iZh99PiWD*%<3jZlcqP5IZ#d~;BVA6+4FQnm?sS{{&WcKIT=`Es zdx~o;(HgazK&Jsc;TL0B5_YAmjX*V+>RGWytoVfvf$-J}^8+`Tp%qDrmRou-R>#o2u6RiflctDw;x<3Szbhm*y-^=!UJ+htr!b zhke1Xfg|SU5Zs5@Jz+ZR+YU$E?SA%yG^=U;ZGb!xp&(p;S!%5&T8@G=El(uFnl~kj z>vQ@yu6vV&GauDtb8uITxuX@}dhD8e1rKT?ycZp`kL3 ztOOxwxlQJOdp{;?ooIooidf+Z?PyTVf079ttB^TRmk5H8NABN0Nw-cK^2W>Vz%}s{ zZ;!F?V7r_82MYep(|Y8a(aFMpeCF6&kbs&S{4t9?qm?n%aCSu!hI~xRI!EV{yJegc zdl+uRuh!586T9SCX)W$b_dIbAWB=It(u!W#2*ZwC_H7&NJ|}2FST{eu>N63t2f0#E z@#1rPz7_1eA`nWBW=Kx&Bx#ii{oi?Wo@QNY`}+y%Vs{uGWfAUfPyf#z^-xet0Rle* iKL7#%4geWs=2YpZXM5EM000{;lO_jT1}g~w0000}%yfqU delta 1765 zcmV@KL7#%4ghjba#V-5@BX$1002xKkr-lsC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6*+<%2#gfSO0ICXQN(SML9qbr9NuD{b z^#p)St2C=Jc(z{2EDM!2cM)r|4N|q8>}SPrZrr#GlBW+W$X_ON5NC_0ZPk6B&8l63)n(}HwfEd z;50!4++2IAidOl$(~l2BFFq7v#uuR*M*>Q=;Q?FmX10L_kQU<-Iu=dP%g&U3rb3`9 z9^M@;2c9Su^smK;?&bYc9E98P@ykzgr*O#>!&G&mCCeCp)H<#Lp3hznawl?sb1JtR z2E(ZTbXyO;{;hsV@~X_a-+jMsXQPZy#dNDXfo144$k9aEAvPb?lMKKQ%h6J`GOr^r z{;?OJ2e#8gy%vbzu?wX04!uj@QHUFnHjzMZrv$gQJm%5R2Qqf5F+8zRPZ^EINzDiJ zf!C^hWA9dfQ8wpbLipFvtS+zr$Zd17Hnwro0X6~SdL()MzUOwtGy3#XkX!=Ye-~G| z1l{rQTf=P6ba74_jOYn-*WpNS7jYvQ^FUbA8SMeSwj1ppWHgR1N6_lPRg~Im`;++4 zyodzCAYsVp9QGS8w|E{ry~=(n8|*R#8siizn$x9!A{i1;zi_s9?N6Y)eT~LhwgV)7 zsh1*abHuh1(z#jv=BgCY8EUL=|8DoJU^3R~UeRwb1${1GnhOFCdA5h{id6x@rp$*g{@pbwCtkM7Tx-~vp{_eID=TMb ze8r4ns!%r&57rotUk9aKDjJFcnEp6z6#D9xagQ7cNoiuA<00p72S&2WB@&mw>rX^$ z712=^yv>{2malVcVAXZlnE?tH?|+D1r^Y^i9kDM2sY4{TdD$Z&N6bCkY5QSXq~%Sq z?4dPRkVq{HJHEpwv~}LgyuA0e_)>!JTpQwZXPkdTn}sd1DC;Sn0Tjh+do=MpWi_2N zD(Z^QWD|z7lWN$6%AJo%Wc*n(e(ubE)e(JwwoW}X9oRAy0bP6~s<#J9P4SX73z6@C z3GL!=#pn*8eH=jzQFohm%6AYd+8peb$S;L&e`4TwAu)TI8JLZac?=l5Un$Y&tjH0z z?R40Nvceu%`G zb-ZY*sp;9B4(1o%5LbT8)}AUbHBG92w*+6Vz>la|mBJi-nBgyMPWa}IQ76`LNWuk= z*<}CCK*1-RQ|rSTO($aUGD!5TXmOQ1p>}*6ZG#i5ll+kA0mwk!+R$d?In2ZyrSw71 zO2PAuKYmzTq_^Lq_&~@eaebIaFPSWCEF28<_9&yPJ&5d|HdWgvslLSB%zHk60$uAr zK}aK+{o?~5SXo4k+HrH}u@ea-(N)o9OMHkSmEZtv z(P=OFRXv+c@fNu-JiaCxc)7lR96H_EdlhuIFCn;J-^cHGDoZ$@z*bjX#I%PN1H726 z;v~MAk5iiaK(+{nPtresBsyA3#Y`iZ@7uNtZLBS0@0*mFsx*~%;P}-fi~cw(4sDF9 zq_@%GaE|t;G=x;O*r65=M;-(f8pM*EJGmqeJ457e>%t>?XIovM?XIwYs0&A3wP}4W z$1}6hSeejL^1~|f=nhx*tg(p_K8&vsMw7yaVLJB!A-giEaZMmu{37_q^p32Tz|$O6 zD{*8U`Ovl&%qaFHAW!1@ViLP&h>^8DkY58MRZ%oYSUPA?)oj(StBmV1eDF1fRRwdv zLFku_lz!2<_Ue{xbY}*C@AWO3ho?0QPwI?)54W^Knkeu-OinE2^SW8)&HQeku3k2= zuoUoyC~U=Da9?CY1ynG#5L|6%60)QY6v&QiRx7z~PUb*k==@qp`)NB&m}E^}(VLEr z3ug;z_LNvvobPz!3(~fj6zm;LLzx@;n!P=iP#^SfNO(WGZqH9S4QF`EW&+%6`))A8 z5Z@?grX#iPE8qk$sGI-s`4pm1O928u13v%)01g0hPjXa;w(tJ71^@s|9g{@~Tm}pW H00000GnZH_ diff --git a/tests/ast-parsing/compile/custom_error_with_state_variable.sol-0.8.6-compact.zip b/tests/ast-parsing/compile/custom_error_with_state_variable.sol-0.8.6-compact.zip index 2018f2bc021b5451236d9bbde282998092432497..f01a2afb98b99db4657423efe8cf93ec3f8dd4b1 100644 GIT binary patch delta 2313 zcmV+k3HJ7f52zCuP)h>@KL7#%4geZt=2StYrYP13000{;kr-lsAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY*}Vi0td6p*3?k_mMLIO^?h9&#>bx zTnySXNQ!hQZ#V1a!(XyZjz*_+r`@b4g5ljr`Ek}=vXbXaYzD3fjwEm+aP<3A;IPK4 zEo~l;90Iz`gz)x%NEEV4SGEeqw3vBY0#3=cD6zrcZ5F}VLnD?up7-}9TNmGQfrF%> zYMHQQ9R|OC0EvaI#bRO)=hwQ%mp9Sp6iXBN|29j5g;VYY$*c1eA_Bu2NW4$CcBw0a zQq6@(c#gRKUJRMYH#N@@e)?S=*}*c#nO8BibG}OZ${~P%3mcQ{e78{0w+BY5@DX>r zPyhMit)-?1COzA)<;>Kz!qgzQ{ObH}i>$KBc5UJ0>__p)M z%SH(wwbZc--S@T}UgvjbqNhW~6wv7qTVD#hDPX^4shdxnWjN*vqu10*xMG3^qh^1 zZcdWP_-=EkQ_{?%h}C)!vb|FBRB#^6QN`US`oMSm#SLWj8g^6yvyMOu7Z1oV1=fE3 zS3cdjD(?iOoLlP?nT=mR65I69W6l8CP1m(joiS^FFF=Jz9BjfoB(CC>FoH1(Fn{*i zCi`F4ob4&vS&B#{XR?C{SuUWI^%}uZizyujS0B%p?pH4SO2S+imN%ZwgJl|^i|U*A zgw0dWdmBzn?ep@66UZBQOZdo;?#~v2ig3dU1{^&NDsc7=i~FGD^6v$lq+rDs-XSTT zVQ2w=(b~M2=j%;NI~6vPE5p+p*&-+XQB)M&u2@c|q>RGZ?rW2;ACGxjn8F%DTU8+!M3)Ay=d0+#u zb{M$=xjp6v@M z+yM2BBlhPdRRT&|+2ZbY&9CGy%~;UOvIqx>>ZYW-Q#k~-+)pX->7{UG@awK1UU-bO z;7TWlQ3UG%j?emUvc|F_l-ST4@h_2ohvxkxzrqh{;=43a_HnP7+^w0B;Q&- zsD!p1AGOOz?@_<2M@swWmeXc1+wJp8R5{d}t0n1b(B0$CqzPTxZdOnY5>c&#CIKmL z+lc?jNI1$d&{0?O0QFVn``zb0=R(V?cgZl~$E`Nnpkg&%$obyA#)3)9j+LW-LyQWh zBBNUbJO5nFwGk)S0;C%EYcf0A&WD>k+&KBppd-fFz~OE&m;e^#Iay>a&5%VZ_zJDZ zZY*sg+46U;J-sKaurJq)xyg}1+Wkjg3$5`s+RfFlDZQ=@NB@%Ba3q<-4LBqMcZt?z z+;3PQ!1_NUQS;nX7~g$AJlVH@=rf35_WL6EgqOR8n#* z?7NHj*`~z`Ru^?5m9sWZpk|4h`rCR>dU6Q*9yw0ifo`*@iw;`3>}J<#&r~>McqP{PHQWZJMi+= z3(hckgGJ$2(sXsL>}?%LbX%$FPt;0V4Os!pn`HeO+zOgrX3a%`KDK{r68u*4mX@mC z4L2qMl8ZuZMKgTdZsgO5Y402HQVa_i5)V5@ZBxXx@e?9_#-3j&1oVGiC=H%5yTrzZVqkH9SMz8{3yBYKs1%BNRVsdvjEL1cI z+}r*1;r^m7Y6M6OVQaQbc*xUj_69`n@B3heo5JEb5c!!QYSZNR{>J&32L^()w0}yd zGn(W|08yF2e|y9AZ_NBZMKUI@d+~$;hrz=!;*{87|C;?0R!YmBW(#us5b&%PHmRGDHVuT=t$$vl77V z)Zf>gK6s{U3zs^Z3UAl;{lo~qCoB05kLZq!{u0~WhtD{`H^jZoey1EQugm}MIl+5SO928u j13v%)01f~eWad;srKTv>2mk;ZEt4e&Tm~!&000005yger delta 1764 zcmV@KL7#%4ghjba#XbUUv0Gp002xKkr-lsC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6*+<%2#gfSO0ICXQN(SML9qbr9NuD{b z^#p)St2C=Jc(z{2EDM!2cM)r|4N|q8>}SPrZrr#GlBW+W$X_ON5NC_0ZPk6B&8l63)n(}HwfEd z;50!4++2IAidBsfabRMzL1p>>cL^rp1gG-#)~PfkU>i?FQ_-j1TseG7M0l1F z8lL{_lg-p)G#I*<&*fbQNJ4|VKk+6V5~p~4x)b9g#uFj#q+WnSWKC#`=D$4;5)3#%=Dh-zj^L+ z(JWDit!D`uWDCg334u13qHK_UpDl6?>8&DvL49=~&sw!ADI$}k#qu2n$a_&Dp2$i0 ze*`oCalX{Ds^ccnFi8i>0%9uLS%Z^-ljP%5}6oa+;uwU6sYtr(|YHj?v)kX#xsiH(7oy zdt5f6!mrar5@Rr_k|B6*uKJ>=oZk!_E*Y9h~V~x5|QHN|}w&b4dSHhM@L{ z+5izTKg;j2e-Scb5_IuI&XtfazQ%HYskR?+ErGYHV0oNam!Tz4r%VSWUXXy}|(715`KY|&VJxkF1%aI(yQhps?r zdJr<=>@k9qrRr7QfGXDD_vY8D_VX{2GBq)}h=KG-C+m{OvEOl!q^xD2Q=OVhHw>uo z27;ilIIfkSnK4_0Hm)_Lw;EiQxdHah;~!#kPh$IP)X?DH*N`O92h?w(V1)AGoS?h2 z%N!bjL8mTDeKM}Bkk6If>vu%XK8>gp`j;lZ{LWm9gv>o2p+mHx&P8kzEc0%L=UtqOFQ z7hBVl?}@or{8V*!tTRS>+`7!@`QGyQE9t@Ib#Tv@XdS1&eG(D%#3lp=zGI;=a`?|R zYlJr4z`THJjxzjCLLf_@XDG9}qMe;+43%K5x(q3OKW(j;HR7rdReq=~Lk$|$Pcm_s zy|(H;aTL@$DDYhf5Z;!5iny1MHt0(DWJ!iHld@I;2Ws#u#gnTsEBkVey>JcxqSv5e zxS=O+!=%iaxO$@uKt~Pl?m7(C3Q&nQ>*XUwJ8M;=wXbAlUhLIfM4b)t| zd$bn4ikNC7J_-X0DCqzhwNOhHt)kog8ojaO0|=F)%PG=QVmawJz)mlv*aOD=Fu;O- z@KL7#%4geZt=2Rb(mxVL7uvBzSm9Dw?WY*}Vi0td6p*3?k_mMLIO^?h9&#>bx zTnySXNQ!hQZ#V1a!(XyZjz*_+r`@b4g5ljr`Ek}=vXbXfFEdvAjwEm+aP<3A;IPK4 zEo~l;90Iz`gz)x%NEEV4SGEeqw3vBY0#3=cD6zrcZ5F}VLnD?up7-}9SRq5XYyYO_ zQ%Tx!`hNl^hzc7mmRk8-%fE|fSBl#-i5yo54b%3J5@EF)D3?@_D55zOr04`>0*H!@ zYapCVWU0>DGC`yD z2*SAd>2aPvC^p>>t-W{5&rw1UOAENX>m&CVn-keZAAmxauUlji(Z-Gz7tUeu3!^;B zln-MH4SIWjA_EypjOv=`%nIRgPS{84!#{T3|bF z9izL@TS?egO0+<%zC^=Xu|_tYmJJZ}=C7Lr8?wIoDhs|@noE$dH_KPW#6s>z z!)aW9(zp$dUYP%>^7C=Qe2Aw8lh)^?(B_f4-Dlk-YK+nDrfAyldOLe(_N-$!RT;6I zGoR}_-5$yiU4B{;p_(x1ZQ~!%6UA4^tl4LLlT&)TIG8 zWObPNr6oKcMal}}jh$8|Oj_c+O*I zU(kFMtl`!i^1-7;_iTSeBE9|K4oerv!g%5Kq$?B%)4lXlUVk7CPG|#6RwC@aKPmR;CIQgAUE&E0+F?Gr zj%*LUo}W!L$!`bI;7j`4s27`s14@Er6G@=MiD)^1Nh}==S;r0wx>l3u1D$k#_Zsl2 zSwn^J&Z!wcd|!*kn1%UW2yD@r4lRLp$qmTS^_#hvvA2@k&L&+$)Mnw2u~Zt}UA8RF z;c>~F&w95L`l8ZU<|Md0#LOzHB?ITl$^F4OY0|sjHu5HO+%aw+4W(gD-}t9MyL8Ng z=+*<==VjOHuSPPg5ycZZqc!$_T@^nDVH4-GGP~n-BGE{Ld+nw)^^+oN{mvV6t?YeC ztTxNb9W`OHZ%YY~I<%VPeB>ifI9Xx#$C>=rWKpEQL43G>0I>c`HnyIx*QiEwL=_OX z>$woW&2V*h+9z=<9tmsRw!b$!FVbLXC}{hMBHVMO7_K=TH|SYCtEU-%CsjuYakFq5 zM&Txt$iu?Bv!gZ~S4=}Z^2MnWMa<#<8yy`z&57m0dfelHLoud029U&2v0%+1+Ysa0 zLXn8fY#t6Z(aA>v*_jILt9LU)4$Y3bj-P{d&Ti+6v$GyIPL@q{RHB&yn2*mw!Nmg z_vJnRBkOcvzIJC`&IW4o{gXVHq%)@6Cn^+wSfc29k`~8Wj{Y2#Phi zDJIO&f`%M!-0DM;SYnq1VDS4`(r1zT6h>|c;yXnZ?7?QSJz}mc*7PIt-!e;fq&03g z&vwGW>1^ov&fGPv`%g(D!{x#DF5ldKonvwH83ZwF+~&ni=mhiR8W7OBisdWUxL<)? zY!Pl`)eoV6ucV;JBwN9=SQ)j3I$*x!$&6QFDiTUiE5;)}{f^vInCW6r3zU9f&|%xc zknA?N3iCdBhw`t`c^s17i~a=`oP?X8EK|mh;e5^kj~;Q{x6MAUT4xBQ^)nAWZWr6Z z=FLovt5x%Pe7|>7Ag+)IHo`>7Y5hld=o^U6=LiQ~^l-PbVIOr9NIt3(&V+9>Rwj#> zwNEw=Jid(tgWWcwv}Xd)DFw+!?GZk=xv^TaIt2K#-bhH=@vlHG2tWVRiTJiqO928u j13v%)01f~eWad;Klb4Cs2mk;ZEt4n*Tm~!&000005AScJ delta 1767 zcmV@KL7#%4ghjba#XAyi?+B1002xKkr-lsC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6*+<%2#gfSO0ICXQN(SML9qbr9NuD{b z^#p)St2C=Jc(z{2EDM!2cM)r|4N|%@A4amcc|9ILFMyn zoOJWJ*j4E+g1p;*{`z>q8>}SPrZrr#GlBW+W$X_ON5NC_0ZPk6B&8l63)n(}HwfEd z;50!4++2IAic`MN5waj0Bwmh!w1@_`z^!ZHg&TXevsSGvd^Tiki)zvSZ3=I>?g#QH zixXquL{zF6t-aCuTqkil(659n#30b#wusj4`M`3cV0w6eC3Jft+OA#?awl?sb1JtR z2E(ZTbXyO;{;koW7Lz&49SG4P2o(!7w)#X3K*Vf3^c1OwuM~BEOv>T(`eeiA-)uxo zVc3x;zJv#}a`p)hyFYB~*zms9zjtmKr?vzYt`iST0SR(@QAU)A$!CxH=?~?z_#iK} z=8X={nz>{iG9R?-^dZVE6o-B6z-)UqN65EhTYy&iI_G%q22yy= zrmYwTJ}hN$`#Jby@V~)J9^_|8)>Oh`t~ftx%zbcwGQZ(louBs7fCGh_$+etvG8|d)Neip`=Q7V zlc%o)W5{`d8S5ch67nZ$0IY#ao^0y~|D2aMn-LD&-;&zD>mTd{o6=REiau!XBk2I# z@iPv8OVc`0yRtn*_5fRAgox7#Z>g*#=T66pr||S;h(-L?D~_u~Pc5Zrfzp&h@a@`- zB&kY@ls(aD_1tDGpH%WU%Og6h8=%Y{#;BA1?HKcXki2Dby*G=W*CU8>H1w+hz;K!pM#VVw(pc`dM~EoKez z-Q=!J^ru!3m$mJ;ZlMfdbLK9f0RM^u9TeV-e=_NqJl%M%ik9{+YIYZ69)raKcT(V34Vkp!si;JM zCfGX>Oj2%EIUK_}f!gqlS@-92rHcU@K+OMEZDnzTz0{PH{<2^Jq=t%W`h}djkmgiP z>u41bVJ$kL-w7Jq*AXSMm_=GlZv8buY-zCAf;T@ z7;w^}YcC4!8|I@&K2-u`rcVs4p5U#5+}2s5ixLNB_`MiN-x~V^+%nLMUx}c9q~ia- z2YiTo6J2!OW-JLYrV`WTsQwCR5M~HGHw(RYp2*-jEqzmSIsywKMkgd!OoY^^Hr@Ml zb_{Oz8s${b;RMahnYxa)6CDDeayAUcwViMawEDYdXcn~c1h%b!?3wQlz|WTxlp0;# zzQX%ntOqN!O4pa`B*=4UEIZVHa3bLt0iMk=p6=(0?!!(#T*EqD{BvMQtDK6|1mab( z+B*F=Wx&>VQmPTi#+gnwa>G6e)lkignjJWubWlg3Bgh^4&t<@6mkorbi_rc>31He# zuH^QBVp@%&{%ck2G3x*j6LkqhzT3ix+^)u>MgTx*`IZ*a^+wUl(q}+_i6674__P9- z?{z6v2!iUikR0>xEBaFtGy;wL2+h*AyXwwuGOD)B!WEYQHn<(ic?Qu~5RXTUf4`Xv zYkb!{1JBX9|J~1v3@k>f?bi{KfOyKMa3gp(XqG#9PWk-;cFmDfJP)>$;1#)V;dFYM zYjdID4`~ze>fz!6e*1@i-Vu_!Xp6*5VGWzh8;nt}qhM(P#fNnLsN^m?%d zE|KyUZ$*#s(ERlMa&2C7krVzrF?h=9CAXPo1+rnA(u=R8imIy_?ViT_ubW97P5FU& z+R=RT#wDqr?hKsUML(ZaN@POD=xLN%US9Fgi;Q(Gp6aNARHx57HL^wrDLfm3mu_Rg z3g-69Mjjnp=x0HLtXz-_|H)yla!^YF0zU&k00ICG0CG=qRIDD0wzviW08AZ|MhRR7 J4hH}L005T#Z*%|v diff --git a/tests/ast-parsing/compile/custom_error_with_state_variable.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/custom_error_with_state_variable.sol-0.8.8-compact.zip index 9db379a5843606d8388aca0fcef2fa8e285af447..f2792f8c65668f4922edd35a002b17e2bebeccb3 100644 GIT binary patch delta 2314 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 delta 1771 zcmV@KL7#%4ghjba#Spy55>F&000LZkr-lsC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6*+<%2#gfSO0ICXQN(SML9qbr9NuD{b z^#p)St2C=Jc(z{2EDM!2cM)r|4N|_&}?FKC9=7b!&#G4PWA7xO$~;=EPniuZaOUwI;Lx2*sp5FgO+gS6fRF`ee&24G1R zPV%i*oS9xFz;4wVD*Hi52aMg5WFEt4vKw+;~cs`f6fo0AfsoLLq0fk|s_g)k`^ zVJ=BmrUT0H1b{rZzuDSmTkg9bAn!6jzLX$$x>2!zr3ZCd_X1EpT=PSE0ImiM`E8n$ zS59s~6D9Km7J?QRao%kpmDI?_OjDC(kxg9_R5uP(>Q8G;4|&uIK4XBrx@5~I*l%b86VMG75d&d+j7fDeD_rh!TyjyZ3GNJrZP3lI zCJ#G*!HSJBo#DNiG?n)?+amf6Jtl>vKO@^y9Od(Ty`Hg0)Y>qPZg=kldgvrbqP=b? z!Zj5h5LW|fghV?>rSn{YIOX9XAW7x*E|431-!`_O0%qQGhY1d)UL=Q$Z649d>GnI&+ViUv@a(R222a#fAg$S04EGgQwjm^~#(RNpddi2)X4MB*L=k$+bd!$YG|8y{#7 zyABUpA-6i}I_eq5m-kn&eaS`l$0BkSWMQ9W-^Y}?slzTC?>?Z7{HE!!hcdA=-S>Ay7&x=wM-@>3R>nZ_r zC1dZ5HkKjDBB+yy?EEdC*<$i~3XHJHu*_eaA;=8DJG+OAC4<=eA9KRec~WtOHyT9| zLm@*<=%RFgzreOZ05uAAu{hR$FL}AhJ;@556o>14{qjq;kL!aElgG9Rw;mP-jP+rG zZ?SR=0g2Iu#?y4(_rS9lA)JJNLLU8e+c-U^SLvRTtL%7f>rrno;DSe-cq6;*$$;0F zi~Fz&SkqkVuL-6yh==G|PCBb#Llr<+2qu`Ekl6+$8Qd0Q{=6TdfGAdf4cMaUa^G~J zZg3WtJ{ZUeWcX;~E}Vl#eD0ebV%l?hgi2t)gYs$~1=LoG45rju$rMO#G%H84+ z)8L#Mp@}7Y9NkuKN%9JFV}xSVP1QdMUVhp* z5x>DGHU;6z&t+v6fmDl6adh-Jn;Nvcw<-xvuIKd|G4~To=1d|#?rlbMpv#Vj@CgZ5 ztX$PH*tYCrs{D2VRgumBMXSU!|J_YuU{Ff|0zU&k00ICG0CG=qR4kqk#k>Xp00$hC NSP5JP5(fYP007|wKPdnJ diff --git a/tests/ast-parsing/custom_error_with_state_variable.sol b/tests/ast-parsing/custom_error_with_state_variable.sol index 3c38202f4..b05c2ef60 100644 --- a/tests/ast-parsing/custom_error_with_state_variable.sol +++ b/tests/ast-parsing/custom_error_with_state_variable.sol @@ -9,5 +9,14 @@ error ErrorWithParam(uint256 value); uint256 constant ONE = 1; uint256 constant TWO = ONE + 1; function foo() pure { revert ErrorWithParam(0); } -contract Bar { } + +library CustomErrors { + error LibraryError(); +} + +contract Bar { + function baz() external { + revert CustomErrors.LibraryError(); + } +} diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.10-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.10-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.10-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.10-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.11-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.11-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.11-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.11-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.12-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.12-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.12-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.12-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.4-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.4-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.4-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.4-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.5-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.5-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.5-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.5-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.6-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.6-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.6-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.6-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.7-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.7-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.7-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.7-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.8-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.8-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.8-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.8-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.9-compact.json b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.9-compact.json index 4355f9aef..34f391b5c 100644 --- a/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.9-compact.json +++ b/tests/ast-parsing/expected/custom_error_with_state_variable.sol-0.8.9-compact.json @@ -1,3 +1,6 @@ { - "Bar": {} + "CustomErrors": {}, + "Bar": { + "baz()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } } \ No newline at end of file From 6971f3005d2d8b060e3601d95a6c6983b0c94f4e Mon Sep 17 00:00:00 2001 From: Kyle Baker Date: Tue, 26 Jul 2022 01:54:34 -0600 Subject: [PATCH 079/202] replace-initialize (#1239) --- slither/detectors/statements/unprotected_upgradeable.py | 2 +- slither/tools/upgradeability/checks/initialization.py | 6 +++--- .../detectors/uninitialized-state/0.4.25/uninitialized.sol | 6 +++--- .../detectors/uninitialized-state/0.5.16/uninitialized.sol | 6 +++--- .../detectors/uninitialized-state/0.6.11/uninitialized.sol | 6 +++--- tests/detectors/uninitialized-state/0.7.6/uninitialized.sol | 6 +++--- .../0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json | 4 ++-- .../0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json | 4 ++-- .../0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json | 4 ++-- .../0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json | 4 ++-- 10 files changed, 24 insertions(+), 24 deletions(-) diff --git a/slither/detectors/statements/unprotected_upgradeable.py b/slither/detectors/statements/unprotected_upgradeable.py index f39eb31a4..89abaa34b 100644 --- a/slither/detectors/statements/unprotected_upgradeable.py +++ b/slither/detectors/statements/unprotected_upgradeable.py @@ -102,7 +102,7 @@ class UnprotectedUpgradeable(AbstractDetector): info = ( [ contract, - " is an upgradeable contract that does not protect its initiliaze functions: ", + " is an upgradeable contract that does not protect its initialize functions: ", ] + initialize_functions + [ diff --git a/slither/tools/upgradeability/checks/initialization.py b/slither/tools/upgradeability/checks/initialization.py index d8f6876ef..2055a322a 100644 --- a/slither/tools/upgradeability/checks/initialization.py +++ b/slither/tools/upgradeability/checks/initialization.py @@ -15,7 +15,7 @@ class MultipleInitTarget(Exception): pass -def _has_initiliaze_modifier(function: Function): +def _has_initialize_modifier(function: Function): if not function.modifiers: return False return any((m.name == "initializer") for m in function.modifiers) @@ -25,7 +25,7 @@ def _get_initialize_functions(contract): return [ f for f in contract.functions - if (f.name == "initialize" or _has_initiliaze_modifier(f)) and f.is_implemented + if (f.name == "initialize" or _has_initialize_modifier(f)) and f.is_implemented ] @@ -313,7 +313,7 @@ contract DerivedDerived is Derived{ } ``` -`Base.initialize(uint)` is called two times in `DerivedDerived.initiliaze` execution, leading to a potential corruption. +`Base.initialize(uint)` is called two times in `DerivedDerived.initialize` execution, leading to a potential corruption. """ # endregion wiki_exploit_scenario diff --git a/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol b/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol index 26b4c9110..de0e9a7f7 100644 --- a/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol +++ b/tests/detectors/uninitialized-state/0.4.25/uninitialized.sol @@ -43,16 +43,16 @@ contract Test2 { using Lib for Lib.MyStruct; Lib.MyStruct st; - Lib.MyStruct stInitiliazed; + Lib.MyStruct stinitialized; uint v; // v is used as parameter of the lib, but is never init function init(){ - stInitiliazed.set(v); + stinitialized.set(v); } function use(){ // random operation to use the structure - require(st.val == stInitiliazed.val); + require(st.val == stinitialized.val); } } diff --git a/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol b/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol index 7b5fbb5d9..209b28591 100644 --- a/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol +++ b/tests/detectors/uninitialized-state/0.5.16/uninitialized.sol @@ -43,16 +43,16 @@ contract Test2 { using Lib for Lib.MyStruct; Lib.MyStruct st; - Lib.MyStruct stInitiliazed; + Lib.MyStruct stinitialized; uint v; // v is used as parameter of the lib, but is never init function init() public{ - stInitiliazed.set(v); + stinitialized.set(v); } function use() view public{ // random operation to use the structure - require(st.val == stInitiliazed.val); + require(st.val == stinitialized.val); } } diff --git a/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol b/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol index 7b5fbb5d9..209b28591 100644 --- a/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol +++ b/tests/detectors/uninitialized-state/0.6.11/uninitialized.sol @@ -43,16 +43,16 @@ contract Test2 { using Lib for Lib.MyStruct; Lib.MyStruct st; - Lib.MyStruct stInitiliazed; + Lib.MyStruct stinitialized; uint v; // v is used as parameter of the lib, but is never init function init() public{ - stInitiliazed.set(v); + stinitialized.set(v); } function use() view public{ // random operation to use the structure - require(st.val == stInitiliazed.val); + require(st.val == stinitialized.val); } } diff --git a/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol b/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol index 7b5fbb5d9..209b28591 100644 --- a/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol +++ b/tests/detectors/uninitialized-state/0.7.6/uninitialized.sol @@ -43,16 +43,16 @@ contract Test2 { using Lib for Lib.MyStruct; Lib.MyStruct st; - Lib.MyStruct stInitiliazed; + Lib.MyStruct stinitialized; uint v; // v is used as parameter of the lib, but is never init function init() public{ - stInitiliazed.set(v); + stinitialized.set(v); } function use() view public{ // random operation to use the structure - require(st.val == stInitiliazed.val); + require(st.val == stinitialized.val); } } diff --git a/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json index 28fd9cd3c..f5b7d583b 100644 --- a/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json @@ -141,8 +141,8 @@ } } ], - "description": "Buggy (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#3-15) is an upgradeable contract that does not protect its initiliaze functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#10-13)", - "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initiliaze functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L10-L13)", + "description": "Buggy (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#10-13)", + "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L3-L15", "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", "check": "unprotected-upgrade", diff --git a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json index d5452021e..4f5015bf5 100644 --- a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json @@ -141,8 +141,8 @@ } } ], - "description": "Buggy (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#3-15) is an upgradeable contract that does not protect its initiliaze functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#10-13)", - "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initiliaze functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L10-L13)", + "description": "Buggy (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#10-13)", + "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L3-L15", "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", "check": "unprotected-upgrade", diff --git a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json index b0fe359e4..57aa43c6c 100644 --- a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json @@ -141,8 +141,8 @@ } } ], - "description": "Buggy (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#3-15) is an upgradeable contract that does not protect its initiliaze functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#10-13)", - "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initiliaze functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L10-L13)", + "description": "Buggy (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#10-13)", + "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L3-L15", "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", "check": "unprotected-upgrade", diff --git a/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json index 10f2a2b28..e2f23109e 100644 --- a/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json @@ -141,8 +141,8 @@ } } ], - "description": "Buggy (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#3-15) is an upgradeable contract that does not protect its initiliaze functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#10-13)", - "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initiliaze functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L10-L13)", + "description": "Buggy (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#10-13)", + "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L3-L15", "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", "check": "unprotected-upgrade", From c4c7d5674aaf364f6c16c8c2e083ff2e8cdceb30 Mon Sep 17 00:00:00 2001 From: greenknot <43061872+greenknot@users.noreply.github.com> Date: Tue, 26 Jul 2022 09:55:49 +0200 Subject: [PATCH 080/202] Dockerfile: upgrade from Ubuntu Bionic (18.04) to Focal (20.04) (#1242) Dockerfile: upgrade from Ubuntu Bionic (18.04) to Focal (20.04) (#1242) --- Dockerfile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1d35709c5..369bcf865 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:bionic +FROM ubuntu:focal LABEL name=slither LABEL src="https://github.com/trailofbits/slither" @@ -6,11 +6,12 @@ LABEL creator=trailofbits LABEL dockerfile_maintenance=trailofbits LABEL desc="Static Analyzer for Solidity" -RUN apt-get update \ - && apt-get upgrade -y \ - && apt-get install -y git python3 python3-setuptools wget software-properties-common +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get upgrade -yq \ + && apt-get install -yq gcc git python3 python3-dev python3-setuptools wget software-properties-common -RUN wget https://github.com/ethereum/solidity/releases/download/v0.4.25/solc-static-linux \ +RUN wget -q https://github.com/ethereum/solidity/releases/download/v0.4.25/solc-static-linux \ && chmod +x solc-static-linux \ && mv solc-static-linux /usr/bin/solc From 89852f0c6f4ef59e715af7acfab71b03106d7ea7 Mon Sep 17 00:00:00 2001 From: Jean Cvllr <31145285+CJ42@users.noreply.github.com> Date: Tue, 26 Jul 2022 09:00:33 +0100 Subject: [PATCH 081/202] fix: anchor links to Vulnerability report docs (#1257) * fix: incorrect anchor links to docs --- README.md | 8 ++++---- slither/detectors/assembly/shift_parameter_mixup.py | 4 +++- slither/detectors/variables/similar_variables.py | 4 +++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f1e491103..d7b9332a2 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Num | Detector | What it Detects | Impact | Confidence --- | --- | --- | --- | --- 1 | `abiencoderv2-array` | [Storage abiencoderv2 array](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-abiencoderv2-array) | High | High 2 | `array-by-reference` | [Modifying storage array by value](https://github.com/crytic/slither/wiki/Detector-Documentation#modifying-storage-array-by-value) | High | High -3 | `incorrect-shift` | [The order of parameters in a shift instruction is incorrect.](https://github.com/crytic/slither/wiki/Detector-Documentation#shift-parameter-mixup) | High | High +3 | `incorrect-shift` | [The order of parameters in a shift instruction is incorrect.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-shift-in-assembly) | High | High 4 | `multiple-constructors` | [Multiple constructor schemes](https://github.com/crytic/slither/wiki/Detector-Documentation#multiple-constructor-schemes) | High | High 5 | `name-reused` | [Contract's name reused](https://github.com/crytic/slither/wiki/Detector-Documentation#name-reused) | High | High 6 | `public-mappings-nested` | [Public mappings with nested variables](https://github.com/crytic/slither/wiki/Detector-Documentation#public-mappings-with-nested-variables) | High | High @@ -124,7 +124,7 @@ Num | Detector | What it Detects | Impact | Confidence 70 | `costly-loop` | [Costly operations in a loop](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | Informational | Medium 71 | `dead-code` | [Functions that are not used](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | Informational | Medium 72 | `reentrancy-unlimited-gas` | [Reentrancy vulnerabilities through send and transfer](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Informational | Medium -73 | `similar-names` | [Variable names are too similar](https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-are-too-similar) | Informational | Medium +73 | `similar-names` | [Variable names are too similar](https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-too-similar) | Informational | Medium 74 | `too-many-digits` | [Conformance to numeric notation best practices](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informational | Medium 75 | `constable-states` | [State variables that could be declared constant](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Optimization | High 76 | `external-function` | [Public function that could be declared external](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Optimization | High @@ -184,7 +184,7 @@ We recommend using a Python virtual environment, as detailed in the [Developer I ### Using Docker -Use the [`eth-security-toolbox`](https://github.com/trailofbits/eth-security-toolbox/) docker image. It includes all of our security tools and every major version of Solidity in a single image. `/home/share` will be mounted to `/share` in the container. +Use the [`eth-security-toolbox`](https://github.com/trailofbits/eth-security-toolbox/) docker image. It includes all of our security tools and every major version of Solidity in a single image. `/home/share` will be mounted to `/share` in the container. ```bash docker pull trailofbits/eth-security-toolbox @@ -232,4 +232,4 @@ Title | Usage | Authors | Venue [SolType: Refinement Types for Arithmetic Overflow in Solidity](https://arxiv.org/abs/2110.00677) | Use Slither as frontend to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 [Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection](https://www.mdpi.com/2227-7390/10/6/949) | Use Slither to extract tokens' features (mintable, pausable, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) -If you are using Slither on an academic work, consider applying to the [Crytic $10k Research Prize](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/). +If you are using Slither on an academic work, consider applying to the [Crytic $10k Research Prize](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/). \ No newline at end of file diff --git a/slither/detectors/assembly/shift_parameter_mixup.py b/slither/detectors/assembly/shift_parameter_mixup.py index a8c172ce6..65a35d8c3 100644 --- a/slither/detectors/assembly/shift_parameter_mixup.py +++ b/slither/detectors/assembly/shift_parameter_mixup.py @@ -13,7 +13,9 @@ class ShiftParameterMixup(AbstractDetector): IMPACT = DetectorClassification.HIGH CONFIDENCE = DetectorClassification.HIGH - WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#shift-parameter-mixup" + WIKI = ( + "https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-shift-in-assembly" + ) WIKI_TITLE = "Incorrect shift in assembly." WIKI_DESCRIPTION = "Detect if the values in a shift operation are reversed" diff --git a/slither/detectors/variables/similar_variables.py b/slither/detectors/variables/similar_variables.py index 0b247434c..bab2d0acc 100644 --- a/slither/detectors/variables/similar_variables.py +++ b/slither/detectors/variables/similar_variables.py @@ -17,7 +17,9 @@ class SimilarVarsDetection(AbstractDetector): IMPACT = DetectorClassification.INFORMATIONAL CONFIDENCE = DetectorClassification.MEDIUM - WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-are-too-similar" + WIKI = ( + "https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-too-similar" + ) WIKI_TITLE = "Variable names too similar" WIKI_DESCRIPTION = "Detect variables with names that are too similar." From 8bead9347c2db89680e48839eb885374a61fe6c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= <2642849+elopez@users.noreply.github.com> Date: Tue, 26 Jul 2022 05:02:59 -0300 Subject: [PATCH 082/202] Unify path filtering across POSIX and Windows (#1196) * Unify path filtering across POSIX and Windows Path filtering is performed on absolute paths, which causes regexps to not work uniformly across OSes, due to the different path separator (forward vs backward slashes). This converts paths to POSIX-style before filtering, so that regexps can be written in a single style and work across all systems. Fixes: #1191 * Revert path behavior for "ignore comment" checks --- slither/core/slither_core.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 2a76f3e6e..f154ba5a4 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -4,6 +4,7 @@ import json import logging import os +import pathlib import posixpath import re from typing import Optional, Dict, List, Set, Union @@ -218,8 +219,12 @@ class SlitherCore(Context): for elem in r["elements"] if "source_mapping" in elem ] - source_mapping_elements = map( - lambda x: posixpath.normpath(x) if x else x, source_mapping_elements + + # Use POSIX-style paths so that filter_paths works across different + # OSes. Convert to a list so elements don't get consumed and are lost + # while evaluating the first pattern + source_mapping_elements = list( + map(lambda x: pathlib.Path(x).resolve().as_posix() if x else x, source_mapping_elements) ) matching = False From 2e341aee9b5cbd513552ea0a8412ae7a0cebeb24 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 26 Jul 2022 03:08:02 -0500 Subject: [PATCH 083/202] do not convert IRs with arguments to state var read (#1230) * do not convert IRs with arguments to state var read --- scripts/ci_test_truffle.sh | 2 +- slither/core/children/child_node.py | 2 +- slither/slithir/convert.py | 6 +++++- ...libraries_from_free.sol-0.8.12-compact.zip | Bin 0 -> 3062 bytes ..._function_collision.sol-0.8.12-compact.zip | Bin 0 -> 3048 bytes .../new_operator.sol-0.8.12-compact.zip | Bin 0 -> 2740 bytes ...ibraries_from_free.sol-0.8.12-compact.json | 9 +++++++++ ...function_collision.sol-0.8.12-compact.json | 9 +++++++++ .../new_operator.sol-0.8.12-compact.json | 6 ++++++ .../free_functions/libraries_from_free.sol | 18 ++++++++++++++++++ .../library_constant_function_collision.sol | 14 ++++++++++++++ .../free_functions/new_operator.sol | 13 +++++++++++++ tests/test_ast_parsing.py | 3 +++ 13 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 tests/ast-parsing/compile/free_functions/libraries_from_free.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/free_functions/library_constant_function_collision.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/free_functions/new_operator.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/expected/free_functions/libraries_from_free.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/free_functions/library_constant_function_collision.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/free_functions/new_operator.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/free_functions/libraries_from_free.sol create mode 100644 tests/ast-parsing/free_functions/library_constant_function_collision.sol create mode 100644 tests/ast-parsing/free_functions/new_operator.sol diff --git a/scripts/ci_test_truffle.sh b/scripts/ci_test_truffle.sh index e9a843848..a28e1d2c3 100755 --- a/scripts/ci_test_truffle.sh +++ b/scripts/ci_test_truffle.sh @@ -15,7 +15,7 @@ npm install -g truffle truffle unbox metacoin slither . -if [ $? -eq 9 ] +if [ $? -eq 6 ] then exit 0 fi diff --git a/slither/core/children/child_node.py b/slither/core/children/child_node.py index 1c745f414..c1fffd49a 100644 --- a/slither/core/children/child_node.py +++ b/slither/core/children/child_node.py @@ -28,4 +28,4 @@ class ChildNode: @property def compilation_unit(self) -> "SlitherCompilationUnit": - return self.contract.compilation_unit + return self.node.compilation_unit diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 50090bc04..505d5a765 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -1385,7 +1385,11 @@ def convert_type_library_call(ir: HighLevelCall, lib_contract: Contract): if len(candidates) == 1: func = candidates[0] - if func is None: + # We can discard if there are arguments here because libraries only support constant variables + # And constant variables cannot have non-value type + # i.e. "uint[2] constant arr = [1,2];" is not possible in Solidity + # If this were to change, the following condition might be broken + if func is None and not ir.arguments: # TODO: handle collision with multiple state variables/functions func = lib_contract.get_state_variable_from_name(ir.function_name) if func is None and candidates: diff --git a/tests/ast-parsing/compile/free_functions/libraries_from_free.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/free_functions/libraries_from_free.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..13d54539fb49adb5718f8a903477ea1539d094b2 GIT binary patch literal 3062 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 I=K+BK0FpPpR{#J2 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/free_functions/new_operator.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/free_functions/new_operator.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7135e729d8e118ac7fb2deb1f3d75ba014243579 GIT binary patch literal 2740 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/free_functions/libraries_from_free.sol-0.8.12-compact.json b/tests/ast-parsing/expected/free_functions/libraries_from_free.sol-0.8.12-compact.json new file mode 100644 index 000000000..a6707f586 --- /dev/null +++ b/tests/ast-parsing/expected/free_functions/libraries_from_free.sol-0.8.12-compact.json @@ -0,0 +1,9 @@ +{ + "L": { + "pub()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "inter()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/free_functions/library_constant_function_collision.sol-0.8.12-compact.json b/tests/ast-parsing/expected/free_functions/library_constant_function_collision.sol-0.8.12-compact.json new file mode 100644 index 000000000..5bfc4f471 --- /dev/null +++ b/tests/ast-parsing/expected/free_functions/library_constant_function_collision.sol-0.8.12-compact.json @@ -0,0 +1,9 @@ +{ + "ExtendedMath": {}, + "IERC20": { + "decimals()": "digraph{\n}\n" + }, + "A": { + "test(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/free_functions/new_operator.sol-0.8.12-compact.json b/tests/ast-parsing/expected/free_functions/new_operator.sol-0.8.12-compact.json new file mode 100644 index 000000000..198cdcd9c --- /dev/null +++ b/tests/ast-parsing/expected/free_functions/new_operator.sol-0.8.12-compact.json @@ -0,0 +1,6 @@ +{ + "C": {}, + "D": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/free_functions/libraries_from_free.sol b/tests/ast-parsing/free_functions/libraries_from_free.sol new file mode 100644 index 000000000..2091ae771 --- /dev/null +++ b/tests/ast-parsing/free_functions/libraries_from_free.sol @@ -0,0 +1,18 @@ +library L { + function pub() public pure returns (uint) { + return 7; + } + function inter() internal pure returns (uint) { + return 8; + } +} + +function fu() pure returns (uint, uint) { + return (L.pub(), L.inter()); +} + +contract C { + function f() public pure returns (uint, uint) { + return fu(); + } +} diff --git a/tests/ast-parsing/free_functions/library_constant_function_collision.sol b/tests/ast-parsing/free_functions/library_constant_function_collision.sol new file mode 100644 index 000000000..8aaa2d788 --- /dev/null +++ b/tests/ast-parsing/free_functions/library_constant_function_collision.sol @@ -0,0 +1,14 @@ +library ExtendedMath { + uint256 constant decimals = 18; +} + +interface IERC20 { + function decimals() external view returns (uint8); +} + +contract A { + using ExtendedMath for *; + function test(address x) public { + uint8 decimals = IERC20(address(x)).decimals(); + } +} diff --git a/tests/ast-parsing/free_functions/new_operator.sol b/tests/ast-parsing/free_functions/new_operator.sol new file mode 100644 index 000000000..4b71d70c9 --- /dev/null +++ b/tests/ast-parsing/free_functions/new_operator.sol @@ -0,0 +1,13 @@ +contract C { + uint public x = 2; +} + +function test() returns (uint) { + return (new C()).x(); +} + +contract D { + function f() public returns (uint) { + return test(); + } +} diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index 62a604979..ed83e2b20 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -408,6 +408,9 @@ ALL_TESTS = [ # 0.8.9 crashes on our testcase Test("user_defined_types.sol", ["0.8.8"] + make_version(8, 10, 12)), Test("bytes_call.sol", ["0.8.12"]), + Test("free_functions/libraries_from_free.sol", ["0.8.12"]), + Test("free_functions/new_operator.sol", ["0.8.12"]), + Test("free_functions/library_constant_function_collision.sol", ["0.8.12"]), ] # create the output folder if needed try: From a3fa7e6c2c26defb8a80e9a6fd6c7b471b079060 Mon Sep 17 00:00:00 2001 From: h00p30 <105890602+h00p30@users.noreply.github.com> Date: Tue, 26 Jul 2022 10:10:29 +0200 Subject: [PATCH 084/202] Support of ERC1363, ERC4524 for slither-check-erc (#1274) * fix typo in `--help` output for `--print` flag (#1149) * Support of ERC1363, ERC4524 for slither-check-erc (#1263) Co-authored-by: Erick --- slither/core/declarations/contract.py | 23 +++++++++++++ slither/utils/erc.py | 49 +++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/slither/core/declarations/contract.py b/slither/core/declarations/contract.py index 2db1cd964..c82cbc446 100644 --- a/slither/core/declarations/contract.py +++ b/slither/core/declarations/contract.py @@ -21,6 +21,8 @@ from slither.utils.erc import ( ERC777_signatures, ERC1155_signatures, ERC2612_signatures, + ERC1363_signatures, + ERC4524_signatures, ERC4626_signatures, ) from slither.utils.tests_pattern import is_test_contract @@ -903,6 +905,7 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods ("ERC721", self.is_erc721), ("ERC777", self.is_erc777), ("ERC2612", self.is_erc2612), + ("ERC1363", self.is_erc1363), ("ERC4626", self.is_erc4626), ] @@ -998,6 +1001,26 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods full_names = self.functions_signatures return all(s in full_names for s in ERC2612_signatures) + def is_erc1363(self) -> bool: + """ + Check if the contract is an erc1363 + + Note: it does not check for correct return values + :return: Returns a true if the contract is an erc1363 + """ + full_names = self.functions_signatures + return all(s in full_names for s in ERC1363_signatures) + + def is_erc4524(self) -> bool: + """ + Check if the contract is an erc4524 + + Note: it does not check for correct return values + :return: Returns a true if the contract is an erc4524 + """ + full_names = self.functions_signatures + return all(s in full_names for s in ERC4524_signatures) + @property def is_token(self) -> bool: """ diff --git a/slither/utils/erc.py b/slither/utils/erc.py index af91886fd..0b8c99bb4 100644 --- a/slither/utils/erc.py +++ b/slither/utils/erc.py @@ -340,6 +340,53 @@ ERC2612 = [ ERC2612_signatures = erc_to_signatures(ERC2612) +# Review +# https://eips.ethereum.org/EIPS/eip-1363 +# Must have ERC20 and ERC165 + +ERC1363_EVENTS = [] +ERC1363 = ( + [ + ERC("transferAndCall", ["address", "uint256"], "bool", False, True, []), + ERC("transferAndCall", ["address", "uint256", "bytes"], "bool", False, True, []), + ERC("transferFromAndCall", ["address", "address", "uint256"], "bool", False, True, []), + ERC( + "transferFromAndCall", + ["address", "address", "uint256", "bytes"], + "bool", + False, + True, + [], + ), + ERC("approveAndCall", ["address", "uint256"], "bool", False, True, []), + ERC("approveAndCall", ["address", "uint256", "bytes"], "bool", False, True, []), + ] + + ERC20 + + ERC165 +) + +ERC1363_signatures = erc_to_signatures(ERC1363) + +# Review +# https://eips.ethereum.org/EIPS/eip-4524 +# Must have ERC20 and ERC165 + +ERC4524_EVENTS = [] +ERC4524 = ( + [ + ERC("safeTransfer", ["address", "uint256"], "bool", False, True, []), + ERC("safeTransfer", ["address", "uint256", "bytes"], "bool", False, True, []), + ERC("safeTransferFrom", ["address", "address", "uint256"], "bool", False, True, []), + ERC( + "safeTransferFrom", ["address", "address", "uint256", "bytes"], "bool", False, True, [] + ), + ] + + ERC20 + + ERC165 +) + +ERC4524_signatures = erc_to_signatures(ERC4524) + # Final # https://eips.ethereum.org/EIPS/eip-4626 # Must have ERC20 @@ -405,5 +452,7 @@ ERCS = { "ERC777": (ERC777, ERC777_EVENTS), "ERC1155": (ERC1155, ERC1155_EVENTS), "ERC2612": (ERC2612, ERC2612_EVENTS), + "ERC1363": (ERC1363, ERC1363_EVENTS), + "ERC4524": (ERC4524, ERC4524_EVENTS), "ERC4626": (ERC4626, ERC4626_EVENTS), } From bb0b04be2f95dca78f1722fac3662edd6642efe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Schoentgen?= Date: Tue, 26 Jul 2022 10:11:37 +0200 Subject: [PATCH 085/202] Fix deprecation warnings: invalid escape sequence (#1185) --- slither/detectors/attributes/incorrect_solc.py | 2 +- slither/formatters/attributes/constant_pragma.py | 2 +- slither/formatters/attributes/incorrect_solc.py | 3 +-- slither/formatters/naming_convention/naming_convention.py | 6 +++--- slither/solc_parsing/expressions/expression_parsing.py | 2 +- slither/solc_parsing/solidity_types/type_parsing.py | 6 +++--- slither/tools/kspec_coverage/analysis.py | 4 ++-- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/slither/detectors/attributes/incorrect_solc.py b/slither/detectors/attributes/incorrect_solc.py index ad8aebdec..5292c19e3 100644 --- a/slither/detectors/attributes/incorrect_solc.py +++ b/slither/detectors/attributes/incorrect_solc.py @@ -14,7 +14,7 @@ from slither.formatters.attributes.incorrect_solc import custom_format # 4: version number # pylint: disable=anomalous-backslash-in-string -PATTERN = re.compile("(\^|>|>=|<|<=)?([ ]+)?(\d+)\.(\d+)\.(\d+)") +PATTERN = re.compile(r"(\^|>|>=|<|<=)?([ ]+)?(\d+)\.(\d+)\.(\d+)") class IncorrectSolc(AbstractDetector): diff --git a/slither/formatters/attributes/constant_pragma.py b/slither/formatters/attributes/constant_pragma.py index 572ad2fdf..251dd07ae 100644 --- a/slither/formatters/attributes/constant_pragma.py +++ b/slither/formatters/attributes/constant_pragma.py @@ -13,7 +13,7 @@ REPLACEMENT_VERSIONS = ["^0.4.25", "^0.5.3"] # 2: version number # 3: version number # 4: version number -PATTERN = re.compile("(\^|>|>=|<|<=)?([ ]+)?(\d+)\.(\d+)\.(\d+)") +PATTERN = re.compile(r"(\^|>|>=|<|<=)?([ ]+)?(\d+)\.(\d+)\.(\d+)") def custom_format(slither, result): diff --git a/slither/formatters/attributes/incorrect_solc.py b/slither/formatters/attributes/incorrect_solc.py index 0315d2285..de0025138 100644 --- a/slither/formatters/attributes/incorrect_solc.py +++ b/slither/formatters/attributes/incorrect_solc.py @@ -13,8 +13,7 @@ REPLACEMENT_VERSIONS = ["^0.4.25", "^0.5.3"] # 3: version number # 4: version number -# pylint: disable=anomalous-backslash-in-string -PATTERN = re.compile("(\^|>|>=|<|<=)?([ ]+)?(\d+)\.(\d+)\.(\d+)") +PATTERN = re.compile(r"(\^|>|>=|<|<=)?([ ]+)?(\d+)\.(\d+)\.(\d+)") def custom_format(slither, result): diff --git a/slither/formatters/naming_convention/naming_convention.py b/slither/formatters/naming_convention/naming_convention.py index daef287fa..d7720cc5a 100644 --- a/slither/formatters/naming_convention/naming_convention.py +++ b/slither/formatters/naming_convention/naming_convention.py @@ -300,10 +300,10 @@ def _patch(compilation_unit: SlitherCompilationUnit, result, element, _target): # group 2: beginning of the to type # nested mapping are within the group 1 # RE_MAPPING = '[ ]*mapping[ ]*\([ ]*([\=\>\(\) a-zA-Z0-9\._\[\]]*)[ ]*=>[ ]*([a-zA-Z0-9\._\[\]]*)\)' -RE_MAPPING_FROM = b"([a-zA-Z0-9\._\[\]]*)" -RE_MAPPING_TO = b"([\=\>\(\) a-zA-Z0-9\._\[\]\ ]*)" +RE_MAPPING_FROM = rb"([a-zA-Z0-9\._\[\]]*)" +RE_MAPPING_TO = rb"([\=\>\(\) a-zA-Z0-9\._\[\]\ ]*)" RE_MAPPING = ( - b"[ ]*mapping[ ]*\([ ]*" + RE_MAPPING_FROM + b"[ ]*" + b"=>" + b"[ ]*" + RE_MAPPING_TO + b"\)" + rb"[ ]*mapping[ ]*\([ ]*" + RE_MAPPING_FROM + b"[ ]*" + b"=>" + b"[ ]*" + RE_MAPPING_TO + rb"\)" ) diff --git a/slither/solc_parsing/expressions/expression_parsing.py b/slither/solc_parsing/expressions/expression_parsing.py index 759d3d6a2..e5c26a548 100644 --- a/slither/solc_parsing/expressions/expression_parsing.py +++ b/slither/solc_parsing/expressions/expression_parsing.py @@ -445,7 +445,7 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) t = expression["attributes"]["type"] if t: - found = re.findall("[struct|enum|function|modifier] \(([\[\] ()a-zA-Z0-9\.,_]*)\)", t) + found = re.findall(r"[struct|enum|function|modifier] \(([\[\] ()a-zA-Z0-9\.,_]*)\)", t) assert len(found) <= 1 if found: value = value + "(" + found[0] + ")" diff --git a/slither/solc_parsing/solidity_types/type_parsing.py b/slither/solc_parsing/solidity_types/type_parsing.py index f052bba05..413339611 100644 --- a/slither/solc_parsing/solidity_types/type_parsing.py +++ b/slither/solc_parsing/solidity_types/type_parsing.py @@ -112,7 +112,7 @@ def _find_from_type_name( # pylint: disable=too-many-locals,too-many-branches,t if not var_type: if name.startswith("function "): found = re.findall( - "function \(([ ()\[\]a-zA-Z0-9\.,]*?)\)(?: payable)?(?: (?:external|internal|pure|view))?(?: returns \(([a-zA-Z0-9() \.,]*)\))?", + r"function \(([ ()\[\]a-zA-Z0-9\.,]*?)\)(?: payable)?(?: (?:external|internal|pure|view))?(?: returns \(([a-zA-Z0-9() \.,]*)\))?", name, ) assert len(found) == 1 @@ -159,10 +159,10 @@ def _find_from_type_name( # pylint: disable=too-many-locals,too-many-branches,t if name.startswith("mapping("): # nested mapping declared with var if name.count("mapping(") == 1: - found = re.findall("mapping\(([a-zA-Z0-9\.]*) => ([ a-zA-Z0-9\.\[\]]*)\)", name) + found = re.findall(r"mapping\(([a-zA-Z0-9\.]*) => ([ a-zA-Z0-9\.\[\]]*)\)", name) else: found = re.findall( - "mapping\(([a-zA-Z0-9\.]*) => (mapping\([=> a-zA-Z0-9\.\[\]]*\))\)", + r"mapping\(([a-zA-Z0-9\.]*) => (mapping\([=> a-zA-Z0-9\.\[\]]*\))\)", name, ) assert len(found) == 1 diff --git a/slither/tools/kspec_coverage/analysis.py b/slither/tools/kspec_coverage/analysis.py index 92d9e49d8..3d513d22f 100755 --- a/slither/tools/kspec_coverage/analysis.py +++ b/slither/tools/kspec_coverage/analysis.py @@ -22,8 +22,8 @@ def _get_all_covered_kspec_functions(target: str) -> Set[Tuple[str, str]]: # Create a set of our discovered functions which are covered covered_functions: Set[Tuple[str, str]] = set() - BEHAVIOUR_PATTERN = re.compile("behaviour\s+(\S+)\s+of\s+(\S+)") - INTERFACE_PATTERN = re.compile("interface\s+([^\r\n]+)") + BEHAVIOUR_PATTERN = re.compile(r"behaviour\s+(\S+)\s+of\s+(\S+)") + INTERFACE_PATTERN = re.compile(r"interface\s+([^\r\n]+)") # Read the file contents with open(target, "r", encoding="utf8") as target_file: From 792321f531303216647ba0161f83212f8d9317c8 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 26 Jul 2022 10:14:06 +0200 Subject: [PATCH 086/202] Fix naming --- slither/solc_parsing/expressions/find_variable.py | 4 ++-- slither/solc_parsing/yul/parse_yul.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/slither/solc_parsing/expressions/find_variable.py b/slither/solc_parsing/expressions/find_variable.py index d1236f78e..33c342097 100644 --- a/slither/solc_parsing/expressions/find_variable.py +++ b/slither/solc_parsing/expressions/find_variable.py @@ -98,7 +98,7 @@ def _find_variable_in_function_parser( return None -def _find_top_level( +def find_top_level( var_name: str, scope: "FileScope" ) -> Tuple[ Optional[Union[Enum, Structure, SolidityImportPlaceHolder, CustomError, TopLevelVariable]], bool @@ -402,7 +402,7 @@ def find_variable( return SolidityFunction(var_name), False # Top level must be at the end, if nothing else was found - ret, var_was_created = _find_top_level(var_name, current_scope) + ret, var_was_created = find_top_level(var_name, current_scope) if ret: return ret, var_was_created diff --git a/slither/solc_parsing/yul/parse_yul.py b/slither/solc_parsing/yul/parse_yul.py index 7bd4f4e1f..05974ae65 100644 --- a/slither/solc_parsing/yul/parse_yul.py +++ b/slither/solc_parsing/yul/parse_yul.py @@ -35,7 +35,7 @@ from slither.solc_parsing.yul.evm_functions import ( unary_ops, binary_ops, ) -from slither.solc_parsing.expressions.find_variable import _find_top_level +from slither.solc_parsing.expressions.find_variable import find_top_level from slither.visitors.expression.find_calls import FindCalls from slither.visitors.expression.read_var import ReadVar from slither.visitors.expression.write_var import WriteVar @@ -798,7 +798,7 @@ def parse_yul_identifier(root: YulScope, _node: YulNode, ast: Dict) -> Optional[ if magic_suffix: return magic_suffix - ret, _ = _find_top_level(name, root.contract.file_scope) + ret, _ = find_top_level(name, root.contract.file_scope) if ret: return Identifier(ret) From 033d18efae400d6b295cff06d8c81f668349e596 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 26 Jul 2022 03:15:36 -0500 Subject: [PATCH 087/202] add FAQ and useful info to contribution guidelines (#1047) * add FAQ and useful info to contribution guidelines * link to path filtering wiki, add FAQ to ToC * address josselin's feedback * update docs: --- CONTRIBUTING.md | 19 +++++++++++++++++++ README.md | 19 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e93b2557c..b1d78be3f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,6 +20,24 @@ Some pull request guidelines: - Fill out the pull request description with a summary of what your patch does, key changes that have been made, and any further points of discussion, if applicable. - Title your pull request with a brief description of what it's changing. "Fixes #123" is a good comment to add to the description, but makes for an unclear title on its own. +## Directory Structure + +Below is a rough outline of slither's design: +```text +. +├── analyses # Provides additional info such as data dependency +├── core # Ties everything together +├── detectors # Rules that define and identify issues +├── slither.py # Main entry point +├── slithir # Contains the semantics of slither's intermediate representation +├── solc_parsing # Responsible for parsing the solc AST +├── tools # Miscellaneous tools built on top of slither +├── visitors # Parses expressions and converts to slithir +└── ... +``` + +A code walkthrough is available [here](https://www.youtube.com/watch?v=EUl3UlYSluU). + ## Development Environment Instructions for installing a development version of Slither can be found in our [wiki](https://github.com/crytic/slither/wiki/Developer-installation). @@ -46,6 +64,7 @@ For each new detector, at least one regression tests must be present. - Create a test in `tests` - Update `ALL_TEST` in `tests/test_detectors.py` - Run `python ./tests/test_detectors.py --generate`. This will generate the json artifacts in `tests/expected_json`. Add the generated files to git. + - If updating an existing detector, identify the respective json artifacts and then delete them, or run `python ./tests/test_detectors.py --overwrite` instead. - Run `pytest ./tests/test_detectors.py` and check that everything worked. To see the tests coverage, run `pytest tests/test_detectors.py --cov=slither/detectors --cov-branch --cov-report html` diff --git a/README.md b/README.md index d7b9332a2..4290e4771 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Slither is a Solidity static analysis framework written in Python 3. It runs a s - [Tools](#tools) - [How to Install](#how-to-install) - [Getting Help](#getting-help) +- [FAQ](#faq) - [Publications](#publications) ## Features @@ -128,6 +129,8 @@ Num | Detector | What it Detects | Impact | Confidence 74 | `too-many-digits` | [Conformance to numeric notation best practices](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informational | Medium 75 | `constable-states` | [State variables that could be declared constant](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Optimization | High 76 | `external-function` | [Public function that could be declared external](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Optimization | High +77 | `arbitrary-send-erc20` | [Detect when `msg.sender` is not used as `from` in transferFrom](https://github.com/trailofbits/slither/wiki/Detector-Documentation#arbitrary-send-erc20) +78 | `arbitrary-send-erc20-permit` | [Detect when `msg.sender` is not used as `from` in transferFrom in conjuction with permit](https://github.com/trailofbits/slither/wiki/Detector-Documentation#arbitrary-send-erc20-permit) For more information, see - The [Detector Documentation](https://github.com/crytic/slither/wiki/Detector-Documentation) for details on each detector @@ -146,6 +149,7 @@ For more information, see - `cfg`: [Export the CFG of each functions](https://github.com/trailofbits/slither/wiki/Printer-documentation#cfg) - `function-summary`: [Print a summary of the functions](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) - `vars-and-auth`: [Print the state variables written and the authorization of the functions](https://github.com/crytic/slither/wiki/Printer-documentation#variables-written-and-authorization) +- `when-not-paused`: [Print functions that do not use `whenNotPaused` modifier](https://github.com/trailofbits/slither/wiki/Printer-documentation#when-not-paused). To run a printer, use `--print` and a comma-separated list of printers. @@ -158,6 +162,7 @@ See the [Printer documentation](https://github.com/crytic/slither/wiki/Printer-d - `slither-flat`: [Flatten a codebase](https://github.com/crytic/slither/wiki/Contract-Flattening) - `slither-check-erc`: [Check the ERC's conformance](https://github.com/crytic/slither/wiki/ERC-Conformance) - `slither-format`: [Automatic patch generation](https://github.com/crytic/slither/wiki/Slither-format) +- `slither-read-storage`: [Read storage values from contracts](./slither/tools/read_storage/README.md) See the [Tool documentation](https://github.com/crytic/slither/wiki/Tool-Documentation) for additional tools. @@ -208,11 +213,23 @@ Feel free to stop by our [Slack channel](https://empireslacking.herokuapp.com) ( * The [SlithIR documentation](https://github.com/trailofbits/slither/wiki/SlithIR) describes the SlithIR intermediate representation. +## FAQ + +How do I exclude mocks or tests? +- View our documentation on [path filtering](https://github.com/crytic/slither/wiki/Usage#path-filtering). + +How do I fix "unknown file" or compilation issues? +- Because slither requires the solc AST, it must have all dependencies available. +If a contract has dependencies, `slither contract.sol` will fail. +Instead, use `slither .` in the parent directory of `contracts/` (you should see `contracts/` when you run `ls`). +If you have a `node_modules/` folder, it must be in the same directory as `contracts/`. To verify that this issue is related to slither, +run the compilation command for the framework you are using e.g `npx hardhat compile`. That must work successfully; +otherwise, slither's compilation engine, crytic-compile, cannot generate the AST. + ## License Slither is licensed and distributed under the AGPLv3 license. [Contact us](mailto:opensource@trailofbits.com) if you're looking for an exception to the terms. - ## Publications ### Trail of Bits publication From d94cb4e97f6fdf039942bbee3bf15d09a1a5b358 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 12:20:23 +0200 Subject: [PATCH 088/202] add test suite for path filtering Signed-off-by: Pascal Marco Caversaccio --- tests/test_path_filtering/libs/ReentrancyMock1.sol | 14 ++++++++++++++ tests/test_path_filtering/libs/ReentrancyMock2.sol | 14 ++++++++++++++ tests/test_path_filtering/libs/ReentrancyMock3.sol | 14 ++++++++++++++ tests/test_path_filtering/slither.config.json | 6 ++++++ tests/test_path_filtering/src/ReentrancyMock.sol | 14 ++++++++++++++ tests/test_path_filtering/test_path_filtering.py | 6 ++++++ tests/test_path_filtering/test_path_filtering.sol | 9 +++++++++ 7 files changed, 77 insertions(+) create mode 100644 tests/test_path_filtering/libs/ReentrancyMock1.sol create mode 100644 tests/test_path_filtering/libs/ReentrancyMock2.sol create mode 100644 tests/test_path_filtering/libs/ReentrancyMock3.sol create mode 100644 tests/test_path_filtering/slither.config.json create mode 100644 tests/test_path_filtering/src/ReentrancyMock.sol create mode 100644 tests/test_path_filtering/test_path_filtering.py create mode 100644 tests/test_path_filtering/test_path_filtering.sol diff --git a/tests/test_path_filtering/libs/ReentrancyMock1.sol b/tests/test_path_filtering/libs/ReentrancyMock1.sol new file mode 100644 index 000000000..c22d0dfcc --- /dev/null +++ b/tests/test_path_filtering/libs/ReentrancyMock1.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.6.12; + +contract ReentrancyMock1 { + mapping(address => uint256) public userBalances1; + + function withdraw1() external { + uint256 userBalance = userBalances1[msg.sender]; + require(userBalance > 0); + (bool success, ) = msg.sender.call{value: userBalance}(""); + require(success); + userBalances1[msg.sender] = 0; + } +} diff --git a/tests/test_path_filtering/libs/ReentrancyMock2.sol b/tests/test_path_filtering/libs/ReentrancyMock2.sol new file mode 100644 index 000000000..67929d7eb --- /dev/null +++ b/tests/test_path_filtering/libs/ReentrancyMock2.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.6.12; + +contract ReentrancyMock2 { + mapping(address => uint256) public userBalances2; + + function withdraw2() external { + uint256 userBalance = userBalances2[msg.sender]; + require(userBalance > 0); + (bool success, ) = msg.sender.call{value: userBalance}(""); + require(success); + userBalances2[msg.sender] = 0; + } +} diff --git a/tests/test_path_filtering/libs/ReentrancyMock3.sol b/tests/test_path_filtering/libs/ReentrancyMock3.sol new file mode 100644 index 000000000..a1cfac91c --- /dev/null +++ b/tests/test_path_filtering/libs/ReentrancyMock3.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.6.12; + +contract ReentrancyMock3 { + mapping(address => uint256) public userBalances3; + + function withdraw3() external { + uint256 userBalance = userBalances3[msg.sender]; + require(userBalance > 0); + (bool success, ) = msg.sender.call{value: userBalance}(""); + require(success); + userBalances3[msg.sender] = 0; + } +} diff --git a/tests/test_path_filtering/slither.config.json b/tests/test_path_filtering/slither.config.json new file mode 100644 index 000000000..bccfbefe4 --- /dev/null +++ b/tests/test_path_filtering/slither.config.json @@ -0,0 +1,6 @@ +{ + "detectors_to_run": "all", + "exclude_informational": true, + "exclude_low": true, + "filter_paths": "filtering_paths/libs|filtering_paths/src/ReentrancyMock.sol" +} diff --git a/tests/test_path_filtering/src/ReentrancyMock.sol b/tests/test_path_filtering/src/ReentrancyMock.sol new file mode 100644 index 000000000..549befffb --- /dev/null +++ b/tests/test_path_filtering/src/ReentrancyMock.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.6.12; + +contract ReentrancyMock { + mapping(address => uint256) public userBalances; + + function withdraw() external { + uint256 userBalance = userBalances[msg.sender]; + require(userBalance > 0); + (bool success, ) = msg.sender.call{value: userBalance}(""); + require(success); + userBalances[msg.sender] = 0; + } +} diff --git a/tests/test_path_filtering/test_path_filtering.py b/tests/test_path_filtering/test_path_filtering.py new file mode 100644 index 000000000..b238fa686 --- /dev/null +++ b/tests/test_path_filtering/test_path_filtering.py @@ -0,0 +1,6 @@ +from slither import Slither +from tests.test_features import _run_all_detectors + +def test_path_filtering(): + slither = Slither("./tests/test_path_filtering/test_path_filtering.py") + _run_all_detectors(slither) diff --git a/tests/test_path_filtering/test_path_filtering.sol b/tests/test_path_filtering/test_path_filtering.sol new file mode 100644 index 000000000..c2165d59d --- /dev/null +++ b/tests/test_path_filtering/test_path_filtering.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.6.12; + +import "./src/ReentrancyMock.sol"; +import "./libs/ReentrancyMock1.sol"; +import "./libs/ReentrancyMock2.sol"; +import "./libs/ReentrancyMock3.sol"; + +contract TestPathFiltering is ReentrancyMock, ReentrancyMock1, ReentrancyMock2, ReentrancyMock3 {} From cf3d1c5365e3fc42f77f447b101ed51c73b48d9c Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 12:28:53 +0200 Subject: [PATCH 089/202] solc version 0.8.0 Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/black.yml | 2 +- .github/workflows/parser.yml | 1 + tests/test_path_filtering/libs/ReentrancyMock1.sol | 2 +- tests/test_path_filtering/libs/ReentrancyMock2.sol | 2 +- tests/test_path_filtering/libs/ReentrancyMock3.sol | 2 +- tests/test_path_filtering/src/ReentrancyMock.sol | 2 +- tests/test_path_filtering/test_path_filtering.sol | 2 +- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index c1a999b80..2d8274380 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -8,7 +8,7 @@ defaults: on: pull_request: - branches: [master, dev] + branches: [master, dev, patch-1] schedule: # run CI every day even if no PRs/merges occur - cron: '0 12 * * *' diff --git a/.github/workflows/parser.yml b/.github/workflows/parser.yml index 4c3566904..05453b025 100644 --- a/.github/workflows/parser.yml +++ b/.github/workflows/parser.yml @@ -49,3 +49,4 @@ jobs: - name: Test with pytest run: | pytest tests/test_ast_parsing.py + pytest tests/test_path_filtering/test_path_filtering.py diff --git a/tests/test_path_filtering/libs/ReentrancyMock1.sol b/tests/test_path_filtering/libs/ReentrancyMock1.sol index c22d0dfcc..9c8599081 100644 --- a/tests/test_path_filtering/libs/ReentrancyMock1.sol +++ b/tests/test_path_filtering/libs/ReentrancyMock1.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.6.12; +pragma solidity ^0.8.0; contract ReentrancyMock1 { mapping(address => uint256) public userBalances1; diff --git a/tests/test_path_filtering/libs/ReentrancyMock2.sol b/tests/test_path_filtering/libs/ReentrancyMock2.sol index 67929d7eb..42b71c6a6 100644 --- a/tests/test_path_filtering/libs/ReentrancyMock2.sol +++ b/tests/test_path_filtering/libs/ReentrancyMock2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.6.12; +pragma solidity ^0.8.0; contract ReentrancyMock2 { mapping(address => uint256) public userBalances2; diff --git a/tests/test_path_filtering/libs/ReentrancyMock3.sol b/tests/test_path_filtering/libs/ReentrancyMock3.sol index a1cfac91c..097aea25a 100644 --- a/tests/test_path_filtering/libs/ReentrancyMock3.sol +++ b/tests/test_path_filtering/libs/ReentrancyMock3.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.6.12; +pragma solidity ^0.8.0; contract ReentrancyMock3 { mapping(address => uint256) public userBalances3; diff --git a/tests/test_path_filtering/src/ReentrancyMock.sol b/tests/test_path_filtering/src/ReentrancyMock.sol index 549befffb..02d34e6ae 100644 --- a/tests/test_path_filtering/src/ReentrancyMock.sol +++ b/tests/test_path_filtering/src/ReentrancyMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.6.12; +pragma solidity ^0.8.0; contract ReentrancyMock { mapping(address => uint256) public userBalances; diff --git a/tests/test_path_filtering/test_path_filtering.sol b/tests/test_path_filtering/test_path_filtering.sol index c2165d59d..4e6859a02 100644 --- a/tests/test_path_filtering/test_path_filtering.sol +++ b/tests/test_path_filtering/test_path_filtering.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.6.12; +pragma solidity ^0.8.0; import "./src/ReentrancyMock.sol"; import "./libs/ReentrancyMock1.sol"; From e42bb1805649b253af0103ce952c434ccae5c5fb Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 12:30:11 +0200 Subject: [PATCH 090/202] for testing CI Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/black.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index 2d8274380..d3caa4234 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -7,8 +7,10 @@ defaults: shell: bash -ieo pipefail {0} on: + push: + branches: [patch-1] pull_request: - branches: [master, dev, patch-1] + branches: [master, dev] schedule: # run CI every day even if no PRs/merges occur - cron: '0 12 * * *' From 6164fb86ad97f146d664385017a7972197590ba2 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 12:33:44 +0200 Subject: [PATCH 091/202] parser CI Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/parser.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/parser.yml b/.github/workflows/parser.yml index 05453b025..b623fdb18 100644 --- a/.github/workflows/parser.yml +++ b/.github/workflows/parser.yml @@ -7,6 +7,9 @@ defaults: shell: bash -ieo pipefail {0} on: + push: + branches: + - patch-1 pull_request: branches: [master, dev] schedule: From e2afe85b2a5722edd1c11fee2c75f8540101d358 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 15:25:44 +0200 Subject: [PATCH 092/202] refactor and remove CI tests Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/black.yml | 2 -- .github/workflows/parser.yml | 4 ---- tests/test_path_filtering/slither.config.json | 6 ------ tests/test_path_filtering/test_path_filtering.py | 4 +--- 4 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 tests/test_path_filtering/slither.config.json diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index d3caa4234..c1a999b80 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -7,8 +7,6 @@ defaults: shell: bash -ieo pipefail {0} on: - push: - branches: [patch-1] pull_request: branches: [master, dev] schedule: diff --git a/.github/workflows/parser.yml b/.github/workflows/parser.yml index b623fdb18..4c3566904 100644 --- a/.github/workflows/parser.yml +++ b/.github/workflows/parser.yml @@ -7,9 +7,6 @@ defaults: shell: bash -ieo pipefail {0} on: - push: - branches: - - patch-1 pull_request: branches: [master, dev] schedule: @@ -52,4 +49,3 @@ jobs: - name: Test with pytest run: | pytest tests/test_ast_parsing.py - pytest tests/test_path_filtering/test_path_filtering.py diff --git a/tests/test_path_filtering/slither.config.json b/tests/test_path_filtering/slither.config.json deleted file mode 100644 index bccfbefe4..000000000 --- a/tests/test_path_filtering/slither.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "detectors_to_run": "all", - "exclude_informational": true, - "exclude_low": true, - "filter_paths": "filtering_paths/libs|filtering_paths/src/ReentrancyMock.sol" -} diff --git a/tests/test_path_filtering/test_path_filtering.py b/tests/test_path_filtering/test_path_filtering.py index b238fa686..f90271fb3 100644 --- a/tests/test_path_filtering/test_path_filtering.py +++ b/tests/test_path_filtering/test_path_filtering.py @@ -1,6 +1,4 @@ from slither import Slither -from tests.test_features import _run_all_detectors def test_path_filtering(): - slither = Slither("./tests/test_path_filtering/test_path_filtering.py") - _run_all_detectors(slither) + return Slither("./tests/test_path_filtering/test_path_filtering.sol", filter_paths=["filtering_paths/libs", "filtering_paths/src/ReentrancyMock.sol"]) From 0056406b5a43a1e33892ca5012c02d01e5d93f49 Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Tue, 26 Jul 2022 16:39:42 +0200 Subject: [PATCH 093/202] Fix broken tests introduced with #1239 (#1302) * Fix broken tests introduced with #1239 * Disable etherlime from the CI --- .github/workflows/ci.yml | 5 +---- .../0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json | 2 +- .../0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json | 2 +- .../0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json | 2 +- .../0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json | 2 +- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f2a295452..b4d62d963 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: "data_dependency", # "embark", "erc", - "etherlime", + # "etherlime", # "etherscan" "find_paths", "flat", @@ -43,9 +43,6 @@ jobs: - os: windows-2022 type: dapp # Requires nvm - - os: windows-2022 - type: etherlime - # Requires nvm - os: windows-2022 type: truffle steps: diff --git a/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json index f5b7d583b..79ffe9eba 100644 --- a/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol.0.4.25.UnprotectedUpgradeable.json @@ -144,7 +144,7 @@ "description": "Buggy (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#10-13)", "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.4.25/Buggy.sol#L3-L15", - "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", + "id": "d85b90230632a30f7ffb5140a791d4a9ae8b0be045c5b27175f3c477e189c08c", "check": "unprotected-upgrade", "impact": "High", "confidence": "High" diff --git a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json index 4f5015bf5..d4f2addd9 100644 --- a/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol.0.5.16.UnprotectedUpgradeable.json @@ -144,7 +144,7 @@ "description": "Buggy (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#10-13)", "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.5.16/Buggy.sol#L3-L15", - "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", + "id": "d85b90230632a30f7ffb5140a791d4a9ae8b0be045c5b27175f3c477e189c08c", "check": "unprotected-upgrade", "impact": "High", "confidence": "High" diff --git a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json index 57aa43c6c..0f46e3a9a 100644 --- a/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol.0.6.11.UnprotectedUpgradeable.json @@ -144,7 +144,7 @@ "description": "Buggy (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#10-13)", "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.6.11/Buggy.sol#L3-L15", - "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", + "id": "d85b90230632a30f7ffb5140a791d4a9ae8b0be045c5b27175f3c477e189c08c", "check": "unprotected-upgrade", "impact": "High", "confidence": "High" diff --git a/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json index e2f23109e..c101b3fc9 100644 --- a/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json +++ b/tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol.0.7.6.UnprotectedUpgradeable.json @@ -144,7 +144,7 @@ "description": "Buggy (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#3-15) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#10-13)", "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L3-L15) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L10-L13)", "first_markdown_element": "tests/detectors/unprotected-upgrade/0.7.6/Buggy.sol#L3-L15", - "id": "aceca400ce0b482809a70df612af22e24d154c5c89c24d630ec0ee5a366d09fe", + "id": "d85b90230632a30f7ffb5140a791d4a9ae8b0be045c5b27175f3c477e189c08c", "check": "unprotected-upgrade", "impact": "High", "confidence": "High" From 38c0ae513d7fe3871daed218629c21471190d94e Mon Sep 17 00:00:00 2001 From: noxx Date: Thu, 14 Jul 2022 18:15:46 +0100 Subject: [PATCH 094/202] add flag for table layout view, table layout with value view and silent flag for suppressing other outputs --- .../contracts/NoDelegateCall.sol | 27 + .../contracts/UniswapV3Pool.sol | 869 ++++++++++++++++++ .../contracts/interfaces/IERC20Minimal.sol | 52 ++ .../interfaces/IUniswapV3Factory.sol | 78 ++ .../contracts/interfaces/IUniswapV3Pool.sol | 24 + .../interfaces/IUniswapV3PoolDeployer.sol | 26 + .../callback/IUniswapV3FlashCallback.sol | 18 + .../callback/IUniswapV3MintCallback.sol | 18 + .../callback/IUniswapV3SwapCallback.sol | 21 + .../interfaces/pool/IUniswapV3PoolActions.sol | 103 +++ .../pool/IUniswapV3PoolDerivedState.sol | 40 + .../interfaces/pool/IUniswapV3PoolEvents.sol | 121 +++ .../pool/IUniswapV3PoolImmutables.sol | 35 + .../pool/IUniswapV3PoolOwnerActions.sol | 23 + .../interfaces/pool/IUniswapV3PoolState.sol | 116 +++ .../contracts/libraries/BitMath.sol | 94 ++ .../contracts/libraries/FixedPoint128.sol | 8 + .../contracts/libraries/FixedPoint96.sol | 10 + .../contracts/libraries/FullMath.sol | 124 +++ .../contracts/libraries/LiquidityMath.sol | 17 + .../contracts/libraries/LowGasSafeMath.sol | 46 + .../contracts/libraries/Oracle.sol | 325 +++++++ .../contracts/libraries/Position.sol | 88 ++ .../contracts/libraries/SafeCast.sol | 28 + .../contracts/libraries/SqrtPriceMath.sol | 227 +++++ .../contracts/libraries/SwapMath.sol | 98 ++ .../contracts/libraries/Tick.sol | 183 ++++ .../contracts/libraries/TickBitmap.sol | 78 ++ .../contracts/libraries/TickMath.sol | 205 +++++ .../contracts/libraries/TransferHelper.sol | 23 + .../contracts/libraries/UnsafeMath.sol | 17 + slither/tools/read_storage/__main__.py | 38 + slither/tools/read_storage/read_storage.py | 119 ++- 33 files changed, 3289 insertions(+), 10 deletions(-) create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol new file mode 100644 index 000000000..5411979dc --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity =0.7.6; + +/// @title Prevents delegatecall to a contract +/// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract +abstract contract NoDelegateCall { + /// @dev The original address of this contract + address private immutable original; + + constructor() { + // Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode. + // In other words, this variable won't change when it's checked at runtime. + original = address(this); + } + + /// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method, + /// and the use of immutable means the address bytes are copied in every place the modifier is used. + function checkNotDelegateCall() private view { + require(address(this) == original); + } + + /// @notice Prevents delegatecall into the modified method + modifier noDelegateCall() { + checkNotDelegateCall(); + _; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol new file mode 100644 index 000000000..9e0982127 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol @@ -0,0 +1,869 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity =0.7.6; + +import './interfaces/IUniswapV3Pool.sol'; + +import './NoDelegateCall.sol'; + +import './libraries/LowGasSafeMath.sol'; +import './libraries/SafeCast.sol'; +import './libraries/Tick.sol'; +import './libraries/TickBitmap.sol'; +import './libraries/Position.sol'; +import './libraries/Oracle.sol'; + +import './libraries/FullMath.sol'; +import './libraries/FixedPoint128.sol'; +import './libraries/TransferHelper.sol'; +import './libraries/TickMath.sol'; +import './libraries/LiquidityMath.sol'; +import './libraries/SqrtPriceMath.sol'; +import './libraries/SwapMath.sol'; + +import './interfaces/IUniswapV3PoolDeployer.sol'; +import './interfaces/IUniswapV3Factory.sol'; +import './interfaces/IERC20Minimal.sol'; +import './interfaces/callback/IUniswapV3MintCallback.sol'; +import './interfaces/callback/IUniswapV3SwapCallback.sol'; +import './interfaces/callback/IUniswapV3FlashCallback.sol'; + +contract UniswapV3Pool is IUniswapV3Pool, NoDelegateCall { + using LowGasSafeMath for uint256; + using LowGasSafeMath for int256; + using SafeCast for uint256; + using SafeCast for int256; + using Tick for mapping(int24 => Tick.Info); + using TickBitmap for mapping(int16 => uint256); + using Position for mapping(bytes32 => Position.Info); + using Position for Position.Info; + using Oracle for Oracle.Observation[65535]; + + /// @inheritdoc IUniswapV3PoolImmutables + address public immutable override factory; + /// @inheritdoc IUniswapV3PoolImmutables + address public immutable override token0; + /// @inheritdoc IUniswapV3PoolImmutables + address public immutable override token1; + /// @inheritdoc IUniswapV3PoolImmutables + uint24 public immutable override fee; + + /// @inheritdoc IUniswapV3PoolImmutables + int24 public immutable override tickSpacing; + + /// @inheritdoc IUniswapV3PoolImmutables + uint128 public immutable override maxLiquidityPerTick; + + struct Slot0 { + // the current price + uint160 sqrtPriceX96; + // the current tick + int24 tick; + // the most-recently updated index of the observations array + uint16 observationIndex; + // the current maximum number of observations that are being stored + uint16 observationCardinality; + // the next maximum number of observations to store, triggered in observations.write + uint16 observationCardinalityNext; + // the current protocol fee as a percentage of the swap fee taken on withdrawal + // represented as an integer denominator (1/x)% + uint8 feeProtocol; + // whether the pool is locked + bool unlocked; + } + /// @inheritdoc IUniswapV3PoolState + Slot0 public override slot0; + + /// @inheritdoc IUniswapV3PoolState + uint256 public override feeGrowthGlobal0X128; + /// @inheritdoc IUniswapV3PoolState + uint256 public override feeGrowthGlobal1X128; + + // accumulated protocol fees in token0/token1 units + struct ProtocolFees { + uint128 token0; + uint128 token1; + } + /// @inheritdoc IUniswapV3PoolState + ProtocolFees public override protocolFees; + + /// @inheritdoc IUniswapV3PoolState + uint128 public override liquidity; + + /// @inheritdoc IUniswapV3PoolState + mapping(int24 => Tick.Info) public override ticks; + /// @inheritdoc IUniswapV3PoolState + mapping(int16 => uint256) public override tickBitmap; + /// @inheritdoc IUniswapV3PoolState + mapping(bytes32 => Position.Info) public override positions; + /// @inheritdoc IUniswapV3PoolState + Oracle.Observation[65535] public override observations; + + /// @dev Mutually exclusive reentrancy protection into the pool to/from a method. This method also prevents entrance + /// to a function before the pool is initialized. The reentrancy guard is required throughout the contract because + /// we use balance checks to determine the payment status of interactions such as mint, swap and flash. + modifier lock() { + require(slot0.unlocked, 'LOK'); + slot0.unlocked = false; + _; + slot0.unlocked = true; + } + + /// @dev Prevents calling a function from anyone except the address returned by IUniswapV3Factory#owner() + modifier onlyFactoryOwner() { + require(msg.sender == IUniswapV3Factory(factory).owner()); + _; + } + + constructor() { + int24 _tickSpacing; + (factory, token0, token1, fee, _tickSpacing) = IUniswapV3PoolDeployer(msg.sender).parameters(); + tickSpacing = _tickSpacing; + + maxLiquidityPerTick = Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing); + } + + /// @dev Common checks for valid tick inputs. + function checkTicks(int24 tickLower, int24 tickUpper) private pure { + require(tickLower < tickUpper, 'TLU'); + require(tickLower >= TickMath.MIN_TICK, 'TLM'); + require(tickUpper <= TickMath.MAX_TICK, 'TUM'); + } + + /// @dev Returns the block timestamp truncated to 32 bits, i.e. mod 2**32. This method is overridden in tests. + function _blockTimestamp() internal view virtual returns (uint32) { + return uint32(block.timestamp); // truncation is desired + } + + /// @dev Get the pool's balance of token0 + /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize + /// check + function balance0() private view returns (uint256) { + (bool success, bytes memory data) = + token0.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); + require(success && data.length >= 32); + return abi.decode(data, (uint256)); + } + + /// @dev Get the pool's balance of token1 + /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize + /// check + function balance1() private view returns (uint256) { + (bool success, bytes memory data) = + token1.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); + require(success && data.length >= 32); + return abi.decode(data, (uint256)); + } + + /// @inheritdoc IUniswapV3PoolDerivedState + function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) + external + view + override + noDelegateCall + returns ( + int56 tickCumulativeInside, + uint160 secondsPerLiquidityInsideX128, + uint32 secondsInside + ) + { + checkTicks(tickLower, tickUpper); + + int56 tickCumulativeLower; + int56 tickCumulativeUpper; + uint160 secondsPerLiquidityOutsideLowerX128; + uint160 secondsPerLiquidityOutsideUpperX128; + uint32 secondsOutsideLower; + uint32 secondsOutsideUpper; + + { + Tick.Info storage lower = ticks[tickLower]; + Tick.Info storage upper = ticks[tickUpper]; + bool initializedLower; + (tickCumulativeLower, secondsPerLiquidityOutsideLowerX128, secondsOutsideLower, initializedLower) = ( + lower.tickCumulativeOutside, + lower.secondsPerLiquidityOutsideX128, + lower.secondsOutside, + lower.initialized + ); + require(initializedLower); + + bool initializedUpper; + (tickCumulativeUpper, secondsPerLiquidityOutsideUpperX128, secondsOutsideUpper, initializedUpper) = ( + upper.tickCumulativeOutside, + upper.secondsPerLiquidityOutsideX128, + upper.secondsOutside, + upper.initialized + ); + require(initializedUpper); + } + + Slot0 memory _slot0 = slot0; + + if (_slot0.tick < tickLower) { + return ( + tickCumulativeLower - tickCumulativeUpper, + secondsPerLiquidityOutsideLowerX128 - secondsPerLiquidityOutsideUpperX128, + secondsOutsideLower - secondsOutsideUpper + ); + } else if (_slot0.tick < tickUpper) { + uint32 time = _blockTimestamp(); + (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = + observations.observeSingle( + time, + 0, + _slot0.tick, + _slot0.observationIndex, + liquidity, + _slot0.observationCardinality + ); + return ( + tickCumulative - tickCumulativeLower - tickCumulativeUpper, + secondsPerLiquidityCumulativeX128 - + secondsPerLiquidityOutsideLowerX128 - + secondsPerLiquidityOutsideUpperX128, + time - secondsOutsideLower - secondsOutsideUpper + ); + } else { + return ( + tickCumulativeUpper - tickCumulativeLower, + secondsPerLiquidityOutsideUpperX128 - secondsPerLiquidityOutsideLowerX128, + secondsOutsideUpper - secondsOutsideLower + ); + } + } + + /// @inheritdoc IUniswapV3PoolDerivedState + function observe(uint32[] calldata secondsAgos) + external + view + override + noDelegateCall + returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) + { + return + observations.observe( + _blockTimestamp(), + secondsAgos, + slot0.tick, + slot0.observationIndex, + liquidity, + slot0.observationCardinality + ); + } + + /// @inheritdoc IUniswapV3PoolActions + function increaseObservationCardinalityNext(uint16 observationCardinalityNext) + external + override + lock + noDelegateCall + { + uint16 observationCardinalityNextOld = slot0.observationCardinalityNext; // for the event + uint16 observationCardinalityNextNew = + observations.grow(observationCardinalityNextOld, observationCardinalityNext); + slot0.observationCardinalityNext = observationCardinalityNextNew; + if (observationCardinalityNextOld != observationCardinalityNextNew) + emit IncreaseObservationCardinalityNext(observationCardinalityNextOld, observationCardinalityNextNew); + } + + /// @inheritdoc IUniswapV3PoolActions + /// @dev not locked because it initializes unlocked + function initialize(uint160 sqrtPriceX96) external override { + require(slot0.sqrtPriceX96 == 0, 'AI'); + + int24 tick = TickMath.getTickAtSqrtRatio(sqrtPriceX96); + + (uint16 cardinality, uint16 cardinalityNext) = observations.initialize(_blockTimestamp()); + + slot0 = Slot0({ + sqrtPriceX96: sqrtPriceX96, + tick: tick, + observationIndex: 0, + observationCardinality: cardinality, + observationCardinalityNext: cardinalityNext, + feeProtocol: 0, + unlocked: true + }); + + emit Initialize(sqrtPriceX96, tick); + } + + struct ModifyPositionParams { + // the address that owns the position + address owner; + // the lower and upper tick of the position + int24 tickLower; + int24 tickUpper; + // any change in liquidity + int128 liquidityDelta; + } + + /// @dev Effect some changes to a position + /// @param params the position details and the change to the position's liquidity to effect + /// @return position a storage pointer referencing the position with the given owner and tick range + /// @return amount0 the amount of token0 owed to the pool, negative if the pool should pay the recipient + /// @return amount1 the amount of token1 owed to the pool, negative if the pool should pay the recipient + function _modifyPosition(ModifyPositionParams memory params) + private + noDelegateCall + returns ( + Position.Info storage position, + int256 amount0, + int256 amount1 + ) + { + checkTicks(params.tickLower, params.tickUpper); + + Slot0 memory _slot0 = slot0; // SLOAD for gas optimization + + position = _updatePosition( + params.owner, + params.tickLower, + params.tickUpper, + params.liquidityDelta, + _slot0.tick + ); + + if (params.liquidityDelta != 0) { + if (_slot0.tick < params.tickLower) { + // current tick is below the passed range; liquidity can only become in range by crossing from left to + // right, when we'll need _more_ token0 (it's becoming more valuable) so user must provide it + amount0 = SqrtPriceMath.getAmount0Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + } else if (_slot0.tick < params.tickUpper) { + // current tick is inside the passed range + uint128 liquidityBefore = liquidity; // SLOAD for gas optimization + + // write an oracle entry + (slot0.observationIndex, slot0.observationCardinality) = observations.write( + _slot0.observationIndex, + _blockTimestamp(), + _slot0.tick, + liquidityBefore, + _slot0.observationCardinality, + _slot0.observationCardinalityNext + ); + + amount0 = SqrtPriceMath.getAmount0Delta( + _slot0.sqrtPriceX96, + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + amount1 = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + _slot0.sqrtPriceX96, + params.liquidityDelta + ); + + liquidity = LiquidityMath.addDelta(liquidityBefore, params.liquidityDelta); + } else { + // current tick is above the passed range; liquidity can only become in range by crossing from right to + // left, when we'll need _more_ token1 (it's becoming more valuable) so user must provide it + amount1 = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + } + } + } + + /// @dev Gets and updates a position with the given liquidity delta + /// @param owner the owner of the position + /// @param tickLower the lower tick of the position's tick range + /// @param tickUpper the upper tick of the position's tick range + /// @param tick the current tick, passed to avoid sloads + function _updatePosition( + address owner, + int24 tickLower, + int24 tickUpper, + int128 liquidityDelta, + int24 tick + ) private returns (Position.Info storage position) { + position = positions.get(owner, tickLower, tickUpper); + + uint256 _feeGrowthGlobal0X128 = feeGrowthGlobal0X128; // SLOAD for gas optimization + uint256 _feeGrowthGlobal1X128 = feeGrowthGlobal1X128; // SLOAD for gas optimization + + // if we need to update the ticks, do it + bool flippedLower; + bool flippedUpper; + if (liquidityDelta != 0) { + uint32 time = _blockTimestamp(); + (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = + observations.observeSingle( + time, + 0, + slot0.tick, + slot0.observationIndex, + liquidity, + slot0.observationCardinality + ); + + flippedLower = ticks.update( + tickLower, + tick, + liquidityDelta, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128, + secondsPerLiquidityCumulativeX128, + tickCumulative, + time, + false, + maxLiquidityPerTick + ); + flippedUpper = ticks.update( + tickUpper, + tick, + liquidityDelta, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128, + secondsPerLiquidityCumulativeX128, + tickCumulative, + time, + true, + maxLiquidityPerTick + ); + + if (flippedLower) { + tickBitmap.flipTick(tickLower, tickSpacing); + } + if (flippedUpper) { + tickBitmap.flipTick(tickUpper, tickSpacing); + } + } + + (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = + ticks.getFeeGrowthInside(tickLower, tickUpper, tick, _feeGrowthGlobal0X128, _feeGrowthGlobal1X128); + + position.update(liquidityDelta, feeGrowthInside0X128, feeGrowthInside1X128); + + // clear any tick data that is no longer needed + if (liquidityDelta < 0) { + if (flippedLower) { + ticks.clear(tickLower); + } + if (flippedUpper) { + ticks.clear(tickUpper); + } + } + } + + /// @inheritdoc IUniswapV3PoolActions + /// @dev noDelegateCall is applied indirectly via _modifyPosition + function mint( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount, + bytes calldata data + ) external override lock returns (uint256 amount0, uint256 amount1) { + require(amount > 0); + (, int256 amount0Int, int256 amount1Int) = + _modifyPosition( + ModifyPositionParams({ + owner: recipient, + tickLower: tickLower, + tickUpper: tickUpper, + liquidityDelta: int256(amount).toInt128() + }) + ); + + amount0 = uint256(amount0Int); + amount1 = uint256(amount1Int); + + uint256 balance0Before; + uint256 balance1Before; + if (amount0 > 0) balance0Before = balance0(); + if (amount1 > 0) balance1Before = balance1(); + IUniswapV3MintCallback(msg.sender).uniswapV3MintCallback(amount0, amount1, data); + if (amount0 > 0) require(balance0Before.add(amount0) <= balance0(), 'M0'); + if (amount1 > 0) require(balance1Before.add(amount1) <= balance1(), 'M1'); + + emit Mint(msg.sender, recipient, tickLower, tickUpper, amount, amount0, amount1); + } + + /// @inheritdoc IUniswapV3PoolActions + function collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested + ) external override lock returns (uint128 amount0, uint128 amount1) { + // we don't need to checkTicks here, because invalid positions will never have non-zero tokensOwed{0,1} + Position.Info storage position = positions.get(msg.sender, tickLower, tickUpper); + + amount0 = amount0Requested > position.tokensOwed0 ? position.tokensOwed0 : amount0Requested; + amount1 = amount1Requested > position.tokensOwed1 ? position.tokensOwed1 : amount1Requested; + + if (amount0 > 0) { + position.tokensOwed0 -= amount0; + TransferHelper.safeTransfer(token0, recipient, amount0); + } + if (amount1 > 0) { + position.tokensOwed1 -= amount1; + TransferHelper.safeTransfer(token1, recipient, amount1); + } + + emit Collect(msg.sender, recipient, tickLower, tickUpper, amount0, amount1); + } + + /// @inheritdoc IUniswapV3PoolActions + /// @dev noDelegateCall is applied indirectly via _modifyPosition + function burn( + int24 tickLower, + int24 tickUpper, + uint128 amount + ) external override lock returns (uint256 amount0, uint256 amount1) { + (Position.Info storage position, int256 amount0Int, int256 amount1Int) = + _modifyPosition( + ModifyPositionParams({ + owner: msg.sender, + tickLower: tickLower, + tickUpper: tickUpper, + liquidityDelta: -int256(amount).toInt128() + }) + ); + + amount0 = uint256(-amount0Int); + amount1 = uint256(-amount1Int); + + if (amount0 > 0 || amount1 > 0) { + (position.tokensOwed0, position.tokensOwed1) = ( + position.tokensOwed0 + uint128(amount0), + position.tokensOwed1 + uint128(amount1) + ); + } + + emit Burn(msg.sender, tickLower, tickUpper, amount, amount0, amount1); + } + + struct SwapCache { + // the protocol fee for the input token + uint8 feeProtocol; + // liquidity at the beginning of the swap + uint128 liquidityStart; + // the timestamp of the current block + uint32 blockTimestamp; + // the current value of the tick accumulator, computed only if we cross an initialized tick + int56 tickCumulative; + // the current value of seconds per liquidity accumulator, computed only if we cross an initialized tick + uint160 secondsPerLiquidityCumulativeX128; + // whether we've computed and cached the above two accumulators + bool computedLatestObservation; + } + + // the top level state of the swap, the results of which are recorded in storage at the end + struct SwapState { + // the amount remaining to be swapped in/out of the input/output asset + int256 amountSpecifiedRemaining; + // the amount already swapped out/in of the output/input asset + int256 amountCalculated; + // current sqrt(price) + uint160 sqrtPriceX96; + // the tick associated with the current price + int24 tick; + // the global fee growth of the input token + uint256 feeGrowthGlobalX128; + // amount of input token paid as protocol fee + uint128 protocolFee; + // the current liquidity in range + uint128 liquidity; + } + + struct StepComputations { + // the price at the beginning of the step + uint160 sqrtPriceStartX96; + // the next tick to swap to from the current tick in the swap direction + int24 tickNext; + // whether tickNext is initialized or not + bool initialized; + // sqrt(price) for the next tick (1/0) + uint160 sqrtPriceNextX96; + // how much is being swapped in in this step + uint256 amountIn; + // how much is being swapped out + uint256 amountOut; + // how much fee is being paid in + uint256 feeAmount; + } + + /// @inheritdoc IUniswapV3PoolActions + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bytes calldata data + ) external override noDelegateCall returns (int256 amount0, int256 amount1) { + require(amountSpecified != 0, 'AS'); + + Slot0 memory slot0Start = slot0; + + require(slot0Start.unlocked, 'LOK'); + require( + zeroForOne + ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO + : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, + 'SPL' + ); + + slot0.unlocked = false; + + SwapCache memory cache = + SwapCache({ + liquidityStart: liquidity, + blockTimestamp: _blockTimestamp(), + feeProtocol: zeroForOne ? (slot0Start.feeProtocol % 16) : (slot0Start.feeProtocol >> 4), + secondsPerLiquidityCumulativeX128: 0, + tickCumulative: 0, + computedLatestObservation: false + }); + + bool exactInput = amountSpecified > 0; + + SwapState memory state = + SwapState({ + amountSpecifiedRemaining: amountSpecified, + amountCalculated: 0, + sqrtPriceX96: slot0Start.sqrtPriceX96, + tick: slot0Start.tick, + feeGrowthGlobalX128: zeroForOne ? feeGrowthGlobal0X128 : feeGrowthGlobal1X128, + protocolFee: 0, + liquidity: cache.liquidityStart + }); + + // continue swapping as long as we haven't used the entire input/output and haven't reached the price limit + while (state.amountSpecifiedRemaining != 0 && state.sqrtPriceX96 != sqrtPriceLimitX96) { + StepComputations memory step; + + step.sqrtPriceStartX96 = state.sqrtPriceX96; + + (step.tickNext, step.initialized) = tickBitmap.nextInitializedTickWithinOneWord( + state.tick, + tickSpacing, + zeroForOne + ); + + // ensure that we do not overshoot the min/max tick, as the tick bitmap is not aware of these bounds + if (step.tickNext < TickMath.MIN_TICK) { + step.tickNext = TickMath.MIN_TICK; + } else if (step.tickNext > TickMath.MAX_TICK) { + step.tickNext = TickMath.MAX_TICK; + } + + // get the price for the next tick + step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext); + + // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted + (state.sqrtPriceX96, step.amountIn, step.amountOut, step.feeAmount) = SwapMath.computeSwapStep( + state.sqrtPriceX96, + (zeroForOne ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 : step.sqrtPriceNextX96 > sqrtPriceLimitX96) + ? sqrtPriceLimitX96 + : step.sqrtPriceNextX96, + state.liquidity, + state.amountSpecifiedRemaining, + fee + ); + + if (exactInput) { + state.amountSpecifiedRemaining -= (step.amountIn + step.feeAmount).toInt256(); + state.amountCalculated = state.amountCalculated.sub(step.amountOut.toInt256()); + } else { + state.amountSpecifiedRemaining += step.amountOut.toInt256(); + state.amountCalculated = state.amountCalculated.add((step.amountIn + step.feeAmount).toInt256()); + } + + // if the protocol fee is on, calculate how much is owed, decrement feeAmount, and increment protocolFee + if (cache.feeProtocol > 0) { + uint256 delta = step.feeAmount / cache.feeProtocol; + step.feeAmount -= delta; + state.protocolFee += uint128(delta); + } + + // update global fee tracker + if (state.liquidity > 0) + state.feeGrowthGlobalX128 += FullMath.mulDiv(step.feeAmount, FixedPoint128.Q128, state.liquidity); + + // shift tick if we reached the next price + if (state.sqrtPriceX96 == step.sqrtPriceNextX96) { + // if the tick is initialized, run the tick transition + if (step.initialized) { + // check for the placeholder value, which we replace with the actual value the first time the swap + // crosses an initialized tick + if (!cache.computedLatestObservation) { + (cache.tickCumulative, cache.secondsPerLiquidityCumulativeX128) = observations.observeSingle( + cache.blockTimestamp, + 0, + slot0Start.tick, + slot0Start.observationIndex, + cache.liquidityStart, + slot0Start.observationCardinality + ); + cache.computedLatestObservation = true; + } + int128 liquidityNet = + ticks.cross( + step.tickNext, + (zeroForOne ? state.feeGrowthGlobalX128 : feeGrowthGlobal0X128), + (zeroForOne ? feeGrowthGlobal1X128 : state.feeGrowthGlobalX128), + cache.secondsPerLiquidityCumulativeX128, + cache.tickCumulative, + cache.blockTimestamp + ); + // if we're moving leftward, we interpret liquidityNet as the opposite sign + // safe because liquidityNet cannot be type(int128).min + if (zeroForOne) liquidityNet = -liquidityNet; + + state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet); + } + + state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; + } else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) { + // recompute unless we're on a lower tick boundary (i.e. already transitioned ticks), and haven't moved + state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96); + } + } + + // update tick and write an oracle entry if the tick change + if (state.tick != slot0Start.tick) { + (uint16 observationIndex, uint16 observationCardinality) = + observations.write( + slot0Start.observationIndex, + cache.blockTimestamp, + slot0Start.tick, + cache.liquidityStart, + slot0Start.observationCardinality, + slot0Start.observationCardinalityNext + ); + (slot0.sqrtPriceX96, slot0.tick, slot0.observationIndex, slot0.observationCardinality) = ( + state.sqrtPriceX96, + state.tick, + observationIndex, + observationCardinality + ); + } else { + // otherwise just update the price + slot0.sqrtPriceX96 = state.sqrtPriceX96; + } + + // update liquidity if it changed + if (cache.liquidityStart != state.liquidity) liquidity = state.liquidity; + + // update fee growth global and, if necessary, protocol fees + // overflow is acceptable, protocol has to withdraw before it hits type(uint128).max fees + if (zeroForOne) { + feeGrowthGlobal0X128 = state.feeGrowthGlobalX128; + if (state.protocolFee > 0) protocolFees.token0 += state.protocolFee; + } else { + feeGrowthGlobal1X128 = state.feeGrowthGlobalX128; + if (state.protocolFee > 0) protocolFees.token1 += state.protocolFee; + } + + (amount0, amount1) = zeroForOne == exactInput + ? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) + : (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining); + + // do the transfers and collect payment + if (zeroForOne) { + if (amount1 < 0) TransferHelper.safeTransfer(token1, recipient, uint256(-amount1)); + + uint256 balance0Before = balance0(); + IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); + require(balance0Before.add(uint256(amount0)) <= balance0(), 'IIA'); + } else { + if (amount0 < 0) TransferHelper.safeTransfer(token0, recipient, uint256(-amount0)); + + uint256 balance1Before = balance1(); + IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); + require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA'); + } + + emit Swap(msg.sender, recipient, amount0, amount1, state.sqrtPriceX96, state.liquidity, state.tick); + slot0.unlocked = true; + } + + /// @inheritdoc IUniswapV3PoolActions + function flash( + address recipient, + uint256 amount0, + uint256 amount1, + bytes calldata data + ) external override lock noDelegateCall { + uint128 _liquidity = liquidity; + require(_liquidity > 0, 'L'); + + uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee, 1e6); + uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee, 1e6); + uint256 balance0Before = balance0(); + uint256 balance1Before = balance1(); + + if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0); + if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1); + + IUniswapV3FlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data); + + uint256 balance0After = balance0(); + uint256 balance1After = balance1(); + + require(balance0Before.add(fee0) <= balance0After, 'F0'); + require(balance1Before.add(fee1) <= balance1After, 'F1'); + + // sub is safe because we know balanceAfter is gt balanceBefore by at least fee + uint256 paid0 = balance0After - balance0Before; + uint256 paid1 = balance1After - balance1Before; + + if (paid0 > 0) { + uint8 feeProtocol0 = slot0.feeProtocol % 16; + uint256 fees0 = feeProtocol0 == 0 ? 0 : paid0 / feeProtocol0; + if (uint128(fees0) > 0) protocolFees.token0 += uint128(fees0); + feeGrowthGlobal0X128 += FullMath.mulDiv(paid0 - fees0, FixedPoint128.Q128, _liquidity); + } + if (paid1 > 0) { + uint8 feeProtocol1 = slot0.feeProtocol >> 4; + uint256 fees1 = feeProtocol1 == 0 ? 0 : paid1 / feeProtocol1; + if (uint128(fees1) > 0) protocolFees.token1 += uint128(fees1); + feeGrowthGlobal1X128 += FullMath.mulDiv(paid1 - fees1, FixedPoint128.Q128, _liquidity); + } + + emit Flash(msg.sender, recipient, amount0, amount1, paid0, paid1); + } + + /// @inheritdoc IUniswapV3PoolOwnerActions + function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external override lock onlyFactoryOwner { + require( + (feeProtocol0 == 0 || (feeProtocol0 >= 4 && feeProtocol0 <= 10)) && + (feeProtocol1 == 0 || (feeProtocol1 >= 4 && feeProtocol1 <= 10)) + ); + uint8 feeProtocolOld = slot0.feeProtocol; + slot0.feeProtocol = feeProtocol0 + (feeProtocol1 << 4); + emit SetFeeProtocol(feeProtocolOld % 16, feeProtocolOld >> 4, feeProtocol0, feeProtocol1); + } + + /// @inheritdoc IUniswapV3PoolOwnerActions + function collectProtocol( + address recipient, + uint128 amount0Requested, + uint128 amount1Requested + ) external override lock onlyFactoryOwner returns (uint128 amount0, uint128 amount1) { + amount0 = amount0Requested > protocolFees.token0 ? protocolFees.token0 : amount0Requested; + amount1 = amount1Requested > protocolFees.token1 ? protocolFees.token1 : amount1Requested; + + if (amount0 > 0) { + if (amount0 == protocolFees.token0) amount0--; // ensure that the slot is not cleared, for gas savings + protocolFees.token0 -= amount0; + TransferHelper.safeTransfer(token0, recipient, amount0); + } + if (amount1 > 0) { + if (amount1 == protocolFees.token1) amount1--; // ensure that the slot is not cleared, for gas savings + protocolFees.token1 -= amount1; + TransferHelper.safeTransfer(token1, recipient, amount1); + } + + emit CollectProtocol(msg.sender, recipient, amount0, amount1); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol new file mode 100644 index 000000000..c303265a3 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Minimal ERC20 interface for Uniswap +/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3 +interface IERC20Minimal { + /// @notice Returns the balance of a token + /// @param account The account for which to look up the number of tokens it has, i.e. its balance + /// @return The number of tokens held by the account + function balanceOf(address account) external view returns (uint256); + + /// @notice Transfers the amount of token from the `msg.sender` to the recipient + /// @param recipient The account that will receive the amount transferred + /// @param amount The number of tokens to send from the sender to the recipient + /// @return Returns true for a successful transfer, false for an unsuccessful transfer + function transfer(address recipient, uint256 amount) external returns (bool); + + /// @notice Returns the current allowance given to a spender by an owner + /// @param owner The account of the token owner + /// @param spender The account of the token spender + /// @return The current allowance granted by `owner` to `spender` + function allowance(address owner, address spender) external view returns (uint256); + + /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount` + /// @param spender The account which will be allowed to spend a given amount of the owners tokens + /// @param amount The amount of tokens allowed to be used by `spender` + /// @return Returns true for a successful approval, false for unsuccessful + function approve(address spender, uint256 amount) external returns (bool); + + /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender` + /// @param sender The account from which the transfer will be initiated + /// @param recipient The recipient of the transfer + /// @param amount The amount of the transfer + /// @return Returns true for a successful transfer, false for unsuccessful + function transferFrom( + address sender, + address recipient, + uint256 amount + ) external returns (bool); + + /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`. + /// @param from The account from which the tokens were sent, i.e. the balance decreased + /// @param to The account to which the tokens were sent, i.e. the balance increased + /// @param value The amount of tokens that were transferred + event Transfer(address indexed from, address indexed to, uint256 value); + + /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes. + /// @param owner The account that approved spending of its tokens + /// @param spender The account for which the spending allowance was modified + /// @param value The new allowance from the owner to the spender + event Approval(address indexed owner, address indexed spender, uint256 value); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol new file mode 100644 index 000000000..540cfdc68 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title The interface for the Uniswap V3 Factory +/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees +interface IUniswapV3Factory { + /// @notice Emitted when the owner of the factory is changed + /// @param oldOwner The owner before the owner was changed + /// @param newOwner The owner after the owner was changed + event OwnerChanged(address indexed oldOwner, address indexed newOwner); + + /// @notice Emitted when a pool is created + /// @param token0 The first token of the pool by address sort order + /// @param token1 The second token of the pool by address sort order + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @param tickSpacing The minimum number of ticks between initialized ticks + /// @param pool The address of the created pool + event PoolCreated( + address indexed token0, + address indexed token1, + uint24 indexed fee, + int24 tickSpacing, + address pool + ); + + /// @notice Emitted when a new fee amount is enabled for pool creation via the factory + /// @param fee The enabled fee, denominated in hundredths of a bip + /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee + event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); + + /// @notice Returns the current owner of the factory + /// @dev Can be changed by the current owner via setOwner + /// @return The address of the factory owner + function owner() external view returns (address); + + /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled + /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context + /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee + /// @return The tick spacing + function feeAmountTickSpacing(uint24 fee) external view returns (int24); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool( + address tokenA, + address tokenB, + uint24 fee + ) external view returns (address pool); + + /// @notice Creates a pool for the given two tokens and fee + /// @param tokenA One of the two tokens in the desired pool + /// @param tokenB The other of the two tokens in the desired pool + /// @param fee The desired fee for the pool + /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved + /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments + /// are invalid. + /// @return pool The address of the newly created pool + function createPool( + address tokenA, + address tokenB, + uint24 fee + ) external returns (address pool); + + /// @notice Updates the owner of the factory + /// @dev Must be called by the current owner + /// @param _owner The new owner of the factory + function setOwner(address _owner) external; + + /// @notice Enables a fee amount with the given tickSpacing + /// @dev Fee amounts may never be removed once enabled + /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6) + /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount + function enableFeeAmount(uint24 fee, int24 tickSpacing) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol new file mode 100644 index 000000000..56df0500d --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +import './pool/IUniswapV3PoolImmutables.sol'; +import './pool/IUniswapV3PoolState.sol'; +import './pool/IUniswapV3PoolDerivedState.sol'; +import './pool/IUniswapV3PoolActions.sol'; +import './pool/IUniswapV3PoolOwnerActions.sol'; +import './pool/IUniswapV3PoolEvents.sol'; + +/// @title The interface for a Uniswap V3 Pool +/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform +/// to the ERC20 specification +/// @dev The pool interface is broken up into many smaller pieces +interface IUniswapV3Pool is + IUniswapV3PoolImmutables, + IUniswapV3PoolState, + IUniswapV3PoolDerivedState, + IUniswapV3PoolActions, + IUniswapV3PoolOwnerActions, + IUniswapV3PoolEvents +{ + +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol new file mode 100644 index 000000000..72096c1ff --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title An interface for a contract that is capable of deploying Uniswap V3 Pools +/// @notice A contract that constructs a pool must implement this to pass arguments to the pool +/// @dev This is used to avoid having constructor arguments in the pool contract, which results in the init code hash +/// of the pool being constant allowing the CREATE2 address of the pool to be cheaply computed on-chain +interface IUniswapV3PoolDeployer { + /// @notice Get the parameters to be used in constructing the pool, set transiently during pool creation. + /// @dev Called by the pool constructor to fetch the parameters of the pool + /// Returns factory The factory address + /// Returns token0 The first token of the pool by address sort order + /// Returns token1 The second token of the pool by address sort order + /// Returns fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// Returns tickSpacing The minimum number of ticks between initialized ticks + function parameters() + external + view + returns ( + address factory, + address token0, + address token1, + uint24 fee, + int24 tickSpacing + ); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol new file mode 100644 index 000000000..18e54c4e1 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Callback for IUniswapV3PoolActions#flash +/// @notice Any contract that calls IUniswapV3PoolActions#flash must implement this interface +interface IUniswapV3FlashCallback { + /// @notice Called to `msg.sender` after transferring to the recipient from IUniswapV3Pool#flash. + /// @dev In the implementation you must repay the pool the tokens sent by flash plus the computed fee amounts. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// @param fee0 The fee amount in token0 due to the pool by the end of the flash + /// @param fee1 The fee amount in token1 due to the pool by the end of the flash + /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#flash call + function uniswapV3FlashCallback( + uint256 fee0, + uint256 fee1, + bytes calldata data + ) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol new file mode 100644 index 000000000..85447e84f --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Callback for IUniswapV3PoolActions#mint +/// @notice Any contract that calls IUniswapV3PoolActions#mint must implement this interface +interface IUniswapV3MintCallback { + /// @notice Called to `msg.sender` after minting liquidity to a position from IUniswapV3Pool#mint. + /// @dev In the implementation you must pay the pool tokens owed for the minted liquidity. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity + /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity + /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#mint call + function uniswapV3MintCallback( + uint256 amount0Owed, + uint256 amount1Owed, + bytes calldata data + ) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol new file mode 100644 index 000000000..9f183b22a --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Callback for IUniswapV3PoolActions#swap +/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface +interface IUniswapV3SwapCallback { + /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call + function uniswapV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol new file mode 100644 index 000000000..44fb61c24 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Permissionless pool actions +/// @notice Contains pool methods that can be called by anyone +interface IUniswapV3PoolActions { + /// @notice Sets the initial price for the pool + /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value + /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96 + function initialize(uint160 sqrtPriceX96) external; + + /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position + /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback + /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends + /// on tickLower, tickUpper, the amount of liquidity, and the current price. + /// @param recipient The address for which the liquidity will be created + /// @param tickLower The lower tick of the position in which to add liquidity + /// @param tickUpper The upper tick of the position in which to add liquidity + /// @param amount The amount of liquidity to mint + /// @param data Any data that should be passed through to the callback + /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback + /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback + function mint( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount, + bytes calldata data + ) external returns (uint256 amount0, uint256 amount1); + + /// @notice Collects tokens owed to a position + /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. + /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or + /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the + /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity. + /// @param recipient The address which should receive the fees collected + /// @param tickLower The lower tick of the position for which to collect fees + /// @param tickUpper The upper tick of the position for which to collect fees + /// @param amount0Requested How much token0 should be withdrawn from the fees owed + /// @param amount1Requested How much token1 should be withdrawn from the fees owed + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested + ) external returns (uint128 amount0, uint128 amount1); + + /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position + /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0 + /// @dev Fees must be collected separately via a call to #collect + /// @param tickLower The lower tick of the position for which to burn liquidity + /// @param tickUpper The upper tick of the position for which to burn liquidity + /// @param amount How much liquidity to burn + /// @return amount0 The amount of token0 sent to the recipient + /// @return amount1 The amount of token1 sent to the recipient + function burn( + int24 tickLower, + int24 tickUpper, + uint128 amount + ) external returns (uint256 amount0, uint256 amount1); + + /// @notice Swap token0 for token1, or token1 for token0 + /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback + /// @param recipient The address to receive the output of the swap + /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0 + /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative) + /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this + /// value after the swap. If one for zero, the price cannot be greater than this value after the swap + /// @param data Any data to be passed through to the callback + /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive + /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bytes calldata data + ) external returns (int256 amount0, int256 amount1); + + /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback + /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback + /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling + /// with 0 amount{0,1} and sending the donation amount(s) from the callback + /// @param recipient The address which will receive the token0 and token1 amounts + /// @param amount0 The amount of token0 to send + /// @param amount1 The amount of token1 to send + /// @param data Any data to be passed through to the callback + function flash( + address recipient, + uint256 amount0, + uint256 amount1, + bytes calldata data + ) external; + + /// @notice Increase the maximum number of price and liquidity observations that this pool will store + /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to + /// the input observationCardinalityNext. + /// @param observationCardinalityNext The desired minimum number of observations for the pool to store + function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol new file mode 100644 index 000000000..eda3a0089 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Pool state that is not stored +/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the +/// blockchain. The functions here may have variable gas costs. +interface IUniswapV3PoolDerivedState { + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external + view + returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range + /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed. + /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first + /// snapshot is taken and the second snapshot is taken. + /// @param tickLower The lower tick of the range + /// @param tickUpper The upper tick of the range + /// @return tickCumulativeInside The snapshot of the tick accumulator for the range + /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range + /// @return secondsInside The snapshot of seconds per liquidity for the range + function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) + external + view + returns ( + int56 tickCumulativeInside, + uint160 secondsPerLiquidityInsideX128, + uint32 secondsInside + ); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol new file mode 100644 index 000000000..9d915dde9 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Events emitted by a pool +/// @notice Contains all events emitted by the pool +interface IUniswapV3PoolEvents { + /// @notice Emitted exactly once by a pool when #initialize is first called on the pool + /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize + /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96 + /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool + event Initialize(uint160 sqrtPriceX96, int24 tick); + + /// @notice Emitted when liquidity is minted for a given position + /// @param sender The address that minted the liquidity + /// @param owner The owner of the position and recipient of any minted liquidity + /// @param tickLower The lower tick of the position + /// @param tickUpper The upper tick of the position + /// @param amount The amount of liquidity minted to the position range + /// @param amount0 How much token0 was required for the minted liquidity + /// @param amount1 How much token1 was required for the minted liquidity + event Mint( + address sender, + address indexed owner, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 amount, + uint256 amount0, + uint256 amount1 + ); + + /// @notice Emitted when fees are collected by the owner of a position + /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees + /// @param owner The owner of the position for which fees are collected + /// @param tickLower The lower tick of the position + /// @param tickUpper The upper tick of the position + /// @param amount0 The amount of token0 fees collected + /// @param amount1 The amount of token1 fees collected + event Collect( + address indexed owner, + address recipient, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 amount0, + uint128 amount1 + ); + + /// @notice Emitted when a position's liquidity is removed + /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect + /// @param owner The owner of the position for which liquidity is removed + /// @param tickLower The lower tick of the position + /// @param tickUpper The upper tick of the position + /// @param amount The amount of liquidity to remove + /// @param amount0 The amount of token0 withdrawn + /// @param amount1 The amount of token1 withdrawn + event Burn( + address indexed owner, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 amount, + uint256 amount0, + uint256 amount1 + ); + + /// @notice Emitted by the pool for any swaps between token0 and token1 + /// @param sender The address that initiated the swap call, and that received the callback + /// @param recipient The address that received the output of the swap + /// @param amount0 The delta of the token0 balance of the pool + /// @param amount1 The delta of the token1 balance of the pool + /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96 + /// @param liquidity The liquidity of the pool after the swap + /// @param tick The log base 1.0001 of price of the pool after the swap + event Swap( + address indexed sender, + address indexed recipient, + int256 amount0, + int256 amount1, + uint160 sqrtPriceX96, + uint128 liquidity, + int24 tick + ); + + /// @notice Emitted by the pool for any flashes of token0/token1 + /// @param sender The address that initiated the swap call, and that received the callback + /// @param recipient The address that received the tokens from flash + /// @param amount0 The amount of token0 that was flashed + /// @param amount1 The amount of token1 that was flashed + /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee + /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee + event Flash( + address indexed sender, + address indexed recipient, + uint256 amount0, + uint256 amount1, + uint256 paid0, + uint256 paid1 + ); + + /// @notice Emitted by the pool for increases to the number of observations that can be stored + /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index + /// just before a mint/swap/burn. + /// @param observationCardinalityNextOld The previous value of the next observation cardinality + /// @param observationCardinalityNextNew The updated value of the next observation cardinality + event IncreaseObservationCardinalityNext( + uint16 observationCardinalityNextOld, + uint16 observationCardinalityNextNew + ); + + /// @notice Emitted when the protocol fee is changed by the pool + /// @param feeProtocol0Old The previous value of the token0 protocol fee + /// @param feeProtocol1Old The previous value of the token1 protocol fee + /// @param feeProtocol0New The updated value of the token0 protocol fee + /// @param feeProtocol1New The updated value of the token1 protocol fee + event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New); + + /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner + /// @param sender The address that collects the protocol fees + /// @param recipient The address that receives the collected protocol fees + /// @param amount0 The amount of token0 protocol fees that is withdrawn + /// @param amount0 The amount of token1 protocol fees that is withdrawn + event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol new file mode 100644 index 000000000..c9beb151e --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Pool state that never changes +/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values +interface IUniswapV3PoolImmutables { + /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface + /// @return The contract address + function factory() external view returns (address); + + /// @notice The first of the two tokens of the pool, sorted by address + /// @return The token contract address + function token0() external view returns (address); + + /// @notice The second of the two tokens of the pool, sorted by address + /// @return The token contract address + function token1() external view returns (address); + + /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6 + /// @return The fee + function fee() external view returns (uint24); + + /// @notice The pool tick spacing + /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive + /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... + /// This value is an int24 to avoid casting even though it is always positive. + /// @return The tick spacing + function tickSpacing() external view returns (int24); + + /// @notice The maximum amount of position liquidity that can use any tick in the range + /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and + /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool + /// @return The max amount of liquidity per tick + function maxLiquidityPerTick() external view returns (uint128); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol new file mode 100644 index 000000000..2395ed321 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Permissioned pool actions +/// @notice Contains pool methods that may only be called by the factory owner +interface IUniswapV3PoolOwnerActions { + /// @notice Set the denominator of the protocol's % share of the fees + /// @param feeProtocol0 new protocol fee for token0 of the pool + /// @param feeProtocol1 new protocol fee for token1 of the pool + function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external; + + /// @notice Collect the protocol fee accrued to the pool + /// @param recipient The address to which collected protocol fees should be sent + /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1 + /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0 + /// @return amount0 The protocol fee collected in token0 + /// @return amount1 The protocol fee collected in token1 + function collectProtocol( + address recipient, + uint128 amount0Requested, + uint128 amount1Requested + ) external returns (uint128 amount0, uint128 amount1); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol new file mode 100644 index 000000000..620256c31 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Pool state that can change +/// @notice These methods compose the pool's state, and can change with any frequency including multiple times +/// per transaction +interface IUniswapV3PoolState { + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() + external + view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool + /// @dev This value can overflow the uint256 + function feeGrowthGlobal0X128() external view returns (uint256); + + /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool + /// @dev This value can overflow the uint256 + function feeGrowthGlobal1X128() external view returns (uint256); + + /// @notice The amounts of token0 and token1 that are owed to the protocol + /// @dev Protocol fees will never exceed uint128 max in either token + function protocolFees() external view returns (uint128 token0, uint128 token1); + + /// @notice The currently in range liquidity available to the pool + /// @dev This value has no relationship to the total liquidity across all ticks + function liquidity() external view returns (uint128); + + /// @notice Look up information about a specific tick in the pool + /// @param tick The tick to look up + /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or + /// tick upper, + /// liquidityNet how much liquidity changes when the pool price crosses the tick, + /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, + /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, + /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick + /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, + /// secondsOutside the seconds spent on the other side of the tick from the current tick, + /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. + /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. + /// In addition, these values are only relative and must be used only in comparison to previous snapshots for + /// a specific position. + function ticks(int24 tick) + external + view + returns ( + uint128 liquidityGross, + int128 liquidityNet, + uint256 feeGrowthOutside0X128, + uint256 feeGrowthOutside1X128, + int56 tickCumulativeOutside, + uint160 secondsPerLiquidityOutsideX128, + uint32 secondsOutside, + bool initialized + ); + + /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information + function tickBitmap(int16 wordPosition) external view returns (uint256); + + /// @notice Returns the information about a position by the position's key + /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper + /// @return _liquidity The amount of liquidity in the position, + /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, + /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, + /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, + /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke + function positions(bytes32 key) + external + view + returns ( + uint128 _liquidity, + uint256 feeGrowthInside0LastX128, + uint256 feeGrowthInside1LastX128, + uint128 tokensOwed0, + uint128 tokensOwed1 + ); + + /// @notice Returns data about a specific observation index + /// @param index The element of the observations array to fetch + /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time + /// ago, rather than at a specific index in the array. + /// @return blockTimestamp The timestamp of the observation, + /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, + /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, + /// Returns initialized whether the observation has been initialized and the values are safe to use + function observations(uint256 index) + external + view + returns ( + uint32 blockTimestamp, + int56 tickCumulative, + uint160 secondsPerLiquidityCumulativeX128, + bool initialized + ); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol new file mode 100644 index 000000000..3a7216c7b --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title BitMath +/// @dev This library provides functionality for computing bit properties of an unsigned integer +library BitMath { + /// @notice Returns the index of the most significant bit of the number, + /// where the least significant bit is at index 0 and the most significant bit is at index 255 + /// @dev The function satisfies the property: + /// x >= 2**mostSignificantBit(x) and x < 2**(mostSignificantBit(x)+1) + /// @param x the value for which to compute the most significant bit, must be greater than 0 + /// @return r the index of the most significant bit + function mostSignificantBit(uint256 x) internal pure returns (uint8 r) { + require(x > 0); + + if (x >= 0x100000000000000000000000000000000) { + x >>= 128; + r += 128; + } + if (x >= 0x10000000000000000) { + x >>= 64; + r += 64; + } + if (x >= 0x100000000) { + x >>= 32; + r += 32; + } + if (x >= 0x10000) { + x >>= 16; + r += 16; + } + if (x >= 0x100) { + x >>= 8; + r += 8; + } + if (x >= 0x10) { + x >>= 4; + r += 4; + } + if (x >= 0x4) { + x >>= 2; + r += 2; + } + if (x >= 0x2) r += 1; + } + + /// @notice Returns the index of the least significant bit of the number, + /// where the least significant bit is at index 0 and the most significant bit is at index 255 + /// @dev The function satisfies the property: + /// (x & 2**leastSignificantBit(x)) != 0 and (x & (2**(leastSignificantBit(x)) - 1)) == 0) + /// @param x the value for which to compute the least significant bit, must be greater than 0 + /// @return r the index of the least significant bit + function leastSignificantBit(uint256 x) internal pure returns (uint8 r) { + require(x > 0); + + r = 255; + if (x & type(uint128).max > 0) { + r -= 128; + } else { + x >>= 128; + } + if (x & type(uint64).max > 0) { + r -= 64; + } else { + x >>= 64; + } + if (x & type(uint32).max > 0) { + r -= 32; + } else { + x >>= 32; + } + if (x & type(uint16).max > 0) { + r -= 16; + } else { + x >>= 16; + } + if (x & type(uint8).max > 0) { + r -= 8; + } else { + x >>= 8; + } + if (x & 0xf > 0) { + r -= 4; + } else { + x >>= 4; + } + if (x & 0x3 > 0) { + r -= 2; + } else { + x >>= 2; + } + if (x & 0x1 > 0) r -= 1; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol new file mode 100644 index 000000000..6d6948b10 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.4.0; + +/// @title FixedPoint128 +/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) +library FixedPoint128 { + uint256 internal constant Q128 = 0x100000000000000000000000000000000; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol new file mode 100644 index 000000000..63b42c294 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.4.0; + +/// @title FixedPoint96 +/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) +/// @dev Used in SqrtPriceMath.sol +library FixedPoint96 { + uint8 internal constant RESOLUTION = 96; + uint256 internal constant Q96 = 0x1000000000000000000000000; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol new file mode 100644 index 000000000..8688a1773 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.4.0; + +/// @title Contains 512-bit math functions +/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision +/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits +library FullMath { + /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + /// @param a The multiplicand + /// @param b The multiplier + /// @param denominator The divisor + /// @return result The 256-bit result + /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv + function mulDiv( + uint256 a, + uint256 b, + uint256 denominator + ) internal pure returns (uint256 result) { + // 512-bit multiply [prod1 prod0] = a * b + // Compute the product mod 2**256 and mod 2**256 - 1 + // then use the Chinese Remainder Theorem to reconstruct + // the 512 bit result. The result is stored in two 256 + // variables such that product = prod1 * 2**256 + prod0 + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly { + let mm := mulmod(a, b, not(0)) + prod0 := mul(a, b) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division + if (prod1 == 0) { + require(denominator > 0); + assembly { + result := div(prod0, denominator) + } + return result; + } + + // Make sure the result is less than 2**256. + // Also prevents denominator == 0 + require(denominator > prod1); + + /////////////////////////////////////////////// + // 512 by 256 division. + /////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0] + // Compute remainder using mulmod + uint256 remainder; + assembly { + remainder := mulmod(a, b, denominator) + } + // Subtract 256 bit number from 512 bit number + assembly { + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + // Factor powers of two out of denominator + // Compute largest power of two divisor of denominator. + // Always >= 1. + uint256 twos = -denominator & denominator; + // Divide denominator by power of two + assembly { + denominator := div(denominator, twos) + } + + // Divide [prod1 prod0] by the factors of two + assembly { + prod0 := div(prod0, twos) + } + // Shift in bits from prod1 into prod0. For this we need + // to flip `twos` such that it is 2**256 / twos. + // If twos is zero, then it becomes one + assembly { + twos := add(div(sub(0, twos), twos), 1) + } + prod0 |= prod1 * twos; + + // Invert denominator mod 2**256 + // Now that denominator is an odd number, it has an inverse + // modulo 2**256 such that denominator * inv = 1 mod 2**256. + // Compute the inverse by starting with a seed that is correct + // correct for four bits. That is, denominator * inv = 1 mod 2**4 + uint256 inv = (3 * denominator) ^ 2; + // Now use Newton-Raphson iteration to improve the precision. + // Thanks to Hensel's lifting lemma, this also works in modular + // arithmetic, doubling the correct bits in each step. + inv *= 2 - denominator * inv; // inverse mod 2**8 + inv *= 2 - denominator * inv; // inverse mod 2**16 + inv *= 2 - denominator * inv; // inverse mod 2**32 + inv *= 2 - denominator * inv; // inverse mod 2**64 + inv *= 2 - denominator * inv; // inverse mod 2**128 + inv *= 2 - denominator * inv; // inverse mod 2**256 + + // Because the division is now exact we can divide by multiplying + // with the modular inverse of denominator. This will give us the + // correct result modulo 2**256. Since the precoditions guarantee + // that the outcome is less than 2**256, this is the final result. + // We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inv; + return result; + } + + /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + /// @param a The multiplicand + /// @param b The multiplier + /// @param denominator The divisor + /// @return result The 256-bit result + function mulDivRoundingUp( + uint256 a, + uint256 b, + uint256 denominator + ) internal pure returns (uint256 result) { + result = mulDiv(a, b, denominator); + if (mulmod(a, b, denominator) > 0) { + require(result < type(uint256).max); + result++; + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol new file mode 100644 index 000000000..d5e23032e --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Math library for liquidity +library LiquidityMath { + /// @notice Add a signed liquidity delta to liquidity and revert if it overflows or underflows + /// @param x The liquidity before change + /// @param y The delta by which liquidity should be changed + /// @return z The liquidity delta + function addDelta(uint128 x, int128 y) internal pure returns (uint128 z) { + if (y < 0) { + require((z = x - uint128(-y)) < x, 'LS'); + } else { + require((z = x + uint128(y)) >= x, 'LA'); + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol new file mode 100644 index 000000000..dbc817c2e --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.7.0; + +/// @title Optimized overflow and underflow safe math operations +/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost +library LowGasSafeMath { + /// @notice Returns x + y, reverts if sum overflows uint256 + /// @param x The augend + /// @param y The addend + /// @return z The sum of x and y + function add(uint256 x, uint256 y) internal pure returns (uint256 z) { + require((z = x + y) >= x); + } + + /// @notice Returns x - y, reverts if underflows + /// @param x The minuend + /// @param y The subtrahend + /// @return z The difference of x and y + function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { + require((z = x - y) <= x); + } + + /// @notice Returns x * y, reverts if overflows + /// @param x The multiplicand + /// @param y The multiplier + /// @return z The product of x and y + function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { + require(x == 0 || (z = x * y) / x == y); + } + + /// @notice Returns x + y, reverts if overflows or underflows + /// @param x The augend + /// @param y The addend + /// @return z The sum of x and y + function add(int256 x, int256 y) internal pure returns (int256 z) { + require((z = x + y) >= x == (y >= 0)); + } + + /// @notice Returns x - y, reverts if overflows or underflows + /// @param x The minuend + /// @param y The subtrahend + /// @return z The difference of x and y + function sub(int256 x, int256 y) internal pure returns (int256 z) { + require((z = x - y) <= x == (y >= 0)); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol new file mode 100644 index 000000000..3f6b3f32c --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol @@ -0,0 +1,325 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +/// @title Oracle +/// @notice Provides price and liquidity data useful for a wide variety of system designs +/// @dev Instances of stored oracle data, "observations", are collected in the oracle array +/// Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the +/// maximum length of the oracle array. New slots will be added when the array is fully populated. +/// Observations are overwritten when the full length of the oracle array is populated. +/// The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe() +library Oracle { + struct Observation { + // the block timestamp of the observation + uint32 blockTimestamp; + // the tick accumulator, i.e. tick * time elapsed since the pool was first initialized + int56 tickCumulative; + // the seconds per liquidity, i.e. seconds elapsed / max(1, liquidity) since the pool was first initialized + uint160 secondsPerLiquidityCumulativeX128; + // whether or not the observation is initialized + bool initialized; + } + + /// @notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values + /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows + /// @param last The specified observation to be transformed + /// @param blockTimestamp The timestamp of the new observation + /// @param tick The active tick at the time of the new observation + /// @param liquidity The total in-range liquidity at the time of the new observation + /// @return Observation The newly populated observation + function transform( + Observation memory last, + uint32 blockTimestamp, + int24 tick, + uint128 liquidity + ) private pure returns (Observation memory) { + uint32 delta = blockTimestamp - last.blockTimestamp; + return + Observation({ + blockTimestamp: blockTimestamp, + tickCumulative: last.tickCumulative + int56(tick) * delta, + secondsPerLiquidityCumulativeX128: last.secondsPerLiquidityCumulativeX128 + + ((uint160(delta) << 128) / (liquidity > 0 ? liquidity : 1)), + initialized: true + }); + } + + /// @notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array + /// @param self The stored oracle array + /// @param time The time of the oracle initialization, via block.timestamp truncated to uint32 + /// @return cardinality The number of populated elements in the oracle array + /// @return cardinalityNext The new length of the oracle array, independent of population + function initialize(Observation[65535] storage self, uint32 time) + internal + returns (uint16 cardinality, uint16 cardinalityNext) + { + self[0] = Observation({ + blockTimestamp: time, + tickCumulative: 0, + secondsPerLiquidityCumulativeX128: 0, + initialized: true + }); + return (1, 1); + } + + /// @notice Writes an oracle observation to the array + /// @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally. + /// If the index is at the end of the allowable array length (according to cardinality), and the next cardinality + /// is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering. + /// @param self The stored oracle array + /// @param index The index of the observation that was most recently written to the observations array + /// @param blockTimestamp The timestamp of the new observation + /// @param tick The active tick at the time of the new observation + /// @param liquidity The total in-range liquidity at the time of the new observation + /// @param cardinality The number of populated elements in the oracle array + /// @param cardinalityNext The new length of the oracle array, independent of population + /// @return indexUpdated The new index of the most recently written element in the oracle array + /// @return cardinalityUpdated The new cardinality of the oracle array + function write( + Observation[65535] storage self, + uint16 index, + uint32 blockTimestamp, + int24 tick, + uint128 liquidity, + uint16 cardinality, + uint16 cardinalityNext + ) internal returns (uint16 indexUpdated, uint16 cardinalityUpdated) { + Observation memory last = self[index]; + + // early return if we've already written an observation this block + if (last.blockTimestamp == blockTimestamp) return (index, cardinality); + + // if the conditions are right, we can bump the cardinality + if (cardinalityNext > cardinality && index == (cardinality - 1)) { + cardinalityUpdated = cardinalityNext; + } else { + cardinalityUpdated = cardinality; + } + + indexUpdated = (index + 1) % cardinalityUpdated; + self[indexUpdated] = transform(last, blockTimestamp, tick, liquidity); + } + + /// @notice Prepares the oracle array to store up to `next` observations + /// @param self The stored oracle array + /// @param current The current next cardinality of the oracle array + /// @param next The proposed next cardinality which will be populated in the oracle array + /// @return next The next cardinality which will be populated in the oracle array + function grow( + Observation[65535] storage self, + uint16 current, + uint16 next + ) internal returns (uint16) { + require(current > 0, 'I'); + // no-op if the passed next value isn't greater than the current next value + if (next <= current) return current; + // store in each slot to prevent fresh SSTOREs in swaps + // this data will not be used because the initialized boolean is still false + for (uint16 i = current; i < next; i++) self[i].blockTimestamp = 1; + return next; + } + + /// @notice comparator for 32-bit timestamps + /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time + /// @param time A timestamp truncated to 32 bits + /// @param a A comparison timestamp from which to determine the relative position of `time` + /// @param b From which to determine the relative position of `time` + /// @return bool Whether `a` is chronologically <= `b` + function lte( + uint32 time, + uint32 a, + uint32 b + ) private pure returns (bool) { + // if there hasn't been overflow, no need to adjust + if (a <= time && b <= time) return a <= b; + + uint256 aAdjusted = a > time ? a : a + 2**32; + uint256 bAdjusted = b > time ? b : b + 2**32; + + return aAdjusted <= bAdjusted; + } + + /// @notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied. + /// The result may be the same observation, or adjacent observations. + /// @dev The answer must be contained in the array, used when the target is located within the stored observation + /// boundaries: older than the most recent observation and younger, or the same age as, the oldest observation + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param target The timestamp at which the reserved observation should be for + /// @param index The index of the observation that was most recently written to the observations array + /// @param cardinality The number of populated elements in the oracle array + /// @return beforeOrAt The observation recorded before, or at, the target + /// @return atOrAfter The observation recorded at, or after, the target + function binarySearch( + Observation[65535] storage self, + uint32 time, + uint32 target, + uint16 index, + uint16 cardinality + ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { + uint256 l = (index + 1) % cardinality; // oldest observation + uint256 r = l + cardinality - 1; // newest observation + uint256 i; + while (true) { + i = (l + r) / 2; + + beforeOrAt = self[i % cardinality]; + + // we've landed on an uninitialized tick, keep searching higher (more recently) + if (!beforeOrAt.initialized) { + l = i + 1; + continue; + } + + atOrAfter = self[(i + 1) % cardinality]; + + bool targetAtOrAfter = lte(time, beforeOrAt.blockTimestamp, target); + + // check if we've found the answer! + if (targetAtOrAfter && lte(time, target, atOrAfter.blockTimestamp)) break; + + if (!targetAtOrAfter) r = i - 1; + else l = i + 1; + } + } + + /// @notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied + /// @dev Assumes there is at least 1 initialized observation. + /// Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp. + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param target The timestamp at which the reserved observation should be for + /// @param tick The active tick at the time of the returned or simulated observation + /// @param index The index of the observation that was most recently written to the observations array + /// @param liquidity The total pool liquidity at the time of the call + /// @param cardinality The number of populated elements in the oracle array + /// @return beforeOrAt The observation which occurred at, or before, the given timestamp + /// @return atOrAfter The observation which occurred at, or after, the given timestamp + function getSurroundingObservations( + Observation[65535] storage self, + uint32 time, + uint32 target, + int24 tick, + uint16 index, + uint128 liquidity, + uint16 cardinality + ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { + // optimistically set before to the newest observation + beforeOrAt = self[index]; + + // if the target is chronologically at or after the newest observation, we can early return + if (lte(time, beforeOrAt.blockTimestamp, target)) { + if (beforeOrAt.blockTimestamp == target) { + // if newest observation equals target, we're in the same block, so we can ignore atOrAfter + return (beforeOrAt, atOrAfter); + } else { + // otherwise, we need to transform + return (beforeOrAt, transform(beforeOrAt, target, tick, liquidity)); + } + } + + // now, set before to the oldest observation + beforeOrAt = self[(index + 1) % cardinality]; + if (!beforeOrAt.initialized) beforeOrAt = self[0]; + + // ensure that the target is chronologically at or after the oldest observation + require(lte(time, beforeOrAt.blockTimestamp, target), 'OLD'); + + // if we've reached this point, we have to binary search + return binarySearch(self, time, target, index, cardinality); + } + + /// @dev Reverts if an observation at or before the desired observation timestamp does not exist. + /// 0 may be passed as `secondsAgo' to return the current cumulative values. + /// If called with a timestamp falling between two observations, returns the counterfactual accumulator values + /// at exactly the timestamp between the two observations. + /// @param self The stored oracle array + /// @param time The current block timestamp + /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation + /// @param tick The current tick + /// @param index The index of the observation that was most recently written to the observations array + /// @param liquidity The current in-range pool liquidity + /// @param cardinality The number of populated elements in the oracle array + /// @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo` + /// @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo` + function observeSingle( + Observation[65535] storage self, + uint32 time, + uint32 secondsAgo, + int24 tick, + uint16 index, + uint128 liquidity, + uint16 cardinality + ) internal view returns (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) { + if (secondsAgo == 0) { + Observation memory last = self[index]; + if (last.blockTimestamp != time) last = transform(last, time, tick, liquidity); + return (last.tickCumulative, last.secondsPerLiquidityCumulativeX128); + } + + uint32 target = time - secondsAgo; + + (Observation memory beforeOrAt, Observation memory atOrAfter) = + getSurroundingObservations(self, time, target, tick, index, liquidity, cardinality); + + if (target == beforeOrAt.blockTimestamp) { + // we're at the left boundary + return (beforeOrAt.tickCumulative, beforeOrAt.secondsPerLiquidityCumulativeX128); + } else if (target == atOrAfter.blockTimestamp) { + // we're at the right boundary + return (atOrAfter.tickCumulative, atOrAfter.secondsPerLiquidityCumulativeX128); + } else { + // we're in the middle + uint32 observationTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp; + uint32 targetDelta = target - beforeOrAt.blockTimestamp; + return ( + beforeOrAt.tickCumulative + + ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / observationTimeDelta) * + targetDelta, + beforeOrAt.secondsPerLiquidityCumulativeX128 + + uint160( + (uint256( + atOrAfter.secondsPerLiquidityCumulativeX128 - beforeOrAt.secondsPerLiquidityCumulativeX128 + ) * targetDelta) / observationTimeDelta + ) + ); + } + } + + /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos` + /// @dev Reverts if `secondsAgos` > oldest observation + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation + /// @param tick The current tick + /// @param index The index of the observation that was most recently written to the observations array + /// @param liquidity The current in-range pool liquidity + /// @param cardinality The number of populated elements in the oracle array + /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo` + /// @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo` + function observe( + Observation[65535] storage self, + uint32 time, + uint32[] memory secondsAgos, + int24 tick, + uint16 index, + uint128 liquidity, + uint16 cardinality + ) internal view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) { + require(cardinality > 0, 'I'); + + tickCumulatives = new int56[](secondsAgos.length); + secondsPerLiquidityCumulativeX128s = new uint160[](secondsAgos.length); + for (uint256 i = 0; i < secondsAgos.length; i++) { + (tickCumulatives[i], secondsPerLiquidityCumulativeX128s[i]) = observeSingle( + self, + time, + secondsAgos[i], + tick, + index, + liquidity, + cardinality + ); + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol new file mode 100644 index 000000000..1c67c7f27 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './FullMath.sol'; +import './FixedPoint128.sol'; +import './LiquidityMath.sol'; + +/// @title Position +/// @notice Positions represent an owner address' liquidity between a lower and upper tick boundary +/// @dev Positions store additional state for tracking fees owed to the position +library Position { + // info stored for each user's position + struct Info { + // the amount of liquidity owned by this position + uint128 liquidity; + // fee growth per unit of liquidity as of the last update to liquidity or fees owed + uint256 feeGrowthInside0LastX128; + uint256 feeGrowthInside1LastX128; + // the fees owed to the position owner in token0/token1 + uint128 tokensOwed0; + uint128 tokensOwed1; + } + + /// @notice Returns the Info struct of a position, given an owner and position boundaries + /// @param self The mapping containing all user positions + /// @param owner The address of the position owner + /// @param tickLower The lower tick boundary of the position + /// @param tickUpper The upper tick boundary of the position + /// @return position The position info struct of the given owners' position + function get( + mapping(bytes32 => Info) storage self, + address owner, + int24 tickLower, + int24 tickUpper + ) internal view returns (Position.Info storage position) { + position = self[keccak256(abi.encodePacked(owner, tickLower, tickUpper))]; + } + + /// @notice Credits accumulated fees to a user's position + /// @param self The individual position to update + /// @param liquidityDelta The change in pool liquidity as a result of the position update + /// @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries + /// @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries + function update( + Info storage self, + int128 liquidityDelta, + uint256 feeGrowthInside0X128, + uint256 feeGrowthInside1X128 + ) internal { + Info memory _self = self; + + uint128 liquidityNext; + if (liquidityDelta == 0) { + require(_self.liquidity > 0, 'NP'); // disallow pokes for 0 liquidity positions + liquidityNext = _self.liquidity; + } else { + liquidityNext = LiquidityMath.addDelta(_self.liquidity, liquidityDelta); + } + + // calculate accumulated fees + uint128 tokensOwed0 = + uint128( + FullMath.mulDiv( + feeGrowthInside0X128 - _self.feeGrowthInside0LastX128, + _self.liquidity, + FixedPoint128.Q128 + ) + ); + uint128 tokensOwed1 = + uint128( + FullMath.mulDiv( + feeGrowthInside1X128 - _self.feeGrowthInside1LastX128, + _self.liquidity, + FixedPoint128.Q128 + ) + ); + + // update the position + if (liquidityDelta != 0) self.liquidity = liquidityNext; + self.feeGrowthInside0LastX128 = feeGrowthInside0X128; + self.feeGrowthInside1LastX128 = feeGrowthInside1X128; + if (tokensOwed0 > 0 || tokensOwed1 > 0) { + // overflow is acceptable, have to withdraw before you hit type(uint128).max fees + self.tokensOwed0 += tokensOwed0; + self.tokensOwed1 += tokensOwed1; + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol new file mode 100644 index 000000000..a8ea22987 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Safe casting methods +/// @notice Contains methods for safely casting between types +library SafeCast { + /// @notice Cast a uint256 to a uint160, revert on overflow + /// @param y The uint256 to be downcasted + /// @return z The downcasted integer, now type uint160 + function toUint160(uint256 y) internal pure returns (uint160 z) { + require((z = uint160(y)) == y); + } + + /// @notice Cast a int256 to a int128, revert on overflow or underflow + /// @param y The int256 to be downcasted + /// @return z The downcasted integer, now type int128 + function toInt128(int256 y) internal pure returns (int128 z) { + require((z = int128(y)) == y); + } + + /// @notice Cast a uint256 to a int256, revert on overflow + /// @param y The uint256 to be casted + /// @return z The casted integer, now type int256 + function toInt256(uint256 y) internal pure returns (int256 z) { + require(y < 2**255); + z = int256(y); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol new file mode 100644 index 000000000..685f485da --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './LowGasSafeMath.sol'; +import './SafeCast.sol'; + +import './FullMath.sol'; +import './UnsafeMath.sol'; +import './FixedPoint96.sol'; + +/// @title Functions based on Q64.96 sqrt price and liquidity +/// @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas +library SqrtPriceMath { + using LowGasSafeMath for uint256; + using SafeCast for uint256; + + /// @notice Gets the next sqrt price given a delta of token0 + /// @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least + /// far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the + /// price less in order to not send too much output. + /// The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96), + /// if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount). + /// @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta + /// @param liquidity The amount of usable liquidity + /// @param amount How much of token0 to add or remove from virtual reserves + /// @param add Whether to add or remove the amount of token0 + /// @return The price after adding or removing amount, depending on add + function getNextSqrtPriceFromAmount0RoundingUp( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amount, + bool add + ) internal pure returns (uint160) { + // we short circuit amount == 0 because the result is otherwise not guaranteed to equal the input price + if (amount == 0) return sqrtPX96; + uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; + + if (add) { + uint256 product; + if ((product = amount * sqrtPX96) / amount == sqrtPX96) { + uint256 denominator = numerator1 + product; + if (denominator >= numerator1) + // always fits in 160 bits + return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator)); + } + + return uint160(UnsafeMath.divRoundingUp(numerator1, (numerator1 / sqrtPX96).add(amount))); + } else { + uint256 product; + // if the product overflows, we know the denominator underflows + // in addition, we must check that the denominator does not underflow + require((product = amount * sqrtPX96) / amount == sqrtPX96 && numerator1 > product); + uint256 denominator = numerator1 - product; + return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator).toUint160(); + } + } + + /// @notice Gets the next sqrt price given a delta of token1 + /// @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least + /// far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the + /// price less in order to not send too much output. + /// The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity + /// @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta + /// @param liquidity The amount of usable liquidity + /// @param amount How much of token1 to add, or remove, from virtual reserves + /// @param add Whether to add, or remove, the amount of token1 + /// @return The price after adding or removing `amount` + function getNextSqrtPriceFromAmount1RoundingDown( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amount, + bool add + ) internal pure returns (uint160) { + // if we're adding (subtracting), rounding down requires rounding the quotient down (up) + // in both cases, avoid a mulDiv for most inputs + if (add) { + uint256 quotient = + ( + amount <= type(uint160).max + ? (amount << FixedPoint96.RESOLUTION) / liquidity + : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity) + ); + + return uint256(sqrtPX96).add(quotient).toUint160(); + } else { + uint256 quotient = + ( + amount <= type(uint160).max + ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity) + : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity) + ); + + require(sqrtPX96 > quotient); + // always fits 160 bits + return uint160(sqrtPX96 - quotient); + } + } + + /// @notice Gets the next sqrt price given an input amount of token0 or token1 + /// @dev Throws if price or liquidity are 0, or if the next price is out of bounds + /// @param sqrtPX96 The starting price, i.e., before accounting for the input amount + /// @param liquidity The amount of usable liquidity + /// @param amountIn How much of token0, or token1, is being swapped in + /// @param zeroForOne Whether the amount in is token0 or token1 + /// @return sqrtQX96 The price after adding the input amount to token0 or token1 + function getNextSqrtPriceFromInput( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amountIn, + bool zeroForOne + ) internal pure returns (uint160 sqrtQX96) { + require(sqrtPX96 > 0); + require(liquidity > 0); + + // round to make sure that we don't pass the target price + return + zeroForOne + ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true) + : getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true); + } + + /// @notice Gets the next sqrt price given an output amount of token0 or token1 + /// @dev Throws if price or liquidity are 0 or the next price is out of bounds + /// @param sqrtPX96 The starting price before accounting for the output amount + /// @param liquidity The amount of usable liquidity + /// @param amountOut How much of token0, or token1, is being swapped out + /// @param zeroForOne Whether the amount out is token0 or token1 + /// @return sqrtQX96 The price after removing the output amount of token0 or token1 + function getNextSqrtPriceFromOutput( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amountOut, + bool zeroForOne + ) internal pure returns (uint160 sqrtQX96) { + require(sqrtPX96 > 0); + require(liquidity > 0); + + // round to make sure that we pass the target price + return + zeroForOne + ? getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false) + : getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false); + } + + /// @notice Gets the amount0 delta between two prices + /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper), + /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower)) + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The amount of usable liquidity + /// @param roundUp Whether to round the amount up or down + /// @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices + function getAmount0Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + uint128 liquidity, + bool roundUp + ) internal pure returns (uint256 amount0) { + if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); + + uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; + uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96; + + require(sqrtRatioAX96 > 0); + + return + roundUp + ? UnsafeMath.divRoundingUp( + FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), + sqrtRatioAX96 + ) + : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96; + } + + /// @notice Gets the amount1 delta between two prices + /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower)) + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The amount of usable liquidity + /// @param roundUp Whether to round the amount up, or down + /// @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices + function getAmount1Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + uint128 liquidity, + bool roundUp + ) internal pure returns (uint256 amount1) { + if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); + + return + roundUp + ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96) + : FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96); + } + + /// @notice Helper that gets signed token0 delta + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The change in liquidity for which to compute the amount0 delta + /// @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices + function getAmount0Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + int128 liquidity + ) internal pure returns (int256 amount0) { + return + liquidity < 0 + ? -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() + : getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); + } + + /// @notice Helper that gets signed token1 delta + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The change in liquidity for which to compute the amount1 delta + /// @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices + function getAmount1Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + int128 liquidity + ) internal pure returns (int256 amount1) { + return + liquidity < 0 + ? -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() + : getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol new file mode 100644 index 000000000..ee176fbee --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './FullMath.sol'; +import './SqrtPriceMath.sol'; + +/// @title Computes the result of a swap within ticks +/// @notice Contains methods for computing the result of a swap within a single tick price range, i.e., a single tick. +library SwapMath { + /// @notice Computes the result of swapping some amount in, or amount out, given the parameters of the swap + /// @dev The fee, plus the amount in, will never exceed the amount remaining if the swap's `amountSpecified` is positive + /// @param sqrtRatioCurrentX96 The current sqrt price of the pool + /// @param sqrtRatioTargetX96 The price that cannot be exceeded, from which the direction of the swap is inferred + /// @param liquidity The usable liquidity + /// @param amountRemaining How much input or output amount is remaining to be swapped in/out + /// @param feePips The fee taken from the input amount, expressed in hundredths of a bip + /// @return sqrtRatioNextX96 The price after swapping the amount in/out, not to exceed the price target + /// @return amountIn The amount to be swapped in, of either token0 or token1, based on the direction of the swap + /// @return amountOut The amount to be received, of either token0 or token1, based on the direction of the swap + /// @return feeAmount The amount of input that will be taken as a fee + function computeSwapStep( + uint160 sqrtRatioCurrentX96, + uint160 sqrtRatioTargetX96, + uint128 liquidity, + int256 amountRemaining, + uint24 feePips + ) + internal + pure + returns ( + uint160 sqrtRatioNextX96, + uint256 amountIn, + uint256 amountOut, + uint256 feeAmount + ) + { + bool zeroForOne = sqrtRatioCurrentX96 >= sqrtRatioTargetX96; + bool exactIn = amountRemaining >= 0; + + if (exactIn) { + uint256 amountRemainingLessFee = FullMath.mulDiv(uint256(amountRemaining), 1e6 - feePips, 1e6); + amountIn = zeroForOne + ? SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, true) + : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, true); + if (amountRemainingLessFee >= amountIn) sqrtRatioNextX96 = sqrtRatioTargetX96; + else + sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromInput( + sqrtRatioCurrentX96, + liquidity, + amountRemainingLessFee, + zeroForOne + ); + } else { + amountOut = zeroForOne + ? SqrtPriceMath.getAmount1Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, false) + : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, false); + if (uint256(-amountRemaining) >= amountOut) sqrtRatioNextX96 = sqrtRatioTargetX96; + else + sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromOutput( + sqrtRatioCurrentX96, + liquidity, + uint256(-amountRemaining), + zeroForOne + ); + } + + bool max = sqrtRatioTargetX96 == sqrtRatioNextX96; + + // get the input/output amounts + if (zeroForOne) { + amountIn = max && exactIn + ? amountIn + : SqrtPriceMath.getAmount0Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true); + amountOut = max && !exactIn + ? amountOut + : SqrtPriceMath.getAmount1Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, false); + } else { + amountIn = max && exactIn + ? amountIn + : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, true); + amountOut = max && !exactIn + ? amountOut + : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, false); + } + + // cap the output amount to not exceed the remaining output amount + if (!exactIn && amountOut > uint256(-amountRemaining)) { + amountOut = uint256(-amountRemaining); + } + + if (exactIn && sqrtRatioNextX96 != sqrtRatioTargetX96) { + // we didn't reach the target, so take the remainder of the maximum input as fee + feeAmount = uint256(amountRemaining) - amountIn; + } else { + feeAmount = FullMath.mulDivRoundingUp(amountIn, feePips, 1e6 - feePips); + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol new file mode 100644 index 000000000..13d342849 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol @@ -0,0 +1,183 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './LowGasSafeMath.sol'; +import './SafeCast.sol'; + +import './TickMath.sol'; +import './LiquidityMath.sol'; + +/// @title Tick +/// @notice Contains functions for managing tick processes and relevant calculations +library Tick { + using LowGasSafeMath for int256; + using SafeCast for int256; + + // info stored for each initialized individual tick + struct Info { + // the total position liquidity that references this tick + uint128 liquidityGross; + // amount of net liquidity added (subtracted) when tick is crossed from left to right (right to left), + int128 liquidityNet; + // fee growth per unit of liquidity on the _other_ side of this tick (relative to the current tick) + // only has relative meaning, not absolute — the value depends on when the tick is initialized + uint256 feeGrowthOutside0X128; + uint256 feeGrowthOutside1X128; + // the cumulative tick value on the other side of the tick + int56 tickCumulativeOutside; + // the seconds per unit of liquidity on the _other_ side of this tick (relative to the current tick) + // only has relative meaning, not absolute — the value depends on when the tick is initialized + uint160 secondsPerLiquidityOutsideX128; + // the seconds spent on the other side of the tick (relative to the current tick) + // only has relative meaning, not absolute — the value depends on when the tick is initialized + uint32 secondsOutside; + // true iff the tick is initialized, i.e. the value is exactly equivalent to the expression liquidityGross != 0 + // these 8 bits are set to prevent fresh sstores when crossing newly initialized ticks + bool initialized; + } + + /// @notice Derives max liquidity per tick from given tick spacing + /// @dev Executed within the pool constructor + /// @param tickSpacing The amount of required tick separation, realized in multiples of `tickSpacing` + /// e.g., a tickSpacing of 3 requires ticks to be initialized every 3rd tick i.e., ..., -6, -3, 0, 3, 6, ... + /// @return The max liquidity per tick + function tickSpacingToMaxLiquidityPerTick(int24 tickSpacing) internal pure returns (uint128) { + int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing; + int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing; + uint24 numTicks = uint24((maxTick - minTick) / tickSpacing) + 1; + return type(uint128).max / numTicks; + } + + /// @notice Retrieves fee growth data + /// @param self The mapping containing all tick information for initialized ticks + /// @param tickLower The lower tick boundary of the position + /// @param tickUpper The upper tick boundary of the position + /// @param tickCurrent The current tick + /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 + /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 + /// @return feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries + /// @return feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries + function getFeeGrowthInside( + mapping(int24 => Tick.Info) storage self, + int24 tickLower, + int24 tickUpper, + int24 tickCurrent, + uint256 feeGrowthGlobal0X128, + uint256 feeGrowthGlobal1X128 + ) internal view returns (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) { + Info storage lower = self[tickLower]; + Info storage upper = self[tickUpper]; + + // calculate fee growth below + uint256 feeGrowthBelow0X128; + uint256 feeGrowthBelow1X128; + if (tickCurrent >= tickLower) { + feeGrowthBelow0X128 = lower.feeGrowthOutside0X128; + feeGrowthBelow1X128 = lower.feeGrowthOutside1X128; + } else { + feeGrowthBelow0X128 = feeGrowthGlobal0X128 - lower.feeGrowthOutside0X128; + feeGrowthBelow1X128 = feeGrowthGlobal1X128 - lower.feeGrowthOutside1X128; + } + + // calculate fee growth above + uint256 feeGrowthAbove0X128; + uint256 feeGrowthAbove1X128; + if (tickCurrent < tickUpper) { + feeGrowthAbove0X128 = upper.feeGrowthOutside0X128; + feeGrowthAbove1X128 = upper.feeGrowthOutside1X128; + } else { + feeGrowthAbove0X128 = feeGrowthGlobal0X128 - upper.feeGrowthOutside0X128; + feeGrowthAbove1X128 = feeGrowthGlobal1X128 - upper.feeGrowthOutside1X128; + } + + feeGrowthInside0X128 = feeGrowthGlobal0X128 - feeGrowthBelow0X128 - feeGrowthAbove0X128; + feeGrowthInside1X128 = feeGrowthGlobal1X128 - feeGrowthBelow1X128 - feeGrowthAbove1X128; + } + + /// @notice Updates a tick and returns true if the tick was flipped from initialized to uninitialized, or vice versa + /// @param self The mapping containing all tick information for initialized ticks + /// @param tick The tick that will be updated + /// @param tickCurrent The current tick + /// @param liquidityDelta A new amount of liquidity to be added (subtracted) when tick is crossed from left to right (right to left) + /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 + /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 + /// @param secondsPerLiquidityCumulativeX128 The all-time seconds per max(1, liquidity) of the pool + /// @param time The current block timestamp cast to a uint32 + /// @param upper true for updating a position's upper tick, or false for updating a position's lower tick + /// @param maxLiquidity The maximum liquidity allocation for a single tick + /// @return flipped Whether the tick was flipped from initialized to uninitialized, or vice versa + function update( + mapping(int24 => Tick.Info) storage self, + int24 tick, + int24 tickCurrent, + int128 liquidityDelta, + uint256 feeGrowthGlobal0X128, + uint256 feeGrowthGlobal1X128, + uint160 secondsPerLiquidityCumulativeX128, + int56 tickCumulative, + uint32 time, + bool upper, + uint128 maxLiquidity + ) internal returns (bool flipped) { + Tick.Info storage info = self[tick]; + + uint128 liquidityGrossBefore = info.liquidityGross; + uint128 liquidityGrossAfter = LiquidityMath.addDelta(liquidityGrossBefore, liquidityDelta); + + require(liquidityGrossAfter <= maxLiquidity, 'LO'); + + flipped = (liquidityGrossAfter == 0) != (liquidityGrossBefore == 0); + + if (liquidityGrossBefore == 0) { + // by convention, we assume that all growth before a tick was initialized happened _below_ the tick + if (tick <= tickCurrent) { + info.feeGrowthOutside0X128 = feeGrowthGlobal0X128; + info.feeGrowthOutside1X128 = feeGrowthGlobal1X128; + info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128; + info.tickCumulativeOutside = tickCumulative; + info.secondsOutside = time; + } + info.initialized = true; + } + + info.liquidityGross = liquidityGrossAfter; + + // when the lower (upper) tick is crossed left to right (right to left), liquidity must be added (removed) + info.liquidityNet = upper + ? int256(info.liquidityNet).sub(liquidityDelta).toInt128() + : int256(info.liquidityNet).add(liquidityDelta).toInt128(); + } + + /// @notice Clears tick data + /// @param self The mapping containing all initialized tick information for initialized ticks + /// @param tick The tick that will be cleared + function clear(mapping(int24 => Tick.Info) storage self, int24 tick) internal { + delete self[tick]; + } + + /// @notice Transitions to next tick as needed by price movement + /// @param self The mapping containing all tick information for initialized ticks + /// @param tick The destination tick of the transition + /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 + /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 + /// @param secondsPerLiquidityCumulativeX128 The current seconds per liquidity + /// @param time The current block.timestamp + /// @return liquidityNet The amount of liquidity added (subtracted) when tick is crossed from left to right (right to left) + function cross( + mapping(int24 => Tick.Info) storage self, + int24 tick, + uint256 feeGrowthGlobal0X128, + uint256 feeGrowthGlobal1X128, + uint160 secondsPerLiquidityCumulativeX128, + int56 tickCumulative, + uint32 time + ) internal returns (int128 liquidityNet) { + Tick.Info storage info = self[tick]; + info.feeGrowthOutside0X128 = feeGrowthGlobal0X128 - info.feeGrowthOutside0X128; + info.feeGrowthOutside1X128 = feeGrowthGlobal1X128 - info.feeGrowthOutside1X128; + info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128 - info.secondsPerLiquidityOutsideX128; + info.tickCumulativeOutside = tickCumulative - info.tickCumulativeOutside; + info.secondsOutside = time - info.secondsOutside; + liquidityNet = info.liquidityNet; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol new file mode 100644 index 000000000..3c4358577 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './BitMath.sol'; + +/// @title Packed tick initialized state library +/// @notice Stores a packed mapping of tick index to its initialized state +/// @dev The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word. +library TickBitmap { + /// @notice Computes the position in the mapping where the initialized bit for a tick lives + /// @param tick The tick for which to compute the position + /// @return wordPos The key in the mapping containing the word in which the bit is stored + /// @return bitPos The bit position in the word where the flag is stored + function position(int24 tick) private pure returns (int16 wordPos, uint8 bitPos) { + wordPos = int16(tick >> 8); + bitPos = uint8(tick % 256); + } + + /// @notice Flips the initialized state for a given tick from false to true, or vice versa + /// @param self The mapping in which to flip the tick + /// @param tick The tick to flip + /// @param tickSpacing The spacing between usable ticks + function flipTick( + mapping(int16 => uint256) storage self, + int24 tick, + int24 tickSpacing + ) internal { + require(tick % tickSpacing == 0); // ensure that the tick is spaced + (int16 wordPos, uint8 bitPos) = position(tick / tickSpacing); + uint256 mask = 1 << bitPos; + self[wordPos] ^= mask; + } + + /// @notice Returns the next initialized tick contained in the same word (or adjacent word) as the tick that is either + /// to the left (less than or equal to) or right (greater than) of the given tick + /// @param self The mapping in which to compute the next initialized tick + /// @param tick The starting tick + /// @param tickSpacing The spacing between usable ticks + /// @param lte Whether to search for the next initialized tick to the left (less than or equal to the starting tick) + /// @return next The next initialized or uninitialized tick up to 256 ticks away from the current tick + /// @return initialized Whether the next tick is initialized, as the function only searches within up to 256 ticks + function nextInitializedTickWithinOneWord( + mapping(int16 => uint256) storage self, + int24 tick, + int24 tickSpacing, + bool lte + ) internal view returns (int24 next, bool initialized) { + int24 compressed = tick / tickSpacing; + if (tick < 0 && tick % tickSpacing != 0) compressed--; // round towards negative infinity + + if (lte) { + (int16 wordPos, uint8 bitPos) = position(compressed); + // all the 1s at or to the right of the current bitPos + uint256 mask = (1 << bitPos) - 1 + (1 << bitPos); + uint256 masked = self[wordPos] & mask; + + // if there are no initialized ticks to the right of or at the current tick, return rightmost in the word + initialized = masked != 0; + // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick + next = initialized + ? (compressed - int24(bitPos - BitMath.mostSignificantBit(masked))) * tickSpacing + : (compressed - int24(bitPos)) * tickSpacing; + } else { + // start from the word of the next tick, since the current tick state doesn't matter + (int16 wordPos, uint8 bitPos) = position(compressed + 1); + // all the 1s at or to the left of the bitPos + uint256 mask = ~((1 << bitPos) - 1); + uint256 masked = self[wordPos] & mask; + + // if there are no initialized ticks to the left of the current tick, return leftmost in the word + initialized = masked != 0; + // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick + next = initialized + ? (compressed + 1 + int24(BitMath.leastSignificantBit(masked) - bitPos)) * tickSpacing + : (compressed + 1 + int24(type(uint8).max - bitPos)) * tickSpacing; + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol new file mode 100644 index 000000000..378e44528 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol @@ -0,0 +1,205 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Math library for computing sqrt prices from ticks and vice versa +/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports +/// prices between 2**-128 and 2**128 +library TickMath { + /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 + int24 internal constant MIN_TICK = -887272; + /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 + int24 internal constant MAX_TICK = -MIN_TICK; + + /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) + uint160 internal constant MIN_SQRT_RATIO = 4295128739; + /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) + uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + + /// @notice Calculates sqrt(1.0001^tick) * 2^96 + /// @dev Throws if |tick| > max tick + /// @param tick The input tick for the above formula + /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) + /// at the given tick + function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { + uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); + require(absTick <= uint256(MAX_TICK), 'T'); + + uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000; + if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; + if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; + if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; + if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; + if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; + if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; + if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; + if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; + if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; + if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; + if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; + if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; + if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; + if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; + if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; + if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; + if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; + if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; + if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; + + if (tick > 0) ratio = type(uint256).max / ratio; + + // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. + // we then downcast because we know the result always fits within 160 bits due to our tick input constraint + // we round up in the division so getTickAtSqrtRatio of the output price is always consistent + sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); + } + + /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio + /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may + /// ever return. + /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96 + /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio + function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { + // second inequality must be < because the price can never reach the price at the max tick + require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R'); + uint256 ratio = uint256(sqrtPriceX96) << 32; + + uint256 r = ratio; + uint256 msb = 0; + + assembly { + let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(5, gt(r, 0xFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(4, gt(r, 0xFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(3, gt(r, 0xFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(2, gt(r, 0xF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(1, gt(r, 0x3)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := gt(r, 0x1) + msb := or(msb, f) + } + + if (msb >= 128) r = ratio >> (msb - 127); + else r = ratio << (127 - msb); + + int256 log_2 = (int256(msb) - 128) << 64; + + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(63, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(62, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(61, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(60, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(59, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(58, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(57, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(56, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(55, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(54, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(53, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(52, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(51, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(50, f)) + } + + int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number + + int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); + int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); + + tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol new file mode 100644 index 000000000..25d630902 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.6.0; + +import '../interfaces/IERC20Minimal.sol'; + +/// @title TransferHelper +/// @notice Contains helper methods for interacting with ERC20 tokens that do not consistently return true/false +library TransferHelper { + /// @notice Transfers tokens from msg.sender to a recipient + /// @dev Calls transfer on token contract, errors with TF if transfer fails + /// @param token The contract address of the token which will be transferred + /// @param to The recipient of the transfer + /// @param value The value of the transfer + function safeTransfer( + address token, + address to, + uint256 value + ) internal { + (bool success, bytes memory data) = + token.call(abi.encodeWithSelector(IERC20Minimal.transfer.selector, to, value)); + require(success && (data.length == 0 || abi.decode(data, (bool))), 'TF'); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol new file mode 100644 index 000000000..f62f84676 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Math functions that do not check inputs or outputs +/// @notice Contains methods that perform common math functions but do not do any overflow or underflow checks +library UnsafeMath { + /// @notice Returns ceil(x / y) + /// @dev division by 0 has unspecified behavior, and must be checked externally + /// @param x The dividend + /// @param y The divisor + /// @return z The quotient, ceil(x / y) + function divRoundingUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + z := add(div(x, y), gt(mod(x, y), 0)) + } + } +} diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index 6bf5788db..3ec47d176 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -3,6 +3,7 @@ Tool to read on-chain storage from EVM """ import json import argparse +from os import environ from crytic_compile import cryticparser @@ -84,6 +85,24 @@ def parse_args() -> argparse.Namespace: help="Toggle used to include values in output.", ) + parser.add_argument( + "--table-storage-layout", + action="store_true", + help="Print table view of storage layout", + ) + + parser.add_argument( + "--table-storage-value", + action="store_true", + help="Print table view of storage layout & values", + ) + + parser.add_argument( + "--silent", + action="store_true", + help="Silence log outputs", + ) + parser.add_argument("--max-depth", help="Max depth to search in data structure.", default=20) cryticparser.init(parser) @@ -120,6 +139,25 @@ def main() -> None: srs.rpc = args.rpc_url + if args.silent: + environ["SILENT"] = "1" + + if args.table_storage_layout: + environ["TABLE"] = "1" + srs.get_all_storage_variables() + srs.get_storage_layout() + srs.print_table() + return + + if args.table_storage_value: + assert args.rpc_url + environ["TABLE"] = "1" + environ["TABLE_VALUE"] = "1" + srs.get_all_storage_variables() + srs.get_storage_layout() + srs.print_table() + return + if args.layout: srs.get_all_storage_variables() srs.get_storage_layout() diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index dbdda7183..9b0fe5a74 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -1,6 +1,7 @@ import sys import logging from math import floor +from os import environ from typing import Callable, Optional, Tuple, Union, List, Dict @@ -31,6 +32,13 @@ except ImportError: print("$ pip3 install web3 --user\n") sys.exit(-1) +try: + from tabulate import tabulate +except ImportError: + print("ERROR: in order to use slither-read-storage --table, you need to install tabulate") + print("$ pip3 install tabulate --user\n") + sys.exit(-1) + from slither.core.solidity_types.type import Type from slither.core.solidity_types import ArrayType from slither.core.declarations import Contract, StructureContract @@ -182,14 +190,24 @@ class SlitherReadStorage: int_slot = int.from_bytes(slot, byteorder="big") self.log += f"\nName: {var_log_name}\nType: {type_to}\nSlot: {int_slot}\n" - logger.info(self.log) + if environ.get("SILENT") is None: + logger.info(self.log) self.log = "" - return { - "type_string": type_to, - "slot": int_slot, - "size": size, - "offset": offset, - } + if environ.get("TABLE") is None: + return { + "type_string": type_to, + "slot": int_slot, + "size": size, + "offset": offset, + } + else: + return { + "type_string": type_to, + "slot": int_slot, + "size": size, + "offset": offset, + "struct_var": struct_var, + } def get_target_variables(self, **kwargs) -> None: """ @@ -241,6 +259,86 @@ class SlitherReadStorage: ) ) + def print_table(self) -> None: + + if environ.get("TABLE_VALUE") is None: + tabulate_headers = ['slot', 'offset', 'size', 'type', 'name'] + else: + tabulate_headers = ['slot', 'offset', 'size', 'type', 'name', 'value'] + print("Processing, grabbing values from rpc endpoint...") + + tabulate_data = [] + + for contract, state_var in self.target_variables: + type_ = state_var.type + + var = state_var.name + info = self.slot_info[var] + + slot = info.get('slot') + offset = info.get('offset') + size = info.get('size') + type_string = info.get('type_string') + struct_var = info.get('struct_var') + + + if environ.get("TABLE_VALUE") is None: + tabulate_data.append([slot, offset, size, type_string, var]) + else: + hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) + value = self.convert_value_to_type( + hex_bytes, size, offset, type_string + ) + tabulate_data.append([slot, offset, size, type_string, var, value]) + + + if is_user_defined_type(type_) and is_struct(type_.type): + tabulate_data.pop() + for item in info["elems"]: + slot = info["elems"][item].get('slot') + offset = info["elems"][item].get('offset') + size = info["elems"][item].get('size') + type_string = info["elems"][item].get('type_string') + struct_var = info["elems"][item].get('struct_var') + + # doesn't handle deep keys currently + var_name_struct_or_array_var = "{} -> {}".format(var, struct_var) + + + if environ.get("TABLE_VALUE") is None: + tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var]) + else: + hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) + value = self.convert_value_to_type( + hex_bytes, size, offset, type_string + ) + tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var, value]) + + if is_array(type_): + tabulate_data.pop() + for item in info["elems"]: + for key in info["elems"][item]: + slot = info["elems"][item][key].get('slot') + offset = info["elems"][item][key].get('offset') + size = info["elems"][item][key].get('size') + type_string = info["elems"][item][key].get('type_string') + struct_var = info["elems"][item][key].get('struct_var') + + # doesn't handle deep keys currently + var_name_struct_or_array_var = "{} -> {}".format(var, struct_var) + + if environ.get("TABLE_VALUE") is None: + tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var]) + else: + hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) + value = self.convert_value_to_type( + hex_bytes, size, offset, type_string + ) + tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var, value]) + + + print(tabulate(tabulate_data, headers=tabulate_headers, tablefmt='grid')) + @staticmethod def _find_struct_var_slot( elems: List[StructureVariable], slot: bytes, struct_var: str @@ -456,9 +554,10 @@ class SlitherReadStorage: size = byte_size * 8 # bits (int_slot, offset) = contract.compilation_unit.storage_layout_of(contract, target_variable) offset *= 8 # bits - logger.info( - f"\nContract '{contract.name}'\n{target_variable.canonical_name} with type {target_variable.type} is located at slot: {int_slot}\n" - ) + if environ.get("SILENT") is None: + logger.info( + f"\nContract '{contract.name}'\n{target_variable.canonical_name} with type {target_variable.type} is located at slot: {int_slot}\n" + ) return int_slot, size, offset, type_to From 2fbc8d2a9a0159b057f2b588712f323c33baf2cf Mon Sep 17 00:00:00 2001 From: noxx Date: Thu, 14 Jul 2022 18:17:25 +0100 Subject: [PATCH 095/202] remove crytic-export --- .../contracts/NoDelegateCall.sol | 27 - .../contracts/UniswapV3Pool.sol | 869 ------------------ .../contracts/interfaces/IERC20Minimal.sol | 52 -- .../interfaces/IUniswapV3Factory.sol | 78 -- .../contracts/interfaces/IUniswapV3Pool.sol | 24 - .../interfaces/IUniswapV3PoolDeployer.sol | 26 - .../callback/IUniswapV3FlashCallback.sol | 18 - .../callback/IUniswapV3MintCallback.sol | 18 - .../callback/IUniswapV3SwapCallback.sol | 21 - .../interfaces/pool/IUniswapV3PoolActions.sol | 103 --- .../pool/IUniswapV3PoolDerivedState.sol | 40 - .../interfaces/pool/IUniswapV3PoolEvents.sol | 121 --- .../pool/IUniswapV3PoolImmutables.sol | 35 - .../pool/IUniswapV3PoolOwnerActions.sol | 23 - .../interfaces/pool/IUniswapV3PoolState.sol | 116 --- .../contracts/libraries/BitMath.sol | 94 -- .../contracts/libraries/FixedPoint128.sol | 8 - .../contracts/libraries/FixedPoint96.sol | 10 - .../contracts/libraries/FullMath.sol | 124 --- .../contracts/libraries/LiquidityMath.sol | 17 - .../contracts/libraries/LowGasSafeMath.sol | 46 - .../contracts/libraries/Oracle.sol | 325 ------- .../contracts/libraries/Position.sol | 88 -- .../contracts/libraries/SafeCast.sol | 28 - .../contracts/libraries/SqrtPriceMath.sol | 227 ----- .../contracts/libraries/SwapMath.sol | 98 -- .../contracts/libraries/Tick.sol | 183 ---- .../contracts/libraries/TickBitmap.sol | 78 -- .../contracts/libraries/TickMath.sol | 205 ----- .../contracts/libraries/TransferHelper.sol | 23 - .../contracts/libraries/UnsafeMath.sol | 17 - 31 files changed, 3142 deletions(-) delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol deleted file mode 100644 index 5411979dc..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.7.6; - -/// @title Prevents delegatecall to a contract -/// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract -abstract contract NoDelegateCall { - /// @dev The original address of this contract - address private immutable original; - - constructor() { - // Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode. - // In other words, this variable won't change when it's checked at runtime. - original = address(this); - } - - /// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method, - /// and the use of immutable means the address bytes are copied in every place the modifier is used. - function checkNotDelegateCall() private view { - require(address(this) == original); - } - - /// @notice Prevents delegatecall into the modified method - modifier noDelegateCall() { - checkNotDelegateCall(); - _; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol deleted file mode 100644 index 9e0982127..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol +++ /dev/null @@ -1,869 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.7.6; - -import './interfaces/IUniswapV3Pool.sol'; - -import './NoDelegateCall.sol'; - -import './libraries/LowGasSafeMath.sol'; -import './libraries/SafeCast.sol'; -import './libraries/Tick.sol'; -import './libraries/TickBitmap.sol'; -import './libraries/Position.sol'; -import './libraries/Oracle.sol'; - -import './libraries/FullMath.sol'; -import './libraries/FixedPoint128.sol'; -import './libraries/TransferHelper.sol'; -import './libraries/TickMath.sol'; -import './libraries/LiquidityMath.sol'; -import './libraries/SqrtPriceMath.sol'; -import './libraries/SwapMath.sol'; - -import './interfaces/IUniswapV3PoolDeployer.sol'; -import './interfaces/IUniswapV3Factory.sol'; -import './interfaces/IERC20Minimal.sol'; -import './interfaces/callback/IUniswapV3MintCallback.sol'; -import './interfaces/callback/IUniswapV3SwapCallback.sol'; -import './interfaces/callback/IUniswapV3FlashCallback.sol'; - -contract UniswapV3Pool is IUniswapV3Pool, NoDelegateCall { - using LowGasSafeMath for uint256; - using LowGasSafeMath for int256; - using SafeCast for uint256; - using SafeCast for int256; - using Tick for mapping(int24 => Tick.Info); - using TickBitmap for mapping(int16 => uint256); - using Position for mapping(bytes32 => Position.Info); - using Position for Position.Info; - using Oracle for Oracle.Observation[65535]; - - /// @inheritdoc IUniswapV3PoolImmutables - address public immutable override factory; - /// @inheritdoc IUniswapV3PoolImmutables - address public immutable override token0; - /// @inheritdoc IUniswapV3PoolImmutables - address public immutable override token1; - /// @inheritdoc IUniswapV3PoolImmutables - uint24 public immutable override fee; - - /// @inheritdoc IUniswapV3PoolImmutables - int24 public immutable override tickSpacing; - - /// @inheritdoc IUniswapV3PoolImmutables - uint128 public immutable override maxLiquidityPerTick; - - struct Slot0 { - // the current price - uint160 sqrtPriceX96; - // the current tick - int24 tick; - // the most-recently updated index of the observations array - uint16 observationIndex; - // the current maximum number of observations that are being stored - uint16 observationCardinality; - // the next maximum number of observations to store, triggered in observations.write - uint16 observationCardinalityNext; - // the current protocol fee as a percentage of the swap fee taken on withdrawal - // represented as an integer denominator (1/x)% - uint8 feeProtocol; - // whether the pool is locked - bool unlocked; - } - /// @inheritdoc IUniswapV3PoolState - Slot0 public override slot0; - - /// @inheritdoc IUniswapV3PoolState - uint256 public override feeGrowthGlobal0X128; - /// @inheritdoc IUniswapV3PoolState - uint256 public override feeGrowthGlobal1X128; - - // accumulated protocol fees in token0/token1 units - struct ProtocolFees { - uint128 token0; - uint128 token1; - } - /// @inheritdoc IUniswapV3PoolState - ProtocolFees public override protocolFees; - - /// @inheritdoc IUniswapV3PoolState - uint128 public override liquidity; - - /// @inheritdoc IUniswapV3PoolState - mapping(int24 => Tick.Info) public override ticks; - /// @inheritdoc IUniswapV3PoolState - mapping(int16 => uint256) public override tickBitmap; - /// @inheritdoc IUniswapV3PoolState - mapping(bytes32 => Position.Info) public override positions; - /// @inheritdoc IUniswapV3PoolState - Oracle.Observation[65535] public override observations; - - /// @dev Mutually exclusive reentrancy protection into the pool to/from a method. This method also prevents entrance - /// to a function before the pool is initialized. The reentrancy guard is required throughout the contract because - /// we use balance checks to determine the payment status of interactions such as mint, swap and flash. - modifier lock() { - require(slot0.unlocked, 'LOK'); - slot0.unlocked = false; - _; - slot0.unlocked = true; - } - - /// @dev Prevents calling a function from anyone except the address returned by IUniswapV3Factory#owner() - modifier onlyFactoryOwner() { - require(msg.sender == IUniswapV3Factory(factory).owner()); - _; - } - - constructor() { - int24 _tickSpacing; - (factory, token0, token1, fee, _tickSpacing) = IUniswapV3PoolDeployer(msg.sender).parameters(); - tickSpacing = _tickSpacing; - - maxLiquidityPerTick = Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing); - } - - /// @dev Common checks for valid tick inputs. - function checkTicks(int24 tickLower, int24 tickUpper) private pure { - require(tickLower < tickUpper, 'TLU'); - require(tickLower >= TickMath.MIN_TICK, 'TLM'); - require(tickUpper <= TickMath.MAX_TICK, 'TUM'); - } - - /// @dev Returns the block timestamp truncated to 32 bits, i.e. mod 2**32. This method is overridden in tests. - function _blockTimestamp() internal view virtual returns (uint32) { - return uint32(block.timestamp); // truncation is desired - } - - /// @dev Get the pool's balance of token0 - /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize - /// check - function balance0() private view returns (uint256) { - (bool success, bytes memory data) = - token0.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); - require(success && data.length >= 32); - return abi.decode(data, (uint256)); - } - - /// @dev Get the pool's balance of token1 - /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize - /// check - function balance1() private view returns (uint256) { - (bool success, bytes memory data) = - token1.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); - require(success && data.length >= 32); - return abi.decode(data, (uint256)); - } - - /// @inheritdoc IUniswapV3PoolDerivedState - function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) - external - view - override - noDelegateCall - returns ( - int56 tickCumulativeInside, - uint160 secondsPerLiquidityInsideX128, - uint32 secondsInside - ) - { - checkTicks(tickLower, tickUpper); - - int56 tickCumulativeLower; - int56 tickCumulativeUpper; - uint160 secondsPerLiquidityOutsideLowerX128; - uint160 secondsPerLiquidityOutsideUpperX128; - uint32 secondsOutsideLower; - uint32 secondsOutsideUpper; - - { - Tick.Info storage lower = ticks[tickLower]; - Tick.Info storage upper = ticks[tickUpper]; - bool initializedLower; - (tickCumulativeLower, secondsPerLiquidityOutsideLowerX128, secondsOutsideLower, initializedLower) = ( - lower.tickCumulativeOutside, - lower.secondsPerLiquidityOutsideX128, - lower.secondsOutside, - lower.initialized - ); - require(initializedLower); - - bool initializedUpper; - (tickCumulativeUpper, secondsPerLiquidityOutsideUpperX128, secondsOutsideUpper, initializedUpper) = ( - upper.tickCumulativeOutside, - upper.secondsPerLiquidityOutsideX128, - upper.secondsOutside, - upper.initialized - ); - require(initializedUpper); - } - - Slot0 memory _slot0 = slot0; - - if (_slot0.tick < tickLower) { - return ( - tickCumulativeLower - tickCumulativeUpper, - secondsPerLiquidityOutsideLowerX128 - secondsPerLiquidityOutsideUpperX128, - secondsOutsideLower - secondsOutsideUpper - ); - } else if (_slot0.tick < tickUpper) { - uint32 time = _blockTimestamp(); - (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = - observations.observeSingle( - time, - 0, - _slot0.tick, - _slot0.observationIndex, - liquidity, - _slot0.observationCardinality - ); - return ( - tickCumulative - tickCumulativeLower - tickCumulativeUpper, - secondsPerLiquidityCumulativeX128 - - secondsPerLiquidityOutsideLowerX128 - - secondsPerLiquidityOutsideUpperX128, - time - secondsOutsideLower - secondsOutsideUpper - ); - } else { - return ( - tickCumulativeUpper - tickCumulativeLower, - secondsPerLiquidityOutsideUpperX128 - secondsPerLiquidityOutsideLowerX128, - secondsOutsideUpper - secondsOutsideLower - ); - } - } - - /// @inheritdoc IUniswapV3PoolDerivedState - function observe(uint32[] calldata secondsAgos) - external - view - override - noDelegateCall - returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) - { - return - observations.observe( - _blockTimestamp(), - secondsAgos, - slot0.tick, - slot0.observationIndex, - liquidity, - slot0.observationCardinality - ); - } - - /// @inheritdoc IUniswapV3PoolActions - function increaseObservationCardinalityNext(uint16 observationCardinalityNext) - external - override - lock - noDelegateCall - { - uint16 observationCardinalityNextOld = slot0.observationCardinalityNext; // for the event - uint16 observationCardinalityNextNew = - observations.grow(observationCardinalityNextOld, observationCardinalityNext); - slot0.observationCardinalityNext = observationCardinalityNextNew; - if (observationCardinalityNextOld != observationCardinalityNextNew) - emit IncreaseObservationCardinalityNext(observationCardinalityNextOld, observationCardinalityNextNew); - } - - /// @inheritdoc IUniswapV3PoolActions - /// @dev not locked because it initializes unlocked - function initialize(uint160 sqrtPriceX96) external override { - require(slot0.sqrtPriceX96 == 0, 'AI'); - - int24 tick = TickMath.getTickAtSqrtRatio(sqrtPriceX96); - - (uint16 cardinality, uint16 cardinalityNext) = observations.initialize(_blockTimestamp()); - - slot0 = Slot0({ - sqrtPriceX96: sqrtPriceX96, - tick: tick, - observationIndex: 0, - observationCardinality: cardinality, - observationCardinalityNext: cardinalityNext, - feeProtocol: 0, - unlocked: true - }); - - emit Initialize(sqrtPriceX96, tick); - } - - struct ModifyPositionParams { - // the address that owns the position - address owner; - // the lower and upper tick of the position - int24 tickLower; - int24 tickUpper; - // any change in liquidity - int128 liquidityDelta; - } - - /// @dev Effect some changes to a position - /// @param params the position details and the change to the position's liquidity to effect - /// @return position a storage pointer referencing the position with the given owner and tick range - /// @return amount0 the amount of token0 owed to the pool, negative if the pool should pay the recipient - /// @return amount1 the amount of token1 owed to the pool, negative if the pool should pay the recipient - function _modifyPosition(ModifyPositionParams memory params) - private - noDelegateCall - returns ( - Position.Info storage position, - int256 amount0, - int256 amount1 - ) - { - checkTicks(params.tickLower, params.tickUpper); - - Slot0 memory _slot0 = slot0; // SLOAD for gas optimization - - position = _updatePosition( - params.owner, - params.tickLower, - params.tickUpper, - params.liquidityDelta, - _slot0.tick - ); - - if (params.liquidityDelta != 0) { - if (_slot0.tick < params.tickLower) { - // current tick is below the passed range; liquidity can only become in range by crossing from left to - // right, when we'll need _more_ token0 (it's becoming more valuable) so user must provide it - amount0 = SqrtPriceMath.getAmount0Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - } else if (_slot0.tick < params.tickUpper) { - // current tick is inside the passed range - uint128 liquidityBefore = liquidity; // SLOAD for gas optimization - - // write an oracle entry - (slot0.observationIndex, slot0.observationCardinality) = observations.write( - _slot0.observationIndex, - _blockTimestamp(), - _slot0.tick, - liquidityBefore, - _slot0.observationCardinality, - _slot0.observationCardinalityNext - ); - - amount0 = SqrtPriceMath.getAmount0Delta( - _slot0.sqrtPriceX96, - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - amount1 = SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - _slot0.sqrtPriceX96, - params.liquidityDelta - ); - - liquidity = LiquidityMath.addDelta(liquidityBefore, params.liquidityDelta); - } else { - // current tick is above the passed range; liquidity can only become in range by crossing from right to - // left, when we'll need _more_ token1 (it's becoming more valuable) so user must provide it - amount1 = SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - } - } - } - - /// @dev Gets and updates a position with the given liquidity delta - /// @param owner the owner of the position - /// @param tickLower the lower tick of the position's tick range - /// @param tickUpper the upper tick of the position's tick range - /// @param tick the current tick, passed to avoid sloads - function _updatePosition( - address owner, - int24 tickLower, - int24 tickUpper, - int128 liquidityDelta, - int24 tick - ) private returns (Position.Info storage position) { - position = positions.get(owner, tickLower, tickUpper); - - uint256 _feeGrowthGlobal0X128 = feeGrowthGlobal0X128; // SLOAD for gas optimization - uint256 _feeGrowthGlobal1X128 = feeGrowthGlobal1X128; // SLOAD for gas optimization - - // if we need to update the ticks, do it - bool flippedLower; - bool flippedUpper; - if (liquidityDelta != 0) { - uint32 time = _blockTimestamp(); - (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = - observations.observeSingle( - time, - 0, - slot0.tick, - slot0.observationIndex, - liquidity, - slot0.observationCardinality - ); - - flippedLower = ticks.update( - tickLower, - tick, - liquidityDelta, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128, - secondsPerLiquidityCumulativeX128, - tickCumulative, - time, - false, - maxLiquidityPerTick - ); - flippedUpper = ticks.update( - tickUpper, - tick, - liquidityDelta, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128, - secondsPerLiquidityCumulativeX128, - tickCumulative, - time, - true, - maxLiquidityPerTick - ); - - if (flippedLower) { - tickBitmap.flipTick(tickLower, tickSpacing); - } - if (flippedUpper) { - tickBitmap.flipTick(tickUpper, tickSpacing); - } - } - - (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = - ticks.getFeeGrowthInside(tickLower, tickUpper, tick, _feeGrowthGlobal0X128, _feeGrowthGlobal1X128); - - position.update(liquidityDelta, feeGrowthInside0X128, feeGrowthInside1X128); - - // clear any tick data that is no longer needed - if (liquidityDelta < 0) { - if (flippedLower) { - ticks.clear(tickLower); - } - if (flippedUpper) { - ticks.clear(tickUpper); - } - } - } - - /// @inheritdoc IUniswapV3PoolActions - /// @dev noDelegateCall is applied indirectly via _modifyPosition - function mint( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount, - bytes calldata data - ) external override lock returns (uint256 amount0, uint256 amount1) { - require(amount > 0); - (, int256 amount0Int, int256 amount1Int) = - _modifyPosition( - ModifyPositionParams({ - owner: recipient, - tickLower: tickLower, - tickUpper: tickUpper, - liquidityDelta: int256(amount).toInt128() - }) - ); - - amount0 = uint256(amount0Int); - amount1 = uint256(amount1Int); - - uint256 balance0Before; - uint256 balance1Before; - if (amount0 > 0) balance0Before = balance0(); - if (amount1 > 0) balance1Before = balance1(); - IUniswapV3MintCallback(msg.sender).uniswapV3MintCallback(amount0, amount1, data); - if (amount0 > 0) require(balance0Before.add(amount0) <= balance0(), 'M0'); - if (amount1 > 0) require(balance1Before.add(amount1) <= balance1(), 'M1'); - - emit Mint(msg.sender, recipient, tickLower, tickUpper, amount, amount0, amount1); - } - - /// @inheritdoc IUniswapV3PoolActions - function collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested - ) external override lock returns (uint128 amount0, uint128 amount1) { - // we don't need to checkTicks here, because invalid positions will never have non-zero tokensOwed{0,1} - Position.Info storage position = positions.get(msg.sender, tickLower, tickUpper); - - amount0 = amount0Requested > position.tokensOwed0 ? position.tokensOwed0 : amount0Requested; - amount1 = amount1Requested > position.tokensOwed1 ? position.tokensOwed1 : amount1Requested; - - if (amount0 > 0) { - position.tokensOwed0 -= amount0; - TransferHelper.safeTransfer(token0, recipient, amount0); - } - if (amount1 > 0) { - position.tokensOwed1 -= amount1; - TransferHelper.safeTransfer(token1, recipient, amount1); - } - - emit Collect(msg.sender, recipient, tickLower, tickUpper, amount0, amount1); - } - - /// @inheritdoc IUniswapV3PoolActions - /// @dev noDelegateCall is applied indirectly via _modifyPosition - function burn( - int24 tickLower, - int24 tickUpper, - uint128 amount - ) external override lock returns (uint256 amount0, uint256 amount1) { - (Position.Info storage position, int256 amount0Int, int256 amount1Int) = - _modifyPosition( - ModifyPositionParams({ - owner: msg.sender, - tickLower: tickLower, - tickUpper: tickUpper, - liquidityDelta: -int256(amount).toInt128() - }) - ); - - amount0 = uint256(-amount0Int); - amount1 = uint256(-amount1Int); - - if (amount0 > 0 || amount1 > 0) { - (position.tokensOwed0, position.tokensOwed1) = ( - position.tokensOwed0 + uint128(amount0), - position.tokensOwed1 + uint128(amount1) - ); - } - - emit Burn(msg.sender, tickLower, tickUpper, amount, amount0, amount1); - } - - struct SwapCache { - // the protocol fee for the input token - uint8 feeProtocol; - // liquidity at the beginning of the swap - uint128 liquidityStart; - // the timestamp of the current block - uint32 blockTimestamp; - // the current value of the tick accumulator, computed only if we cross an initialized tick - int56 tickCumulative; - // the current value of seconds per liquidity accumulator, computed only if we cross an initialized tick - uint160 secondsPerLiquidityCumulativeX128; - // whether we've computed and cached the above two accumulators - bool computedLatestObservation; - } - - // the top level state of the swap, the results of which are recorded in storage at the end - struct SwapState { - // the amount remaining to be swapped in/out of the input/output asset - int256 amountSpecifiedRemaining; - // the amount already swapped out/in of the output/input asset - int256 amountCalculated; - // current sqrt(price) - uint160 sqrtPriceX96; - // the tick associated with the current price - int24 tick; - // the global fee growth of the input token - uint256 feeGrowthGlobalX128; - // amount of input token paid as protocol fee - uint128 protocolFee; - // the current liquidity in range - uint128 liquidity; - } - - struct StepComputations { - // the price at the beginning of the step - uint160 sqrtPriceStartX96; - // the next tick to swap to from the current tick in the swap direction - int24 tickNext; - // whether tickNext is initialized or not - bool initialized; - // sqrt(price) for the next tick (1/0) - uint160 sqrtPriceNextX96; - // how much is being swapped in in this step - uint256 amountIn; - // how much is being swapped out - uint256 amountOut; - // how much fee is being paid in - uint256 feeAmount; - } - - /// @inheritdoc IUniswapV3PoolActions - function swap( - address recipient, - bool zeroForOne, - int256 amountSpecified, - uint160 sqrtPriceLimitX96, - bytes calldata data - ) external override noDelegateCall returns (int256 amount0, int256 amount1) { - require(amountSpecified != 0, 'AS'); - - Slot0 memory slot0Start = slot0; - - require(slot0Start.unlocked, 'LOK'); - require( - zeroForOne - ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO - : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, - 'SPL' - ); - - slot0.unlocked = false; - - SwapCache memory cache = - SwapCache({ - liquidityStart: liquidity, - blockTimestamp: _blockTimestamp(), - feeProtocol: zeroForOne ? (slot0Start.feeProtocol % 16) : (slot0Start.feeProtocol >> 4), - secondsPerLiquidityCumulativeX128: 0, - tickCumulative: 0, - computedLatestObservation: false - }); - - bool exactInput = amountSpecified > 0; - - SwapState memory state = - SwapState({ - amountSpecifiedRemaining: amountSpecified, - amountCalculated: 0, - sqrtPriceX96: slot0Start.sqrtPriceX96, - tick: slot0Start.tick, - feeGrowthGlobalX128: zeroForOne ? feeGrowthGlobal0X128 : feeGrowthGlobal1X128, - protocolFee: 0, - liquidity: cache.liquidityStart - }); - - // continue swapping as long as we haven't used the entire input/output and haven't reached the price limit - while (state.amountSpecifiedRemaining != 0 && state.sqrtPriceX96 != sqrtPriceLimitX96) { - StepComputations memory step; - - step.sqrtPriceStartX96 = state.sqrtPriceX96; - - (step.tickNext, step.initialized) = tickBitmap.nextInitializedTickWithinOneWord( - state.tick, - tickSpacing, - zeroForOne - ); - - // ensure that we do not overshoot the min/max tick, as the tick bitmap is not aware of these bounds - if (step.tickNext < TickMath.MIN_TICK) { - step.tickNext = TickMath.MIN_TICK; - } else if (step.tickNext > TickMath.MAX_TICK) { - step.tickNext = TickMath.MAX_TICK; - } - - // get the price for the next tick - step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext); - - // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted - (state.sqrtPriceX96, step.amountIn, step.amountOut, step.feeAmount) = SwapMath.computeSwapStep( - state.sqrtPriceX96, - (zeroForOne ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 : step.sqrtPriceNextX96 > sqrtPriceLimitX96) - ? sqrtPriceLimitX96 - : step.sqrtPriceNextX96, - state.liquidity, - state.amountSpecifiedRemaining, - fee - ); - - if (exactInput) { - state.amountSpecifiedRemaining -= (step.amountIn + step.feeAmount).toInt256(); - state.amountCalculated = state.amountCalculated.sub(step.amountOut.toInt256()); - } else { - state.amountSpecifiedRemaining += step.amountOut.toInt256(); - state.amountCalculated = state.amountCalculated.add((step.amountIn + step.feeAmount).toInt256()); - } - - // if the protocol fee is on, calculate how much is owed, decrement feeAmount, and increment protocolFee - if (cache.feeProtocol > 0) { - uint256 delta = step.feeAmount / cache.feeProtocol; - step.feeAmount -= delta; - state.protocolFee += uint128(delta); - } - - // update global fee tracker - if (state.liquidity > 0) - state.feeGrowthGlobalX128 += FullMath.mulDiv(step.feeAmount, FixedPoint128.Q128, state.liquidity); - - // shift tick if we reached the next price - if (state.sqrtPriceX96 == step.sqrtPriceNextX96) { - // if the tick is initialized, run the tick transition - if (step.initialized) { - // check for the placeholder value, which we replace with the actual value the first time the swap - // crosses an initialized tick - if (!cache.computedLatestObservation) { - (cache.tickCumulative, cache.secondsPerLiquidityCumulativeX128) = observations.observeSingle( - cache.blockTimestamp, - 0, - slot0Start.tick, - slot0Start.observationIndex, - cache.liquidityStart, - slot0Start.observationCardinality - ); - cache.computedLatestObservation = true; - } - int128 liquidityNet = - ticks.cross( - step.tickNext, - (zeroForOne ? state.feeGrowthGlobalX128 : feeGrowthGlobal0X128), - (zeroForOne ? feeGrowthGlobal1X128 : state.feeGrowthGlobalX128), - cache.secondsPerLiquidityCumulativeX128, - cache.tickCumulative, - cache.blockTimestamp - ); - // if we're moving leftward, we interpret liquidityNet as the opposite sign - // safe because liquidityNet cannot be type(int128).min - if (zeroForOne) liquidityNet = -liquidityNet; - - state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet); - } - - state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; - } else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) { - // recompute unless we're on a lower tick boundary (i.e. already transitioned ticks), and haven't moved - state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96); - } - } - - // update tick and write an oracle entry if the tick change - if (state.tick != slot0Start.tick) { - (uint16 observationIndex, uint16 observationCardinality) = - observations.write( - slot0Start.observationIndex, - cache.blockTimestamp, - slot0Start.tick, - cache.liquidityStart, - slot0Start.observationCardinality, - slot0Start.observationCardinalityNext - ); - (slot0.sqrtPriceX96, slot0.tick, slot0.observationIndex, slot0.observationCardinality) = ( - state.sqrtPriceX96, - state.tick, - observationIndex, - observationCardinality - ); - } else { - // otherwise just update the price - slot0.sqrtPriceX96 = state.sqrtPriceX96; - } - - // update liquidity if it changed - if (cache.liquidityStart != state.liquidity) liquidity = state.liquidity; - - // update fee growth global and, if necessary, protocol fees - // overflow is acceptable, protocol has to withdraw before it hits type(uint128).max fees - if (zeroForOne) { - feeGrowthGlobal0X128 = state.feeGrowthGlobalX128; - if (state.protocolFee > 0) protocolFees.token0 += state.protocolFee; - } else { - feeGrowthGlobal1X128 = state.feeGrowthGlobalX128; - if (state.protocolFee > 0) protocolFees.token1 += state.protocolFee; - } - - (amount0, amount1) = zeroForOne == exactInput - ? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) - : (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining); - - // do the transfers and collect payment - if (zeroForOne) { - if (amount1 < 0) TransferHelper.safeTransfer(token1, recipient, uint256(-amount1)); - - uint256 balance0Before = balance0(); - IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); - require(balance0Before.add(uint256(amount0)) <= balance0(), 'IIA'); - } else { - if (amount0 < 0) TransferHelper.safeTransfer(token0, recipient, uint256(-amount0)); - - uint256 balance1Before = balance1(); - IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); - require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA'); - } - - emit Swap(msg.sender, recipient, amount0, amount1, state.sqrtPriceX96, state.liquidity, state.tick); - slot0.unlocked = true; - } - - /// @inheritdoc IUniswapV3PoolActions - function flash( - address recipient, - uint256 amount0, - uint256 amount1, - bytes calldata data - ) external override lock noDelegateCall { - uint128 _liquidity = liquidity; - require(_liquidity > 0, 'L'); - - uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee, 1e6); - uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee, 1e6); - uint256 balance0Before = balance0(); - uint256 balance1Before = balance1(); - - if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0); - if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1); - - IUniswapV3FlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data); - - uint256 balance0After = balance0(); - uint256 balance1After = balance1(); - - require(balance0Before.add(fee0) <= balance0After, 'F0'); - require(balance1Before.add(fee1) <= balance1After, 'F1'); - - // sub is safe because we know balanceAfter is gt balanceBefore by at least fee - uint256 paid0 = balance0After - balance0Before; - uint256 paid1 = balance1After - balance1Before; - - if (paid0 > 0) { - uint8 feeProtocol0 = slot0.feeProtocol % 16; - uint256 fees0 = feeProtocol0 == 0 ? 0 : paid0 / feeProtocol0; - if (uint128(fees0) > 0) protocolFees.token0 += uint128(fees0); - feeGrowthGlobal0X128 += FullMath.mulDiv(paid0 - fees0, FixedPoint128.Q128, _liquidity); - } - if (paid1 > 0) { - uint8 feeProtocol1 = slot0.feeProtocol >> 4; - uint256 fees1 = feeProtocol1 == 0 ? 0 : paid1 / feeProtocol1; - if (uint128(fees1) > 0) protocolFees.token1 += uint128(fees1); - feeGrowthGlobal1X128 += FullMath.mulDiv(paid1 - fees1, FixedPoint128.Q128, _liquidity); - } - - emit Flash(msg.sender, recipient, amount0, amount1, paid0, paid1); - } - - /// @inheritdoc IUniswapV3PoolOwnerActions - function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external override lock onlyFactoryOwner { - require( - (feeProtocol0 == 0 || (feeProtocol0 >= 4 && feeProtocol0 <= 10)) && - (feeProtocol1 == 0 || (feeProtocol1 >= 4 && feeProtocol1 <= 10)) - ); - uint8 feeProtocolOld = slot0.feeProtocol; - slot0.feeProtocol = feeProtocol0 + (feeProtocol1 << 4); - emit SetFeeProtocol(feeProtocolOld % 16, feeProtocolOld >> 4, feeProtocol0, feeProtocol1); - } - - /// @inheritdoc IUniswapV3PoolOwnerActions - function collectProtocol( - address recipient, - uint128 amount0Requested, - uint128 amount1Requested - ) external override lock onlyFactoryOwner returns (uint128 amount0, uint128 amount1) { - amount0 = amount0Requested > protocolFees.token0 ? protocolFees.token0 : amount0Requested; - amount1 = amount1Requested > protocolFees.token1 ? protocolFees.token1 : amount1Requested; - - if (amount0 > 0) { - if (amount0 == protocolFees.token0) amount0--; // ensure that the slot is not cleared, for gas savings - protocolFees.token0 -= amount0; - TransferHelper.safeTransfer(token0, recipient, amount0); - } - if (amount1 > 0) { - if (amount1 == protocolFees.token1) amount1--; // ensure that the slot is not cleared, for gas savings - protocolFees.token1 -= amount1; - TransferHelper.safeTransfer(token1, recipient, amount1); - } - - emit CollectProtocol(msg.sender, recipient, amount0, amount1); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol deleted file mode 100644 index c303265a3..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Minimal ERC20 interface for Uniswap -/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3 -interface IERC20Minimal { - /// @notice Returns the balance of a token - /// @param account The account for which to look up the number of tokens it has, i.e. its balance - /// @return The number of tokens held by the account - function balanceOf(address account) external view returns (uint256); - - /// @notice Transfers the amount of token from the `msg.sender` to the recipient - /// @param recipient The account that will receive the amount transferred - /// @param amount The number of tokens to send from the sender to the recipient - /// @return Returns true for a successful transfer, false for an unsuccessful transfer - function transfer(address recipient, uint256 amount) external returns (bool); - - /// @notice Returns the current allowance given to a spender by an owner - /// @param owner The account of the token owner - /// @param spender The account of the token spender - /// @return The current allowance granted by `owner` to `spender` - function allowance(address owner, address spender) external view returns (uint256); - - /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount` - /// @param spender The account which will be allowed to spend a given amount of the owners tokens - /// @param amount The amount of tokens allowed to be used by `spender` - /// @return Returns true for a successful approval, false for unsuccessful - function approve(address spender, uint256 amount) external returns (bool); - - /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender` - /// @param sender The account from which the transfer will be initiated - /// @param recipient The recipient of the transfer - /// @param amount The amount of the transfer - /// @return Returns true for a successful transfer, false for unsuccessful - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`. - /// @param from The account from which the tokens were sent, i.e. the balance decreased - /// @param to The account to which the tokens were sent, i.e. the balance increased - /// @param value The amount of tokens that were transferred - event Transfer(address indexed from, address indexed to, uint256 value); - - /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes. - /// @param owner The account that approved spending of its tokens - /// @param spender The account for which the spending allowance was modified - /// @param value The new allowance from the owner to the spender - event Approval(address indexed owner, address indexed spender, uint256 value); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol deleted file mode 100644 index 540cfdc68..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title The interface for the Uniswap V3 Factory -/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees -interface IUniswapV3Factory { - /// @notice Emitted when the owner of the factory is changed - /// @param oldOwner The owner before the owner was changed - /// @param newOwner The owner after the owner was changed - event OwnerChanged(address indexed oldOwner, address indexed newOwner); - - /// @notice Emitted when a pool is created - /// @param token0 The first token of the pool by address sort order - /// @param token1 The second token of the pool by address sort order - /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip - /// @param tickSpacing The minimum number of ticks between initialized ticks - /// @param pool The address of the created pool - event PoolCreated( - address indexed token0, - address indexed token1, - uint24 indexed fee, - int24 tickSpacing, - address pool - ); - - /// @notice Emitted when a new fee amount is enabled for pool creation via the factory - /// @param fee The enabled fee, denominated in hundredths of a bip - /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee - event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); - - /// @notice Returns the current owner of the factory - /// @dev Can be changed by the current owner via setOwner - /// @return The address of the factory owner - function owner() external view returns (address); - - /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled - /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context - /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee - /// @return The tick spacing - function feeAmountTickSpacing(uint24 fee) external view returns (int24); - - /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist - /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order - /// @param tokenA The contract address of either token0 or token1 - /// @param tokenB The contract address of the other token - /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip - /// @return pool The pool address - function getPool( - address tokenA, - address tokenB, - uint24 fee - ) external view returns (address pool); - - /// @notice Creates a pool for the given two tokens and fee - /// @param tokenA One of the two tokens in the desired pool - /// @param tokenB The other of the two tokens in the desired pool - /// @param fee The desired fee for the pool - /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved - /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments - /// are invalid. - /// @return pool The address of the newly created pool - function createPool( - address tokenA, - address tokenB, - uint24 fee - ) external returns (address pool); - - /// @notice Updates the owner of the factory - /// @dev Must be called by the current owner - /// @param _owner The new owner of the factory - function setOwner(address _owner) external; - - /// @notice Enables a fee amount with the given tickSpacing - /// @dev Fee amounts may never be removed once enabled - /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6) - /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount - function enableFeeAmount(uint24 fee, int24 tickSpacing) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol deleted file mode 100644 index 56df0500d..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -import './pool/IUniswapV3PoolImmutables.sol'; -import './pool/IUniswapV3PoolState.sol'; -import './pool/IUniswapV3PoolDerivedState.sol'; -import './pool/IUniswapV3PoolActions.sol'; -import './pool/IUniswapV3PoolOwnerActions.sol'; -import './pool/IUniswapV3PoolEvents.sol'; - -/// @title The interface for a Uniswap V3 Pool -/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform -/// to the ERC20 specification -/// @dev The pool interface is broken up into many smaller pieces -interface IUniswapV3Pool is - IUniswapV3PoolImmutables, - IUniswapV3PoolState, - IUniswapV3PoolDerivedState, - IUniswapV3PoolActions, - IUniswapV3PoolOwnerActions, - IUniswapV3PoolEvents -{ - -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol deleted file mode 100644 index 72096c1ff..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title An interface for a contract that is capable of deploying Uniswap V3 Pools -/// @notice A contract that constructs a pool must implement this to pass arguments to the pool -/// @dev This is used to avoid having constructor arguments in the pool contract, which results in the init code hash -/// of the pool being constant allowing the CREATE2 address of the pool to be cheaply computed on-chain -interface IUniswapV3PoolDeployer { - /// @notice Get the parameters to be used in constructing the pool, set transiently during pool creation. - /// @dev Called by the pool constructor to fetch the parameters of the pool - /// Returns factory The factory address - /// Returns token0 The first token of the pool by address sort order - /// Returns token1 The second token of the pool by address sort order - /// Returns fee The fee collected upon every swap in the pool, denominated in hundredths of a bip - /// Returns tickSpacing The minimum number of ticks between initialized ticks - function parameters() - external - view - returns ( - address factory, - address token0, - address token1, - uint24 fee, - int24 tickSpacing - ); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol deleted file mode 100644 index 18e54c4e1..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Callback for IUniswapV3PoolActions#flash -/// @notice Any contract that calls IUniswapV3PoolActions#flash must implement this interface -interface IUniswapV3FlashCallback { - /// @notice Called to `msg.sender` after transferring to the recipient from IUniswapV3Pool#flash. - /// @dev In the implementation you must repay the pool the tokens sent by flash plus the computed fee amounts. - /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. - /// @param fee0 The fee amount in token0 due to the pool by the end of the flash - /// @param fee1 The fee amount in token1 due to the pool by the end of the flash - /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#flash call - function uniswapV3FlashCallback( - uint256 fee0, - uint256 fee1, - bytes calldata data - ) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol deleted file mode 100644 index 85447e84f..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Callback for IUniswapV3PoolActions#mint -/// @notice Any contract that calls IUniswapV3PoolActions#mint must implement this interface -interface IUniswapV3MintCallback { - /// @notice Called to `msg.sender` after minting liquidity to a position from IUniswapV3Pool#mint. - /// @dev In the implementation you must pay the pool tokens owed for the minted liquidity. - /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. - /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity - /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity - /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#mint call - function uniswapV3MintCallback( - uint256 amount0Owed, - uint256 amount1Owed, - bytes calldata data - ) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol deleted file mode 100644 index 9f183b22a..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Callback for IUniswapV3PoolActions#swap -/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface -interface IUniswapV3SwapCallback { - /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. - /// @dev In the implementation you must pay the pool tokens owed for the swap. - /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. - /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. - /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by - /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. - /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by - /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. - /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call - function uniswapV3SwapCallback( - int256 amount0Delta, - int256 amount1Delta, - bytes calldata data - ) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol deleted file mode 100644 index 44fb61c24..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Permissionless pool actions -/// @notice Contains pool methods that can be called by anyone -interface IUniswapV3PoolActions { - /// @notice Sets the initial price for the pool - /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value - /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96 - function initialize(uint160 sqrtPriceX96) external; - - /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position - /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback - /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends - /// on tickLower, tickUpper, the amount of liquidity, and the current price. - /// @param recipient The address for which the liquidity will be created - /// @param tickLower The lower tick of the position in which to add liquidity - /// @param tickUpper The upper tick of the position in which to add liquidity - /// @param amount The amount of liquidity to mint - /// @param data Any data that should be passed through to the callback - /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback - /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback - function mint( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount, - bytes calldata data - ) external returns (uint256 amount0, uint256 amount1); - - /// @notice Collects tokens owed to a position - /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. - /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or - /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the - /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity. - /// @param recipient The address which should receive the fees collected - /// @param tickLower The lower tick of the position for which to collect fees - /// @param tickUpper The upper tick of the position for which to collect fees - /// @param amount0Requested How much token0 should be withdrawn from the fees owed - /// @param amount1Requested How much token1 should be withdrawn from the fees owed - /// @return amount0 The amount of fees collected in token0 - /// @return amount1 The amount of fees collected in token1 - function collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested - ) external returns (uint128 amount0, uint128 amount1); - - /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position - /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0 - /// @dev Fees must be collected separately via a call to #collect - /// @param tickLower The lower tick of the position for which to burn liquidity - /// @param tickUpper The upper tick of the position for which to burn liquidity - /// @param amount How much liquidity to burn - /// @return amount0 The amount of token0 sent to the recipient - /// @return amount1 The amount of token1 sent to the recipient - function burn( - int24 tickLower, - int24 tickUpper, - uint128 amount - ) external returns (uint256 amount0, uint256 amount1); - - /// @notice Swap token0 for token1, or token1 for token0 - /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback - /// @param recipient The address to receive the output of the swap - /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0 - /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative) - /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this - /// value after the swap. If one for zero, the price cannot be greater than this value after the swap - /// @param data Any data to be passed through to the callback - /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive - /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive - function swap( - address recipient, - bool zeroForOne, - int256 amountSpecified, - uint160 sqrtPriceLimitX96, - bytes calldata data - ) external returns (int256 amount0, int256 amount1); - - /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback - /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback - /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling - /// with 0 amount{0,1} and sending the donation amount(s) from the callback - /// @param recipient The address which will receive the token0 and token1 amounts - /// @param amount0 The amount of token0 to send - /// @param amount1 The amount of token1 to send - /// @param data Any data to be passed through to the callback - function flash( - address recipient, - uint256 amount0, - uint256 amount1, - bytes calldata data - ) external; - - /// @notice Increase the maximum number of price and liquidity observations that this pool will store - /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to - /// the input observationCardinalityNext. - /// @param observationCardinalityNext The desired minimum number of observations for the pool to store - function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol deleted file mode 100644 index eda3a0089..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Pool state that is not stored -/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the -/// blockchain. The functions here may have variable gas costs. -interface IUniswapV3PoolDerivedState { - /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp - /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing - /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, - /// you must call it with secondsAgos = [3600, 0]. - /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in - /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. - /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned - /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp - /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block - /// timestamp - function observe(uint32[] calldata secondsAgos) - external - view - returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); - - /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range - /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed. - /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first - /// snapshot is taken and the second snapshot is taken. - /// @param tickLower The lower tick of the range - /// @param tickUpper The upper tick of the range - /// @return tickCumulativeInside The snapshot of the tick accumulator for the range - /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range - /// @return secondsInside The snapshot of seconds per liquidity for the range - function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) - external - view - returns ( - int56 tickCumulativeInside, - uint160 secondsPerLiquidityInsideX128, - uint32 secondsInside - ); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol deleted file mode 100644 index 9d915dde9..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Events emitted by a pool -/// @notice Contains all events emitted by the pool -interface IUniswapV3PoolEvents { - /// @notice Emitted exactly once by a pool when #initialize is first called on the pool - /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize - /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96 - /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool - event Initialize(uint160 sqrtPriceX96, int24 tick); - - /// @notice Emitted when liquidity is minted for a given position - /// @param sender The address that minted the liquidity - /// @param owner The owner of the position and recipient of any minted liquidity - /// @param tickLower The lower tick of the position - /// @param tickUpper The upper tick of the position - /// @param amount The amount of liquidity minted to the position range - /// @param amount0 How much token0 was required for the minted liquidity - /// @param amount1 How much token1 was required for the minted liquidity - event Mint( - address sender, - address indexed owner, - int24 indexed tickLower, - int24 indexed tickUpper, - uint128 amount, - uint256 amount0, - uint256 amount1 - ); - - /// @notice Emitted when fees are collected by the owner of a position - /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees - /// @param owner The owner of the position for which fees are collected - /// @param tickLower The lower tick of the position - /// @param tickUpper The upper tick of the position - /// @param amount0 The amount of token0 fees collected - /// @param amount1 The amount of token1 fees collected - event Collect( - address indexed owner, - address recipient, - int24 indexed tickLower, - int24 indexed tickUpper, - uint128 amount0, - uint128 amount1 - ); - - /// @notice Emitted when a position's liquidity is removed - /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect - /// @param owner The owner of the position for which liquidity is removed - /// @param tickLower The lower tick of the position - /// @param tickUpper The upper tick of the position - /// @param amount The amount of liquidity to remove - /// @param amount0 The amount of token0 withdrawn - /// @param amount1 The amount of token1 withdrawn - event Burn( - address indexed owner, - int24 indexed tickLower, - int24 indexed tickUpper, - uint128 amount, - uint256 amount0, - uint256 amount1 - ); - - /// @notice Emitted by the pool for any swaps between token0 and token1 - /// @param sender The address that initiated the swap call, and that received the callback - /// @param recipient The address that received the output of the swap - /// @param amount0 The delta of the token0 balance of the pool - /// @param amount1 The delta of the token1 balance of the pool - /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96 - /// @param liquidity The liquidity of the pool after the swap - /// @param tick The log base 1.0001 of price of the pool after the swap - event Swap( - address indexed sender, - address indexed recipient, - int256 amount0, - int256 amount1, - uint160 sqrtPriceX96, - uint128 liquidity, - int24 tick - ); - - /// @notice Emitted by the pool for any flashes of token0/token1 - /// @param sender The address that initiated the swap call, and that received the callback - /// @param recipient The address that received the tokens from flash - /// @param amount0 The amount of token0 that was flashed - /// @param amount1 The amount of token1 that was flashed - /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee - /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee - event Flash( - address indexed sender, - address indexed recipient, - uint256 amount0, - uint256 amount1, - uint256 paid0, - uint256 paid1 - ); - - /// @notice Emitted by the pool for increases to the number of observations that can be stored - /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index - /// just before a mint/swap/burn. - /// @param observationCardinalityNextOld The previous value of the next observation cardinality - /// @param observationCardinalityNextNew The updated value of the next observation cardinality - event IncreaseObservationCardinalityNext( - uint16 observationCardinalityNextOld, - uint16 observationCardinalityNextNew - ); - - /// @notice Emitted when the protocol fee is changed by the pool - /// @param feeProtocol0Old The previous value of the token0 protocol fee - /// @param feeProtocol1Old The previous value of the token1 protocol fee - /// @param feeProtocol0New The updated value of the token0 protocol fee - /// @param feeProtocol1New The updated value of the token1 protocol fee - event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New); - - /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner - /// @param sender The address that collects the protocol fees - /// @param recipient The address that receives the collected protocol fees - /// @param amount0 The amount of token0 protocol fees that is withdrawn - /// @param amount0 The amount of token1 protocol fees that is withdrawn - event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol deleted file mode 100644 index c9beb151e..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Pool state that never changes -/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values -interface IUniswapV3PoolImmutables { - /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface - /// @return The contract address - function factory() external view returns (address); - - /// @notice The first of the two tokens of the pool, sorted by address - /// @return The token contract address - function token0() external view returns (address); - - /// @notice The second of the two tokens of the pool, sorted by address - /// @return The token contract address - function token1() external view returns (address); - - /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6 - /// @return The fee - function fee() external view returns (uint24); - - /// @notice The pool tick spacing - /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive - /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... - /// This value is an int24 to avoid casting even though it is always positive. - /// @return The tick spacing - function tickSpacing() external view returns (int24); - - /// @notice The maximum amount of position liquidity that can use any tick in the range - /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and - /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool - /// @return The max amount of liquidity per tick - function maxLiquidityPerTick() external view returns (uint128); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol deleted file mode 100644 index 2395ed321..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Permissioned pool actions -/// @notice Contains pool methods that may only be called by the factory owner -interface IUniswapV3PoolOwnerActions { - /// @notice Set the denominator of the protocol's % share of the fees - /// @param feeProtocol0 new protocol fee for token0 of the pool - /// @param feeProtocol1 new protocol fee for token1 of the pool - function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external; - - /// @notice Collect the protocol fee accrued to the pool - /// @param recipient The address to which collected protocol fees should be sent - /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1 - /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0 - /// @return amount0 The protocol fee collected in token0 - /// @return amount1 The protocol fee collected in token1 - function collectProtocol( - address recipient, - uint128 amount0Requested, - uint128 amount1Requested - ) external returns (uint128 amount0, uint128 amount1); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol deleted file mode 100644 index 620256c31..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol +++ /dev/null @@ -1,116 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Pool state that can change -/// @notice These methods compose the pool's state, and can change with any frequency including multiple times -/// per transaction -interface IUniswapV3PoolState { - /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas - /// when accessed externally. - /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value - /// tick The current tick of the pool, i.e. according to the last tick transition that was run. - /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick - /// boundary. - /// observationIndex The index of the last oracle observation that was written, - /// observationCardinality The current maximum number of observations stored in the pool, - /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. - /// feeProtocol The protocol fee for both tokens of the pool. - /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 - /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. - /// unlocked Whether the pool is currently locked to reentrancy - function slot0() - external - view - returns ( - uint160 sqrtPriceX96, - int24 tick, - uint16 observationIndex, - uint16 observationCardinality, - uint16 observationCardinalityNext, - uint8 feeProtocol, - bool unlocked - ); - - /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool - /// @dev This value can overflow the uint256 - function feeGrowthGlobal0X128() external view returns (uint256); - - /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool - /// @dev This value can overflow the uint256 - function feeGrowthGlobal1X128() external view returns (uint256); - - /// @notice The amounts of token0 and token1 that are owed to the protocol - /// @dev Protocol fees will never exceed uint128 max in either token - function protocolFees() external view returns (uint128 token0, uint128 token1); - - /// @notice The currently in range liquidity available to the pool - /// @dev This value has no relationship to the total liquidity across all ticks - function liquidity() external view returns (uint128); - - /// @notice Look up information about a specific tick in the pool - /// @param tick The tick to look up - /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or - /// tick upper, - /// liquidityNet how much liquidity changes when the pool price crosses the tick, - /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, - /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, - /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick - /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, - /// secondsOutside the seconds spent on the other side of the tick from the current tick, - /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. - /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. - /// In addition, these values are only relative and must be used only in comparison to previous snapshots for - /// a specific position. - function ticks(int24 tick) - external - view - returns ( - uint128 liquidityGross, - int128 liquidityNet, - uint256 feeGrowthOutside0X128, - uint256 feeGrowthOutside1X128, - int56 tickCumulativeOutside, - uint160 secondsPerLiquidityOutsideX128, - uint32 secondsOutside, - bool initialized - ); - - /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information - function tickBitmap(int16 wordPosition) external view returns (uint256); - - /// @notice Returns the information about a position by the position's key - /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper - /// @return _liquidity The amount of liquidity in the position, - /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, - /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, - /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, - /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke - function positions(bytes32 key) - external - view - returns ( - uint128 _liquidity, - uint256 feeGrowthInside0LastX128, - uint256 feeGrowthInside1LastX128, - uint128 tokensOwed0, - uint128 tokensOwed1 - ); - - /// @notice Returns data about a specific observation index - /// @param index The element of the observations array to fetch - /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time - /// ago, rather than at a specific index in the array. - /// @return blockTimestamp The timestamp of the observation, - /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, - /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, - /// Returns initialized whether the observation has been initialized and the values are safe to use - function observations(uint256 index) - external - view - returns ( - uint32 blockTimestamp, - int56 tickCumulative, - uint160 secondsPerLiquidityCumulativeX128, - bool initialized - ); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol deleted file mode 100644 index 3a7216c7b..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol +++ /dev/null @@ -1,94 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title BitMath -/// @dev This library provides functionality for computing bit properties of an unsigned integer -library BitMath { - /// @notice Returns the index of the most significant bit of the number, - /// where the least significant bit is at index 0 and the most significant bit is at index 255 - /// @dev The function satisfies the property: - /// x >= 2**mostSignificantBit(x) and x < 2**(mostSignificantBit(x)+1) - /// @param x the value for which to compute the most significant bit, must be greater than 0 - /// @return r the index of the most significant bit - function mostSignificantBit(uint256 x) internal pure returns (uint8 r) { - require(x > 0); - - if (x >= 0x100000000000000000000000000000000) { - x >>= 128; - r += 128; - } - if (x >= 0x10000000000000000) { - x >>= 64; - r += 64; - } - if (x >= 0x100000000) { - x >>= 32; - r += 32; - } - if (x >= 0x10000) { - x >>= 16; - r += 16; - } - if (x >= 0x100) { - x >>= 8; - r += 8; - } - if (x >= 0x10) { - x >>= 4; - r += 4; - } - if (x >= 0x4) { - x >>= 2; - r += 2; - } - if (x >= 0x2) r += 1; - } - - /// @notice Returns the index of the least significant bit of the number, - /// where the least significant bit is at index 0 and the most significant bit is at index 255 - /// @dev The function satisfies the property: - /// (x & 2**leastSignificantBit(x)) != 0 and (x & (2**(leastSignificantBit(x)) - 1)) == 0) - /// @param x the value for which to compute the least significant bit, must be greater than 0 - /// @return r the index of the least significant bit - function leastSignificantBit(uint256 x) internal pure returns (uint8 r) { - require(x > 0); - - r = 255; - if (x & type(uint128).max > 0) { - r -= 128; - } else { - x >>= 128; - } - if (x & type(uint64).max > 0) { - r -= 64; - } else { - x >>= 64; - } - if (x & type(uint32).max > 0) { - r -= 32; - } else { - x >>= 32; - } - if (x & type(uint16).max > 0) { - r -= 16; - } else { - x >>= 16; - } - if (x & type(uint8).max > 0) { - r -= 8; - } else { - x >>= 8; - } - if (x & 0xf > 0) { - r -= 4; - } else { - x >>= 4; - } - if (x & 0x3 > 0) { - r -= 2; - } else { - x >>= 2; - } - if (x & 0x1 > 0) r -= 1; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol deleted file mode 100644 index 6d6948b10..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.4.0; - -/// @title FixedPoint128 -/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) -library FixedPoint128 { - uint256 internal constant Q128 = 0x100000000000000000000000000000000; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol deleted file mode 100644 index 63b42c294..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.4.0; - -/// @title FixedPoint96 -/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) -/// @dev Used in SqrtPriceMath.sol -library FixedPoint96 { - uint8 internal constant RESOLUTION = 96; - uint256 internal constant Q96 = 0x1000000000000000000000000; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol deleted file mode 100644 index 8688a1773..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol +++ /dev/null @@ -1,124 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.4.0; - -/// @title Contains 512-bit math functions -/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision -/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits -library FullMath { - /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 - /// @param a The multiplicand - /// @param b The multiplier - /// @param denominator The divisor - /// @return result The 256-bit result - /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv - function mulDiv( - uint256 a, - uint256 b, - uint256 denominator - ) internal pure returns (uint256 result) { - // 512-bit multiply [prod1 prod0] = a * b - // Compute the product mod 2**256 and mod 2**256 - 1 - // then use the Chinese Remainder Theorem to reconstruct - // the 512 bit result. The result is stored in two 256 - // variables such that product = prod1 * 2**256 + prod0 - uint256 prod0; // Least significant 256 bits of the product - uint256 prod1; // Most significant 256 bits of the product - assembly { - let mm := mulmod(a, b, not(0)) - prod0 := mul(a, b) - prod1 := sub(sub(mm, prod0), lt(mm, prod0)) - } - - // Handle non-overflow cases, 256 by 256 division - if (prod1 == 0) { - require(denominator > 0); - assembly { - result := div(prod0, denominator) - } - return result; - } - - // Make sure the result is less than 2**256. - // Also prevents denominator == 0 - require(denominator > prod1); - - /////////////////////////////////////////////// - // 512 by 256 division. - /////////////////////////////////////////////// - - // Make division exact by subtracting the remainder from [prod1 prod0] - // Compute remainder using mulmod - uint256 remainder; - assembly { - remainder := mulmod(a, b, denominator) - } - // Subtract 256 bit number from 512 bit number - assembly { - prod1 := sub(prod1, gt(remainder, prod0)) - prod0 := sub(prod0, remainder) - } - - // Factor powers of two out of denominator - // Compute largest power of two divisor of denominator. - // Always >= 1. - uint256 twos = -denominator & denominator; - // Divide denominator by power of two - assembly { - denominator := div(denominator, twos) - } - - // Divide [prod1 prod0] by the factors of two - assembly { - prod0 := div(prod0, twos) - } - // Shift in bits from prod1 into prod0. For this we need - // to flip `twos` such that it is 2**256 / twos. - // If twos is zero, then it becomes one - assembly { - twos := add(div(sub(0, twos), twos), 1) - } - prod0 |= prod1 * twos; - - // Invert denominator mod 2**256 - // Now that denominator is an odd number, it has an inverse - // modulo 2**256 such that denominator * inv = 1 mod 2**256. - // Compute the inverse by starting with a seed that is correct - // correct for four bits. That is, denominator * inv = 1 mod 2**4 - uint256 inv = (3 * denominator) ^ 2; - // Now use Newton-Raphson iteration to improve the precision. - // Thanks to Hensel's lifting lemma, this also works in modular - // arithmetic, doubling the correct bits in each step. - inv *= 2 - denominator * inv; // inverse mod 2**8 - inv *= 2 - denominator * inv; // inverse mod 2**16 - inv *= 2 - denominator * inv; // inverse mod 2**32 - inv *= 2 - denominator * inv; // inverse mod 2**64 - inv *= 2 - denominator * inv; // inverse mod 2**128 - inv *= 2 - denominator * inv; // inverse mod 2**256 - - // Because the division is now exact we can divide by multiplying - // with the modular inverse of denominator. This will give us the - // correct result modulo 2**256. Since the precoditions guarantee - // that the outcome is less than 2**256, this is the final result. - // We don't need to compute the high bits of the result and prod1 - // is no longer required. - result = prod0 * inv; - return result; - } - - /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 - /// @param a The multiplicand - /// @param b The multiplier - /// @param denominator The divisor - /// @return result The 256-bit result - function mulDivRoundingUp( - uint256 a, - uint256 b, - uint256 denominator - ) internal pure returns (uint256 result) { - result = mulDiv(a, b, denominator); - if (mulmod(a, b, denominator) > 0) { - require(result < type(uint256).max); - result++; - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol deleted file mode 100644 index d5e23032e..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Math library for liquidity -library LiquidityMath { - /// @notice Add a signed liquidity delta to liquidity and revert if it overflows or underflows - /// @param x The liquidity before change - /// @param y The delta by which liquidity should be changed - /// @return z The liquidity delta - function addDelta(uint128 x, int128 y) internal pure returns (uint128 z) { - if (y < 0) { - require((z = x - uint128(-y)) < x, 'LS'); - } else { - require((z = x + uint128(y)) >= x, 'LA'); - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol deleted file mode 100644 index dbc817c2e..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.0; - -/// @title Optimized overflow and underflow safe math operations -/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost -library LowGasSafeMath { - /// @notice Returns x + y, reverts if sum overflows uint256 - /// @param x The augend - /// @param y The addend - /// @return z The sum of x and y - function add(uint256 x, uint256 y) internal pure returns (uint256 z) { - require((z = x + y) >= x); - } - - /// @notice Returns x - y, reverts if underflows - /// @param x The minuend - /// @param y The subtrahend - /// @return z The difference of x and y - function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { - require((z = x - y) <= x); - } - - /// @notice Returns x * y, reverts if overflows - /// @param x The multiplicand - /// @param y The multiplier - /// @return z The product of x and y - function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { - require(x == 0 || (z = x * y) / x == y); - } - - /// @notice Returns x + y, reverts if overflows or underflows - /// @param x The augend - /// @param y The addend - /// @return z The sum of x and y - function add(int256 x, int256 y) internal pure returns (int256 z) { - require((z = x + y) >= x == (y >= 0)); - } - - /// @notice Returns x - y, reverts if overflows or underflows - /// @param x The minuend - /// @param y The subtrahend - /// @return z The difference of x and y - function sub(int256 x, int256 y) internal pure returns (int256 z) { - require((z = x - y) <= x == (y >= 0)); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol deleted file mode 100644 index 3f6b3f32c..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol +++ /dev/null @@ -1,325 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -/// @title Oracle -/// @notice Provides price and liquidity data useful for a wide variety of system designs -/// @dev Instances of stored oracle data, "observations", are collected in the oracle array -/// Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the -/// maximum length of the oracle array. New slots will be added when the array is fully populated. -/// Observations are overwritten when the full length of the oracle array is populated. -/// The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe() -library Oracle { - struct Observation { - // the block timestamp of the observation - uint32 blockTimestamp; - // the tick accumulator, i.e. tick * time elapsed since the pool was first initialized - int56 tickCumulative; - // the seconds per liquidity, i.e. seconds elapsed / max(1, liquidity) since the pool was first initialized - uint160 secondsPerLiquidityCumulativeX128; - // whether or not the observation is initialized - bool initialized; - } - - /// @notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values - /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows - /// @param last The specified observation to be transformed - /// @param blockTimestamp The timestamp of the new observation - /// @param tick The active tick at the time of the new observation - /// @param liquidity The total in-range liquidity at the time of the new observation - /// @return Observation The newly populated observation - function transform( - Observation memory last, - uint32 blockTimestamp, - int24 tick, - uint128 liquidity - ) private pure returns (Observation memory) { - uint32 delta = blockTimestamp - last.blockTimestamp; - return - Observation({ - blockTimestamp: blockTimestamp, - tickCumulative: last.tickCumulative + int56(tick) * delta, - secondsPerLiquidityCumulativeX128: last.secondsPerLiquidityCumulativeX128 + - ((uint160(delta) << 128) / (liquidity > 0 ? liquidity : 1)), - initialized: true - }); - } - - /// @notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array - /// @param self The stored oracle array - /// @param time The time of the oracle initialization, via block.timestamp truncated to uint32 - /// @return cardinality The number of populated elements in the oracle array - /// @return cardinalityNext The new length of the oracle array, independent of population - function initialize(Observation[65535] storage self, uint32 time) - internal - returns (uint16 cardinality, uint16 cardinalityNext) - { - self[0] = Observation({ - blockTimestamp: time, - tickCumulative: 0, - secondsPerLiquidityCumulativeX128: 0, - initialized: true - }); - return (1, 1); - } - - /// @notice Writes an oracle observation to the array - /// @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally. - /// If the index is at the end of the allowable array length (according to cardinality), and the next cardinality - /// is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering. - /// @param self The stored oracle array - /// @param index The index of the observation that was most recently written to the observations array - /// @param blockTimestamp The timestamp of the new observation - /// @param tick The active tick at the time of the new observation - /// @param liquidity The total in-range liquidity at the time of the new observation - /// @param cardinality The number of populated elements in the oracle array - /// @param cardinalityNext The new length of the oracle array, independent of population - /// @return indexUpdated The new index of the most recently written element in the oracle array - /// @return cardinalityUpdated The new cardinality of the oracle array - function write( - Observation[65535] storage self, - uint16 index, - uint32 blockTimestamp, - int24 tick, - uint128 liquidity, - uint16 cardinality, - uint16 cardinalityNext - ) internal returns (uint16 indexUpdated, uint16 cardinalityUpdated) { - Observation memory last = self[index]; - - // early return if we've already written an observation this block - if (last.blockTimestamp == blockTimestamp) return (index, cardinality); - - // if the conditions are right, we can bump the cardinality - if (cardinalityNext > cardinality && index == (cardinality - 1)) { - cardinalityUpdated = cardinalityNext; - } else { - cardinalityUpdated = cardinality; - } - - indexUpdated = (index + 1) % cardinalityUpdated; - self[indexUpdated] = transform(last, blockTimestamp, tick, liquidity); - } - - /// @notice Prepares the oracle array to store up to `next` observations - /// @param self The stored oracle array - /// @param current The current next cardinality of the oracle array - /// @param next The proposed next cardinality which will be populated in the oracle array - /// @return next The next cardinality which will be populated in the oracle array - function grow( - Observation[65535] storage self, - uint16 current, - uint16 next - ) internal returns (uint16) { - require(current > 0, 'I'); - // no-op if the passed next value isn't greater than the current next value - if (next <= current) return current; - // store in each slot to prevent fresh SSTOREs in swaps - // this data will not be used because the initialized boolean is still false - for (uint16 i = current; i < next; i++) self[i].blockTimestamp = 1; - return next; - } - - /// @notice comparator for 32-bit timestamps - /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time - /// @param time A timestamp truncated to 32 bits - /// @param a A comparison timestamp from which to determine the relative position of `time` - /// @param b From which to determine the relative position of `time` - /// @return bool Whether `a` is chronologically <= `b` - function lte( - uint32 time, - uint32 a, - uint32 b - ) private pure returns (bool) { - // if there hasn't been overflow, no need to adjust - if (a <= time && b <= time) return a <= b; - - uint256 aAdjusted = a > time ? a : a + 2**32; - uint256 bAdjusted = b > time ? b : b + 2**32; - - return aAdjusted <= bAdjusted; - } - - /// @notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied. - /// The result may be the same observation, or adjacent observations. - /// @dev The answer must be contained in the array, used when the target is located within the stored observation - /// boundaries: older than the most recent observation and younger, or the same age as, the oldest observation - /// @param self The stored oracle array - /// @param time The current block.timestamp - /// @param target The timestamp at which the reserved observation should be for - /// @param index The index of the observation that was most recently written to the observations array - /// @param cardinality The number of populated elements in the oracle array - /// @return beforeOrAt The observation recorded before, or at, the target - /// @return atOrAfter The observation recorded at, or after, the target - function binarySearch( - Observation[65535] storage self, - uint32 time, - uint32 target, - uint16 index, - uint16 cardinality - ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { - uint256 l = (index + 1) % cardinality; // oldest observation - uint256 r = l + cardinality - 1; // newest observation - uint256 i; - while (true) { - i = (l + r) / 2; - - beforeOrAt = self[i % cardinality]; - - // we've landed on an uninitialized tick, keep searching higher (more recently) - if (!beforeOrAt.initialized) { - l = i + 1; - continue; - } - - atOrAfter = self[(i + 1) % cardinality]; - - bool targetAtOrAfter = lte(time, beforeOrAt.blockTimestamp, target); - - // check if we've found the answer! - if (targetAtOrAfter && lte(time, target, atOrAfter.blockTimestamp)) break; - - if (!targetAtOrAfter) r = i - 1; - else l = i + 1; - } - } - - /// @notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied - /// @dev Assumes there is at least 1 initialized observation. - /// Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp. - /// @param self The stored oracle array - /// @param time The current block.timestamp - /// @param target The timestamp at which the reserved observation should be for - /// @param tick The active tick at the time of the returned or simulated observation - /// @param index The index of the observation that was most recently written to the observations array - /// @param liquidity The total pool liquidity at the time of the call - /// @param cardinality The number of populated elements in the oracle array - /// @return beforeOrAt The observation which occurred at, or before, the given timestamp - /// @return atOrAfter The observation which occurred at, or after, the given timestamp - function getSurroundingObservations( - Observation[65535] storage self, - uint32 time, - uint32 target, - int24 tick, - uint16 index, - uint128 liquidity, - uint16 cardinality - ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { - // optimistically set before to the newest observation - beforeOrAt = self[index]; - - // if the target is chronologically at or after the newest observation, we can early return - if (lte(time, beforeOrAt.blockTimestamp, target)) { - if (beforeOrAt.blockTimestamp == target) { - // if newest observation equals target, we're in the same block, so we can ignore atOrAfter - return (beforeOrAt, atOrAfter); - } else { - // otherwise, we need to transform - return (beforeOrAt, transform(beforeOrAt, target, tick, liquidity)); - } - } - - // now, set before to the oldest observation - beforeOrAt = self[(index + 1) % cardinality]; - if (!beforeOrAt.initialized) beforeOrAt = self[0]; - - // ensure that the target is chronologically at or after the oldest observation - require(lte(time, beforeOrAt.blockTimestamp, target), 'OLD'); - - // if we've reached this point, we have to binary search - return binarySearch(self, time, target, index, cardinality); - } - - /// @dev Reverts if an observation at or before the desired observation timestamp does not exist. - /// 0 may be passed as `secondsAgo' to return the current cumulative values. - /// If called with a timestamp falling between two observations, returns the counterfactual accumulator values - /// at exactly the timestamp between the two observations. - /// @param self The stored oracle array - /// @param time The current block timestamp - /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation - /// @param tick The current tick - /// @param index The index of the observation that was most recently written to the observations array - /// @param liquidity The current in-range pool liquidity - /// @param cardinality The number of populated elements in the oracle array - /// @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo` - /// @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo` - function observeSingle( - Observation[65535] storage self, - uint32 time, - uint32 secondsAgo, - int24 tick, - uint16 index, - uint128 liquidity, - uint16 cardinality - ) internal view returns (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) { - if (secondsAgo == 0) { - Observation memory last = self[index]; - if (last.blockTimestamp != time) last = transform(last, time, tick, liquidity); - return (last.tickCumulative, last.secondsPerLiquidityCumulativeX128); - } - - uint32 target = time - secondsAgo; - - (Observation memory beforeOrAt, Observation memory atOrAfter) = - getSurroundingObservations(self, time, target, tick, index, liquidity, cardinality); - - if (target == beforeOrAt.blockTimestamp) { - // we're at the left boundary - return (beforeOrAt.tickCumulative, beforeOrAt.secondsPerLiquidityCumulativeX128); - } else if (target == atOrAfter.blockTimestamp) { - // we're at the right boundary - return (atOrAfter.tickCumulative, atOrAfter.secondsPerLiquidityCumulativeX128); - } else { - // we're in the middle - uint32 observationTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp; - uint32 targetDelta = target - beforeOrAt.blockTimestamp; - return ( - beforeOrAt.tickCumulative + - ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / observationTimeDelta) * - targetDelta, - beforeOrAt.secondsPerLiquidityCumulativeX128 + - uint160( - (uint256( - atOrAfter.secondsPerLiquidityCumulativeX128 - beforeOrAt.secondsPerLiquidityCumulativeX128 - ) * targetDelta) / observationTimeDelta - ) - ); - } - } - - /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos` - /// @dev Reverts if `secondsAgos` > oldest observation - /// @param self The stored oracle array - /// @param time The current block.timestamp - /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation - /// @param tick The current tick - /// @param index The index of the observation that was most recently written to the observations array - /// @param liquidity The current in-range pool liquidity - /// @param cardinality The number of populated elements in the oracle array - /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo` - /// @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo` - function observe( - Observation[65535] storage self, - uint32 time, - uint32[] memory secondsAgos, - int24 tick, - uint16 index, - uint128 liquidity, - uint16 cardinality - ) internal view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) { - require(cardinality > 0, 'I'); - - tickCumulatives = new int56[](secondsAgos.length); - secondsPerLiquidityCumulativeX128s = new uint160[](secondsAgos.length); - for (uint256 i = 0; i < secondsAgos.length; i++) { - (tickCumulatives[i], secondsPerLiquidityCumulativeX128s[i]) = observeSingle( - self, - time, - secondsAgos[i], - tick, - index, - liquidity, - cardinality - ); - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol deleted file mode 100644 index 1c67c7f27..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './FullMath.sol'; -import './FixedPoint128.sol'; -import './LiquidityMath.sol'; - -/// @title Position -/// @notice Positions represent an owner address' liquidity between a lower and upper tick boundary -/// @dev Positions store additional state for tracking fees owed to the position -library Position { - // info stored for each user's position - struct Info { - // the amount of liquidity owned by this position - uint128 liquidity; - // fee growth per unit of liquidity as of the last update to liquidity or fees owed - uint256 feeGrowthInside0LastX128; - uint256 feeGrowthInside1LastX128; - // the fees owed to the position owner in token0/token1 - uint128 tokensOwed0; - uint128 tokensOwed1; - } - - /// @notice Returns the Info struct of a position, given an owner and position boundaries - /// @param self The mapping containing all user positions - /// @param owner The address of the position owner - /// @param tickLower The lower tick boundary of the position - /// @param tickUpper The upper tick boundary of the position - /// @return position The position info struct of the given owners' position - function get( - mapping(bytes32 => Info) storage self, - address owner, - int24 tickLower, - int24 tickUpper - ) internal view returns (Position.Info storage position) { - position = self[keccak256(abi.encodePacked(owner, tickLower, tickUpper))]; - } - - /// @notice Credits accumulated fees to a user's position - /// @param self The individual position to update - /// @param liquidityDelta The change in pool liquidity as a result of the position update - /// @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries - /// @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries - function update( - Info storage self, - int128 liquidityDelta, - uint256 feeGrowthInside0X128, - uint256 feeGrowthInside1X128 - ) internal { - Info memory _self = self; - - uint128 liquidityNext; - if (liquidityDelta == 0) { - require(_self.liquidity > 0, 'NP'); // disallow pokes for 0 liquidity positions - liquidityNext = _self.liquidity; - } else { - liquidityNext = LiquidityMath.addDelta(_self.liquidity, liquidityDelta); - } - - // calculate accumulated fees - uint128 tokensOwed0 = - uint128( - FullMath.mulDiv( - feeGrowthInside0X128 - _self.feeGrowthInside0LastX128, - _self.liquidity, - FixedPoint128.Q128 - ) - ); - uint128 tokensOwed1 = - uint128( - FullMath.mulDiv( - feeGrowthInside1X128 - _self.feeGrowthInside1LastX128, - _self.liquidity, - FixedPoint128.Q128 - ) - ); - - // update the position - if (liquidityDelta != 0) self.liquidity = liquidityNext; - self.feeGrowthInside0LastX128 = feeGrowthInside0X128; - self.feeGrowthInside1LastX128 = feeGrowthInside1X128; - if (tokensOwed0 > 0 || tokensOwed1 > 0) { - // overflow is acceptable, have to withdraw before you hit type(uint128).max fees - self.tokensOwed0 += tokensOwed0; - self.tokensOwed1 += tokensOwed1; - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol deleted file mode 100644 index a8ea22987..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Safe casting methods -/// @notice Contains methods for safely casting between types -library SafeCast { - /// @notice Cast a uint256 to a uint160, revert on overflow - /// @param y The uint256 to be downcasted - /// @return z The downcasted integer, now type uint160 - function toUint160(uint256 y) internal pure returns (uint160 z) { - require((z = uint160(y)) == y); - } - - /// @notice Cast a int256 to a int128, revert on overflow or underflow - /// @param y The int256 to be downcasted - /// @return z The downcasted integer, now type int128 - function toInt128(int256 y) internal pure returns (int128 z) { - require((z = int128(y)) == y); - } - - /// @notice Cast a uint256 to a int256, revert on overflow - /// @param y The uint256 to be casted - /// @return z The casted integer, now type int256 - function toInt256(uint256 y) internal pure returns (int256 z) { - require(y < 2**255); - z = int256(y); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol deleted file mode 100644 index 685f485da..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol +++ /dev/null @@ -1,227 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './LowGasSafeMath.sol'; -import './SafeCast.sol'; - -import './FullMath.sol'; -import './UnsafeMath.sol'; -import './FixedPoint96.sol'; - -/// @title Functions based on Q64.96 sqrt price and liquidity -/// @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas -library SqrtPriceMath { - using LowGasSafeMath for uint256; - using SafeCast for uint256; - - /// @notice Gets the next sqrt price given a delta of token0 - /// @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least - /// far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the - /// price less in order to not send too much output. - /// The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96), - /// if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount). - /// @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta - /// @param liquidity The amount of usable liquidity - /// @param amount How much of token0 to add or remove from virtual reserves - /// @param add Whether to add or remove the amount of token0 - /// @return The price after adding or removing amount, depending on add - function getNextSqrtPriceFromAmount0RoundingUp( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amount, - bool add - ) internal pure returns (uint160) { - // we short circuit amount == 0 because the result is otherwise not guaranteed to equal the input price - if (amount == 0) return sqrtPX96; - uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; - - if (add) { - uint256 product; - if ((product = amount * sqrtPX96) / amount == sqrtPX96) { - uint256 denominator = numerator1 + product; - if (denominator >= numerator1) - // always fits in 160 bits - return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator)); - } - - return uint160(UnsafeMath.divRoundingUp(numerator1, (numerator1 / sqrtPX96).add(amount))); - } else { - uint256 product; - // if the product overflows, we know the denominator underflows - // in addition, we must check that the denominator does not underflow - require((product = amount * sqrtPX96) / amount == sqrtPX96 && numerator1 > product); - uint256 denominator = numerator1 - product; - return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator).toUint160(); - } - } - - /// @notice Gets the next sqrt price given a delta of token1 - /// @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least - /// far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the - /// price less in order to not send too much output. - /// The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity - /// @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta - /// @param liquidity The amount of usable liquidity - /// @param amount How much of token1 to add, or remove, from virtual reserves - /// @param add Whether to add, or remove, the amount of token1 - /// @return The price after adding or removing `amount` - function getNextSqrtPriceFromAmount1RoundingDown( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amount, - bool add - ) internal pure returns (uint160) { - // if we're adding (subtracting), rounding down requires rounding the quotient down (up) - // in both cases, avoid a mulDiv for most inputs - if (add) { - uint256 quotient = - ( - amount <= type(uint160).max - ? (amount << FixedPoint96.RESOLUTION) / liquidity - : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity) - ); - - return uint256(sqrtPX96).add(quotient).toUint160(); - } else { - uint256 quotient = - ( - amount <= type(uint160).max - ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity) - : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity) - ); - - require(sqrtPX96 > quotient); - // always fits 160 bits - return uint160(sqrtPX96 - quotient); - } - } - - /// @notice Gets the next sqrt price given an input amount of token0 or token1 - /// @dev Throws if price or liquidity are 0, or if the next price is out of bounds - /// @param sqrtPX96 The starting price, i.e., before accounting for the input amount - /// @param liquidity The amount of usable liquidity - /// @param amountIn How much of token0, or token1, is being swapped in - /// @param zeroForOne Whether the amount in is token0 or token1 - /// @return sqrtQX96 The price after adding the input amount to token0 or token1 - function getNextSqrtPriceFromInput( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amountIn, - bool zeroForOne - ) internal pure returns (uint160 sqrtQX96) { - require(sqrtPX96 > 0); - require(liquidity > 0); - - // round to make sure that we don't pass the target price - return - zeroForOne - ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true) - : getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true); - } - - /// @notice Gets the next sqrt price given an output amount of token0 or token1 - /// @dev Throws if price or liquidity are 0 or the next price is out of bounds - /// @param sqrtPX96 The starting price before accounting for the output amount - /// @param liquidity The amount of usable liquidity - /// @param amountOut How much of token0, or token1, is being swapped out - /// @param zeroForOne Whether the amount out is token0 or token1 - /// @return sqrtQX96 The price after removing the output amount of token0 or token1 - function getNextSqrtPriceFromOutput( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amountOut, - bool zeroForOne - ) internal pure returns (uint160 sqrtQX96) { - require(sqrtPX96 > 0); - require(liquidity > 0); - - // round to make sure that we pass the target price - return - zeroForOne - ? getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false) - : getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false); - } - - /// @notice Gets the amount0 delta between two prices - /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper), - /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower)) - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The amount of usable liquidity - /// @param roundUp Whether to round the amount up or down - /// @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices - function getAmount0Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - uint128 liquidity, - bool roundUp - ) internal pure returns (uint256 amount0) { - if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); - - uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; - uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96; - - require(sqrtRatioAX96 > 0); - - return - roundUp - ? UnsafeMath.divRoundingUp( - FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), - sqrtRatioAX96 - ) - : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96; - } - - /// @notice Gets the amount1 delta between two prices - /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower)) - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The amount of usable liquidity - /// @param roundUp Whether to round the amount up, or down - /// @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices - function getAmount1Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - uint128 liquidity, - bool roundUp - ) internal pure returns (uint256 amount1) { - if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); - - return - roundUp - ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96) - : FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96); - } - - /// @notice Helper that gets signed token0 delta - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The change in liquidity for which to compute the amount0 delta - /// @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices - function getAmount0Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - int128 liquidity - ) internal pure returns (int256 amount0) { - return - liquidity < 0 - ? -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() - : getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); - } - - /// @notice Helper that gets signed token1 delta - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The change in liquidity for which to compute the amount1 delta - /// @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices - function getAmount1Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - int128 liquidity - ) internal pure returns (int256 amount1) { - return - liquidity < 0 - ? -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() - : getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol deleted file mode 100644 index ee176fbee..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './FullMath.sol'; -import './SqrtPriceMath.sol'; - -/// @title Computes the result of a swap within ticks -/// @notice Contains methods for computing the result of a swap within a single tick price range, i.e., a single tick. -library SwapMath { - /// @notice Computes the result of swapping some amount in, or amount out, given the parameters of the swap - /// @dev The fee, plus the amount in, will never exceed the amount remaining if the swap's `amountSpecified` is positive - /// @param sqrtRatioCurrentX96 The current sqrt price of the pool - /// @param sqrtRatioTargetX96 The price that cannot be exceeded, from which the direction of the swap is inferred - /// @param liquidity The usable liquidity - /// @param amountRemaining How much input or output amount is remaining to be swapped in/out - /// @param feePips The fee taken from the input amount, expressed in hundredths of a bip - /// @return sqrtRatioNextX96 The price after swapping the amount in/out, not to exceed the price target - /// @return amountIn The amount to be swapped in, of either token0 or token1, based on the direction of the swap - /// @return amountOut The amount to be received, of either token0 or token1, based on the direction of the swap - /// @return feeAmount The amount of input that will be taken as a fee - function computeSwapStep( - uint160 sqrtRatioCurrentX96, - uint160 sqrtRatioTargetX96, - uint128 liquidity, - int256 amountRemaining, - uint24 feePips - ) - internal - pure - returns ( - uint160 sqrtRatioNextX96, - uint256 amountIn, - uint256 amountOut, - uint256 feeAmount - ) - { - bool zeroForOne = sqrtRatioCurrentX96 >= sqrtRatioTargetX96; - bool exactIn = amountRemaining >= 0; - - if (exactIn) { - uint256 amountRemainingLessFee = FullMath.mulDiv(uint256(amountRemaining), 1e6 - feePips, 1e6); - amountIn = zeroForOne - ? SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, true) - : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, true); - if (amountRemainingLessFee >= amountIn) sqrtRatioNextX96 = sqrtRatioTargetX96; - else - sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromInput( - sqrtRatioCurrentX96, - liquidity, - amountRemainingLessFee, - zeroForOne - ); - } else { - amountOut = zeroForOne - ? SqrtPriceMath.getAmount1Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, false) - : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, false); - if (uint256(-amountRemaining) >= amountOut) sqrtRatioNextX96 = sqrtRatioTargetX96; - else - sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromOutput( - sqrtRatioCurrentX96, - liquidity, - uint256(-amountRemaining), - zeroForOne - ); - } - - bool max = sqrtRatioTargetX96 == sqrtRatioNextX96; - - // get the input/output amounts - if (zeroForOne) { - amountIn = max && exactIn - ? amountIn - : SqrtPriceMath.getAmount0Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true); - amountOut = max && !exactIn - ? amountOut - : SqrtPriceMath.getAmount1Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, false); - } else { - amountIn = max && exactIn - ? amountIn - : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, true); - amountOut = max && !exactIn - ? amountOut - : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, false); - } - - // cap the output amount to not exceed the remaining output amount - if (!exactIn && amountOut > uint256(-amountRemaining)) { - amountOut = uint256(-amountRemaining); - } - - if (exactIn && sqrtRatioNextX96 != sqrtRatioTargetX96) { - // we didn't reach the target, so take the remainder of the maximum input as fee - feeAmount = uint256(amountRemaining) - amountIn; - } else { - feeAmount = FullMath.mulDivRoundingUp(amountIn, feePips, 1e6 - feePips); - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol deleted file mode 100644 index 13d342849..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol +++ /dev/null @@ -1,183 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './LowGasSafeMath.sol'; -import './SafeCast.sol'; - -import './TickMath.sol'; -import './LiquidityMath.sol'; - -/// @title Tick -/// @notice Contains functions for managing tick processes and relevant calculations -library Tick { - using LowGasSafeMath for int256; - using SafeCast for int256; - - // info stored for each initialized individual tick - struct Info { - // the total position liquidity that references this tick - uint128 liquidityGross; - // amount of net liquidity added (subtracted) when tick is crossed from left to right (right to left), - int128 liquidityNet; - // fee growth per unit of liquidity on the _other_ side of this tick (relative to the current tick) - // only has relative meaning, not absolute — the value depends on when the tick is initialized - uint256 feeGrowthOutside0X128; - uint256 feeGrowthOutside1X128; - // the cumulative tick value on the other side of the tick - int56 tickCumulativeOutside; - // the seconds per unit of liquidity on the _other_ side of this tick (relative to the current tick) - // only has relative meaning, not absolute — the value depends on when the tick is initialized - uint160 secondsPerLiquidityOutsideX128; - // the seconds spent on the other side of the tick (relative to the current tick) - // only has relative meaning, not absolute — the value depends on when the tick is initialized - uint32 secondsOutside; - // true iff the tick is initialized, i.e. the value is exactly equivalent to the expression liquidityGross != 0 - // these 8 bits are set to prevent fresh sstores when crossing newly initialized ticks - bool initialized; - } - - /// @notice Derives max liquidity per tick from given tick spacing - /// @dev Executed within the pool constructor - /// @param tickSpacing The amount of required tick separation, realized in multiples of `tickSpacing` - /// e.g., a tickSpacing of 3 requires ticks to be initialized every 3rd tick i.e., ..., -6, -3, 0, 3, 6, ... - /// @return The max liquidity per tick - function tickSpacingToMaxLiquidityPerTick(int24 tickSpacing) internal pure returns (uint128) { - int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing; - int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing; - uint24 numTicks = uint24((maxTick - minTick) / tickSpacing) + 1; - return type(uint128).max / numTicks; - } - - /// @notice Retrieves fee growth data - /// @param self The mapping containing all tick information for initialized ticks - /// @param tickLower The lower tick boundary of the position - /// @param tickUpper The upper tick boundary of the position - /// @param tickCurrent The current tick - /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 - /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 - /// @return feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries - /// @return feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries - function getFeeGrowthInside( - mapping(int24 => Tick.Info) storage self, - int24 tickLower, - int24 tickUpper, - int24 tickCurrent, - uint256 feeGrowthGlobal0X128, - uint256 feeGrowthGlobal1X128 - ) internal view returns (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) { - Info storage lower = self[tickLower]; - Info storage upper = self[tickUpper]; - - // calculate fee growth below - uint256 feeGrowthBelow0X128; - uint256 feeGrowthBelow1X128; - if (tickCurrent >= tickLower) { - feeGrowthBelow0X128 = lower.feeGrowthOutside0X128; - feeGrowthBelow1X128 = lower.feeGrowthOutside1X128; - } else { - feeGrowthBelow0X128 = feeGrowthGlobal0X128 - lower.feeGrowthOutside0X128; - feeGrowthBelow1X128 = feeGrowthGlobal1X128 - lower.feeGrowthOutside1X128; - } - - // calculate fee growth above - uint256 feeGrowthAbove0X128; - uint256 feeGrowthAbove1X128; - if (tickCurrent < tickUpper) { - feeGrowthAbove0X128 = upper.feeGrowthOutside0X128; - feeGrowthAbove1X128 = upper.feeGrowthOutside1X128; - } else { - feeGrowthAbove0X128 = feeGrowthGlobal0X128 - upper.feeGrowthOutside0X128; - feeGrowthAbove1X128 = feeGrowthGlobal1X128 - upper.feeGrowthOutside1X128; - } - - feeGrowthInside0X128 = feeGrowthGlobal0X128 - feeGrowthBelow0X128 - feeGrowthAbove0X128; - feeGrowthInside1X128 = feeGrowthGlobal1X128 - feeGrowthBelow1X128 - feeGrowthAbove1X128; - } - - /// @notice Updates a tick and returns true if the tick was flipped from initialized to uninitialized, or vice versa - /// @param self The mapping containing all tick information for initialized ticks - /// @param tick The tick that will be updated - /// @param tickCurrent The current tick - /// @param liquidityDelta A new amount of liquidity to be added (subtracted) when tick is crossed from left to right (right to left) - /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 - /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 - /// @param secondsPerLiquidityCumulativeX128 The all-time seconds per max(1, liquidity) of the pool - /// @param time The current block timestamp cast to a uint32 - /// @param upper true for updating a position's upper tick, or false for updating a position's lower tick - /// @param maxLiquidity The maximum liquidity allocation for a single tick - /// @return flipped Whether the tick was flipped from initialized to uninitialized, or vice versa - function update( - mapping(int24 => Tick.Info) storage self, - int24 tick, - int24 tickCurrent, - int128 liquidityDelta, - uint256 feeGrowthGlobal0X128, - uint256 feeGrowthGlobal1X128, - uint160 secondsPerLiquidityCumulativeX128, - int56 tickCumulative, - uint32 time, - bool upper, - uint128 maxLiquidity - ) internal returns (bool flipped) { - Tick.Info storage info = self[tick]; - - uint128 liquidityGrossBefore = info.liquidityGross; - uint128 liquidityGrossAfter = LiquidityMath.addDelta(liquidityGrossBefore, liquidityDelta); - - require(liquidityGrossAfter <= maxLiquidity, 'LO'); - - flipped = (liquidityGrossAfter == 0) != (liquidityGrossBefore == 0); - - if (liquidityGrossBefore == 0) { - // by convention, we assume that all growth before a tick was initialized happened _below_ the tick - if (tick <= tickCurrent) { - info.feeGrowthOutside0X128 = feeGrowthGlobal0X128; - info.feeGrowthOutside1X128 = feeGrowthGlobal1X128; - info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128; - info.tickCumulativeOutside = tickCumulative; - info.secondsOutside = time; - } - info.initialized = true; - } - - info.liquidityGross = liquidityGrossAfter; - - // when the lower (upper) tick is crossed left to right (right to left), liquidity must be added (removed) - info.liquidityNet = upper - ? int256(info.liquidityNet).sub(liquidityDelta).toInt128() - : int256(info.liquidityNet).add(liquidityDelta).toInt128(); - } - - /// @notice Clears tick data - /// @param self The mapping containing all initialized tick information for initialized ticks - /// @param tick The tick that will be cleared - function clear(mapping(int24 => Tick.Info) storage self, int24 tick) internal { - delete self[tick]; - } - - /// @notice Transitions to next tick as needed by price movement - /// @param self The mapping containing all tick information for initialized ticks - /// @param tick The destination tick of the transition - /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 - /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 - /// @param secondsPerLiquidityCumulativeX128 The current seconds per liquidity - /// @param time The current block.timestamp - /// @return liquidityNet The amount of liquidity added (subtracted) when tick is crossed from left to right (right to left) - function cross( - mapping(int24 => Tick.Info) storage self, - int24 tick, - uint256 feeGrowthGlobal0X128, - uint256 feeGrowthGlobal1X128, - uint160 secondsPerLiquidityCumulativeX128, - int56 tickCumulative, - uint32 time - ) internal returns (int128 liquidityNet) { - Tick.Info storage info = self[tick]; - info.feeGrowthOutside0X128 = feeGrowthGlobal0X128 - info.feeGrowthOutside0X128; - info.feeGrowthOutside1X128 = feeGrowthGlobal1X128 - info.feeGrowthOutside1X128; - info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128 - info.secondsPerLiquidityOutsideX128; - info.tickCumulativeOutside = tickCumulative - info.tickCumulativeOutside; - info.secondsOutside = time - info.secondsOutside; - liquidityNet = info.liquidityNet; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol deleted file mode 100644 index 3c4358577..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './BitMath.sol'; - -/// @title Packed tick initialized state library -/// @notice Stores a packed mapping of tick index to its initialized state -/// @dev The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word. -library TickBitmap { - /// @notice Computes the position in the mapping where the initialized bit for a tick lives - /// @param tick The tick for which to compute the position - /// @return wordPos The key in the mapping containing the word in which the bit is stored - /// @return bitPos The bit position in the word where the flag is stored - function position(int24 tick) private pure returns (int16 wordPos, uint8 bitPos) { - wordPos = int16(tick >> 8); - bitPos = uint8(tick % 256); - } - - /// @notice Flips the initialized state for a given tick from false to true, or vice versa - /// @param self The mapping in which to flip the tick - /// @param tick The tick to flip - /// @param tickSpacing The spacing between usable ticks - function flipTick( - mapping(int16 => uint256) storage self, - int24 tick, - int24 tickSpacing - ) internal { - require(tick % tickSpacing == 0); // ensure that the tick is spaced - (int16 wordPos, uint8 bitPos) = position(tick / tickSpacing); - uint256 mask = 1 << bitPos; - self[wordPos] ^= mask; - } - - /// @notice Returns the next initialized tick contained in the same word (or adjacent word) as the tick that is either - /// to the left (less than or equal to) or right (greater than) of the given tick - /// @param self The mapping in which to compute the next initialized tick - /// @param tick The starting tick - /// @param tickSpacing The spacing between usable ticks - /// @param lte Whether to search for the next initialized tick to the left (less than or equal to the starting tick) - /// @return next The next initialized or uninitialized tick up to 256 ticks away from the current tick - /// @return initialized Whether the next tick is initialized, as the function only searches within up to 256 ticks - function nextInitializedTickWithinOneWord( - mapping(int16 => uint256) storage self, - int24 tick, - int24 tickSpacing, - bool lte - ) internal view returns (int24 next, bool initialized) { - int24 compressed = tick / tickSpacing; - if (tick < 0 && tick % tickSpacing != 0) compressed--; // round towards negative infinity - - if (lte) { - (int16 wordPos, uint8 bitPos) = position(compressed); - // all the 1s at or to the right of the current bitPos - uint256 mask = (1 << bitPos) - 1 + (1 << bitPos); - uint256 masked = self[wordPos] & mask; - - // if there are no initialized ticks to the right of or at the current tick, return rightmost in the word - initialized = masked != 0; - // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick - next = initialized - ? (compressed - int24(bitPos - BitMath.mostSignificantBit(masked))) * tickSpacing - : (compressed - int24(bitPos)) * tickSpacing; - } else { - // start from the word of the next tick, since the current tick state doesn't matter - (int16 wordPos, uint8 bitPos) = position(compressed + 1); - // all the 1s at or to the left of the bitPos - uint256 mask = ~((1 << bitPos) - 1); - uint256 masked = self[wordPos] & mask; - - // if there are no initialized ticks to the left of the current tick, return leftmost in the word - initialized = masked != 0; - // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick - next = initialized - ? (compressed + 1 + int24(BitMath.leastSignificantBit(masked) - bitPos)) * tickSpacing - : (compressed + 1 + int24(type(uint8).max - bitPos)) * tickSpacing; - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol deleted file mode 100644 index 378e44528..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol +++ /dev/null @@ -1,205 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Math library for computing sqrt prices from ticks and vice versa -/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports -/// prices between 2**-128 and 2**128 -library TickMath { - /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 - int24 internal constant MIN_TICK = -887272; - /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 - int24 internal constant MAX_TICK = -MIN_TICK; - - /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) - uint160 internal constant MIN_SQRT_RATIO = 4295128739; - /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) - uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; - - /// @notice Calculates sqrt(1.0001^tick) * 2^96 - /// @dev Throws if |tick| > max tick - /// @param tick The input tick for the above formula - /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) - /// at the given tick - function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { - uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); - require(absTick <= uint256(MAX_TICK), 'T'); - - uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000; - if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; - if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; - if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; - if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; - if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; - if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; - if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; - if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; - if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; - if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; - if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; - if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; - if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; - if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; - if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; - if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; - if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; - if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; - if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; - - if (tick > 0) ratio = type(uint256).max / ratio; - - // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. - // we then downcast because we know the result always fits within 160 bits due to our tick input constraint - // we round up in the division so getTickAtSqrtRatio of the output price is always consistent - sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); - } - - /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio - /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may - /// ever return. - /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96 - /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio - function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { - // second inequality must be < because the price can never reach the price at the max tick - require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R'); - uint256 ratio = uint256(sqrtPriceX96) << 32; - - uint256 r = ratio; - uint256 msb = 0; - - assembly { - let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(5, gt(r, 0xFFFFFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(4, gt(r, 0xFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(3, gt(r, 0xFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(2, gt(r, 0xF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(1, gt(r, 0x3)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := gt(r, 0x1) - msb := or(msb, f) - } - - if (msb >= 128) r = ratio >> (msb - 127); - else r = ratio << (127 - msb); - - int256 log_2 = (int256(msb) - 128) << 64; - - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(63, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(62, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(61, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(60, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(59, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(58, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(57, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(56, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(55, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(54, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(53, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(52, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(51, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(50, f)) - } - - int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number - - int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); - int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); - - tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol deleted file mode 100644 index 25d630902..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.0; - -import '../interfaces/IERC20Minimal.sol'; - -/// @title TransferHelper -/// @notice Contains helper methods for interacting with ERC20 tokens that do not consistently return true/false -library TransferHelper { - /// @notice Transfers tokens from msg.sender to a recipient - /// @dev Calls transfer on token contract, errors with TF if transfer fails - /// @param token The contract address of the token which will be transferred - /// @param to The recipient of the transfer - /// @param value The value of the transfer - function safeTransfer( - address token, - address to, - uint256 value - ) internal { - (bool success, bytes memory data) = - token.call(abi.encodeWithSelector(IERC20Minimal.transfer.selector, to, value)); - require(success && (data.length == 0 || abi.decode(data, (bool))), 'TF'); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol deleted file mode 100644 index f62f84676..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Math functions that do not check inputs or outputs -/// @notice Contains methods that perform common math functions but do not do any overflow or underflow checks -library UnsafeMath { - /// @notice Returns ceil(x / y) - /// @dev division by 0 has unspecified behavior, and must be checked externally - /// @param x The dividend - /// @param y The divisor - /// @return z The quotient, ceil(x / y) - function divRoundingUp(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly { - z := add(div(x, y), gt(mod(x, y), 0)) - } - } -} From d4b8ff011e71ecbc1388130f16075e45fa20dbd8 Mon Sep 17 00:00:00 2001 From: noxx Date: Sun, 17 Jul 2022 21:05:55 +0100 Subject: [PATCH 096/202] update the array name output in the table to include index --- .../contracts/NoDelegateCall.sol | 27 + .../contracts/UniswapV3Pool.sol | 869 ++++++++++++++++++ .../contracts/interfaces/IERC20Minimal.sol | 52 ++ .../interfaces/IUniswapV3Factory.sol | 78 ++ .../contracts/interfaces/IUniswapV3Pool.sol | 24 + .../interfaces/IUniswapV3PoolDeployer.sol | 26 + .../callback/IUniswapV3FlashCallback.sol | 18 + .../callback/IUniswapV3MintCallback.sol | 18 + .../callback/IUniswapV3SwapCallback.sol | 21 + .../interfaces/pool/IUniswapV3PoolActions.sol | 103 +++ .../pool/IUniswapV3PoolDerivedState.sol | 40 + .../interfaces/pool/IUniswapV3PoolEvents.sol | 121 +++ .../pool/IUniswapV3PoolImmutables.sol | 35 + .../pool/IUniswapV3PoolOwnerActions.sol | 23 + .../interfaces/pool/IUniswapV3PoolState.sol | 116 +++ .../contracts/libraries/BitMath.sol | 94 ++ .../contracts/libraries/FixedPoint128.sol | 8 + .../contracts/libraries/FixedPoint96.sol | 10 + .../contracts/libraries/FullMath.sol | 124 +++ .../contracts/libraries/LiquidityMath.sol | 17 + .../contracts/libraries/LowGasSafeMath.sol | 46 + .../contracts/libraries/Oracle.sol | 325 +++++++ .../contracts/libraries/Position.sol | 88 ++ .../contracts/libraries/SafeCast.sol | 28 + .../contracts/libraries/SqrtPriceMath.sol | 227 +++++ .../contracts/libraries/SwapMath.sol | 98 ++ .../contracts/libraries/Tick.sol | 183 ++++ .../contracts/libraries/TickBitmap.sol | 78 ++ .../contracts/libraries/TickMath.sol | 205 +++++ .../contracts/libraries/TransferHelper.sol | 23 + .../contracts/libraries/UnsafeMath.sol | 17 + slither/tools/read_storage/read_storage.py | 2 +- 32 files changed, 3143 insertions(+), 1 deletion(-) create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol create mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol new file mode 100644 index 000000000..5411979dc --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity =0.7.6; + +/// @title Prevents delegatecall to a contract +/// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract +abstract contract NoDelegateCall { + /// @dev The original address of this contract + address private immutable original; + + constructor() { + // Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode. + // In other words, this variable won't change when it's checked at runtime. + original = address(this); + } + + /// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method, + /// and the use of immutable means the address bytes are copied in every place the modifier is used. + function checkNotDelegateCall() private view { + require(address(this) == original); + } + + /// @notice Prevents delegatecall into the modified method + modifier noDelegateCall() { + checkNotDelegateCall(); + _; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol new file mode 100644 index 000000000..9e0982127 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol @@ -0,0 +1,869 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity =0.7.6; + +import './interfaces/IUniswapV3Pool.sol'; + +import './NoDelegateCall.sol'; + +import './libraries/LowGasSafeMath.sol'; +import './libraries/SafeCast.sol'; +import './libraries/Tick.sol'; +import './libraries/TickBitmap.sol'; +import './libraries/Position.sol'; +import './libraries/Oracle.sol'; + +import './libraries/FullMath.sol'; +import './libraries/FixedPoint128.sol'; +import './libraries/TransferHelper.sol'; +import './libraries/TickMath.sol'; +import './libraries/LiquidityMath.sol'; +import './libraries/SqrtPriceMath.sol'; +import './libraries/SwapMath.sol'; + +import './interfaces/IUniswapV3PoolDeployer.sol'; +import './interfaces/IUniswapV3Factory.sol'; +import './interfaces/IERC20Minimal.sol'; +import './interfaces/callback/IUniswapV3MintCallback.sol'; +import './interfaces/callback/IUniswapV3SwapCallback.sol'; +import './interfaces/callback/IUniswapV3FlashCallback.sol'; + +contract UniswapV3Pool is IUniswapV3Pool, NoDelegateCall { + using LowGasSafeMath for uint256; + using LowGasSafeMath for int256; + using SafeCast for uint256; + using SafeCast for int256; + using Tick for mapping(int24 => Tick.Info); + using TickBitmap for mapping(int16 => uint256); + using Position for mapping(bytes32 => Position.Info); + using Position for Position.Info; + using Oracle for Oracle.Observation[65535]; + + /// @inheritdoc IUniswapV3PoolImmutables + address public immutable override factory; + /// @inheritdoc IUniswapV3PoolImmutables + address public immutable override token0; + /// @inheritdoc IUniswapV3PoolImmutables + address public immutable override token1; + /// @inheritdoc IUniswapV3PoolImmutables + uint24 public immutable override fee; + + /// @inheritdoc IUniswapV3PoolImmutables + int24 public immutable override tickSpacing; + + /// @inheritdoc IUniswapV3PoolImmutables + uint128 public immutable override maxLiquidityPerTick; + + struct Slot0 { + // the current price + uint160 sqrtPriceX96; + // the current tick + int24 tick; + // the most-recently updated index of the observations array + uint16 observationIndex; + // the current maximum number of observations that are being stored + uint16 observationCardinality; + // the next maximum number of observations to store, triggered in observations.write + uint16 observationCardinalityNext; + // the current protocol fee as a percentage of the swap fee taken on withdrawal + // represented as an integer denominator (1/x)% + uint8 feeProtocol; + // whether the pool is locked + bool unlocked; + } + /// @inheritdoc IUniswapV3PoolState + Slot0 public override slot0; + + /// @inheritdoc IUniswapV3PoolState + uint256 public override feeGrowthGlobal0X128; + /// @inheritdoc IUniswapV3PoolState + uint256 public override feeGrowthGlobal1X128; + + // accumulated protocol fees in token0/token1 units + struct ProtocolFees { + uint128 token0; + uint128 token1; + } + /// @inheritdoc IUniswapV3PoolState + ProtocolFees public override protocolFees; + + /// @inheritdoc IUniswapV3PoolState + uint128 public override liquidity; + + /// @inheritdoc IUniswapV3PoolState + mapping(int24 => Tick.Info) public override ticks; + /// @inheritdoc IUniswapV3PoolState + mapping(int16 => uint256) public override tickBitmap; + /// @inheritdoc IUniswapV3PoolState + mapping(bytes32 => Position.Info) public override positions; + /// @inheritdoc IUniswapV3PoolState + Oracle.Observation[65535] public override observations; + + /// @dev Mutually exclusive reentrancy protection into the pool to/from a method. This method also prevents entrance + /// to a function before the pool is initialized. The reentrancy guard is required throughout the contract because + /// we use balance checks to determine the payment status of interactions such as mint, swap and flash. + modifier lock() { + require(slot0.unlocked, 'LOK'); + slot0.unlocked = false; + _; + slot0.unlocked = true; + } + + /// @dev Prevents calling a function from anyone except the address returned by IUniswapV3Factory#owner() + modifier onlyFactoryOwner() { + require(msg.sender == IUniswapV3Factory(factory).owner()); + _; + } + + constructor() { + int24 _tickSpacing; + (factory, token0, token1, fee, _tickSpacing) = IUniswapV3PoolDeployer(msg.sender).parameters(); + tickSpacing = _tickSpacing; + + maxLiquidityPerTick = Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing); + } + + /// @dev Common checks for valid tick inputs. + function checkTicks(int24 tickLower, int24 tickUpper) private pure { + require(tickLower < tickUpper, 'TLU'); + require(tickLower >= TickMath.MIN_TICK, 'TLM'); + require(tickUpper <= TickMath.MAX_TICK, 'TUM'); + } + + /// @dev Returns the block timestamp truncated to 32 bits, i.e. mod 2**32. This method is overridden in tests. + function _blockTimestamp() internal view virtual returns (uint32) { + return uint32(block.timestamp); // truncation is desired + } + + /// @dev Get the pool's balance of token0 + /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize + /// check + function balance0() private view returns (uint256) { + (bool success, bytes memory data) = + token0.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); + require(success && data.length >= 32); + return abi.decode(data, (uint256)); + } + + /// @dev Get the pool's balance of token1 + /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize + /// check + function balance1() private view returns (uint256) { + (bool success, bytes memory data) = + token1.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); + require(success && data.length >= 32); + return abi.decode(data, (uint256)); + } + + /// @inheritdoc IUniswapV3PoolDerivedState + function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) + external + view + override + noDelegateCall + returns ( + int56 tickCumulativeInside, + uint160 secondsPerLiquidityInsideX128, + uint32 secondsInside + ) + { + checkTicks(tickLower, tickUpper); + + int56 tickCumulativeLower; + int56 tickCumulativeUpper; + uint160 secondsPerLiquidityOutsideLowerX128; + uint160 secondsPerLiquidityOutsideUpperX128; + uint32 secondsOutsideLower; + uint32 secondsOutsideUpper; + + { + Tick.Info storage lower = ticks[tickLower]; + Tick.Info storage upper = ticks[tickUpper]; + bool initializedLower; + (tickCumulativeLower, secondsPerLiquidityOutsideLowerX128, secondsOutsideLower, initializedLower) = ( + lower.tickCumulativeOutside, + lower.secondsPerLiquidityOutsideX128, + lower.secondsOutside, + lower.initialized + ); + require(initializedLower); + + bool initializedUpper; + (tickCumulativeUpper, secondsPerLiquidityOutsideUpperX128, secondsOutsideUpper, initializedUpper) = ( + upper.tickCumulativeOutside, + upper.secondsPerLiquidityOutsideX128, + upper.secondsOutside, + upper.initialized + ); + require(initializedUpper); + } + + Slot0 memory _slot0 = slot0; + + if (_slot0.tick < tickLower) { + return ( + tickCumulativeLower - tickCumulativeUpper, + secondsPerLiquidityOutsideLowerX128 - secondsPerLiquidityOutsideUpperX128, + secondsOutsideLower - secondsOutsideUpper + ); + } else if (_slot0.tick < tickUpper) { + uint32 time = _blockTimestamp(); + (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = + observations.observeSingle( + time, + 0, + _slot0.tick, + _slot0.observationIndex, + liquidity, + _slot0.observationCardinality + ); + return ( + tickCumulative - tickCumulativeLower - tickCumulativeUpper, + secondsPerLiquidityCumulativeX128 - + secondsPerLiquidityOutsideLowerX128 - + secondsPerLiquidityOutsideUpperX128, + time - secondsOutsideLower - secondsOutsideUpper + ); + } else { + return ( + tickCumulativeUpper - tickCumulativeLower, + secondsPerLiquidityOutsideUpperX128 - secondsPerLiquidityOutsideLowerX128, + secondsOutsideUpper - secondsOutsideLower + ); + } + } + + /// @inheritdoc IUniswapV3PoolDerivedState + function observe(uint32[] calldata secondsAgos) + external + view + override + noDelegateCall + returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) + { + return + observations.observe( + _blockTimestamp(), + secondsAgos, + slot0.tick, + slot0.observationIndex, + liquidity, + slot0.observationCardinality + ); + } + + /// @inheritdoc IUniswapV3PoolActions + function increaseObservationCardinalityNext(uint16 observationCardinalityNext) + external + override + lock + noDelegateCall + { + uint16 observationCardinalityNextOld = slot0.observationCardinalityNext; // for the event + uint16 observationCardinalityNextNew = + observations.grow(observationCardinalityNextOld, observationCardinalityNext); + slot0.observationCardinalityNext = observationCardinalityNextNew; + if (observationCardinalityNextOld != observationCardinalityNextNew) + emit IncreaseObservationCardinalityNext(observationCardinalityNextOld, observationCardinalityNextNew); + } + + /// @inheritdoc IUniswapV3PoolActions + /// @dev not locked because it initializes unlocked + function initialize(uint160 sqrtPriceX96) external override { + require(slot0.sqrtPriceX96 == 0, 'AI'); + + int24 tick = TickMath.getTickAtSqrtRatio(sqrtPriceX96); + + (uint16 cardinality, uint16 cardinalityNext) = observations.initialize(_blockTimestamp()); + + slot0 = Slot0({ + sqrtPriceX96: sqrtPriceX96, + tick: tick, + observationIndex: 0, + observationCardinality: cardinality, + observationCardinalityNext: cardinalityNext, + feeProtocol: 0, + unlocked: true + }); + + emit Initialize(sqrtPriceX96, tick); + } + + struct ModifyPositionParams { + // the address that owns the position + address owner; + // the lower and upper tick of the position + int24 tickLower; + int24 tickUpper; + // any change in liquidity + int128 liquidityDelta; + } + + /// @dev Effect some changes to a position + /// @param params the position details and the change to the position's liquidity to effect + /// @return position a storage pointer referencing the position with the given owner and tick range + /// @return amount0 the amount of token0 owed to the pool, negative if the pool should pay the recipient + /// @return amount1 the amount of token1 owed to the pool, negative if the pool should pay the recipient + function _modifyPosition(ModifyPositionParams memory params) + private + noDelegateCall + returns ( + Position.Info storage position, + int256 amount0, + int256 amount1 + ) + { + checkTicks(params.tickLower, params.tickUpper); + + Slot0 memory _slot0 = slot0; // SLOAD for gas optimization + + position = _updatePosition( + params.owner, + params.tickLower, + params.tickUpper, + params.liquidityDelta, + _slot0.tick + ); + + if (params.liquidityDelta != 0) { + if (_slot0.tick < params.tickLower) { + // current tick is below the passed range; liquidity can only become in range by crossing from left to + // right, when we'll need _more_ token0 (it's becoming more valuable) so user must provide it + amount0 = SqrtPriceMath.getAmount0Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + } else if (_slot0.tick < params.tickUpper) { + // current tick is inside the passed range + uint128 liquidityBefore = liquidity; // SLOAD for gas optimization + + // write an oracle entry + (slot0.observationIndex, slot0.observationCardinality) = observations.write( + _slot0.observationIndex, + _blockTimestamp(), + _slot0.tick, + liquidityBefore, + _slot0.observationCardinality, + _slot0.observationCardinalityNext + ); + + amount0 = SqrtPriceMath.getAmount0Delta( + _slot0.sqrtPriceX96, + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + amount1 = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + _slot0.sqrtPriceX96, + params.liquidityDelta + ); + + liquidity = LiquidityMath.addDelta(liquidityBefore, params.liquidityDelta); + } else { + // current tick is above the passed range; liquidity can only become in range by crossing from right to + // left, when we'll need _more_ token1 (it's becoming more valuable) so user must provide it + amount1 = SqrtPriceMath.getAmount1Delta( + TickMath.getSqrtRatioAtTick(params.tickLower), + TickMath.getSqrtRatioAtTick(params.tickUpper), + params.liquidityDelta + ); + } + } + } + + /// @dev Gets and updates a position with the given liquidity delta + /// @param owner the owner of the position + /// @param tickLower the lower tick of the position's tick range + /// @param tickUpper the upper tick of the position's tick range + /// @param tick the current tick, passed to avoid sloads + function _updatePosition( + address owner, + int24 tickLower, + int24 tickUpper, + int128 liquidityDelta, + int24 tick + ) private returns (Position.Info storage position) { + position = positions.get(owner, tickLower, tickUpper); + + uint256 _feeGrowthGlobal0X128 = feeGrowthGlobal0X128; // SLOAD for gas optimization + uint256 _feeGrowthGlobal1X128 = feeGrowthGlobal1X128; // SLOAD for gas optimization + + // if we need to update the ticks, do it + bool flippedLower; + bool flippedUpper; + if (liquidityDelta != 0) { + uint32 time = _blockTimestamp(); + (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = + observations.observeSingle( + time, + 0, + slot0.tick, + slot0.observationIndex, + liquidity, + slot0.observationCardinality + ); + + flippedLower = ticks.update( + tickLower, + tick, + liquidityDelta, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128, + secondsPerLiquidityCumulativeX128, + tickCumulative, + time, + false, + maxLiquidityPerTick + ); + flippedUpper = ticks.update( + tickUpper, + tick, + liquidityDelta, + _feeGrowthGlobal0X128, + _feeGrowthGlobal1X128, + secondsPerLiquidityCumulativeX128, + tickCumulative, + time, + true, + maxLiquidityPerTick + ); + + if (flippedLower) { + tickBitmap.flipTick(tickLower, tickSpacing); + } + if (flippedUpper) { + tickBitmap.flipTick(tickUpper, tickSpacing); + } + } + + (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = + ticks.getFeeGrowthInside(tickLower, tickUpper, tick, _feeGrowthGlobal0X128, _feeGrowthGlobal1X128); + + position.update(liquidityDelta, feeGrowthInside0X128, feeGrowthInside1X128); + + // clear any tick data that is no longer needed + if (liquidityDelta < 0) { + if (flippedLower) { + ticks.clear(tickLower); + } + if (flippedUpper) { + ticks.clear(tickUpper); + } + } + } + + /// @inheritdoc IUniswapV3PoolActions + /// @dev noDelegateCall is applied indirectly via _modifyPosition + function mint( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount, + bytes calldata data + ) external override lock returns (uint256 amount0, uint256 amount1) { + require(amount > 0); + (, int256 amount0Int, int256 amount1Int) = + _modifyPosition( + ModifyPositionParams({ + owner: recipient, + tickLower: tickLower, + tickUpper: tickUpper, + liquidityDelta: int256(amount).toInt128() + }) + ); + + amount0 = uint256(amount0Int); + amount1 = uint256(amount1Int); + + uint256 balance0Before; + uint256 balance1Before; + if (amount0 > 0) balance0Before = balance0(); + if (amount1 > 0) balance1Before = balance1(); + IUniswapV3MintCallback(msg.sender).uniswapV3MintCallback(amount0, amount1, data); + if (amount0 > 0) require(balance0Before.add(amount0) <= balance0(), 'M0'); + if (amount1 > 0) require(balance1Before.add(amount1) <= balance1(), 'M1'); + + emit Mint(msg.sender, recipient, tickLower, tickUpper, amount, amount0, amount1); + } + + /// @inheritdoc IUniswapV3PoolActions + function collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested + ) external override lock returns (uint128 amount0, uint128 amount1) { + // we don't need to checkTicks here, because invalid positions will never have non-zero tokensOwed{0,1} + Position.Info storage position = positions.get(msg.sender, tickLower, tickUpper); + + amount0 = amount0Requested > position.tokensOwed0 ? position.tokensOwed0 : amount0Requested; + amount1 = amount1Requested > position.tokensOwed1 ? position.tokensOwed1 : amount1Requested; + + if (amount0 > 0) { + position.tokensOwed0 -= amount0; + TransferHelper.safeTransfer(token0, recipient, amount0); + } + if (amount1 > 0) { + position.tokensOwed1 -= amount1; + TransferHelper.safeTransfer(token1, recipient, amount1); + } + + emit Collect(msg.sender, recipient, tickLower, tickUpper, amount0, amount1); + } + + /// @inheritdoc IUniswapV3PoolActions + /// @dev noDelegateCall is applied indirectly via _modifyPosition + function burn( + int24 tickLower, + int24 tickUpper, + uint128 amount + ) external override lock returns (uint256 amount0, uint256 amount1) { + (Position.Info storage position, int256 amount0Int, int256 amount1Int) = + _modifyPosition( + ModifyPositionParams({ + owner: msg.sender, + tickLower: tickLower, + tickUpper: tickUpper, + liquidityDelta: -int256(amount).toInt128() + }) + ); + + amount0 = uint256(-amount0Int); + amount1 = uint256(-amount1Int); + + if (amount0 > 0 || amount1 > 0) { + (position.tokensOwed0, position.tokensOwed1) = ( + position.tokensOwed0 + uint128(amount0), + position.tokensOwed1 + uint128(amount1) + ); + } + + emit Burn(msg.sender, tickLower, tickUpper, amount, amount0, amount1); + } + + struct SwapCache { + // the protocol fee for the input token + uint8 feeProtocol; + // liquidity at the beginning of the swap + uint128 liquidityStart; + // the timestamp of the current block + uint32 blockTimestamp; + // the current value of the tick accumulator, computed only if we cross an initialized tick + int56 tickCumulative; + // the current value of seconds per liquidity accumulator, computed only if we cross an initialized tick + uint160 secondsPerLiquidityCumulativeX128; + // whether we've computed and cached the above two accumulators + bool computedLatestObservation; + } + + // the top level state of the swap, the results of which are recorded in storage at the end + struct SwapState { + // the amount remaining to be swapped in/out of the input/output asset + int256 amountSpecifiedRemaining; + // the amount already swapped out/in of the output/input asset + int256 amountCalculated; + // current sqrt(price) + uint160 sqrtPriceX96; + // the tick associated with the current price + int24 tick; + // the global fee growth of the input token + uint256 feeGrowthGlobalX128; + // amount of input token paid as protocol fee + uint128 protocolFee; + // the current liquidity in range + uint128 liquidity; + } + + struct StepComputations { + // the price at the beginning of the step + uint160 sqrtPriceStartX96; + // the next tick to swap to from the current tick in the swap direction + int24 tickNext; + // whether tickNext is initialized or not + bool initialized; + // sqrt(price) for the next tick (1/0) + uint160 sqrtPriceNextX96; + // how much is being swapped in in this step + uint256 amountIn; + // how much is being swapped out + uint256 amountOut; + // how much fee is being paid in + uint256 feeAmount; + } + + /// @inheritdoc IUniswapV3PoolActions + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bytes calldata data + ) external override noDelegateCall returns (int256 amount0, int256 amount1) { + require(amountSpecified != 0, 'AS'); + + Slot0 memory slot0Start = slot0; + + require(slot0Start.unlocked, 'LOK'); + require( + zeroForOne + ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO + : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, + 'SPL' + ); + + slot0.unlocked = false; + + SwapCache memory cache = + SwapCache({ + liquidityStart: liquidity, + blockTimestamp: _blockTimestamp(), + feeProtocol: zeroForOne ? (slot0Start.feeProtocol % 16) : (slot0Start.feeProtocol >> 4), + secondsPerLiquidityCumulativeX128: 0, + tickCumulative: 0, + computedLatestObservation: false + }); + + bool exactInput = amountSpecified > 0; + + SwapState memory state = + SwapState({ + amountSpecifiedRemaining: amountSpecified, + amountCalculated: 0, + sqrtPriceX96: slot0Start.sqrtPriceX96, + tick: slot0Start.tick, + feeGrowthGlobalX128: zeroForOne ? feeGrowthGlobal0X128 : feeGrowthGlobal1X128, + protocolFee: 0, + liquidity: cache.liquidityStart + }); + + // continue swapping as long as we haven't used the entire input/output and haven't reached the price limit + while (state.amountSpecifiedRemaining != 0 && state.sqrtPriceX96 != sqrtPriceLimitX96) { + StepComputations memory step; + + step.sqrtPriceStartX96 = state.sqrtPriceX96; + + (step.tickNext, step.initialized) = tickBitmap.nextInitializedTickWithinOneWord( + state.tick, + tickSpacing, + zeroForOne + ); + + // ensure that we do not overshoot the min/max tick, as the tick bitmap is not aware of these bounds + if (step.tickNext < TickMath.MIN_TICK) { + step.tickNext = TickMath.MIN_TICK; + } else if (step.tickNext > TickMath.MAX_TICK) { + step.tickNext = TickMath.MAX_TICK; + } + + // get the price for the next tick + step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext); + + // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted + (state.sqrtPriceX96, step.amountIn, step.amountOut, step.feeAmount) = SwapMath.computeSwapStep( + state.sqrtPriceX96, + (zeroForOne ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 : step.sqrtPriceNextX96 > sqrtPriceLimitX96) + ? sqrtPriceLimitX96 + : step.sqrtPriceNextX96, + state.liquidity, + state.amountSpecifiedRemaining, + fee + ); + + if (exactInput) { + state.amountSpecifiedRemaining -= (step.amountIn + step.feeAmount).toInt256(); + state.amountCalculated = state.amountCalculated.sub(step.amountOut.toInt256()); + } else { + state.amountSpecifiedRemaining += step.amountOut.toInt256(); + state.amountCalculated = state.amountCalculated.add((step.amountIn + step.feeAmount).toInt256()); + } + + // if the protocol fee is on, calculate how much is owed, decrement feeAmount, and increment protocolFee + if (cache.feeProtocol > 0) { + uint256 delta = step.feeAmount / cache.feeProtocol; + step.feeAmount -= delta; + state.protocolFee += uint128(delta); + } + + // update global fee tracker + if (state.liquidity > 0) + state.feeGrowthGlobalX128 += FullMath.mulDiv(step.feeAmount, FixedPoint128.Q128, state.liquidity); + + // shift tick if we reached the next price + if (state.sqrtPriceX96 == step.sqrtPriceNextX96) { + // if the tick is initialized, run the tick transition + if (step.initialized) { + // check for the placeholder value, which we replace with the actual value the first time the swap + // crosses an initialized tick + if (!cache.computedLatestObservation) { + (cache.tickCumulative, cache.secondsPerLiquidityCumulativeX128) = observations.observeSingle( + cache.blockTimestamp, + 0, + slot0Start.tick, + slot0Start.observationIndex, + cache.liquidityStart, + slot0Start.observationCardinality + ); + cache.computedLatestObservation = true; + } + int128 liquidityNet = + ticks.cross( + step.tickNext, + (zeroForOne ? state.feeGrowthGlobalX128 : feeGrowthGlobal0X128), + (zeroForOne ? feeGrowthGlobal1X128 : state.feeGrowthGlobalX128), + cache.secondsPerLiquidityCumulativeX128, + cache.tickCumulative, + cache.blockTimestamp + ); + // if we're moving leftward, we interpret liquidityNet as the opposite sign + // safe because liquidityNet cannot be type(int128).min + if (zeroForOne) liquidityNet = -liquidityNet; + + state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet); + } + + state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; + } else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) { + // recompute unless we're on a lower tick boundary (i.e. already transitioned ticks), and haven't moved + state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96); + } + } + + // update tick and write an oracle entry if the tick change + if (state.tick != slot0Start.tick) { + (uint16 observationIndex, uint16 observationCardinality) = + observations.write( + slot0Start.observationIndex, + cache.blockTimestamp, + slot0Start.tick, + cache.liquidityStart, + slot0Start.observationCardinality, + slot0Start.observationCardinalityNext + ); + (slot0.sqrtPriceX96, slot0.tick, slot0.observationIndex, slot0.observationCardinality) = ( + state.sqrtPriceX96, + state.tick, + observationIndex, + observationCardinality + ); + } else { + // otherwise just update the price + slot0.sqrtPriceX96 = state.sqrtPriceX96; + } + + // update liquidity if it changed + if (cache.liquidityStart != state.liquidity) liquidity = state.liquidity; + + // update fee growth global and, if necessary, protocol fees + // overflow is acceptable, protocol has to withdraw before it hits type(uint128).max fees + if (zeroForOne) { + feeGrowthGlobal0X128 = state.feeGrowthGlobalX128; + if (state.protocolFee > 0) protocolFees.token0 += state.protocolFee; + } else { + feeGrowthGlobal1X128 = state.feeGrowthGlobalX128; + if (state.protocolFee > 0) protocolFees.token1 += state.protocolFee; + } + + (amount0, amount1) = zeroForOne == exactInput + ? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) + : (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining); + + // do the transfers and collect payment + if (zeroForOne) { + if (amount1 < 0) TransferHelper.safeTransfer(token1, recipient, uint256(-amount1)); + + uint256 balance0Before = balance0(); + IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); + require(balance0Before.add(uint256(amount0)) <= balance0(), 'IIA'); + } else { + if (amount0 < 0) TransferHelper.safeTransfer(token0, recipient, uint256(-amount0)); + + uint256 balance1Before = balance1(); + IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); + require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA'); + } + + emit Swap(msg.sender, recipient, amount0, amount1, state.sqrtPriceX96, state.liquidity, state.tick); + slot0.unlocked = true; + } + + /// @inheritdoc IUniswapV3PoolActions + function flash( + address recipient, + uint256 amount0, + uint256 amount1, + bytes calldata data + ) external override lock noDelegateCall { + uint128 _liquidity = liquidity; + require(_liquidity > 0, 'L'); + + uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee, 1e6); + uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee, 1e6); + uint256 balance0Before = balance0(); + uint256 balance1Before = balance1(); + + if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0); + if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1); + + IUniswapV3FlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data); + + uint256 balance0After = balance0(); + uint256 balance1After = balance1(); + + require(balance0Before.add(fee0) <= balance0After, 'F0'); + require(balance1Before.add(fee1) <= balance1After, 'F1'); + + // sub is safe because we know balanceAfter is gt balanceBefore by at least fee + uint256 paid0 = balance0After - balance0Before; + uint256 paid1 = balance1After - balance1Before; + + if (paid0 > 0) { + uint8 feeProtocol0 = slot0.feeProtocol % 16; + uint256 fees0 = feeProtocol0 == 0 ? 0 : paid0 / feeProtocol0; + if (uint128(fees0) > 0) protocolFees.token0 += uint128(fees0); + feeGrowthGlobal0X128 += FullMath.mulDiv(paid0 - fees0, FixedPoint128.Q128, _liquidity); + } + if (paid1 > 0) { + uint8 feeProtocol1 = slot0.feeProtocol >> 4; + uint256 fees1 = feeProtocol1 == 0 ? 0 : paid1 / feeProtocol1; + if (uint128(fees1) > 0) protocolFees.token1 += uint128(fees1); + feeGrowthGlobal1X128 += FullMath.mulDiv(paid1 - fees1, FixedPoint128.Q128, _liquidity); + } + + emit Flash(msg.sender, recipient, amount0, amount1, paid0, paid1); + } + + /// @inheritdoc IUniswapV3PoolOwnerActions + function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external override lock onlyFactoryOwner { + require( + (feeProtocol0 == 0 || (feeProtocol0 >= 4 && feeProtocol0 <= 10)) && + (feeProtocol1 == 0 || (feeProtocol1 >= 4 && feeProtocol1 <= 10)) + ); + uint8 feeProtocolOld = slot0.feeProtocol; + slot0.feeProtocol = feeProtocol0 + (feeProtocol1 << 4); + emit SetFeeProtocol(feeProtocolOld % 16, feeProtocolOld >> 4, feeProtocol0, feeProtocol1); + } + + /// @inheritdoc IUniswapV3PoolOwnerActions + function collectProtocol( + address recipient, + uint128 amount0Requested, + uint128 amount1Requested + ) external override lock onlyFactoryOwner returns (uint128 amount0, uint128 amount1) { + amount0 = amount0Requested > protocolFees.token0 ? protocolFees.token0 : amount0Requested; + amount1 = amount1Requested > protocolFees.token1 ? protocolFees.token1 : amount1Requested; + + if (amount0 > 0) { + if (amount0 == protocolFees.token0) amount0--; // ensure that the slot is not cleared, for gas savings + protocolFees.token0 -= amount0; + TransferHelper.safeTransfer(token0, recipient, amount0); + } + if (amount1 > 0) { + if (amount1 == protocolFees.token1) amount1--; // ensure that the slot is not cleared, for gas savings + protocolFees.token1 -= amount1; + TransferHelper.safeTransfer(token1, recipient, amount1); + } + + emit CollectProtocol(msg.sender, recipient, amount0, amount1); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol new file mode 100644 index 000000000..c303265a3 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Minimal ERC20 interface for Uniswap +/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3 +interface IERC20Minimal { + /// @notice Returns the balance of a token + /// @param account The account for which to look up the number of tokens it has, i.e. its balance + /// @return The number of tokens held by the account + function balanceOf(address account) external view returns (uint256); + + /// @notice Transfers the amount of token from the `msg.sender` to the recipient + /// @param recipient The account that will receive the amount transferred + /// @param amount The number of tokens to send from the sender to the recipient + /// @return Returns true for a successful transfer, false for an unsuccessful transfer + function transfer(address recipient, uint256 amount) external returns (bool); + + /// @notice Returns the current allowance given to a spender by an owner + /// @param owner The account of the token owner + /// @param spender The account of the token spender + /// @return The current allowance granted by `owner` to `spender` + function allowance(address owner, address spender) external view returns (uint256); + + /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount` + /// @param spender The account which will be allowed to spend a given amount of the owners tokens + /// @param amount The amount of tokens allowed to be used by `spender` + /// @return Returns true for a successful approval, false for unsuccessful + function approve(address spender, uint256 amount) external returns (bool); + + /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender` + /// @param sender The account from which the transfer will be initiated + /// @param recipient The recipient of the transfer + /// @param amount The amount of the transfer + /// @return Returns true for a successful transfer, false for unsuccessful + function transferFrom( + address sender, + address recipient, + uint256 amount + ) external returns (bool); + + /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`. + /// @param from The account from which the tokens were sent, i.e. the balance decreased + /// @param to The account to which the tokens were sent, i.e. the balance increased + /// @param value The amount of tokens that were transferred + event Transfer(address indexed from, address indexed to, uint256 value); + + /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes. + /// @param owner The account that approved spending of its tokens + /// @param spender The account for which the spending allowance was modified + /// @param value The new allowance from the owner to the spender + event Approval(address indexed owner, address indexed spender, uint256 value); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol new file mode 100644 index 000000000..540cfdc68 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title The interface for the Uniswap V3 Factory +/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees +interface IUniswapV3Factory { + /// @notice Emitted when the owner of the factory is changed + /// @param oldOwner The owner before the owner was changed + /// @param newOwner The owner after the owner was changed + event OwnerChanged(address indexed oldOwner, address indexed newOwner); + + /// @notice Emitted when a pool is created + /// @param token0 The first token of the pool by address sort order + /// @param token1 The second token of the pool by address sort order + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @param tickSpacing The minimum number of ticks between initialized ticks + /// @param pool The address of the created pool + event PoolCreated( + address indexed token0, + address indexed token1, + uint24 indexed fee, + int24 tickSpacing, + address pool + ); + + /// @notice Emitted when a new fee amount is enabled for pool creation via the factory + /// @param fee The enabled fee, denominated in hundredths of a bip + /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee + event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); + + /// @notice Returns the current owner of the factory + /// @dev Can be changed by the current owner via setOwner + /// @return The address of the factory owner + function owner() external view returns (address); + + /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled + /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context + /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee + /// @return The tick spacing + function feeAmountTickSpacing(uint24 fee) external view returns (int24); + + /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist + /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order + /// @param tokenA The contract address of either token0 or token1 + /// @param tokenB The contract address of the other token + /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// @return pool The pool address + function getPool( + address tokenA, + address tokenB, + uint24 fee + ) external view returns (address pool); + + /// @notice Creates a pool for the given two tokens and fee + /// @param tokenA One of the two tokens in the desired pool + /// @param tokenB The other of the two tokens in the desired pool + /// @param fee The desired fee for the pool + /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved + /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments + /// are invalid. + /// @return pool The address of the newly created pool + function createPool( + address tokenA, + address tokenB, + uint24 fee + ) external returns (address pool); + + /// @notice Updates the owner of the factory + /// @dev Must be called by the current owner + /// @param _owner The new owner of the factory + function setOwner(address _owner) external; + + /// @notice Enables a fee amount with the given tickSpacing + /// @dev Fee amounts may never be removed once enabled + /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6) + /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount + function enableFeeAmount(uint24 fee, int24 tickSpacing) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol new file mode 100644 index 000000000..56df0500d --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +import './pool/IUniswapV3PoolImmutables.sol'; +import './pool/IUniswapV3PoolState.sol'; +import './pool/IUniswapV3PoolDerivedState.sol'; +import './pool/IUniswapV3PoolActions.sol'; +import './pool/IUniswapV3PoolOwnerActions.sol'; +import './pool/IUniswapV3PoolEvents.sol'; + +/// @title The interface for a Uniswap V3 Pool +/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform +/// to the ERC20 specification +/// @dev The pool interface is broken up into many smaller pieces +interface IUniswapV3Pool is + IUniswapV3PoolImmutables, + IUniswapV3PoolState, + IUniswapV3PoolDerivedState, + IUniswapV3PoolActions, + IUniswapV3PoolOwnerActions, + IUniswapV3PoolEvents +{ + +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol new file mode 100644 index 000000000..72096c1ff --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title An interface for a contract that is capable of deploying Uniswap V3 Pools +/// @notice A contract that constructs a pool must implement this to pass arguments to the pool +/// @dev This is used to avoid having constructor arguments in the pool contract, which results in the init code hash +/// of the pool being constant allowing the CREATE2 address of the pool to be cheaply computed on-chain +interface IUniswapV3PoolDeployer { + /// @notice Get the parameters to be used in constructing the pool, set transiently during pool creation. + /// @dev Called by the pool constructor to fetch the parameters of the pool + /// Returns factory The factory address + /// Returns token0 The first token of the pool by address sort order + /// Returns token1 The second token of the pool by address sort order + /// Returns fee The fee collected upon every swap in the pool, denominated in hundredths of a bip + /// Returns tickSpacing The minimum number of ticks between initialized ticks + function parameters() + external + view + returns ( + address factory, + address token0, + address token1, + uint24 fee, + int24 tickSpacing + ); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol new file mode 100644 index 000000000..18e54c4e1 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Callback for IUniswapV3PoolActions#flash +/// @notice Any contract that calls IUniswapV3PoolActions#flash must implement this interface +interface IUniswapV3FlashCallback { + /// @notice Called to `msg.sender` after transferring to the recipient from IUniswapV3Pool#flash. + /// @dev In the implementation you must repay the pool the tokens sent by flash plus the computed fee amounts. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// @param fee0 The fee amount in token0 due to the pool by the end of the flash + /// @param fee1 The fee amount in token1 due to the pool by the end of the flash + /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#flash call + function uniswapV3FlashCallback( + uint256 fee0, + uint256 fee1, + bytes calldata data + ) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol new file mode 100644 index 000000000..85447e84f --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Callback for IUniswapV3PoolActions#mint +/// @notice Any contract that calls IUniswapV3PoolActions#mint must implement this interface +interface IUniswapV3MintCallback { + /// @notice Called to `msg.sender` after minting liquidity to a position from IUniswapV3Pool#mint. + /// @dev In the implementation you must pay the pool tokens owed for the minted liquidity. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity + /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity + /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#mint call + function uniswapV3MintCallback( + uint256 amount0Owed, + uint256 amount1Owed, + bytes calldata data + ) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol new file mode 100644 index 000000000..9f183b22a --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Callback for IUniswapV3PoolActions#swap +/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface +interface IUniswapV3SwapCallback { + /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. + /// @dev In the implementation you must pay the pool tokens owed for the swap. + /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. + /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. + /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. + /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by + /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. + /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call + function uniswapV3SwapCallback( + int256 amount0Delta, + int256 amount1Delta, + bytes calldata data + ) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol new file mode 100644 index 000000000..44fb61c24 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Permissionless pool actions +/// @notice Contains pool methods that can be called by anyone +interface IUniswapV3PoolActions { + /// @notice Sets the initial price for the pool + /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value + /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96 + function initialize(uint160 sqrtPriceX96) external; + + /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position + /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback + /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends + /// on tickLower, tickUpper, the amount of liquidity, and the current price. + /// @param recipient The address for which the liquidity will be created + /// @param tickLower The lower tick of the position in which to add liquidity + /// @param tickUpper The upper tick of the position in which to add liquidity + /// @param amount The amount of liquidity to mint + /// @param data Any data that should be passed through to the callback + /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback + /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback + function mint( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount, + bytes calldata data + ) external returns (uint256 amount0, uint256 amount1); + + /// @notice Collects tokens owed to a position + /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. + /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or + /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the + /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity. + /// @param recipient The address which should receive the fees collected + /// @param tickLower The lower tick of the position for which to collect fees + /// @param tickUpper The upper tick of the position for which to collect fees + /// @param amount0Requested How much token0 should be withdrawn from the fees owed + /// @param amount1Requested How much token1 should be withdrawn from the fees owed + /// @return amount0 The amount of fees collected in token0 + /// @return amount1 The amount of fees collected in token1 + function collect( + address recipient, + int24 tickLower, + int24 tickUpper, + uint128 amount0Requested, + uint128 amount1Requested + ) external returns (uint128 amount0, uint128 amount1); + + /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position + /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0 + /// @dev Fees must be collected separately via a call to #collect + /// @param tickLower The lower tick of the position for which to burn liquidity + /// @param tickUpper The upper tick of the position for which to burn liquidity + /// @param amount How much liquidity to burn + /// @return amount0 The amount of token0 sent to the recipient + /// @return amount1 The amount of token1 sent to the recipient + function burn( + int24 tickLower, + int24 tickUpper, + uint128 amount + ) external returns (uint256 amount0, uint256 amount1); + + /// @notice Swap token0 for token1, or token1 for token0 + /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback + /// @param recipient The address to receive the output of the swap + /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0 + /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative) + /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this + /// value after the swap. If one for zero, the price cannot be greater than this value after the swap + /// @param data Any data to be passed through to the callback + /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive + /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive + function swap( + address recipient, + bool zeroForOne, + int256 amountSpecified, + uint160 sqrtPriceLimitX96, + bytes calldata data + ) external returns (int256 amount0, int256 amount1); + + /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback + /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback + /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling + /// with 0 amount{0,1} and sending the donation amount(s) from the callback + /// @param recipient The address which will receive the token0 and token1 amounts + /// @param amount0 The amount of token0 to send + /// @param amount1 The amount of token1 to send + /// @param data Any data to be passed through to the callback + function flash( + address recipient, + uint256 amount0, + uint256 amount1, + bytes calldata data + ) external; + + /// @notice Increase the maximum number of price and liquidity observations that this pool will store + /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to + /// the input observationCardinalityNext. + /// @param observationCardinalityNext The desired minimum number of observations for the pool to store + function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol new file mode 100644 index 000000000..eda3a0089 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Pool state that is not stored +/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the +/// blockchain. The functions here may have variable gas costs. +interface IUniswapV3PoolDerivedState { + /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp + /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing + /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, + /// you must call it with secondsAgos = [3600, 0]. + /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in + /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. + /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned + /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp + /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block + /// timestamp + function observe(uint32[] calldata secondsAgos) + external + view + returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); + + /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range + /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed. + /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first + /// snapshot is taken and the second snapshot is taken. + /// @param tickLower The lower tick of the range + /// @param tickUpper The upper tick of the range + /// @return tickCumulativeInside The snapshot of the tick accumulator for the range + /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range + /// @return secondsInside The snapshot of seconds per liquidity for the range + function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) + external + view + returns ( + int56 tickCumulativeInside, + uint160 secondsPerLiquidityInsideX128, + uint32 secondsInside + ); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol new file mode 100644 index 000000000..9d915dde9 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Events emitted by a pool +/// @notice Contains all events emitted by the pool +interface IUniswapV3PoolEvents { + /// @notice Emitted exactly once by a pool when #initialize is first called on the pool + /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize + /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96 + /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool + event Initialize(uint160 sqrtPriceX96, int24 tick); + + /// @notice Emitted when liquidity is minted for a given position + /// @param sender The address that minted the liquidity + /// @param owner The owner of the position and recipient of any minted liquidity + /// @param tickLower The lower tick of the position + /// @param tickUpper The upper tick of the position + /// @param amount The amount of liquidity minted to the position range + /// @param amount0 How much token0 was required for the minted liquidity + /// @param amount1 How much token1 was required for the minted liquidity + event Mint( + address sender, + address indexed owner, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 amount, + uint256 amount0, + uint256 amount1 + ); + + /// @notice Emitted when fees are collected by the owner of a position + /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees + /// @param owner The owner of the position for which fees are collected + /// @param tickLower The lower tick of the position + /// @param tickUpper The upper tick of the position + /// @param amount0 The amount of token0 fees collected + /// @param amount1 The amount of token1 fees collected + event Collect( + address indexed owner, + address recipient, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 amount0, + uint128 amount1 + ); + + /// @notice Emitted when a position's liquidity is removed + /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect + /// @param owner The owner of the position for which liquidity is removed + /// @param tickLower The lower tick of the position + /// @param tickUpper The upper tick of the position + /// @param amount The amount of liquidity to remove + /// @param amount0 The amount of token0 withdrawn + /// @param amount1 The amount of token1 withdrawn + event Burn( + address indexed owner, + int24 indexed tickLower, + int24 indexed tickUpper, + uint128 amount, + uint256 amount0, + uint256 amount1 + ); + + /// @notice Emitted by the pool for any swaps between token0 and token1 + /// @param sender The address that initiated the swap call, and that received the callback + /// @param recipient The address that received the output of the swap + /// @param amount0 The delta of the token0 balance of the pool + /// @param amount1 The delta of the token1 balance of the pool + /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96 + /// @param liquidity The liquidity of the pool after the swap + /// @param tick The log base 1.0001 of price of the pool after the swap + event Swap( + address indexed sender, + address indexed recipient, + int256 amount0, + int256 amount1, + uint160 sqrtPriceX96, + uint128 liquidity, + int24 tick + ); + + /// @notice Emitted by the pool for any flashes of token0/token1 + /// @param sender The address that initiated the swap call, and that received the callback + /// @param recipient The address that received the tokens from flash + /// @param amount0 The amount of token0 that was flashed + /// @param amount1 The amount of token1 that was flashed + /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee + /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee + event Flash( + address indexed sender, + address indexed recipient, + uint256 amount0, + uint256 amount1, + uint256 paid0, + uint256 paid1 + ); + + /// @notice Emitted by the pool for increases to the number of observations that can be stored + /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index + /// just before a mint/swap/burn. + /// @param observationCardinalityNextOld The previous value of the next observation cardinality + /// @param observationCardinalityNextNew The updated value of the next observation cardinality + event IncreaseObservationCardinalityNext( + uint16 observationCardinalityNextOld, + uint16 observationCardinalityNextNew + ); + + /// @notice Emitted when the protocol fee is changed by the pool + /// @param feeProtocol0Old The previous value of the token0 protocol fee + /// @param feeProtocol1Old The previous value of the token1 protocol fee + /// @param feeProtocol0New The updated value of the token0 protocol fee + /// @param feeProtocol1New The updated value of the token1 protocol fee + event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New); + + /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner + /// @param sender The address that collects the protocol fees + /// @param recipient The address that receives the collected protocol fees + /// @param amount0 The amount of token0 protocol fees that is withdrawn + /// @param amount0 The amount of token1 protocol fees that is withdrawn + event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol new file mode 100644 index 000000000..c9beb151e --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Pool state that never changes +/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values +interface IUniswapV3PoolImmutables { + /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface + /// @return The contract address + function factory() external view returns (address); + + /// @notice The first of the two tokens of the pool, sorted by address + /// @return The token contract address + function token0() external view returns (address); + + /// @notice The second of the two tokens of the pool, sorted by address + /// @return The token contract address + function token1() external view returns (address); + + /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6 + /// @return The fee + function fee() external view returns (uint24); + + /// @notice The pool tick spacing + /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive + /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... + /// This value is an int24 to avoid casting even though it is always positive. + /// @return The tick spacing + function tickSpacing() external view returns (int24); + + /// @notice The maximum amount of position liquidity that can use any tick in the range + /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and + /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool + /// @return The max amount of liquidity per tick + function maxLiquidityPerTick() external view returns (uint128); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol new file mode 100644 index 000000000..2395ed321 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Permissioned pool actions +/// @notice Contains pool methods that may only be called by the factory owner +interface IUniswapV3PoolOwnerActions { + /// @notice Set the denominator of the protocol's % share of the fees + /// @param feeProtocol0 new protocol fee for token0 of the pool + /// @param feeProtocol1 new protocol fee for token1 of the pool + function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external; + + /// @notice Collect the protocol fee accrued to the pool + /// @param recipient The address to which collected protocol fees should be sent + /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1 + /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0 + /// @return amount0 The protocol fee collected in token0 + /// @return amount1 The protocol fee collected in token1 + function collectProtocol( + address recipient, + uint128 amount0Requested, + uint128 amount1Requested + ) external returns (uint128 amount0, uint128 amount1); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol new file mode 100644 index 000000000..620256c31 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Pool state that can change +/// @notice These methods compose the pool's state, and can change with any frequency including multiple times +/// per transaction +interface IUniswapV3PoolState { + /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas + /// when accessed externally. + /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value + /// tick The current tick of the pool, i.e. according to the last tick transition that was run. + /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick + /// boundary. + /// observationIndex The index of the last oracle observation that was written, + /// observationCardinality The current maximum number of observations stored in the pool, + /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. + /// feeProtocol The protocol fee for both tokens of the pool. + /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 + /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. + /// unlocked Whether the pool is currently locked to reentrancy + function slot0() + external + view + returns ( + uint160 sqrtPriceX96, + int24 tick, + uint16 observationIndex, + uint16 observationCardinality, + uint16 observationCardinalityNext, + uint8 feeProtocol, + bool unlocked + ); + + /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool + /// @dev This value can overflow the uint256 + function feeGrowthGlobal0X128() external view returns (uint256); + + /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool + /// @dev This value can overflow the uint256 + function feeGrowthGlobal1X128() external view returns (uint256); + + /// @notice The amounts of token0 and token1 that are owed to the protocol + /// @dev Protocol fees will never exceed uint128 max in either token + function protocolFees() external view returns (uint128 token0, uint128 token1); + + /// @notice The currently in range liquidity available to the pool + /// @dev This value has no relationship to the total liquidity across all ticks + function liquidity() external view returns (uint128); + + /// @notice Look up information about a specific tick in the pool + /// @param tick The tick to look up + /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or + /// tick upper, + /// liquidityNet how much liquidity changes when the pool price crosses the tick, + /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, + /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, + /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick + /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, + /// secondsOutside the seconds spent on the other side of the tick from the current tick, + /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. + /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. + /// In addition, these values are only relative and must be used only in comparison to previous snapshots for + /// a specific position. + function ticks(int24 tick) + external + view + returns ( + uint128 liquidityGross, + int128 liquidityNet, + uint256 feeGrowthOutside0X128, + uint256 feeGrowthOutside1X128, + int56 tickCumulativeOutside, + uint160 secondsPerLiquidityOutsideX128, + uint32 secondsOutside, + bool initialized + ); + + /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information + function tickBitmap(int16 wordPosition) external view returns (uint256); + + /// @notice Returns the information about a position by the position's key + /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper + /// @return _liquidity The amount of liquidity in the position, + /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, + /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, + /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, + /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke + function positions(bytes32 key) + external + view + returns ( + uint128 _liquidity, + uint256 feeGrowthInside0LastX128, + uint256 feeGrowthInside1LastX128, + uint128 tokensOwed0, + uint128 tokensOwed1 + ); + + /// @notice Returns data about a specific observation index + /// @param index The element of the observations array to fetch + /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time + /// ago, rather than at a specific index in the array. + /// @return blockTimestamp The timestamp of the observation, + /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, + /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, + /// Returns initialized whether the observation has been initialized and the values are safe to use + function observations(uint256 index) + external + view + returns ( + uint32 blockTimestamp, + int56 tickCumulative, + uint160 secondsPerLiquidityCumulativeX128, + bool initialized + ); +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol new file mode 100644 index 000000000..3a7216c7b --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title BitMath +/// @dev This library provides functionality for computing bit properties of an unsigned integer +library BitMath { + /// @notice Returns the index of the most significant bit of the number, + /// where the least significant bit is at index 0 and the most significant bit is at index 255 + /// @dev The function satisfies the property: + /// x >= 2**mostSignificantBit(x) and x < 2**(mostSignificantBit(x)+1) + /// @param x the value for which to compute the most significant bit, must be greater than 0 + /// @return r the index of the most significant bit + function mostSignificantBit(uint256 x) internal pure returns (uint8 r) { + require(x > 0); + + if (x >= 0x100000000000000000000000000000000) { + x >>= 128; + r += 128; + } + if (x >= 0x10000000000000000) { + x >>= 64; + r += 64; + } + if (x >= 0x100000000) { + x >>= 32; + r += 32; + } + if (x >= 0x10000) { + x >>= 16; + r += 16; + } + if (x >= 0x100) { + x >>= 8; + r += 8; + } + if (x >= 0x10) { + x >>= 4; + r += 4; + } + if (x >= 0x4) { + x >>= 2; + r += 2; + } + if (x >= 0x2) r += 1; + } + + /// @notice Returns the index of the least significant bit of the number, + /// where the least significant bit is at index 0 and the most significant bit is at index 255 + /// @dev The function satisfies the property: + /// (x & 2**leastSignificantBit(x)) != 0 and (x & (2**(leastSignificantBit(x)) - 1)) == 0) + /// @param x the value for which to compute the least significant bit, must be greater than 0 + /// @return r the index of the least significant bit + function leastSignificantBit(uint256 x) internal pure returns (uint8 r) { + require(x > 0); + + r = 255; + if (x & type(uint128).max > 0) { + r -= 128; + } else { + x >>= 128; + } + if (x & type(uint64).max > 0) { + r -= 64; + } else { + x >>= 64; + } + if (x & type(uint32).max > 0) { + r -= 32; + } else { + x >>= 32; + } + if (x & type(uint16).max > 0) { + r -= 16; + } else { + x >>= 16; + } + if (x & type(uint8).max > 0) { + r -= 8; + } else { + x >>= 8; + } + if (x & 0xf > 0) { + r -= 4; + } else { + x >>= 4; + } + if (x & 0x3 > 0) { + r -= 2; + } else { + x >>= 2; + } + if (x & 0x1 > 0) r -= 1; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol new file mode 100644 index 000000000..6d6948b10 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.4.0; + +/// @title FixedPoint128 +/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) +library FixedPoint128 { + uint256 internal constant Q128 = 0x100000000000000000000000000000000; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol new file mode 100644 index 000000000..63b42c294 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.4.0; + +/// @title FixedPoint96 +/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) +/// @dev Used in SqrtPriceMath.sol +library FixedPoint96 { + uint8 internal constant RESOLUTION = 96; + uint256 internal constant Q96 = 0x1000000000000000000000000; +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol new file mode 100644 index 000000000..8688a1773 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.4.0; + +/// @title Contains 512-bit math functions +/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision +/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits +library FullMath { + /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + /// @param a The multiplicand + /// @param b The multiplier + /// @param denominator The divisor + /// @return result The 256-bit result + /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv + function mulDiv( + uint256 a, + uint256 b, + uint256 denominator + ) internal pure returns (uint256 result) { + // 512-bit multiply [prod1 prod0] = a * b + // Compute the product mod 2**256 and mod 2**256 - 1 + // then use the Chinese Remainder Theorem to reconstruct + // the 512 bit result. The result is stored in two 256 + // variables such that product = prod1 * 2**256 + prod0 + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly { + let mm := mulmod(a, b, not(0)) + prod0 := mul(a, b) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division + if (prod1 == 0) { + require(denominator > 0); + assembly { + result := div(prod0, denominator) + } + return result; + } + + // Make sure the result is less than 2**256. + // Also prevents denominator == 0 + require(denominator > prod1); + + /////////////////////////////////////////////// + // 512 by 256 division. + /////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0] + // Compute remainder using mulmod + uint256 remainder; + assembly { + remainder := mulmod(a, b, denominator) + } + // Subtract 256 bit number from 512 bit number + assembly { + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + // Factor powers of two out of denominator + // Compute largest power of two divisor of denominator. + // Always >= 1. + uint256 twos = -denominator & denominator; + // Divide denominator by power of two + assembly { + denominator := div(denominator, twos) + } + + // Divide [prod1 prod0] by the factors of two + assembly { + prod0 := div(prod0, twos) + } + // Shift in bits from prod1 into prod0. For this we need + // to flip `twos` such that it is 2**256 / twos. + // If twos is zero, then it becomes one + assembly { + twos := add(div(sub(0, twos), twos), 1) + } + prod0 |= prod1 * twos; + + // Invert denominator mod 2**256 + // Now that denominator is an odd number, it has an inverse + // modulo 2**256 such that denominator * inv = 1 mod 2**256. + // Compute the inverse by starting with a seed that is correct + // correct for four bits. That is, denominator * inv = 1 mod 2**4 + uint256 inv = (3 * denominator) ^ 2; + // Now use Newton-Raphson iteration to improve the precision. + // Thanks to Hensel's lifting lemma, this also works in modular + // arithmetic, doubling the correct bits in each step. + inv *= 2 - denominator * inv; // inverse mod 2**8 + inv *= 2 - denominator * inv; // inverse mod 2**16 + inv *= 2 - denominator * inv; // inverse mod 2**32 + inv *= 2 - denominator * inv; // inverse mod 2**64 + inv *= 2 - denominator * inv; // inverse mod 2**128 + inv *= 2 - denominator * inv; // inverse mod 2**256 + + // Because the division is now exact we can divide by multiplying + // with the modular inverse of denominator. This will give us the + // correct result modulo 2**256. Since the precoditions guarantee + // that the outcome is less than 2**256, this is the final result. + // We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inv; + return result; + } + + /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + /// @param a The multiplicand + /// @param b The multiplier + /// @param denominator The divisor + /// @return result The 256-bit result + function mulDivRoundingUp( + uint256 a, + uint256 b, + uint256 denominator + ) internal pure returns (uint256 result) { + result = mulDiv(a, b, denominator); + if (mulmod(a, b, denominator) > 0) { + require(result < type(uint256).max); + result++; + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol new file mode 100644 index 000000000..d5e23032e --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Math library for liquidity +library LiquidityMath { + /// @notice Add a signed liquidity delta to liquidity and revert if it overflows or underflows + /// @param x The liquidity before change + /// @param y The delta by which liquidity should be changed + /// @return z The liquidity delta + function addDelta(uint128 x, int128 y) internal pure returns (uint128 z) { + if (y < 0) { + require((z = x - uint128(-y)) < x, 'LS'); + } else { + require((z = x + uint128(y)) >= x, 'LA'); + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol new file mode 100644 index 000000000..dbc817c2e --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.7.0; + +/// @title Optimized overflow and underflow safe math operations +/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost +library LowGasSafeMath { + /// @notice Returns x + y, reverts if sum overflows uint256 + /// @param x The augend + /// @param y The addend + /// @return z The sum of x and y + function add(uint256 x, uint256 y) internal pure returns (uint256 z) { + require((z = x + y) >= x); + } + + /// @notice Returns x - y, reverts if underflows + /// @param x The minuend + /// @param y The subtrahend + /// @return z The difference of x and y + function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { + require((z = x - y) <= x); + } + + /// @notice Returns x * y, reverts if overflows + /// @param x The multiplicand + /// @param y The multiplier + /// @return z The product of x and y + function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { + require(x == 0 || (z = x * y) / x == y); + } + + /// @notice Returns x + y, reverts if overflows or underflows + /// @param x The augend + /// @param y The addend + /// @return z The sum of x and y + function add(int256 x, int256 y) internal pure returns (int256 z) { + require((z = x + y) >= x == (y >= 0)); + } + + /// @notice Returns x - y, reverts if overflows or underflows + /// @param x The minuend + /// @param y The subtrahend + /// @return z The difference of x and y + function sub(int256 x, int256 y) internal pure returns (int256 z) { + require((z = x - y) <= x == (y >= 0)); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol new file mode 100644 index 000000000..3f6b3f32c --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol @@ -0,0 +1,325 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +/// @title Oracle +/// @notice Provides price and liquidity data useful for a wide variety of system designs +/// @dev Instances of stored oracle data, "observations", are collected in the oracle array +/// Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the +/// maximum length of the oracle array. New slots will be added when the array is fully populated. +/// Observations are overwritten when the full length of the oracle array is populated. +/// The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe() +library Oracle { + struct Observation { + // the block timestamp of the observation + uint32 blockTimestamp; + // the tick accumulator, i.e. tick * time elapsed since the pool was first initialized + int56 tickCumulative; + // the seconds per liquidity, i.e. seconds elapsed / max(1, liquidity) since the pool was first initialized + uint160 secondsPerLiquidityCumulativeX128; + // whether or not the observation is initialized + bool initialized; + } + + /// @notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values + /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows + /// @param last The specified observation to be transformed + /// @param blockTimestamp The timestamp of the new observation + /// @param tick The active tick at the time of the new observation + /// @param liquidity The total in-range liquidity at the time of the new observation + /// @return Observation The newly populated observation + function transform( + Observation memory last, + uint32 blockTimestamp, + int24 tick, + uint128 liquidity + ) private pure returns (Observation memory) { + uint32 delta = blockTimestamp - last.blockTimestamp; + return + Observation({ + blockTimestamp: blockTimestamp, + tickCumulative: last.tickCumulative + int56(tick) * delta, + secondsPerLiquidityCumulativeX128: last.secondsPerLiquidityCumulativeX128 + + ((uint160(delta) << 128) / (liquidity > 0 ? liquidity : 1)), + initialized: true + }); + } + + /// @notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array + /// @param self The stored oracle array + /// @param time The time of the oracle initialization, via block.timestamp truncated to uint32 + /// @return cardinality The number of populated elements in the oracle array + /// @return cardinalityNext The new length of the oracle array, independent of population + function initialize(Observation[65535] storage self, uint32 time) + internal + returns (uint16 cardinality, uint16 cardinalityNext) + { + self[0] = Observation({ + blockTimestamp: time, + tickCumulative: 0, + secondsPerLiquidityCumulativeX128: 0, + initialized: true + }); + return (1, 1); + } + + /// @notice Writes an oracle observation to the array + /// @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally. + /// If the index is at the end of the allowable array length (according to cardinality), and the next cardinality + /// is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering. + /// @param self The stored oracle array + /// @param index The index of the observation that was most recently written to the observations array + /// @param blockTimestamp The timestamp of the new observation + /// @param tick The active tick at the time of the new observation + /// @param liquidity The total in-range liquidity at the time of the new observation + /// @param cardinality The number of populated elements in the oracle array + /// @param cardinalityNext The new length of the oracle array, independent of population + /// @return indexUpdated The new index of the most recently written element in the oracle array + /// @return cardinalityUpdated The new cardinality of the oracle array + function write( + Observation[65535] storage self, + uint16 index, + uint32 blockTimestamp, + int24 tick, + uint128 liquidity, + uint16 cardinality, + uint16 cardinalityNext + ) internal returns (uint16 indexUpdated, uint16 cardinalityUpdated) { + Observation memory last = self[index]; + + // early return if we've already written an observation this block + if (last.blockTimestamp == blockTimestamp) return (index, cardinality); + + // if the conditions are right, we can bump the cardinality + if (cardinalityNext > cardinality && index == (cardinality - 1)) { + cardinalityUpdated = cardinalityNext; + } else { + cardinalityUpdated = cardinality; + } + + indexUpdated = (index + 1) % cardinalityUpdated; + self[indexUpdated] = transform(last, blockTimestamp, tick, liquidity); + } + + /// @notice Prepares the oracle array to store up to `next` observations + /// @param self The stored oracle array + /// @param current The current next cardinality of the oracle array + /// @param next The proposed next cardinality which will be populated in the oracle array + /// @return next The next cardinality which will be populated in the oracle array + function grow( + Observation[65535] storage self, + uint16 current, + uint16 next + ) internal returns (uint16) { + require(current > 0, 'I'); + // no-op if the passed next value isn't greater than the current next value + if (next <= current) return current; + // store in each slot to prevent fresh SSTOREs in swaps + // this data will not be used because the initialized boolean is still false + for (uint16 i = current; i < next; i++) self[i].blockTimestamp = 1; + return next; + } + + /// @notice comparator for 32-bit timestamps + /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time + /// @param time A timestamp truncated to 32 bits + /// @param a A comparison timestamp from which to determine the relative position of `time` + /// @param b From which to determine the relative position of `time` + /// @return bool Whether `a` is chronologically <= `b` + function lte( + uint32 time, + uint32 a, + uint32 b + ) private pure returns (bool) { + // if there hasn't been overflow, no need to adjust + if (a <= time && b <= time) return a <= b; + + uint256 aAdjusted = a > time ? a : a + 2**32; + uint256 bAdjusted = b > time ? b : b + 2**32; + + return aAdjusted <= bAdjusted; + } + + /// @notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied. + /// The result may be the same observation, or adjacent observations. + /// @dev The answer must be contained in the array, used when the target is located within the stored observation + /// boundaries: older than the most recent observation and younger, or the same age as, the oldest observation + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param target The timestamp at which the reserved observation should be for + /// @param index The index of the observation that was most recently written to the observations array + /// @param cardinality The number of populated elements in the oracle array + /// @return beforeOrAt The observation recorded before, or at, the target + /// @return atOrAfter The observation recorded at, or after, the target + function binarySearch( + Observation[65535] storage self, + uint32 time, + uint32 target, + uint16 index, + uint16 cardinality + ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { + uint256 l = (index + 1) % cardinality; // oldest observation + uint256 r = l + cardinality - 1; // newest observation + uint256 i; + while (true) { + i = (l + r) / 2; + + beforeOrAt = self[i % cardinality]; + + // we've landed on an uninitialized tick, keep searching higher (more recently) + if (!beforeOrAt.initialized) { + l = i + 1; + continue; + } + + atOrAfter = self[(i + 1) % cardinality]; + + bool targetAtOrAfter = lte(time, beforeOrAt.blockTimestamp, target); + + // check if we've found the answer! + if (targetAtOrAfter && lte(time, target, atOrAfter.blockTimestamp)) break; + + if (!targetAtOrAfter) r = i - 1; + else l = i + 1; + } + } + + /// @notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied + /// @dev Assumes there is at least 1 initialized observation. + /// Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp. + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param target The timestamp at which the reserved observation should be for + /// @param tick The active tick at the time of the returned or simulated observation + /// @param index The index of the observation that was most recently written to the observations array + /// @param liquidity The total pool liquidity at the time of the call + /// @param cardinality The number of populated elements in the oracle array + /// @return beforeOrAt The observation which occurred at, or before, the given timestamp + /// @return atOrAfter The observation which occurred at, or after, the given timestamp + function getSurroundingObservations( + Observation[65535] storage self, + uint32 time, + uint32 target, + int24 tick, + uint16 index, + uint128 liquidity, + uint16 cardinality + ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { + // optimistically set before to the newest observation + beforeOrAt = self[index]; + + // if the target is chronologically at or after the newest observation, we can early return + if (lte(time, beforeOrAt.blockTimestamp, target)) { + if (beforeOrAt.blockTimestamp == target) { + // if newest observation equals target, we're in the same block, so we can ignore atOrAfter + return (beforeOrAt, atOrAfter); + } else { + // otherwise, we need to transform + return (beforeOrAt, transform(beforeOrAt, target, tick, liquidity)); + } + } + + // now, set before to the oldest observation + beforeOrAt = self[(index + 1) % cardinality]; + if (!beforeOrAt.initialized) beforeOrAt = self[0]; + + // ensure that the target is chronologically at or after the oldest observation + require(lte(time, beforeOrAt.blockTimestamp, target), 'OLD'); + + // if we've reached this point, we have to binary search + return binarySearch(self, time, target, index, cardinality); + } + + /// @dev Reverts if an observation at or before the desired observation timestamp does not exist. + /// 0 may be passed as `secondsAgo' to return the current cumulative values. + /// If called with a timestamp falling between two observations, returns the counterfactual accumulator values + /// at exactly the timestamp between the two observations. + /// @param self The stored oracle array + /// @param time The current block timestamp + /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation + /// @param tick The current tick + /// @param index The index of the observation that was most recently written to the observations array + /// @param liquidity The current in-range pool liquidity + /// @param cardinality The number of populated elements in the oracle array + /// @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo` + /// @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo` + function observeSingle( + Observation[65535] storage self, + uint32 time, + uint32 secondsAgo, + int24 tick, + uint16 index, + uint128 liquidity, + uint16 cardinality + ) internal view returns (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) { + if (secondsAgo == 0) { + Observation memory last = self[index]; + if (last.blockTimestamp != time) last = transform(last, time, tick, liquidity); + return (last.tickCumulative, last.secondsPerLiquidityCumulativeX128); + } + + uint32 target = time - secondsAgo; + + (Observation memory beforeOrAt, Observation memory atOrAfter) = + getSurroundingObservations(self, time, target, tick, index, liquidity, cardinality); + + if (target == beforeOrAt.blockTimestamp) { + // we're at the left boundary + return (beforeOrAt.tickCumulative, beforeOrAt.secondsPerLiquidityCumulativeX128); + } else if (target == atOrAfter.blockTimestamp) { + // we're at the right boundary + return (atOrAfter.tickCumulative, atOrAfter.secondsPerLiquidityCumulativeX128); + } else { + // we're in the middle + uint32 observationTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp; + uint32 targetDelta = target - beforeOrAt.blockTimestamp; + return ( + beforeOrAt.tickCumulative + + ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / observationTimeDelta) * + targetDelta, + beforeOrAt.secondsPerLiquidityCumulativeX128 + + uint160( + (uint256( + atOrAfter.secondsPerLiquidityCumulativeX128 - beforeOrAt.secondsPerLiquidityCumulativeX128 + ) * targetDelta) / observationTimeDelta + ) + ); + } + } + + /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos` + /// @dev Reverts if `secondsAgos` > oldest observation + /// @param self The stored oracle array + /// @param time The current block.timestamp + /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation + /// @param tick The current tick + /// @param index The index of the observation that was most recently written to the observations array + /// @param liquidity The current in-range pool liquidity + /// @param cardinality The number of populated elements in the oracle array + /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo` + /// @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo` + function observe( + Observation[65535] storage self, + uint32 time, + uint32[] memory secondsAgos, + int24 tick, + uint16 index, + uint128 liquidity, + uint16 cardinality + ) internal view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) { + require(cardinality > 0, 'I'); + + tickCumulatives = new int56[](secondsAgos.length); + secondsPerLiquidityCumulativeX128s = new uint160[](secondsAgos.length); + for (uint256 i = 0; i < secondsAgos.length; i++) { + (tickCumulatives[i], secondsPerLiquidityCumulativeX128s[i]) = observeSingle( + self, + time, + secondsAgos[i], + tick, + index, + liquidity, + cardinality + ); + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol new file mode 100644 index 000000000..1c67c7f27 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './FullMath.sol'; +import './FixedPoint128.sol'; +import './LiquidityMath.sol'; + +/// @title Position +/// @notice Positions represent an owner address' liquidity between a lower and upper tick boundary +/// @dev Positions store additional state for tracking fees owed to the position +library Position { + // info stored for each user's position + struct Info { + // the amount of liquidity owned by this position + uint128 liquidity; + // fee growth per unit of liquidity as of the last update to liquidity or fees owed + uint256 feeGrowthInside0LastX128; + uint256 feeGrowthInside1LastX128; + // the fees owed to the position owner in token0/token1 + uint128 tokensOwed0; + uint128 tokensOwed1; + } + + /// @notice Returns the Info struct of a position, given an owner and position boundaries + /// @param self The mapping containing all user positions + /// @param owner The address of the position owner + /// @param tickLower The lower tick boundary of the position + /// @param tickUpper The upper tick boundary of the position + /// @return position The position info struct of the given owners' position + function get( + mapping(bytes32 => Info) storage self, + address owner, + int24 tickLower, + int24 tickUpper + ) internal view returns (Position.Info storage position) { + position = self[keccak256(abi.encodePacked(owner, tickLower, tickUpper))]; + } + + /// @notice Credits accumulated fees to a user's position + /// @param self The individual position to update + /// @param liquidityDelta The change in pool liquidity as a result of the position update + /// @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries + /// @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries + function update( + Info storage self, + int128 liquidityDelta, + uint256 feeGrowthInside0X128, + uint256 feeGrowthInside1X128 + ) internal { + Info memory _self = self; + + uint128 liquidityNext; + if (liquidityDelta == 0) { + require(_self.liquidity > 0, 'NP'); // disallow pokes for 0 liquidity positions + liquidityNext = _self.liquidity; + } else { + liquidityNext = LiquidityMath.addDelta(_self.liquidity, liquidityDelta); + } + + // calculate accumulated fees + uint128 tokensOwed0 = + uint128( + FullMath.mulDiv( + feeGrowthInside0X128 - _self.feeGrowthInside0LastX128, + _self.liquidity, + FixedPoint128.Q128 + ) + ); + uint128 tokensOwed1 = + uint128( + FullMath.mulDiv( + feeGrowthInside1X128 - _self.feeGrowthInside1LastX128, + _self.liquidity, + FixedPoint128.Q128 + ) + ); + + // update the position + if (liquidityDelta != 0) self.liquidity = liquidityNext; + self.feeGrowthInside0LastX128 = feeGrowthInside0X128; + self.feeGrowthInside1LastX128 = feeGrowthInside1X128; + if (tokensOwed0 > 0 || tokensOwed1 > 0) { + // overflow is acceptable, have to withdraw before you hit type(uint128).max fees + self.tokensOwed0 += tokensOwed0; + self.tokensOwed1 += tokensOwed1; + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol new file mode 100644 index 000000000..a8ea22987 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Safe casting methods +/// @notice Contains methods for safely casting between types +library SafeCast { + /// @notice Cast a uint256 to a uint160, revert on overflow + /// @param y The uint256 to be downcasted + /// @return z The downcasted integer, now type uint160 + function toUint160(uint256 y) internal pure returns (uint160 z) { + require((z = uint160(y)) == y); + } + + /// @notice Cast a int256 to a int128, revert on overflow or underflow + /// @param y The int256 to be downcasted + /// @return z The downcasted integer, now type int128 + function toInt128(int256 y) internal pure returns (int128 z) { + require((z = int128(y)) == y); + } + + /// @notice Cast a uint256 to a int256, revert on overflow + /// @param y The uint256 to be casted + /// @return z The casted integer, now type int256 + function toInt256(uint256 y) internal pure returns (int256 z) { + require(y < 2**255); + z = int256(y); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol new file mode 100644 index 000000000..685f485da --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './LowGasSafeMath.sol'; +import './SafeCast.sol'; + +import './FullMath.sol'; +import './UnsafeMath.sol'; +import './FixedPoint96.sol'; + +/// @title Functions based on Q64.96 sqrt price and liquidity +/// @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas +library SqrtPriceMath { + using LowGasSafeMath for uint256; + using SafeCast for uint256; + + /// @notice Gets the next sqrt price given a delta of token0 + /// @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least + /// far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the + /// price less in order to not send too much output. + /// The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96), + /// if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount). + /// @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta + /// @param liquidity The amount of usable liquidity + /// @param amount How much of token0 to add or remove from virtual reserves + /// @param add Whether to add or remove the amount of token0 + /// @return The price after adding or removing amount, depending on add + function getNextSqrtPriceFromAmount0RoundingUp( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amount, + bool add + ) internal pure returns (uint160) { + // we short circuit amount == 0 because the result is otherwise not guaranteed to equal the input price + if (amount == 0) return sqrtPX96; + uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; + + if (add) { + uint256 product; + if ((product = amount * sqrtPX96) / amount == sqrtPX96) { + uint256 denominator = numerator1 + product; + if (denominator >= numerator1) + // always fits in 160 bits + return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator)); + } + + return uint160(UnsafeMath.divRoundingUp(numerator1, (numerator1 / sqrtPX96).add(amount))); + } else { + uint256 product; + // if the product overflows, we know the denominator underflows + // in addition, we must check that the denominator does not underflow + require((product = amount * sqrtPX96) / amount == sqrtPX96 && numerator1 > product); + uint256 denominator = numerator1 - product; + return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator).toUint160(); + } + } + + /// @notice Gets the next sqrt price given a delta of token1 + /// @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least + /// far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the + /// price less in order to not send too much output. + /// The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity + /// @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta + /// @param liquidity The amount of usable liquidity + /// @param amount How much of token1 to add, or remove, from virtual reserves + /// @param add Whether to add, or remove, the amount of token1 + /// @return The price after adding or removing `amount` + function getNextSqrtPriceFromAmount1RoundingDown( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amount, + bool add + ) internal pure returns (uint160) { + // if we're adding (subtracting), rounding down requires rounding the quotient down (up) + // in both cases, avoid a mulDiv for most inputs + if (add) { + uint256 quotient = + ( + amount <= type(uint160).max + ? (amount << FixedPoint96.RESOLUTION) / liquidity + : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity) + ); + + return uint256(sqrtPX96).add(quotient).toUint160(); + } else { + uint256 quotient = + ( + amount <= type(uint160).max + ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity) + : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity) + ); + + require(sqrtPX96 > quotient); + // always fits 160 bits + return uint160(sqrtPX96 - quotient); + } + } + + /// @notice Gets the next sqrt price given an input amount of token0 or token1 + /// @dev Throws if price or liquidity are 0, or if the next price is out of bounds + /// @param sqrtPX96 The starting price, i.e., before accounting for the input amount + /// @param liquidity The amount of usable liquidity + /// @param amountIn How much of token0, or token1, is being swapped in + /// @param zeroForOne Whether the amount in is token0 or token1 + /// @return sqrtQX96 The price after adding the input amount to token0 or token1 + function getNextSqrtPriceFromInput( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amountIn, + bool zeroForOne + ) internal pure returns (uint160 sqrtQX96) { + require(sqrtPX96 > 0); + require(liquidity > 0); + + // round to make sure that we don't pass the target price + return + zeroForOne + ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true) + : getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true); + } + + /// @notice Gets the next sqrt price given an output amount of token0 or token1 + /// @dev Throws if price or liquidity are 0 or the next price is out of bounds + /// @param sqrtPX96 The starting price before accounting for the output amount + /// @param liquidity The amount of usable liquidity + /// @param amountOut How much of token0, or token1, is being swapped out + /// @param zeroForOne Whether the amount out is token0 or token1 + /// @return sqrtQX96 The price after removing the output amount of token0 or token1 + function getNextSqrtPriceFromOutput( + uint160 sqrtPX96, + uint128 liquidity, + uint256 amountOut, + bool zeroForOne + ) internal pure returns (uint160 sqrtQX96) { + require(sqrtPX96 > 0); + require(liquidity > 0); + + // round to make sure that we pass the target price + return + zeroForOne + ? getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false) + : getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false); + } + + /// @notice Gets the amount0 delta between two prices + /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper), + /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower)) + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The amount of usable liquidity + /// @param roundUp Whether to round the amount up or down + /// @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices + function getAmount0Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + uint128 liquidity, + bool roundUp + ) internal pure returns (uint256 amount0) { + if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); + + uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; + uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96; + + require(sqrtRatioAX96 > 0); + + return + roundUp + ? UnsafeMath.divRoundingUp( + FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), + sqrtRatioAX96 + ) + : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96; + } + + /// @notice Gets the amount1 delta between two prices + /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower)) + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The amount of usable liquidity + /// @param roundUp Whether to round the amount up, or down + /// @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices + function getAmount1Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + uint128 liquidity, + bool roundUp + ) internal pure returns (uint256 amount1) { + if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); + + return + roundUp + ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96) + : FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96); + } + + /// @notice Helper that gets signed token0 delta + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The change in liquidity for which to compute the amount0 delta + /// @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices + function getAmount0Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + int128 liquidity + ) internal pure returns (int256 amount0) { + return + liquidity < 0 + ? -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() + : getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); + } + + /// @notice Helper that gets signed token1 delta + /// @param sqrtRatioAX96 A sqrt price + /// @param sqrtRatioBX96 Another sqrt price + /// @param liquidity The change in liquidity for which to compute the amount1 delta + /// @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices + function getAmount1Delta( + uint160 sqrtRatioAX96, + uint160 sqrtRatioBX96, + int128 liquidity + ) internal pure returns (int256 amount1) { + return + liquidity < 0 + ? -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() + : getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol new file mode 100644 index 000000000..ee176fbee --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './FullMath.sol'; +import './SqrtPriceMath.sol'; + +/// @title Computes the result of a swap within ticks +/// @notice Contains methods for computing the result of a swap within a single tick price range, i.e., a single tick. +library SwapMath { + /// @notice Computes the result of swapping some amount in, or amount out, given the parameters of the swap + /// @dev The fee, plus the amount in, will never exceed the amount remaining if the swap's `amountSpecified` is positive + /// @param sqrtRatioCurrentX96 The current sqrt price of the pool + /// @param sqrtRatioTargetX96 The price that cannot be exceeded, from which the direction of the swap is inferred + /// @param liquidity The usable liquidity + /// @param amountRemaining How much input or output amount is remaining to be swapped in/out + /// @param feePips The fee taken from the input amount, expressed in hundredths of a bip + /// @return sqrtRatioNextX96 The price after swapping the amount in/out, not to exceed the price target + /// @return amountIn The amount to be swapped in, of either token0 or token1, based on the direction of the swap + /// @return amountOut The amount to be received, of either token0 or token1, based on the direction of the swap + /// @return feeAmount The amount of input that will be taken as a fee + function computeSwapStep( + uint160 sqrtRatioCurrentX96, + uint160 sqrtRatioTargetX96, + uint128 liquidity, + int256 amountRemaining, + uint24 feePips + ) + internal + pure + returns ( + uint160 sqrtRatioNextX96, + uint256 amountIn, + uint256 amountOut, + uint256 feeAmount + ) + { + bool zeroForOne = sqrtRatioCurrentX96 >= sqrtRatioTargetX96; + bool exactIn = amountRemaining >= 0; + + if (exactIn) { + uint256 amountRemainingLessFee = FullMath.mulDiv(uint256(amountRemaining), 1e6 - feePips, 1e6); + amountIn = zeroForOne + ? SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, true) + : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, true); + if (amountRemainingLessFee >= amountIn) sqrtRatioNextX96 = sqrtRatioTargetX96; + else + sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromInput( + sqrtRatioCurrentX96, + liquidity, + amountRemainingLessFee, + zeroForOne + ); + } else { + amountOut = zeroForOne + ? SqrtPriceMath.getAmount1Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, false) + : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, false); + if (uint256(-amountRemaining) >= amountOut) sqrtRatioNextX96 = sqrtRatioTargetX96; + else + sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromOutput( + sqrtRatioCurrentX96, + liquidity, + uint256(-amountRemaining), + zeroForOne + ); + } + + bool max = sqrtRatioTargetX96 == sqrtRatioNextX96; + + // get the input/output amounts + if (zeroForOne) { + amountIn = max && exactIn + ? amountIn + : SqrtPriceMath.getAmount0Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true); + amountOut = max && !exactIn + ? amountOut + : SqrtPriceMath.getAmount1Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, false); + } else { + amountIn = max && exactIn + ? amountIn + : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, true); + amountOut = max && !exactIn + ? amountOut + : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, false); + } + + // cap the output amount to not exceed the remaining output amount + if (!exactIn && amountOut > uint256(-amountRemaining)) { + amountOut = uint256(-amountRemaining); + } + + if (exactIn && sqrtRatioNextX96 != sqrtRatioTargetX96) { + // we didn't reach the target, so take the remainder of the maximum input as fee + feeAmount = uint256(amountRemaining) - amountIn; + } else { + feeAmount = FullMath.mulDivRoundingUp(amountIn, feePips, 1e6 - feePips); + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol new file mode 100644 index 000000000..13d342849 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol @@ -0,0 +1,183 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './LowGasSafeMath.sol'; +import './SafeCast.sol'; + +import './TickMath.sol'; +import './LiquidityMath.sol'; + +/// @title Tick +/// @notice Contains functions for managing tick processes and relevant calculations +library Tick { + using LowGasSafeMath for int256; + using SafeCast for int256; + + // info stored for each initialized individual tick + struct Info { + // the total position liquidity that references this tick + uint128 liquidityGross; + // amount of net liquidity added (subtracted) when tick is crossed from left to right (right to left), + int128 liquidityNet; + // fee growth per unit of liquidity on the _other_ side of this tick (relative to the current tick) + // only has relative meaning, not absolute — the value depends on when the tick is initialized + uint256 feeGrowthOutside0X128; + uint256 feeGrowthOutside1X128; + // the cumulative tick value on the other side of the tick + int56 tickCumulativeOutside; + // the seconds per unit of liquidity on the _other_ side of this tick (relative to the current tick) + // only has relative meaning, not absolute — the value depends on when the tick is initialized + uint160 secondsPerLiquidityOutsideX128; + // the seconds spent on the other side of the tick (relative to the current tick) + // only has relative meaning, not absolute — the value depends on when the tick is initialized + uint32 secondsOutside; + // true iff the tick is initialized, i.e. the value is exactly equivalent to the expression liquidityGross != 0 + // these 8 bits are set to prevent fresh sstores when crossing newly initialized ticks + bool initialized; + } + + /// @notice Derives max liquidity per tick from given tick spacing + /// @dev Executed within the pool constructor + /// @param tickSpacing The amount of required tick separation, realized in multiples of `tickSpacing` + /// e.g., a tickSpacing of 3 requires ticks to be initialized every 3rd tick i.e., ..., -6, -3, 0, 3, 6, ... + /// @return The max liquidity per tick + function tickSpacingToMaxLiquidityPerTick(int24 tickSpacing) internal pure returns (uint128) { + int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing; + int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing; + uint24 numTicks = uint24((maxTick - minTick) / tickSpacing) + 1; + return type(uint128).max / numTicks; + } + + /// @notice Retrieves fee growth data + /// @param self The mapping containing all tick information for initialized ticks + /// @param tickLower The lower tick boundary of the position + /// @param tickUpper The upper tick boundary of the position + /// @param tickCurrent The current tick + /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 + /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 + /// @return feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries + /// @return feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries + function getFeeGrowthInside( + mapping(int24 => Tick.Info) storage self, + int24 tickLower, + int24 tickUpper, + int24 tickCurrent, + uint256 feeGrowthGlobal0X128, + uint256 feeGrowthGlobal1X128 + ) internal view returns (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) { + Info storage lower = self[tickLower]; + Info storage upper = self[tickUpper]; + + // calculate fee growth below + uint256 feeGrowthBelow0X128; + uint256 feeGrowthBelow1X128; + if (tickCurrent >= tickLower) { + feeGrowthBelow0X128 = lower.feeGrowthOutside0X128; + feeGrowthBelow1X128 = lower.feeGrowthOutside1X128; + } else { + feeGrowthBelow0X128 = feeGrowthGlobal0X128 - lower.feeGrowthOutside0X128; + feeGrowthBelow1X128 = feeGrowthGlobal1X128 - lower.feeGrowthOutside1X128; + } + + // calculate fee growth above + uint256 feeGrowthAbove0X128; + uint256 feeGrowthAbove1X128; + if (tickCurrent < tickUpper) { + feeGrowthAbove0X128 = upper.feeGrowthOutside0X128; + feeGrowthAbove1X128 = upper.feeGrowthOutside1X128; + } else { + feeGrowthAbove0X128 = feeGrowthGlobal0X128 - upper.feeGrowthOutside0X128; + feeGrowthAbove1X128 = feeGrowthGlobal1X128 - upper.feeGrowthOutside1X128; + } + + feeGrowthInside0X128 = feeGrowthGlobal0X128 - feeGrowthBelow0X128 - feeGrowthAbove0X128; + feeGrowthInside1X128 = feeGrowthGlobal1X128 - feeGrowthBelow1X128 - feeGrowthAbove1X128; + } + + /// @notice Updates a tick and returns true if the tick was flipped from initialized to uninitialized, or vice versa + /// @param self The mapping containing all tick information for initialized ticks + /// @param tick The tick that will be updated + /// @param tickCurrent The current tick + /// @param liquidityDelta A new amount of liquidity to be added (subtracted) when tick is crossed from left to right (right to left) + /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 + /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 + /// @param secondsPerLiquidityCumulativeX128 The all-time seconds per max(1, liquidity) of the pool + /// @param time The current block timestamp cast to a uint32 + /// @param upper true for updating a position's upper tick, or false for updating a position's lower tick + /// @param maxLiquidity The maximum liquidity allocation for a single tick + /// @return flipped Whether the tick was flipped from initialized to uninitialized, or vice versa + function update( + mapping(int24 => Tick.Info) storage self, + int24 tick, + int24 tickCurrent, + int128 liquidityDelta, + uint256 feeGrowthGlobal0X128, + uint256 feeGrowthGlobal1X128, + uint160 secondsPerLiquidityCumulativeX128, + int56 tickCumulative, + uint32 time, + bool upper, + uint128 maxLiquidity + ) internal returns (bool flipped) { + Tick.Info storage info = self[tick]; + + uint128 liquidityGrossBefore = info.liquidityGross; + uint128 liquidityGrossAfter = LiquidityMath.addDelta(liquidityGrossBefore, liquidityDelta); + + require(liquidityGrossAfter <= maxLiquidity, 'LO'); + + flipped = (liquidityGrossAfter == 0) != (liquidityGrossBefore == 0); + + if (liquidityGrossBefore == 0) { + // by convention, we assume that all growth before a tick was initialized happened _below_ the tick + if (tick <= tickCurrent) { + info.feeGrowthOutside0X128 = feeGrowthGlobal0X128; + info.feeGrowthOutside1X128 = feeGrowthGlobal1X128; + info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128; + info.tickCumulativeOutside = tickCumulative; + info.secondsOutside = time; + } + info.initialized = true; + } + + info.liquidityGross = liquidityGrossAfter; + + // when the lower (upper) tick is crossed left to right (right to left), liquidity must be added (removed) + info.liquidityNet = upper + ? int256(info.liquidityNet).sub(liquidityDelta).toInt128() + : int256(info.liquidityNet).add(liquidityDelta).toInt128(); + } + + /// @notice Clears tick data + /// @param self The mapping containing all initialized tick information for initialized ticks + /// @param tick The tick that will be cleared + function clear(mapping(int24 => Tick.Info) storage self, int24 tick) internal { + delete self[tick]; + } + + /// @notice Transitions to next tick as needed by price movement + /// @param self The mapping containing all tick information for initialized ticks + /// @param tick The destination tick of the transition + /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 + /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 + /// @param secondsPerLiquidityCumulativeX128 The current seconds per liquidity + /// @param time The current block.timestamp + /// @return liquidityNet The amount of liquidity added (subtracted) when tick is crossed from left to right (right to left) + function cross( + mapping(int24 => Tick.Info) storage self, + int24 tick, + uint256 feeGrowthGlobal0X128, + uint256 feeGrowthGlobal1X128, + uint160 secondsPerLiquidityCumulativeX128, + int56 tickCumulative, + uint32 time + ) internal returns (int128 liquidityNet) { + Tick.Info storage info = self[tick]; + info.feeGrowthOutside0X128 = feeGrowthGlobal0X128 - info.feeGrowthOutside0X128; + info.feeGrowthOutside1X128 = feeGrowthGlobal1X128 - info.feeGrowthOutside1X128; + info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128 - info.secondsPerLiquidityOutsideX128; + info.tickCumulativeOutside = tickCumulative - info.tickCumulativeOutside; + info.secondsOutside = time - info.secondsOutside; + liquidityNet = info.liquidityNet; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol new file mode 100644 index 000000000..3c4358577 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import './BitMath.sol'; + +/// @title Packed tick initialized state library +/// @notice Stores a packed mapping of tick index to its initialized state +/// @dev The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word. +library TickBitmap { + /// @notice Computes the position in the mapping where the initialized bit for a tick lives + /// @param tick The tick for which to compute the position + /// @return wordPos The key in the mapping containing the word in which the bit is stored + /// @return bitPos The bit position in the word where the flag is stored + function position(int24 tick) private pure returns (int16 wordPos, uint8 bitPos) { + wordPos = int16(tick >> 8); + bitPos = uint8(tick % 256); + } + + /// @notice Flips the initialized state for a given tick from false to true, or vice versa + /// @param self The mapping in which to flip the tick + /// @param tick The tick to flip + /// @param tickSpacing The spacing between usable ticks + function flipTick( + mapping(int16 => uint256) storage self, + int24 tick, + int24 tickSpacing + ) internal { + require(tick % tickSpacing == 0); // ensure that the tick is spaced + (int16 wordPos, uint8 bitPos) = position(tick / tickSpacing); + uint256 mask = 1 << bitPos; + self[wordPos] ^= mask; + } + + /// @notice Returns the next initialized tick contained in the same word (or adjacent word) as the tick that is either + /// to the left (less than or equal to) or right (greater than) of the given tick + /// @param self The mapping in which to compute the next initialized tick + /// @param tick The starting tick + /// @param tickSpacing The spacing between usable ticks + /// @param lte Whether to search for the next initialized tick to the left (less than or equal to the starting tick) + /// @return next The next initialized or uninitialized tick up to 256 ticks away from the current tick + /// @return initialized Whether the next tick is initialized, as the function only searches within up to 256 ticks + function nextInitializedTickWithinOneWord( + mapping(int16 => uint256) storage self, + int24 tick, + int24 tickSpacing, + bool lte + ) internal view returns (int24 next, bool initialized) { + int24 compressed = tick / tickSpacing; + if (tick < 0 && tick % tickSpacing != 0) compressed--; // round towards negative infinity + + if (lte) { + (int16 wordPos, uint8 bitPos) = position(compressed); + // all the 1s at or to the right of the current bitPos + uint256 mask = (1 << bitPos) - 1 + (1 << bitPos); + uint256 masked = self[wordPos] & mask; + + // if there are no initialized ticks to the right of or at the current tick, return rightmost in the word + initialized = masked != 0; + // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick + next = initialized + ? (compressed - int24(bitPos - BitMath.mostSignificantBit(masked))) * tickSpacing + : (compressed - int24(bitPos)) * tickSpacing; + } else { + // start from the word of the next tick, since the current tick state doesn't matter + (int16 wordPos, uint8 bitPos) = position(compressed + 1); + // all the 1s at or to the left of the bitPos + uint256 mask = ~((1 << bitPos) - 1); + uint256 masked = self[wordPos] & mask; + + // if there are no initialized ticks to the left of the current tick, return leftmost in the word + initialized = masked != 0; + // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick + next = initialized + ? (compressed + 1 + int24(BitMath.leastSignificantBit(masked) - bitPos)) * tickSpacing + : (compressed + 1 + int24(type(uint8).max - bitPos)) * tickSpacing; + } + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol new file mode 100644 index 000000000..378e44528 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol @@ -0,0 +1,205 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Math library for computing sqrt prices from ticks and vice versa +/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports +/// prices between 2**-128 and 2**128 +library TickMath { + /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 + int24 internal constant MIN_TICK = -887272; + /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 + int24 internal constant MAX_TICK = -MIN_TICK; + + /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) + uint160 internal constant MIN_SQRT_RATIO = 4295128739; + /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) + uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; + + /// @notice Calculates sqrt(1.0001^tick) * 2^96 + /// @dev Throws if |tick| > max tick + /// @param tick The input tick for the above formula + /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) + /// at the given tick + function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { + uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); + require(absTick <= uint256(MAX_TICK), 'T'); + + uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000; + if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; + if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; + if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; + if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; + if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; + if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; + if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; + if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; + if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; + if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; + if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; + if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; + if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; + if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; + if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; + if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; + if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; + if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; + if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; + + if (tick > 0) ratio = type(uint256).max / ratio; + + // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. + // we then downcast because we know the result always fits within 160 bits due to our tick input constraint + // we round up in the division so getTickAtSqrtRatio of the output price is always consistent + sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); + } + + /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio + /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may + /// ever return. + /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96 + /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio + function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { + // second inequality must be < because the price can never reach the price at the max tick + require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R'); + uint256 ratio = uint256(sqrtPriceX96) << 32; + + uint256 r = ratio; + uint256 msb = 0; + + assembly { + let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(5, gt(r, 0xFFFFFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(4, gt(r, 0xFFFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(3, gt(r, 0xFF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(2, gt(r, 0xF)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := shl(1, gt(r, 0x3)) + msb := or(msb, f) + r := shr(f, r) + } + assembly { + let f := gt(r, 0x1) + msb := or(msb, f) + } + + if (msb >= 128) r = ratio >> (msb - 127); + else r = ratio << (127 - msb); + + int256 log_2 = (int256(msb) - 128) << 64; + + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(63, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(62, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(61, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(60, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(59, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(58, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(57, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(56, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(55, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(54, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(53, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(52, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(51, f)) + r := shr(f, r) + } + assembly { + r := shr(127, mul(r, r)) + let f := shr(128, r) + log_2 := or(log_2, shl(50, f)) + } + + int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number + + int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); + int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); + + tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol new file mode 100644 index 000000000..25d630902 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.6.0; + +import '../interfaces/IERC20Minimal.sol'; + +/// @title TransferHelper +/// @notice Contains helper methods for interacting with ERC20 tokens that do not consistently return true/false +library TransferHelper { + /// @notice Transfers tokens from msg.sender to a recipient + /// @dev Calls transfer on token contract, errors with TF if transfer fails + /// @param token The contract address of the token which will be transferred + /// @param to The recipient of the transfer + /// @param value The value of the transfer + function safeTransfer( + address token, + address to, + uint256 value + ) internal { + (bool success, bytes memory data) = + token.call(abi.encodeWithSelector(IERC20Minimal.transfer.selector, to, value)); + require(success && (data.length == 0 || abi.decode(data, (bool))), 'TF'); + } +} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol new file mode 100644 index 000000000..f62f84676 --- /dev/null +++ b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity >=0.5.0; + +/// @title Math functions that do not check inputs or outputs +/// @notice Contains methods that perform common math functions but do not do any overflow or underflow checks +library UnsafeMath { + /// @notice Returns ceil(x / y) + /// @dev division by 0 has unspecified behavior, and must be checked externally + /// @param x The dividend + /// @param y The divisor + /// @return z The quotient, ceil(x / y) + function divRoundingUp(uint256 x, uint256 y) internal pure returns (uint256 z) { + assembly { + z := add(div(x, y), gt(mod(x, y), 0)) + } + } +} diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 9b0fe5a74..c2507ce11 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -325,7 +325,7 @@ class SlitherReadStorage: struct_var = info["elems"][item][key].get('struct_var') # doesn't handle deep keys currently - var_name_struct_or_array_var = "{} -> {}".format(var, struct_var) + var_name_struct_or_array_var = "{} -> {} -> {}".format(var, item, struct_var) if environ.get("TABLE_VALUE") is None: tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var]) From e178b37fc9cd6bb052672b1027e8fafb2cbeb747 Mon Sep 17 00:00:00 2001 From: noxx Date: Sun, 17 Jul 2022 21:06:27 +0100 Subject: [PATCH 097/202] remove crytic-export --- .../contracts/NoDelegateCall.sol | 27 - .../contracts/UniswapV3Pool.sol | 869 ------------------ .../contracts/interfaces/IERC20Minimal.sol | 52 -- .../interfaces/IUniswapV3Factory.sol | 78 -- .../contracts/interfaces/IUniswapV3Pool.sol | 24 - .../interfaces/IUniswapV3PoolDeployer.sol | 26 - .../callback/IUniswapV3FlashCallback.sol | 18 - .../callback/IUniswapV3MintCallback.sol | 18 - .../callback/IUniswapV3SwapCallback.sol | 21 - .../interfaces/pool/IUniswapV3PoolActions.sol | 103 --- .../pool/IUniswapV3PoolDerivedState.sol | 40 - .../interfaces/pool/IUniswapV3PoolEvents.sol | 121 --- .../pool/IUniswapV3PoolImmutables.sol | 35 - .../pool/IUniswapV3PoolOwnerActions.sol | 23 - .../interfaces/pool/IUniswapV3PoolState.sol | 116 --- .../contracts/libraries/BitMath.sol | 94 -- .../contracts/libraries/FixedPoint128.sol | 8 - .../contracts/libraries/FixedPoint96.sol | 10 - .../contracts/libraries/FullMath.sol | 124 --- .../contracts/libraries/LiquidityMath.sol | 17 - .../contracts/libraries/LowGasSafeMath.sol | 46 - .../contracts/libraries/Oracle.sol | 325 ------- .../contracts/libraries/Position.sol | 88 -- .../contracts/libraries/SafeCast.sol | 28 - .../contracts/libraries/SqrtPriceMath.sol | 227 ----- .../contracts/libraries/SwapMath.sol | 98 -- .../contracts/libraries/Tick.sol | 183 ---- .../contracts/libraries/TickBitmap.sol | 78 -- .../contracts/libraries/TickMath.sol | 205 ----- .../contracts/libraries/TransferHelper.sol | 23 - .../contracts/libraries/UnsafeMath.sol | 17 - 31 files changed, 3142 deletions(-) delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol delete mode 100644 crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol deleted file mode 100644 index 5411979dc..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/NoDelegateCall.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.7.6; - -/// @title Prevents delegatecall to a contract -/// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract -abstract contract NoDelegateCall { - /// @dev The original address of this contract - address private immutable original; - - constructor() { - // Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode. - // In other words, this variable won't change when it's checked at runtime. - original = address(this); - } - - /// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method, - /// and the use of immutable means the address bytes are copied in every place the modifier is used. - function checkNotDelegateCall() private view { - require(address(this) == original); - } - - /// @notice Prevents delegatecall into the modified method - modifier noDelegateCall() { - checkNotDelegateCall(); - _; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol deleted file mode 100644 index 9e0982127..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/UniswapV3Pool.sol +++ /dev/null @@ -1,869 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity =0.7.6; - -import './interfaces/IUniswapV3Pool.sol'; - -import './NoDelegateCall.sol'; - -import './libraries/LowGasSafeMath.sol'; -import './libraries/SafeCast.sol'; -import './libraries/Tick.sol'; -import './libraries/TickBitmap.sol'; -import './libraries/Position.sol'; -import './libraries/Oracle.sol'; - -import './libraries/FullMath.sol'; -import './libraries/FixedPoint128.sol'; -import './libraries/TransferHelper.sol'; -import './libraries/TickMath.sol'; -import './libraries/LiquidityMath.sol'; -import './libraries/SqrtPriceMath.sol'; -import './libraries/SwapMath.sol'; - -import './interfaces/IUniswapV3PoolDeployer.sol'; -import './interfaces/IUniswapV3Factory.sol'; -import './interfaces/IERC20Minimal.sol'; -import './interfaces/callback/IUniswapV3MintCallback.sol'; -import './interfaces/callback/IUniswapV3SwapCallback.sol'; -import './interfaces/callback/IUniswapV3FlashCallback.sol'; - -contract UniswapV3Pool is IUniswapV3Pool, NoDelegateCall { - using LowGasSafeMath for uint256; - using LowGasSafeMath for int256; - using SafeCast for uint256; - using SafeCast for int256; - using Tick for mapping(int24 => Tick.Info); - using TickBitmap for mapping(int16 => uint256); - using Position for mapping(bytes32 => Position.Info); - using Position for Position.Info; - using Oracle for Oracle.Observation[65535]; - - /// @inheritdoc IUniswapV3PoolImmutables - address public immutable override factory; - /// @inheritdoc IUniswapV3PoolImmutables - address public immutable override token0; - /// @inheritdoc IUniswapV3PoolImmutables - address public immutable override token1; - /// @inheritdoc IUniswapV3PoolImmutables - uint24 public immutable override fee; - - /// @inheritdoc IUniswapV3PoolImmutables - int24 public immutable override tickSpacing; - - /// @inheritdoc IUniswapV3PoolImmutables - uint128 public immutable override maxLiquidityPerTick; - - struct Slot0 { - // the current price - uint160 sqrtPriceX96; - // the current tick - int24 tick; - // the most-recently updated index of the observations array - uint16 observationIndex; - // the current maximum number of observations that are being stored - uint16 observationCardinality; - // the next maximum number of observations to store, triggered in observations.write - uint16 observationCardinalityNext; - // the current protocol fee as a percentage of the swap fee taken on withdrawal - // represented as an integer denominator (1/x)% - uint8 feeProtocol; - // whether the pool is locked - bool unlocked; - } - /// @inheritdoc IUniswapV3PoolState - Slot0 public override slot0; - - /// @inheritdoc IUniswapV3PoolState - uint256 public override feeGrowthGlobal0X128; - /// @inheritdoc IUniswapV3PoolState - uint256 public override feeGrowthGlobal1X128; - - // accumulated protocol fees in token0/token1 units - struct ProtocolFees { - uint128 token0; - uint128 token1; - } - /// @inheritdoc IUniswapV3PoolState - ProtocolFees public override protocolFees; - - /// @inheritdoc IUniswapV3PoolState - uint128 public override liquidity; - - /// @inheritdoc IUniswapV3PoolState - mapping(int24 => Tick.Info) public override ticks; - /// @inheritdoc IUniswapV3PoolState - mapping(int16 => uint256) public override tickBitmap; - /// @inheritdoc IUniswapV3PoolState - mapping(bytes32 => Position.Info) public override positions; - /// @inheritdoc IUniswapV3PoolState - Oracle.Observation[65535] public override observations; - - /// @dev Mutually exclusive reentrancy protection into the pool to/from a method. This method also prevents entrance - /// to a function before the pool is initialized. The reentrancy guard is required throughout the contract because - /// we use balance checks to determine the payment status of interactions such as mint, swap and flash. - modifier lock() { - require(slot0.unlocked, 'LOK'); - slot0.unlocked = false; - _; - slot0.unlocked = true; - } - - /// @dev Prevents calling a function from anyone except the address returned by IUniswapV3Factory#owner() - modifier onlyFactoryOwner() { - require(msg.sender == IUniswapV3Factory(factory).owner()); - _; - } - - constructor() { - int24 _tickSpacing; - (factory, token0, token1, fee, _tickSpacing) = IUniswapV3PoolDeployer(msg.sender).parameters(); - tickSpacing = _tickSpacing; - - maxLiquidityPerTick = Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing); - } - - /// @dev Common checks for valid tick inputs. - function checkTicks(int24 tickLower, int24 tickUpper) private pure { - require(tickLower < tickUpper, 'TLU'); - require(tickLower >= TickMath.MIN_TICK, 'TLM'); - require(tickUpper <= TickMath.MAX_TICK, 'TUM'); - } - - /// @dev Returns the block timestamp truncated to 32 bits, i.e. mod 2**32. This method is overridden in tests. - function _blockTimestamp() internal view virtual returns (uint32) { - return uint32(block.timestamp); // truncation is desired - } - - /// @dev Get the pool's balance of token0 - /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize - /// check - function balance0() private view returns (uint256) { - (bool success, bytes memory data) = - token0.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); - require(success && data.length >= 32); - return abi.decode(data, (uint256)); - } - - /// @dev Get the pool's balance of token1 - /// @dev This function is gas optimized to avoid a redundant extcodesize check in addition to the returndatasize - /// check - function balance1() private view returns (uint256) { - (bool success, bytes memory data) = - token1.staticcall(abi.encodeWithSelector(IERC20Minimal.balanceOf.selector, address(this))); - require(success && data.length >= 32); - return abi.decode(data, (uint256)); - } - - /// @inheritdoc IUniswapV3PoolDerivedState - function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) - external - view - override - noDelegateCall - returns ( - int56 tickCumulativeInside, - uint160 secondsPerLiquidityInsideX128, - uint32 secondsInside - ) - { - checkTicks(tickLower, tickUpper); - - int56 tickCumulativeLower; - int56 tickCumulativeUpper; - uint160 secondsPerLiquidityOutsideLowerX128; - uint160 secondsPerLiquidityOutsideUpperX128; - uint32 secondsOutsideLower; - uint32 secondsOutsideUpper; - - { - Tick.Info storage lower = ticks[tickLower]; - Tick.Info storage upper = ticks[tickUpper]; - bool initializedLower; - (tickCumulativeLower, secondsPerLiquidityOutsideLowerX128, secondsOutsideLower, initializedLower) = ( - lower.tickCumulativeOutside, - lower.secondsPerLiquidityOutsideX128, - lower.secondsOutside, - lower.initialized - ); - require(initializedLower); - - bool initializedUpper; - (tickCumulativeUpper, secondsPerLiquidityOutsideUpperX128, secondsOutsideUpper, initializedUpper) = ( - upper.tickCumulativeOutside, - upper.secondsPerLiquidityOutsideX128, - upper.secondsOutside, - upper.initialized - ); - require(initializedUpper); - } - - Slot0 memory _slot0 = slot0; - - if (_slot0.tick < tickLower) { - return ( - tickCumulativeLower - tickCumulativeUpper, - secondsPerLiquidityOutsideLowerX128 - secondsPerLiquidityOutsideUpperX128, - secondsOutsideLower - secondsOutsideUpper - ); - } else if (_slot0.tick < tickUpper) { - uint32 time = _blockTimestamp(); - (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = - observations.observeSingle( - time, - 0, - _slot0.tick, - _slot0.observationIndex, - liquidity, - _slot0.observationCardinality - ); - return ( - tickCumulative - tickCumulativeLower - tickCumulativeUpper, - secondsPerLiquidityCumulativeX128 - - secondsPerLiquidityOutsideLowerX128 - - secondsPerLiquidityOutsideUpperX128, - time - secondsOutsideLower - secondsOutsideUpper - ); - } else { - return ( - tickCumulativeUpper - tickCumulativeLower, - secondsPerLiquidityOutsideUpperX128 - secondsPerLiquidityOutsideLowerX128, - secondsOutsideUpper - secondsOutsideLower - ); - } - } - - /// @inheritdoc IUniswapV3PoolDerivedState - function observe(uint32[] calldata secondsAgos) - external - view - override - noDelegateCall - returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) - { - return - observations.observe( - _blockTimestamp(), - secondsAgos, - slot0.tick, - slot0.observationIndex, - liquidity, - slot0.observationCardinality - ); - } - - /// @inheritdoc IUniswapV3PoolActions - function increaseObservationCardinalityNext(uint16 observationCardinalityNext) - external - override - lock - noDelegateCall - { - uint16 observationCardinalityNextOld = slot0.observationCardinalityNext; // for the event - uint16 observationCardinalityNextNew = - observations.grow(observationCardinalityNextOld, observationCardinalityNext); - slot0.observationCardinalityNext = observationCardinalityNextNew; - if (observationCardinalityNextOld != observationCardinalityNextNew) - emit IncreaseObservationCardinalityNext(observationCardinalityNextOld, observationCardinalityNextNew); - } - - /// @inheritdoc IUniswapV3PoolActions - /// @dev not locked because it initializes unlocked - function initialize(uint160 sqrtPriceX96) external override { - require(slot0.sqrtPriceX96 == 0, 'AI'); - - int24 tick = TickMath.getTickAtSqrtRatio(sqrtPriceX96); - - (uint16 cardinality, uint16 cardinalityNext) = observations.initialize(_blockTimestamp()); - - slot0 = Slot0({ - sqrtPriceX96: sqrtPriceX96, - tick: tick, - observationIndex: 0, - observationCardinality: cardinality, - observationCardinalityNext: cardinalityNext, - feeProtocol: 0, - unlocked: true - }); - - emit Initialize(sqrtPriceX96, tick); - } - - struct ModifyPositionParams { - // the address that owns the position - address owner; - // the lower and upper tick of the position - int24 tickLower; - int24 tickUpper; - // any change in liquidity - int128 liquidityDelta; - } - - /// @dev Effect some changes to a position - /// @param params the position details and the change to the position's liquidity to effect - /// @return position a storage pointer referencing the position with the given owner and tick range - /// @return amount0 the amount of token0 owed to the pool, negative if the pool should pay the recipient - /// @return amount1 the amount of token1 owed to the pool, negative if the pool should pay the recipient - function _modifyPosition(ModifyPositionParams memory params) - private - noDelegateCall - returns ( - Position.Info storage position, - int256 amount0, - int256 amount1 - ) - { - checkTicks(params.tickLower, params.tickUpper); - - Slot0 memory _slot0 = slot0; // SLOAD for gas optimization - - position = _updatePosition( - params.owner, - params.tickLower, - params.tickUpper, - params.liquidityDelta, - _slot0.tick - ); - - if (params.liquidityDelta != 0) { - if (_slot0.tick < params.tickLower) { - // current tick is below the passed range; liquidity can only become in range by crossing from left to - // right, when we'll need _more_ token0 (it's becoming more valuable) so user must provide it - amount0 = SqrtPriceMath.getAmount0Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - } else if (_slot0.tick < params.tickUpper) { - // current tick is inside the passed range - uint128 liquidityBefore = liquidity; // SLOAD for gas optimization - - // write an oracle entry - (slot0.observationIndex, slot0.observationCardinality) = observations.write( - _slot0.observationIndex, - _blockTimestamp(), - _slot0.tick, - liquidityBefore, - _slot0.observationCardinality, - _slot0.observationCardinalityNext - ); - - amount0 = SqrtPriceMath.getAmount0Delta( - _slot0.sqrtPriceX96, - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - amount1 = SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - _slot0.sqrtPriceX96, - params.liquidityDelta - ); - - liquidity = LiquidityMath.addDelta(liquidityBefore, params.liquidityDelta); - } else { - // current tick is above the passed range; liquidity can only become in range by crossing from right to - // left, when we'll need _more_ token1 (it's becoming more valuable) so user must provide it - amount1 = SqrtPriceMath.getAmount1Delta( - TickMath.getSqrtRatioAtTick(params.tickLower), - TickMath.getSqrtRatioAtTick(params.tickUpper), - params.liquidityDelta - ); - } - } - } - - /// @dev Gets and updates a position with the given liquidity delta - /// @param owner the owner of the position - /// @param tickLower the lower tick of the position's tick range - /// @param tickUpper the upper tick of the position's tick range - /// @param tick the current tick, passed to avoid sloads - function _updatePosition( - address owner, - int24 tickLower, - int24 tickUpper, - int128 liquidityDelta, - int24 tick - ) private returns (Position.Info storage position) { - position = positions.get(owner, tickLower, tickUpper); - - uint256 _feeGrowthGlobal0X128 = feeGrowthGlobal0X128; // SLOAD for gas optimization - uint256 _feeGrowthGlobal1X128 = feeGrowthGlobal1X128; // SLOAD for gas optimization - - // if we need to update the ticks, do it - bool flippedLower; - bool flippedUpper; - if (liquidityDelta != 0) { - uint32 time = _blockTimestamp(); - (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) = - observations.observeSingle( - time, - 0, - slot0.tick, - slot0.observationIndex, - liquidity, - slot0.observationCardinality - ); - - flippedLower = ticks.update( - tickLower, - tick, - liquidityDelta, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128, - secondsPerLiquidityCumulativeX128, - tickCumulative, - time, - false, - maxLiquidityPerTick - ); - flippedUpper = ticks.update( - tickUpper, - tick, - liquidityDelta, - _feeGrowthGlobal0X128, - _feeGrowthGlobal1X128, - secondsPerLiquidityCumulativeX128, - tickCumulative, - time, - true, - maxLiquidityPerTick - ); - - if (flippedLower) { - tickBitmap.flipTick(tickLower, tickSpacing); - } - if (flippedUpper) { - tickBitmap.flipTick(tickUpper, tickSpacing); - } - } - - (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) = - ticks.getFeeGrowthInside(tickLower, tickUpper, tick, _feeGrowthGlobal0X128, _feeGrowthGlobal1X128); - - position.update(liquidityDelta, feeGrowthInside0X128, feeGrowthInside1X128); - - // clear any tick data that is no longer needed - if (liquidityDelta < 0) { - if (flippedLower) { - ticks.clear(tickLower); - } - if (flippedUpper) { - ticks.clear(tickUpper); - } - } - } - - /// @inheritdoc IUniswapV3PoolActions - /// @dev noDelegateCall is applied indirectly via _modifyPosition - function mint( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount, - bytes calldata data - ) external override lock returns (uint256 amount0, uint256 amount1) { - require(amount > 0); - (, int256 amount0Int, int256 amount1Int) = - _modifyPosition( - ModifyPositionParams({ - owner: recipient, - tickLower: tickLower, - tickUpper: tickUpper, - liquidityDelta: int256(amount).toInt128() - }) - ); - - amount0 = uint256(amount0Int); - amount1 = uint256(amount1Int); - - uint256 balance0Before; - uint256 balance1Before; - if (amount0 > 0) balance0Before = balance0(); - if (amount1 > 0) balance1Before = balance1(); - IUniswapV3MintCallback(msg.sender).uniswapV3MintCallback(amount0, amount1, data); - if (amount0 > 0) require(balance0Before.add(amount0) <= balance0(), 'M0'); - if (amount1 > 0) require(balance1Before.add(amount1) <= balance1(), 'M1'); - - emit Mint(msg.sender, recipient, tickLower, tickUpper, amount, amount0, amount1); - } - - /// @inheritdoc IUniswapV3PoolActions - function collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested - ) external override lock returns (uint128 amount0, uint128 amount1) { - // we don't need to checkTicks here, because invalid positions will never have non-zero tokensOwed{0,1} - Position.Info storage position = positions.get(msg.sender, tickLower, tickUpper); - - amount0 = amount0Requested > position.tokensOwed0 ? position.tokensOwed0 : amount0Requested; - amount1 = amount1Requested > position.tokensOwed1 ? position.tokensOwed1 : amount1Requested; - - if (amount0 > 0) { - position.tokensOwed0 -= amount0; - TransferHelper.safeTransfer(token0, recipient, amount0); - } - if (amount1 > 0) { - position.tokensOwed1 -= amount1; - TransferHelper.safeTransfer(token1, recipient, amount1); - } - - emit Collect(msg.sender, recipient, tickLower, tickUpper, amount0, amount1); - } - - /// @inheritdoc IUniswapV3PoolActions - /// @dev noDelegateCall is applied indirectly via _modifyPosition - function burn( - int24 tickLower, - int24 tickUpper, - uint128 amount - ) external override lock returns (uint256 amount0, uint256 amount1) { - (Position.Info storage position, int256 amount0Int, int256 amount1Int) = - _modifyPosition( - ModifyPositionParams({ - owner: msg.sender, - tickLower: tickLower, - tickUpper: tickUpper, - liquidityDelta: -int256(amount).toInt128() - }) - ); - - amount0 = uint256(-amount0Int); - amount1 = uint256(-amount1Int); - - if (amount0 > 0 || amount1 > 0) { - (position.tokensOwed0, position.tokensOwed1) = ( - position.tokensOwed0 + uint128(amount0), - position.tokensOwed1 + uint128(amount1) - ); - } - - emit Burn(msg.sender, tickLower, tickUpper, amount, amount0, amount1); - } - - struct SwapCache { - // the protocol fee for the input token - uint8 feeProtocol; - // liquidity at the beginning of the swap - uint128 liquidityStart; - // the timestamp of the current block - uint32 blockTimestamp; - // the current value of the tick accumulator, computed only if we cross an initialized tick - int56 tickCumulative; - // the current value of seconds per liquidity accumulator, computed only if we cross an initialized tick - uint160 secondsPerLiquidityCumulativeX128; - // whether we've computed and cached the above two accumulators - bool computedLatestObservation; - } - - // the top level state of the swap, the results of which are recorded in storage at the end - struct SwapState { - // the amount remaining to be swapped in/out of the input/output asset - int256 amountSpecifiedRemaining; - // the amount already swapped out/in of the output/input asset - int256 amountCalculated; - // current sqrt(price) - uint160 sqrtPriceX96; - // the tick associated with the current price - int24 tick; - // the global fee growth of the input token - uint256 feeGrowthGlobalX128; - // amount of input token paid as protocol fee - uint128 protocolFee; - // the current liquidity in range - uint128 liquidity; - } - - struct StepComputations { - // the price at the beginning of the step - uint160 sqrtPriceStartX96; - // the next tick to swap to from the current tick in the swap direction - int24 tickNext; - // whether tickNext is initialized or not - bool initialized; - // sqrt(price) for the next tick (1/0) - uint160 sqrtPriceNextX96; - // how much is being swapped in in this step - uint256 amountIn; - // how much is being swapped out - uint256 amountOut; - // how much fee is being paid in - uint256 feeAmount; - } - - /// @inheritdoc IUniswapV3PoolActions - function swap( - address recipient, - bool zeroForOne, - int256 amountSpecified, - uint160 sqrtPriceLimitX96, - bytes calldata data - ) external override noDelegateCall returns (int256 amount0, int256 amount1) { - require(amountSpecified != 0, 'AS'); - - Slot0 memory slot0Start = slot0; - - require(slot0Start.unlocked, 'LOK'); - require( - zeroForOne - ? sqrtPriceLimitX96 < slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 > TickMath.MIN_SQRT_RATIO - : sqrtPriceLimitX96 > slot0Start.sqrtPriceX96 && sqrtPriceLimitX96 < TickMath.MAX_SQRT_RATIO, - 'SPL' - ); - - slot0.unlocked = false; - - SwapCache memory cache = - SwapCache({ - liquidityStart: liquidity, - blockTimestamp: _blockTimestamp(), - feeProtocol: zeroForOne ? (slot0Start.feeProtocol % 16) : (slot0Start.feeProtocol >> 4), - secondsPerLiquidityCumulativeX128: 0, - tickCumulative: 0, - computedLatestObservation: false - }); - - bool exactInput = amountSpecified > 0; - - SwapState memory state = - SwapState({ - amountSpecifiedRemaining: amountSpecified, - amountCalculated: 0, - sqrtPriceX96: slot0Start.sqrtPriceX96, - tick: slot0Start.tick, - feeGrowthGlobalX128: zeroForOne ? feeGrowthGlobal0X128 : feeGrowthGlobal1X128, - protocolFee: 0, - liquidity: cache.liquidityStart - }); - - // continue swapping as long as we haven't used the entire input/output and haven't reached the price limit - while (state.amountSpecifiedRemaining != 0 && state.sqrtPriceX96 != sqrtPriceLimitX96) { - StepComputations memory step; - - step.sqrtPriceStartX96 = state.sqrtPriceX96; - - (step.tickNext, step.initialized) = tickBitmap.nextInitializedTickWithinOneWord( - state.tick, - tickSpacing, - zeroForOne - ); - - // ensure that we do not overshoot the min/max tick, as the tick bitmap is not aware of these bounds - if (step.tickNext < TickMath.MIN_TICK) { - step.tickNext = TickMath.MIN_TICK; - } else if (step.tickNext > TickMath.MAX_TICK) { - step.tickNext = TickMath.MAX_TICK; - } - - // get the price for the next tick - step.sqrtPriceNextX96 = TickMath.getSqrtRatioAtTick(step.tickNext); - - // compute values to swap to the target tick, price limit, or point where input/output amount is exhausted - (state.sqrtPriceX96, step.amountIn, step.amountOut, step.feeAmount) = SwapMath.computeSwapStep( - state.sqrtPriceX96, - (zeroForOne ? step.sqrtPriceNextX96 < sqrtPriceLimitX96 : step.sqrtPriceNextX96 > sqrtPriceLimitX96) - ? sqrtPriceLimitX96 - : step.sqrtPriceNextX96, - state.liquidity, - state.amountSpecifiedRemaining, - fee - ); - - if (exactInput) { - state.amountSpecifiedRemaining -= (step.amountIn + step.feeAmount).toInt256(); - state.amountCalculated = state.amountCalculated.sub(step.amountOut.toInt256()); - } else { - state.amountSpecifiedRemaining += step.amountOut.toInt256(); - state.amountCalculated = state.amountCalculated.add((step.amountIn + step.feeAmount).toInt256()); - } - - // if the protocol fee is on, calculate how much is owed, decrement feeAmount, and increment protocolFee - if (cache.feeProtocol > 0) { - uint256 delta = step.feeAmount / cache.feeProtocol; - step.feeAmount -= delta; - state.protocolFee += uint128(delta); - } - - // update global fee tracker - if (state.liquidity > 0) - state.feeGrowthGlobalX128 += FullMath.mulDiv(step.feeAmount, FixedPoint128.Q128, state.liquidity); - - // shift tick if we reached the next price - if (state.sqrtPriceX96 == step.sqrtPriceNextX96) { - // if the tick is initialized, run the tick transition - if (step.initialized) { - // check for the placeholder value, which we replace with the actual value the first time the swap - // crosses an initialized tick - if (!cache.computedLatestObservation) { - (cache.tickCumulative, cache.secondsPerLiquidityCumulativeX128) = observations.observeSingle( - cache.blockTimestamp, - 0, - slot0Start.tick, - slot0Start.observationIndex, - cache.liquidityStart, - slot0Start.observationCardinality - ); - cache.computedLatestObservation = true; - } - int128 liquidityNet = - ticks.cross( - step.tickNext, - (zeroForOne ? state.feeGrowthGlobalX128 : feeGrowthGlobal0X128), - (zeroForOne ? feeGrowthGlobal1X128 : state.feeGrowthGlobalX128), - cache.secondsPerLiquidityCumulativeX128, - cache.tickCumulative, - cache.blockTimestamp - ); - // if we're moving leftward, we interpret liquidityNet as the opposite sign - // safe because liquidityNet cannot be type(int128).min - if (zeroForOne) liquidityNet = -liquidityNet; - - state.liquidity = LiquidityMath.addDelta(state.liquidity, liquidityNet); - } - - state.tick = zeroForOne ? step.tickNext - 1 : step.tickNext; - } else if (state.sqrtPriceX96 != step.sqrtPriceStartX96) { - // recompute unless we're on a lower tick boundary (i.e. already transitioned ticks), and haven't moved - state.tick = TickMath.getTickAtSqrtRatio(state.sqrtPriceX96); - } - } - - // update tick and write an oracle entry if the tick change - if (state.tick != slot0Start.tick) { - (uint16 observationIndex, uint16 observationCardinality) = - observations.write( - slot0Start.observationIndex, - cache.blockTimestamp, - slot0Start.tick, - cache.liquidityStart, - slot0Start.observationCardinality, - slot0Start.observationCardinalityNext - ); - (slot0.sqrtPriceX96, slot0.tick, slot0.observationIndex, slot0.observationCardinality) = ( - state.sqrtPriceX96, - state.tick, - observationIndex, - observationCardinality - ); - } else { - // otherwise just update the price - slot0.sqrtPriceX96 = state.sqrtPriceX96; - } - - // update liquidity if it changed - if (cache.liquidityStart != state.liquidity) liquidity = state.liquidity; - - // update fee growth global and, if necessary, protocol fees - // overflow is acceptable, protocol has to withdraw before it hits type(uint128).max fees - if (zeroForOne) { - feeGrowthGlobal0X128 = state.feeGrowthGlobalX128; - if (state.protocolFee > 0) protocolFees.token0 += state.protocolFee; - } else { - feeGrowthGlobal1X128 = state.feeGrowthGlobalX128; - if (state.protocolFee > 0) protocolFees.token1 += state.protocolFee; - } - - (amount0, amount1) = zeroForOne == exactInput - ? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) - : (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining); - - // do the transfers and collect payment - if (zeroForOne) { - if (amount1 < 0) TransferHelper.safeTransfer(token1, recipient, uint256(-amount1)); - - uint256 balance0Before = balance0(); - IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); - require(balance0Before.add(uint256(amount0)) <= balance0(), 'IIA'); - } else { - if (amount0 < 0) TransferHelper.safeTransfer(token0, recipient, uint256(-amount0)); - - uint256 balance1Before = balance1(); - IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data); - require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA'); - } - - emit Swap(msg.sender, recipient, amount0, amount1, state.sqrtPriceX96, state.liquidity, state.tick); - slot0.unlocked = true; - } - - /// @inheritdoc IUniswapV3PoolActions - function flash( - address recipient, - uint256 amount0, - uint256 amount1, - bytes calldata data - ) external override lock noDelegateCall { - uint128 _liquidity = liquidity; - require(_liquidity > 0, 'L'); - - uint256 fee0 = FullMath.mulDivRoundingUp(amount0, fee, 1e6); - uint256 fee1 = FullMath.mulDivRoundingUp(amount1, fee, 1e6); - uint256 balance0Before = balance0(); - uint256 balance1Before = balance1(); - - if (amount0 > 0) TransferHelper.safeTransfer(token0, recipient, amount0); - if (amount1 > 0) TransferHelper.safeTransfer(token1, recipient, amount1); - - IUniswapV3FlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data); - - uint256 balance0After = balance0(); - uint256 balance1After = balance1(); - - require(balance0Before.add(fee0) <= balance0After, 'F0'); - require(balance1Before.add(fee1) <= balance1After, 'F1'); - - // sub is safe because we know balanceAfter is gt balanceBefore by at least fee - uint256 paid0 = balance0After - balance0Before; - uint256 paid1 = balance1After - balance1Before; - - if (paid0 > 0) { - uint8 feeProtocol0 = slot0.feeProtocol % 16; - uint256 fees0 = feeProtocol0 == 0 ? 0 : paid0 / feeProtocol0; - if (uint128(fees0) > 0) protocolFees.token0 += uint128(fees0); - feeGrowthGlobal0X128 += FullMath.mulDiv(paid0 - fees0, FixedPoint128.Q128, _liquidity); - } - if (paid1 > 0) { - uint8 feeProtocol1 = slot0.feeProtocol >> 4; - uint256 fees1 = feeProtocol1 == 0 ? 0 : paid1 / feeProtocol1; - if (uint128(fees1) > 0) protocolFees.token1 += uint128(fees1); - feeGrowthGlobal1X128 += FullMath.mulDiv(paid1 - fees1, FixedPoint128.Q128, _liquidity); - } - - emit Flash(msg.sender, recipient, amount0, amount1, paid0, paid1); - } - - /// @inheritdoc IUniswapV3PoolOwnerActions - function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external override lock onlyFactoryOwner { - require( - (feeProtocol0 == 0 || (feeProtocol0 >= 4 && feeProtocol0 <= 10)) && - (feeProtocol1 == 0 || (feeProtocol1 >= 4 && feeProtocol1 <= 10)) - ); - uint8 feeProtocolOld = slot0.feeProtocol; - slot0.feeProtocol = feeProtocol0 + (feeProtocol1 << 4); - emit SetFeeProtocol(feeProtocolOld % 16, feeProtocolOld >> 4, feeProtocol0, feeProtocol1); - } - - /// @inheritdoc IUniswapV3PoolOwnerActions - function collectProtocol( - address recipient, - uint128 amount0Requested, - uint128 amount1Requested - ) external override lock onlyFactoryOwner returns (uint128 amount0, uint128 amount1) { - amount0 = amount0Requested > protocolFees.token0 ? protocolFees.token0 : amount0Requested; - amount1 = amount1Requested > protocolFees.token1 ? protocolFees.token1 : amount1Requested; - - if (amount0 > 0) { - if (amount0 == protocolFees.token0) amount0--; // ensure that the slot is not cleared, for gas savings - protocolFees.token0 -= amount0; - TransferHelper.safeTransfer(token0, recipient, amount0); - } - if (amount1 > 0) { - if (amount1 == protocolFees.token1) amount1--; // ensure that the slot is not cleared, for gas savings - protocolFees.token1 -= amount1; - TransferHelper.safeTransfer(token1, recipient, amount1); - } - - emit CollectProtocol(msg.sender, recipient, amount0, amount1); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol deleted file mode 100644 index c303265a3..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IERC20Minimal.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Minimal ERC20 interface for Uniswap -/// @notice Contains a subset of the full ERC20 interface that is used in Uniswap V3 -interface IERC20Minimal { - /// @notice Returns the balance of a token - /// @param account The account for which to look up the number of tokens it has, i.e. its balance - /// @return The number of tokens held by the account - function balanceOf(address account) external view returns (uint256); - - /// @notice Transfers the amount of token from the `msg.sender` to the recipient - /// @param recipient The account that will receive the amount transferred - /// @param amount The number of tokens to send from the sender to the recipient - /// @return Returns true for a successful transfer, false for an unsuccessful transfer - function transfer(address recipient, uint256 amount) external returns (bool); - - /// @notice Returns the current allowance given to a spender by an owner - /// @param owner The account of the token owner - /// @param spender The account of the token spender - /// @return The current allowance granted by `owner` to `spender` - function allowance(address owner, address spender) external view returns (uint256); - - /// @notice Sets the allowance of a spender from the `msg.sender` to the value `amount` - /// @param spender The account which will be allowed to spend a given amount of the owners tokens - /// @param amount The amount of tokens allowed to be used by `spender` - /// @return Returns true for a successful approval, false for unsuccessful - function approve(address spender, uint256 amount) external returns (bool); - - /// @notice Transfers `amount` tokens from `sender` to `recipient` up to the allowance given to the `msg.sender` - /// @param sender The account from which the transfer will be initiated - /// @param recipient The recipient of the transfer - /// @param amount The amount of the transfer - /// @return Returns true for a successful transfer, false for unsuccessful - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - /// @notice Event emitted when tokens are transferred from one address to another, either via `#transfer` or `#transferFrom`. - /// @param from The account from which the tokens were sent, i.e. the balance decreased - /// @param to The account to which the tokens were sent, i.e. the balance increased - /// @param value The amount of tokens that were transferred - event Transfer(address indexed from, address indexed to, uint256 value); - - /// @notice Event emitted when the approval amount for the spender of a given owner's tokens changes. - /// @param owner The account that approved spending of its tokens - /// @param spender The account for which the spending allowance was modified - /// @param value The new allowance from the owner to the spender - event Approval(address indexed owner, address indexed spender, uint256 value); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol deleted file mode 100644 index 540cfdc68..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Factory.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title The interface for the Uniswap V3 Factory -/// @notice The Uniswap V3 Factory facilitates creation of Uniswap V3 pools and control over the protocol fees -interface IUniswapV3Factory { - /// @notice Emitted when the owner of the factory is changed - /// @param oldOwner The owner before the owner was changed - /// @param newOwner The owner after the owner was changed - event OwnerChanged(address indexed oldOwner, address indexed newOwner); - - /// @notice Emitted when a pool is created - /// @param token0 The first token of the pool by address sort order - /// @param token1 The second token of the pool by address sort order - /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip - /// @param tickSpacing The minimum number of ticks between initialized ticks - /// @param pool The address of the created pool - event PoolCreated( - address indexed token0, - address indexed token1, - uint24 indexed fee, - int24 tickSpacing, - address pool - ); - - /// @notice Emitted when a new fee amount is enabled for pool creation via the factory - /// @param fee The enabled fee, denominated in hundredths of a bip - /// @param tickSpacing The minimum number of ticks between initialized ticks for pools created with the given fee - event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); - - /// @notice Returns the current owner of the factory - /// @dev Can be changed by the current owner via setOwner - /// @return The address of the factory owner - function owner() external view returns (address); - - /// @notice Returns the tick spacing for a given fee amount, if enabled, or 0 if not enabled - /// @dev A fee amount can never be removed, so this value should be hard coded or cached in the calling context - /// @param fee The enabled fee, denominated in hundredths of a bip. Returns 0 in case of unenabled fee - /// @return The tick spacing - function feeAmountTickSpacing(uint24 fee) external view returns (int24); - - /// @notice Returns the pool address for a given pair of tokens and a fee, or address 0 if it does not exist - /// @dev tokenA and tokenB may be passed in either token0/token1 or token1/token0 order - /// @param tokenA The contract address of either token0 or token1 - /// @param tokenB The contract address of the other token - /// @param fee The fee collected upon every swap in the pool, denominated in hundredths of a bip - /// @return pool The pool address - function getPool( - address tokenA, - address tokenB, - uint24 fee - ) external view returns (address pool); - - /// @notice Creates a pool for the given two tokens and fee - /// @param tokenA One of the two tokens in the desired pool - /// @param tokenB The other of the two tokens in the desired pool - /// @param fee The desired fee for the pool - /// @dev tokenA and tokenB may be passed in either order: token0/token1 or token1/token0. tickSpacing is retrieved - /// from the fee. The call will revert if the pool already exists, the fee is invalid, or the token arguments - /// are invalid. - /// @return pool The address of the newly created pool - function createPool( - address tokenA, - address tokenB, - uint24 fee - ) external returns (address pool); - - /// @notice Updates the owner of the factory - /// @dev Must be called by the current owner - /// @param _owner The new owner of the factory - function setOwner(address _owner) external; - - /// @notice Enables a fee amount with the given tickSpacing - /// @dev Fee amounts may never be removed once enabled - /// @param fee The fee amount to enable, denominated in hundredths of a bip (i.e. 1e-6) - /// @param tickSpacing The spacing between ticks to be enforced for all pools created with the given fee amount - function enableFeeAmount(uint24 fee, int24 tickSpacing) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol deleted file mode 100644 index 56df0500d..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3Pool.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -import './pool/IUniswapV3PoolImmutables.sol'; -import './pool/IUniswapV3PoolState.sol'; -import './pool/IUniswapV3PoolDerivedState.sol'; -import './pool/IUniswapV3PoolActions.sol'; -import './pool/IUniswapV3PoolOwnerActions.sol'; -import './pool/IUniswapV3PoolEvents.sol'; - -/// @title The interface for a Uniswap V3 Pool -/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform -/// to the ERC20 specification -/// @dev The pool interface is broken up into many smaller pieces -interface IUniswapV3Pool is - IUniswapV3PoolImmutables, - IUniswapV3PoolState, - IUniswapV3PoolDerivedState, - IUniswapV3PoolActions, - IUniswapV3PoolOwnerActions, - IUniswapV3PoolEvents -{ - -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol deleted file mode 100644 index 72096c1ff..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/IUniswapV3PoolDeployer.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title An interface for a contract that is capable of deploying Uniswap V3 Pools -/// @notice A contract that constructs a pool must implement this to pass arguments to the pool -/// @dev This is used to avoid having constructor arguments in the pool contract, which results in the init code hash -/// of the pool being constant allowing the CREATE2 address of the pool to be cheaply computed on-chain -interface IUniswapV3PoolDeployer { - /// @notice Get the parameters to be used in constructing the pool, set transiently during pool creation. - /// @dev Called by the pool constructor to fetch the parameters of the pool - /// Returns factory The factory address - /// Returns token0 The first token of the pool by address sort order - /// Returns token1 The second token of the pool by address sort order - /// Returns fee The fee collected upon every swap in the pool, denominated in hundredths of a bip - /// Returns tickSpacing The minimum number of ticks between initialized ticks - function parameters() - external - view - returns ( - address factory, - address token0, - address token1, - uint24 fee, - int24 tickSpacing - ); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol deleted file mode 100644 index 18e54c4e1..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3FlashCallback.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Callback for IUniswapV3PoolActions#flash -/// @notice Any contract that calls IUniswapV3PoolActions#flash must implement this interface -interface IUniswapV3FlashCallback { - /// @notice Called to `msg.sender` after transferring to the recipient from IUniswapV3Pool#flash. - /// @dev In the implementation you must repay the pool the tokens sent by flash plus the computed fee amounts. - /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. - /// @param fee0 The fee amount in token0 due to the pool by the end of the flash - /// @param fee1 The fee amount in token1 due to the pool by the end of the flash - /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#flash call - function uniswapV3FlashCallback( - uint256 fee0, - uint256 fee1, - bytes calldata data - ) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol deleted file mode 100644 index 85447e84f..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3MintCallback.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Callback for IUniswapV3PoolActions#mint -/// @notice Any contract that calls IUniswapV3PoolActions#mint must implement this interface -interface IUniswapV3MintCallback { - /// @notice Called to `msg.sender` after minting liquidity to a position from IUniswapV3Pool#mint. - /// @dev In the implementation you must pay the pool tokens owed for the minted liquidity. - /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. - /// @param amount0Owed The amount of token0 due to the pool for the minted liquidity - /// @param amount1Owed The amount of token1 due to the pool for the minted liquidity - /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#mint call - function uniswapV3MintCallback( - uint256 amount0Owed, - uint256 amount1Owed, - bytes calldata data - ) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol deleted file mode 100644 index 9f183b22a..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/callback/IUniswapV3SwapCallback.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Callback for IUniswapV3PoolActions#swap -/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface -interface IUniswapV3SwapCallback { - /// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap. - /// @dev In the implementation you must pay the pool tokens owed for the swap. - /// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory. - /// amount0Delta and amount1Delta can both be 0 if no tokens were swapped. - /// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by - /// the end of the swap. If positive, the callback must send that amount of token0 to the pool. - /// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by - /// the end of the swap. If positive, the callback must send that amount of token1 to the pool. - /// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call - function uniswapV3SwapCallback( - int256 amount0Delta, - int256 amount1Delta, - bytes calldata data - ) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol deleted file mode 100644 index 44fb61c24..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolActions.sol +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Permissionless pool actions -/// @notice Contains pool methods that can be called by anyone -interface IUniswapV3PoolActions { - /// @notice Sets the initial price for the pool - /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value - /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96 - function initialize(uint160 sqrtPriceX96) external; - - /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position - /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback - /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends - /// on tickLower, tickUpper, the amount of liquidity, and the current price. - /// @param recipient The address for which the liquidity will be created - /// @param tickLower The lower tick of the position in which to add liquidity - /// @param tickUpper The upper tick of the position in which to add liquidity - /// @param amount The amount of liquidity to mint - /// @param data Any data that should be passed through to the callback - /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback - /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback - function mint( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount, - bytes calldata data - ) external returns (uint256 amount0, uint256 amount1); - - /// @notice Collects tokens owed to a position - /// @dev Does not recompute fees earned, which must be done either via mint or burn of any amount of liquidity. - /// Collect must be called by the position owner. To withdraw only token0 or only token1, amount0Requested or - /// amount1Requested may be set to zero. To withdraw all tokens owed, caller may pass any value greater than the - /// actual tokens owed, e.g. type(uint128).max. Tokens owed may be from accumulated swap fees or burned liquidity. - /// @param recipient The address which should receive the fees collected - /// @param tickLower The lower tick of the position for which to collect fees - /// @param tickUpper The upper tick of the position for which to collect fees - /// @param amount0Requested How much token0 should be withdrawn from the fees owed - /// @param amount1Requested How much token1 should be withdrawn from the fees owed - /// @return amount0 The amount of fees collected in token0 - /// @return amount1 The amount of fees collected in token1 - function collect( - address recipient, - int24 tickLower, - int24 tickUpper, - uint128 amount0Requested, - uint128 amount1Requested - ) external returns (uint128 amount0, uint128 amount1); - - /// @notice Burn liquidity from the sender and account tokens owed for the liquidity to the position - /// @dev Can be used to trigger a recalculation of fees owed to a position by calling with an amount of 0 - /// @dev Fees must be collected separately via a call to #collect - /// @param tickLower The lower tick of the position for which to burn liquidity - /// @param tickUpper The upper tick of the position for which to burn liquidity - /// @param amount How much liquidity to burn - /// @return amount0 The amount of token0 sent to the recipient - /// @return amount1 The amount of token1 sent to the recipient - function burn( - int24 tickLower, - int24 tickUpper, - uint128 amount - ) external returns (uint256 amount0, uint256 amount1); - - /// @notice Swap token0 for token1, or token1 for token0 - /// @dev The caller of this method receives a callback in the form of IUniswapV3SwapCallback#uniswapV3SwapCallback - /// @param recipient The address to receive the output of the swap - /// @param zeroForOne The direction of the swap, true for token0 to token1, false for token1 to token0 - /// @param amountSpecified The amount of the swap, which implicitly configures the swap as exact input (positive), or exact output (negative) - /// @param sqrtPriceLimitX96 The Q64.96 sqrt price limit. If zero for one, the price cannot be less than this - /// value after the swap. If one for zero, the price cannot be greater than this value after the swap - /// @param data Any data to be passed through to the callback - /// @return amount0 The delta of the balance of token0 of the pool, exact when negative, minimum when positive - /// @return amount1 The delta of the balance of token1 of the pool, exact when negative, minimum when positive - function swap( - address recipient, - bool zeroForOne, - int256 amountSpecified, - uint160 sqrtPriceLimitX96, - bytes calldata data - ) external returns (int256 amount0, int256 amount1); - - /// @notice Receive token0 and/or token1 and pay it back, plus a fee, in the callback - /// @dev The caller of this method receives a callback in the form of IUniswapV3FlashCallback#uniswapV3FlashCallback - /// @dev Can be used to donate underlying tokens pro-rata to currently in-range liquidity providers by calling - /// with 0 amount{0,1} and sending the donation amount(s) from the callback - /// @param recipient The address which will receive the token0 and token1 amounts - /// @param amount0 The amount of token0 to send - /// @param amount1 The amount of token1 to send - /// @param data Any data to be passed through to the callback - function flash( - address recipient, - uint256 amount0, - uint256 amount1, - bytes calldata data - ) external; - - /// @notice Increase the maximum number of price and liquidity observations that this pool will store - /// @dev This method is no-op if the pool already has an observationCardinalityNext greater than or equal to - /// the input observationCardinalityNext. - /// @param observationCardinalityNext The desired minimum number of observations for the pool to store - function increaseObservationCardinalityNext(uint16 observationCardinalityNext) external; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol deleted file mode 100644 index eda3a0089..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Pool state that is not stored -/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the -/// blockchain. The functions here may have variable gas costs. -interface IUniswapV3PoolDerivedState { - /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp - /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing - /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick, - /// you must call it with secondsAgos = [3600, 0]. - /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in - /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio. - /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned - /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp - /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block - /// timestamp - function observe(uint32[] calldata secondsAgos) - external - view - returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s); - - /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range - /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed. - /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first - /// snapshot is taken and the second snapshot is taken. - /// @param tickLower The lower tick of the range - /// @param tickUpper The upper tick of the range - /// @return tickCumulativeInside The snapshot of the tick accumulator for the range - /// @return secondsPerLiquidityInsideX128 The snapshot of seconds per liquidity for the range - /// @return secondsInside The snapshot of seconds per liquidity for the range - function snapshotCumulativesInside(int24 tickLower, int24 tickUpper) - external - view - returns ( - int56 tickCumulativeInside, - uint160 secondsPerLiquidityInsideX128, - uint32 secondsInside - ); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol deleted file mode 100644 index 9d915dde9..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolEvents.sol +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Events emitted by a pool -/// @notice Contains all events emitted by the pool -interface IUniswapV3PoolEvents { - /// @notice Emitted exactly once by a pool when #initialize is first called on the pool - /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize - /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96 - /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool - event Initialize(uint160 sqrtPriceX96, int24 tick); - - /// @notice Emitted when liquidity is minted for a given position - /// @param sender The address that minted the liquidity - /// @param owner The owner of the position and recipient of any minted liquidity - /// @param tickLower The lower tick of the position - /// @param tickUpper The upper tick of the position - /// @param amount The amount of liquidity minted to the position range - /// @param amount0 How much token0 was required for the minted liquidity - /// @param amount1 How much token1 was required for the minted liquidity - event Mint( - address sender, - address indexed owner, - int24 indexed tickLower, - int24 indexed tickUpper, - uint128 amount, - uint256 amount0, - uint256 amount1 - ); - - /// @notice Emitted when fees are collected by the owner of a position - /// @dev Collect events may be emitted with zero amount0 and amount1 when the caller chooses not to collect fees - /// @param owner The owner of the position for which fees are collected - /// @param tickLower The lower tick of the position - /// @param tickUpper The upper tick of the position - /// @param amount0 The amount of token0 fees collected - /// @param amount1 The amount of token1 fees collected - event Collect( - address indexed owner, - address recipient, - int24 indexed tickLower, - int24 indexed tickUpper, - uint128 amount0, - uint128 amount1 - ); - - /// @notice Emitted when a position's liquidity is removed - /// @dev Does not withdraw any fees earned by the liquidity position, which must be withdrawn via #collect - /// @param owner The owner of the position for which liquidity is removed - /// @param tickLower The lower tick of the position - /// @param tickUpper The upper tick of the position - /// @param amount The amount of liquidity to remove - /// @param amount0 The amount of token0 withdrawn - /// @param amount1 The amount of token1 withdrawn - event Burn( - address indexed owner, - int24 indexed tickLower, - int24 indexed tickUpper, - uint128 amount, - uint256 amount0, - uint256 amount1 - ); - - /// @notice Emitted by the pool for any swaps between token0 and token1 - /// @param sender The address that initiated the swap call, and that received the callback - /// @param recipient The address that received the output of the swap - /// @param amount0 The delta of the token0 balance of the pool - /// @param amount1 The delta of the token1 balance of the pool - /// @param sqrtPriceX96 The sqrt(price) of the pool after the swap, as a Q64.96 - /// @param liquidity The liquidity of the pool after the swap - /// @param tick The log base 1.0001 of price of the pool after the swap - event Swap( - address indexed sender, - address indexed recipient, - int256 amount0, - int256 amount1, - uint160 sqrtPriceX96, - uint128 liquidity, - int24 tick - ); - - /// @notice Emitted by the pool for any flashes of token0/token1 - /// @param sender The address that initiated the swap call, and that received the callback - /// @param recipient The address that received the tokens from flash - /// @param amount0 The amount of token0 that was flashed - /// @param amount1 The amount of token1 that was flashed - /// @param paid0 The amount of token0 paid for the flash, which can exceed the amount0 plus the fee - /// @param paid1 The amount of token1 paid for the flash, which can exceed the amount1 plus the fee - event Flash( - address indexed sender, - address indexed recipient, - uint256 amount0, - uint256 amount1, - uint256 paid0, - uint256 paid1 - ); - - /// @notice Emitted by the pool for increases to the number of observations that can be stored - /// @dev observationCardinalityNext is not the observation cardinality until an observation is written at the index - /// just before a mint/swap/burn. - /// @param observationCardinalityNextOld The previous value of the next observation cardinality - /// @param observationCardinalityNextNew The updated value of the next observation cardinality - event IncreaseObservationCardinalityNext( - uint16 observationCardinalityNextOld, - uint16 observationCardinalityNextNew - ); - - /// @notice Emitted when the protocol fee is changed by the pool - /// @param feeProtocol0Old The previous value of the token0 protocol fee - /// @param feeProtocol1Old The previous value of the token1 protocol fee - /// @param feeProtocol0New The updated value of the token0 protocol fee - /// @param feeProtocol1New The updated value of the token1 protocol fee - event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New); - - /// @notice Emitted when the collected protocol fees are withdrawn by the factory owner - /// @param sender The address that collects the protocol fees - /// @param recipient The address that receives the collected protocol fees - /// @param amount0 The amount of token0 protocol fees that is withdrawn - /// @param amount0 The amount of token1 protocol fees that is withdrawn - event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol deleted file mode 100644 index c9beb151e..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Pool state that never changes -/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values -interface IUniswapV3PoolImmutables { - /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface - /// @return The contract address - function factory() external view returns (address); - - /// @notice The first of the two tokens of the pool, sorted by address - /// @return The token contract address - function token0() external view returns (address); - - /// @notice The second of the two tokens of the pool, sorted by address - /// @return The token contract address - function token1() external view returns (address); - - /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6 - /// @return The fee - function fee() external view returns (uint24); - - /// @notice The pool tick spacing - /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive - /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... - /// This value is an int24 to avoid casting even though it is always positive. - /// @return The tick spacing - function tickSpacing() external view returns (int24); - - /// @notice The maximum amount of position liquidity that can use any tick in the range - /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and - /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool - /// @return The max amount of liquidity per tick - function maxLiquidityPerTick() external view returns (uint128); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol deleted file mode 100644 index 2395ed321..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Permissioned pool actions -/// @notice Contains pool methods that may only be called by the factory owner -interface IUniswapV3PoolOwnerActions { - /// @notice Set the denominator of the protocol's % share of the fees - /// @param feeProtocol0 new protocol fee for token0 of the pool - /// @param feeProtocol1 new protocol fee for token1 of the pool - function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external; - - /// @notice Collect the protocol fee accrued to the pool - /// @param recipient The address to which collected protocol fees should be sent - /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1 - /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0 - /// @return amount0 The protocol fee collected in token0 - /// @return amount1 The protocol fee collected in token1 - function collectProtocol( - address recipient, - uint128 amount0Requested, - uint128 amount1Requested - ) external returns (uint128 amount0, uint128 amount1); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol deleted file mode 100644 index 620256c31..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/interfaces/pool/IUniswapV3PoolState.sol +++ /dev/null @@ -1,116 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Pool state that can change -/// @notice These methods compose the pool's state, and can change with any frequency including multiple times -/// per transaction -interface IUniswapV3PoolState { - /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas - /// when accessed externally. - /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value - /// tick The current tick of the pool, i.e. according to the last tick transition that was run. - /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick - /// boundary. - /// observationIndex The index of the last oracle observation that was written, - /// observationCardinality The current maximum number of observations stored in the pool, - /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. - /// feeProtocol The protocol fee for both tokens of the pool. - /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 - /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. - /// unlocked Whether the pool is currently locked to reentrancy - function slot0() - external - view - returns ( - uint160 sqrtPriceX96, - int24 tick, - uint16 observationIndex, - uint16 observationCardinality, - uint16 observationCardinalityNext, - uint8 feeProtocol, - bool unlocked - ); - - /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool - /// @dev This value can overflow the uint256 - function feeGrowthGlobal0X128() external view returns (uint256); - - /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool - /// @dev This value can overflow the uint256 - function feeGrowthGlobal1X128() external view returns (uint256); - - /// @notice The amounts of token0 and token1 that are owed to the protocol - /// @dev Protocol fees will never exceed uint128 max in either token - function protocolFees() external view returns (uint128 token0, uint128 token1); - - /// @notice The currently in range liquidity available to the pool - /// @dev This value has no relationship to the total liquidity across all ticks - function liquidity() external view returns (uint128); - - /// @notice Look up information about a specific tick in the pool - /// @param tick The tick to look up - /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or - /// tick upper, - /// liquidityNet how much liquidity changes when the pool price crosses the tick, - /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, - /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, - /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick - /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, - /// secondsOutside the seconds spent on the other side of the tick from the current tick, - /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. - /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. - /// In addition, these values are only relative and must be used only in comparison to previous snapshots for - /// a specific position. - function ticks(int24 tick) - external - view - returns ( - uint128 liquidityGross, - int128 liquidityNet, - uint256 feeGrowthOutside0X128, - uint256 feeGrowthOutside1X128, - int56 tickCumulativeOutside, - uint160 secondsPerLiquidityOutsideX128, - uint32 secondsOutside, - bool initialized - ); - - /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information - function tickBitmap(int16 wordPosition) external view returns (uint256); - - /// @notice Returns the information about a position by the position's key - /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper - /// @return _liquidity The amount of liquidity in the position, - /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, - /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, - /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, - /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke - function positions(bytes32 key) - external - view - returns ( - uint128 _liquidity, - uint256 feeGrowthInside0LastX128, - uint256 feeGrowthInside1LastX128, - uint128 tokensOwed0, - uint128 tokensOwed1 - ); - - /// @notice Returns data about a specific observation index - /// @param index The element of the observations array to fetch - /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time - /// ago, rather than at a specific index in the array. - /// @return blockTimestamp The timestamp of the observation, - /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, - /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, - /// Returns initialized whether the observation has been initialized and the values are safe to use - function observations(uint256 index) - external - view - returns ( - uint32 blockTimestamp, - int56 tickCumulative, - uint160 secondsPerLiquidityCumulativeX128, - bool initialized - ); -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol deleted file mode 100644 index 3a7216c7b..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/BitMath.sol +++ /dev/null @@ -1,94 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title BitMath -/// @dev This library provides functionality for computing bit properties of an unsigned integer -library BitMath { - /// @notice Returns the index of the most significant bit of the number, - /// where the least significant bit is at index 0 and the most significant bit is at index 255 - /// @dev The function satisfies the property: - /// x >= 2**mostSignificantBit(x) and x < 2**(mostSignificantBit(x)+1) - /// @param x the value for which to compute the most significant bit, must be greater than 0 - /// @return r the index of the most significant bit - function mostSignificantBit(uint256 x) internal pure returns (uint8 r) { - require(x > 0); - - if (x >= 0x100000000000000000000000000000000) { - x >>= 128; - r += 128; - } - if (x >= 0x10000000000000000) { - x >>= 64; - r += 64; - } - if (x >= 0x100000000) { - x >>= 32; - r += 32; - } - if (x >= 0x10000) { - x >>= 16; - r += 16; - } - if (x >= 0x100) { - x >>= 8; - r += 8; - } - if (x >= 0x10) { - x >>= 4; - r += 4; - } - if (x >= 0x4) { - x >>= 2; - r += 2; - } - if (x >= 0x2) r += 1; - } - - /// @notice Returns the index of the least significant bit of the number, - /// where the least significant bit is at index 0 and the most significant bit is at index 255 - /// @dev The function satisfies the property: - /// (x & 2**leastSignificantBit(x)) != 0 and (x & (2**(leastSignificantBit(x)) - 1)) == 0) - /// @param x the value for which to compute the least significant bit, must be greater than 0 - /// @return r the index of the least significant bit - function leastSignificantBit(uint256 x) internal pure returns (uint8 r) { - require(x > 0); - - r = 255; - if (x & type(uint128).max > 0) { - r -= 128; - } else { - x >>= 128; - } - if (x & type(uint64).max > 0) { - r -= 64; - } else { - x >>= 64; - } - if (x & type(uint32).max > 0) { - r -= 32; - } else { - x >>= 32; - } - if (x & type(uint16).max > 0) { - r -= 16; - } else { - x >>= 16; - } - if (x & type(uint8).max > 0) { - r -= 8; - } else { - x >>= 8; - } - if (x & 0xf > 0) { - r -= 4; - } else { - x >>= 4; - } - if (x & 0x3 > 0) { - r -= 2; - } else { - x >>= 2; - } - if (x & 0x1 > 0) r -= 1; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol deleted file mode 100644 index 6d6948b10..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint128.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.4.0; - -/// @title FixedPoint128 -/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) -library FixedPoint128 { - uint256 internal constant Q128 = 0x100000000000000000000000000000000; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol deleted file mode 100644 index 63b42c294..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FixedPoint96.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.4.0; - -/// @title FixedPoint96 -/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format) -/// @dev Used in SqrtPriceMath.sol -library FixedPoint96 { - uint8 internal constant RESOLUTION = 96; - uint256 internal constant Q96 = 0x1000000000000000000000000; -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol deleted file mode 100644 index 8688a1773..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/FullMath.sol +++ /dev/null @@ -1,124 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.4.0; - -/// @title Contains 512-bit math functions -/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision -/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits -library FullMath { - /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 - /// @param a The multiplicand - /// @param b The multiplier - /// @param denominator The divisor - /// @return result The 256-bit result - /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv - function mulDiv( - uint256 a, - uint256 b, - uint256 denominator - ) internal pure returns (uint256 result) { - // 512-bit multiply [prod1 prod0] = a * b - // Compute the product mod 2**256 and mod 2**256 - 1 - // then use the Chinese Remainder Theorem to reconstruct - // the 512 bit result. The result is stored in two 256 - // variables such that product = prod1 * 2**256 + prod0 - uint256 prod0; // Least significant 256 bits of the product - uint256 prod1; // Most significant 256 bits of the product - assembly { - let mm := mulmod(a, b, not(0)) - prod0 := mul(a, b) - prod1 := sub(sub(mm, prod0), lt(mm, prod0)) - } - - // Handle non-overflow cases, 256 by 256 division - if (prod1 == 0) { - require(denominator > 0); - assembly { - result := div(prod0, denominator) - } - return result; - } - - // Make sure the result is less than 2**256. - // Also prevents denominator == 0 - require(denominator > prod1); - - /////////////////////////////////////////////// - // 512 by 256 division. - /////////////////////////////////////////////// - - // Make division exact by subtracting the remainder from [prod1 prod0] - // Compute remainder using mulmod - uint256 remainder; - assembly { - remainder := mulmod(a, b, denominator) - } - // Subtract 256 bit number from 512 bit number - assembly { - prod1 := sub(prod1, gt(remainder, prod0)) - prod0 := sub(prod0, remainder) - } - - // Factor powers of two out of denominator - // Compute largest power of two divisor of denominator. - // Always >= 1. - uint256 twos = -denominator & denominator; - // Divide denominator by power of two - assembly { - denominator := div(denominator, twos) - } - - // Divide [prod1 prod0] by the factors of two - assembly { - prod0 := div(prod0, twos) - } - // Shift in bits from prod1 into prod0. For this we need - // to flip `twos` such that it is 2**256 / twos. - // If twos is zero, then it becomes one - assembly { - twos := add(div(sub(0, twos), twos), 1) - } - prod0 |= prod1 * twos; - - // Invert denominator mod 2**256 - // Now that denominator is an odd number, it has an inverse - // modulo 2**256 such that denominator * inv = 1 mod 2**256. - // Compute the inverse by starting with a seed that is correct - // correct for four bits. That is, denominator * inv = 1 mod 2**4 - uint256 inv = (3 * denominator) ^ 2; - // Now use Newton-Raphson iteration to improve the precision. - // Thanks to Hensel's lifting lemma, this also works in modular - // arithmetic, doubling the correct bits in each step. - inv *= 2 - denominator * inv; // inverse mod 2**8 - inv *= 2 - denominator * inv; // inverse mod 2**16 - inv *= 2 - denominator * inv; // inverse mod 2**32 - inv *= 2 - denominator * inv; // inverse mod 2**64 - inv *= 2 - denominator * inv; // inverse mod 2**128 - inv *= 2 - denominator * inv; // inverse mod 2**256 - - // Because the division is now exact we can divide by multiplying - // with the modular inverse of denominator. This will give us the - // correct result modulo 2**256. Since the precoditions guarantee - // that the outcome is less than 2**256, this is the final result. - // We don't need to compute the high bits of the result and prod1 - // is no longer required. - result = prod0 * inv; - return result; - } - - /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 - /// @param a The multiplicand - /// @param b The multiplier - /// @param denominator The divisor - /// @return result The 256-bit result - function mulDivRoundingUp( - uint256 a, - uint256 b, - uint256 denominator - ) internal pure returns (uint256 result) { - result = mulDiv(a, b, denominator); - if (mulmod(a, b, denominator) > 0) { - require(result < type(uint256).max); - result++; - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol deleted file mode 100644 index d5e23032e..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LiquidityMath.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Math library for liquidity -library LiquidityMath { - /// @notice Add a signed liquidity delta to liquidity and revert if it overflows or underflows - /// @param x The liquidity before change - /// @param y The delta by which liquidity should be changed - /// @return z The liquidity delta - function addDelta(uint128 x, int128 y) internal pure returns (uint128 z) { - if (y < 0) { - require((z = x - uint128(-y)) < x, 'LS'); - } else { - require((z = x + uint128(y)) >= x, 'LA'); - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol deleted file mode 100644 index dbc817c2e..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/LowGasSafeMath.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.7.0; - -/// @title Optimized overflow and underflow safe math operations -/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost -library LowGasSafeMath { - /// @notice Returns x + y, reverts if sum overflows uint256 - /// @param x The augend - /// @param y The addend - /// @return z The sum of x and y - function add(uint256 x, uint256 y) internal pure returns (uint256 z) { - require((z = x + y) >= x); - } - - /// @notice Returns x - y, reverts if underflows - /// @param x The minuend - /// @param y The subtrahend - /// @return z The difference of x and y - function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { - require((z = x - y) <= x); - } - - /// @notice Returns x * y, reverts if overflows - /// @param x The multiplicand - /// @param y The multiplier - /// @return z The product of x and y - function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { - require(x == 0 || (z = x * y) / x == y); - } - - /// @notice Returns x + y, reverts if overflows or underflows - /// @param x The augend - /// @param y The addend - /// @return z The sum of x and y - function add(int256 x, int256 y) internal pure returns (int256 z) { - require((z = x + y) >= x == (y >= 0)); - } - - /// @notice Returns x - y, reverts if overflows or underflows - /// @param x The minuend - /// @param y The subtrahend - /// @return z The difference of x and y - function sub(int256 x, int256 y) internal pure returns (int256 z) { - require((z = x - y) <= x == (y >= 0)); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol deleted file mode 100644 index 3f6b3f32c..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Oracle.sol +++ /dev/null @@ -1,325 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -/// @title Oracle -/// @notice Provides price and liquidity data useful for a wide variety of system designs -/// @dev Instances of stored oracle data, "observations", are collected in the oracle array -/// Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the -/// maximum length of the oracle array. New slots will be added when the array is fully populated. -/// Observations are overwritten when the full length of the oracle array is populated. -/// The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe() -library Oracle { - struct Observation { - // the block timestamp of the observation - uint32 blockTimestamp; - // the tick accumulator, i.e. tick * time elapsed since the pool was first initialized - int56 tickCumulative; - // the seconds per liquidity, i.e. seconds elapsed / max(1, liquidity) since the pool was first initialized - uint160 secondsPerLiquidityCumulativeX128; - // whether or not the observation is initialized - bool initialized; - } - - /// @notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values - /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows - /// @param last The specified observation to be transformed - /// @param blockTimestamp The timestamp of the new observation - /// @param tick The active tick at the time of the new observation - /// @param liquidity The total in-range liquidity at the time of the new observation - /// @return Observation The newly populated observation - function transform( - Observation memory last, - uint32 blockTimestamp, - int24 tick, - uint128 liquidity - ) private pure returns (Observation memory) { - uint32 delta = blockTimestamp - last.blockTimestamp; - return - Observation({ - blockTimestamp: blockTimestamp, - tickCumulative: last.tickCumulative + int56(tick) * delta, - secondsPerLiquidityCumulativeX128: last.secondsPerLiquidityCumulativeX128 + - ((uint160(delta) << 128) / (liquidity > 0 ? liquidity : 1)), - initialized: true - }); - } - - /// @notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array - /// @param self The stored oracle array - /// @param time The time of the oracle initialization, via block.timestamp truncated to uint32 - /// @return cardinality The number of populated elements in the oracle array - /// @return cardinalityNext The new length of the oracle array, independent of population - function initialize(Observation[65535] storage self, uint32 time) - internal - returns (uint16 cardinality, uint16 cardinalityNext) - { - self[0] = Observation({ - blockTimestamp: time, - tickCumulative: 0, - secondsPerLiquidityCumulativeX128: 0, - initialized: true - }); - return (1, 1); - } - - /// @notice Writes an oracle observation to the array - /// @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally. - /// If the index is at the end of the allowable array length (according to cardinality), and the next cardinality - /// is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering. - /// @param self The stored oracle array - /// @param index The index of the observation that was most recently written to the observations array - /// @param blockTimestamp The timestamp of the new observation - /// @param tick The active tick at the time of the new observation - /// @param liquidity The total in-range liquidity at the time of the new observation - /// @param cardinality The number of populated elements in the oracle array - /// @param cardinalityNext The new length of the oracle array, independent of population - /// @return indexUpdated The new index of the most recently written element in the oracle array - /// @return cardinalityUpdated The new cardinality of the oracle array - function write( - Observation[65535] storage self, - uint16 index, - uint32 blockTimestamp, - int24 tick, - uint128 liquidity, - uint16 cardinality, - uint16 cardinalityNext - ) internal returns (uint16 indexUpdated, uint16 cardinalityUpdated) { - Observation memory last = self[index]; - - // early return if we've already written an observation this block - if (last.blockTimestamp == blockTimestamp) return (index, cardinality); - - // if the conditions are right, we can bump the cardinality - if (cardinalityNext > cardinality && index == (cardinality - 1)) { - cardinalityUpdated = cardinalityNext; - } else { - cardinalityUpdated = cardinality; - } - - indexUpdated = (index + 1) % cardinalityUpdated; - self[indexUpdated] = transform(last, blockTimestamp, tick, liquidity); - } - - /// @notice Prepares the oracle array to store up to `next` observations - /// @param self The stored oracle array - /// @param current The current next cardinality of the oracle array - /// @param next The proposed next cardinality which will be populated in the oracle array - /// @return next The next cardinality which will be populated in the oracle array - function grow( - Observation[65535] storage self, - uint16 current, - uint16 next - ) internal returns (uint16) { - require(current > 0, 'I'); - // no-op if the passed next value isn't greater than the current next value - if (next <= current) return current; - // store in each slot to prevent fresh SSTOREs in swaps - // this data will not be used because the initialized boolean is still false - for (uint16 i = current; i < next; i++) self[i].blockTimestamp = 1; - return next; - } - - /// @notice comparator for 32-bit timestamps - /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time - /// @param time A timestamp truncated to 32 bits - /// @param a A comparison timestamp from which to determine the relative position of `time` - /// @param b From which to determine the relative position of `time` - /// @return bool Whether `a` is chronologically <= `b` - function lte( - uint32 time, - uint32 a, - uint32 b - ) private pure returns (bool) { - // if there hasn't been overflow, no need to adjust - if (a <= time && b <= time) return a <= b; - - uint256 aAdjusted = a > time ? a : a + 2**32; - uint256 bAdjusted = b > time ? b : b + 2**32; - - return aAdjusted <= bAdjusted; - } - - /// @notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied. - /// The result may be the same observation, or adjacent observations. - /// @dev The answer must be contained in the array, used when the target is located within the stored observation - /// boundaries: older than the most recent observation and younger, or the same age as, the oldest observation - /// @param self The stored oracle array - /// @param time The current block.timestamp - /// @param target The timestamp at which the reserved observation should be for - /// @param index The index of the observation that was most recently written to the observations array - /// @param cardinality The number of populated elements in the oracle array - /// @return beforeOrAt The observation recorded before, or at, the target - /// @return atOrAfter The observation recorded at, or after, the target - function binarySearch( - Observation[65535] storage self, - uint32 time, - uint32 target, - uint16 index, - uint16 cardinality - ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { - uint256 l = (index + 1) % cardinality; // oldest observation - uint256 r = l + cardinality - 1; // newest observation - uint256 i; - while (true) { - i = (l + r) / 2; - - beforeOrAt = self[i % cardinality]; - - // we've landed on an uninitialized tick, keep searching higher (more recently) - if (!beforeOrAt.initialized) { - l = i + 1; - continue; - } - - atOrAfter = self[(i + 1) % cardinality]; - - bool targetAtOrAfter = lte(time, beforeOrAt.blockTimestamp, target); - - // check if we've found the answer! - if (targetAtOrAfter && lte(time, target, atOrAfter.blockTimestamp)) break; - - if (!targetAtOrAfter) r = i - 1; - else l = i + 1; - } - } - - /// @notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied - /// @dev Assumes there is at least 1 initialized observation. - /// Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp. - /// @param self The stored oracle array - /// @param time The current block.timestamp - /// @param target The timestamp at which the reserved observation should be for - /// @param tick The active tick at the time of the returned or simulated observation - /// @param index The index of the observation that was most recently written to the observations array - /// @param liquidity The total pool liquidity at the time of the call - /// @param cardinality The number of populated elements in the oracle array - /// @return beforeOrAt The observation which occurred at, or before, the given timestamp - /// @return atOrAfter The observation which occurred at, or after, the given timestamp - function getSurroundingObservations( - Observation[65535] storage self, - uint32 time, - uint32 target, - int24 tick, - uint16 index, - uint128 liquidity, - uint16 cardinality - ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) { - // optimistically set before to the newest observation - beforeOrAt = self[index]; - - // if the target is chronologically at or after the newest observation, we can early return - if (lte(time, beforeOrAt.blockTimestamp, target)) { - if (beforeOrAt.blockTimestamp == target) { - // if newest observation equals target, we're in the same block, so we can ignore atOrAfter - return (beforeOrAt, atOrAfter); - } else { - // otherwise, we need to transform - return (beforeOrAt, transform(beforeOrAt, target, tick, liquidity)); - } - } - - // now, set before to the oldest observation - beforeOrAt = self[(index + 1) % cardinality]; - if (!beforeOrAt.initialized) beforeOrAt = self[0]; - - // ensure that the target is chronologically at or after the oldest observation - require(lte(time, beforeOrAt.blockTimestamp, target), 'OLD'); - - // if we've reached this point, we have to binary search - return binarySearch(self, time, target, index, cardinality); - } - - /// @dev Reverts if an observation at or before the desired observation timestamp does not exist. - /// 0 may be passed as `secondsAgo' to return the current cumulative values. - /// If called with a timestamp falling between two observations, returns the counterfactual accumulator values - /// at exactly the timestamp between the two observations. - /// @param self The stored oracle array - /// @param time The current block timestamp - /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation - /// @param tick The current tick - /// @param index The index of the observation that was most recently written to the observations array - /// @param liquidity The current in-range pool liquidity - /// @param cardinality The number of populated elements in the oracle array - /// @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo` - /// @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo` - function observeSingle( - Observation[65535] storage self, - uint32 time, - uint32 secondsAgo, - int24 tick, - uint16 index, - uint128 liquidity, - uint16 cardinality - ) internal view returns (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) { - if (secondsAgo == 0) { - Observation memory last = self[index]; - if (last.blockTimestamp != time) last = transform(last, time, tick, liquidity); - return (last.tickCumulative, last.secondsPerLiquidityCumulativeX128); - } - - uint32 target = time - secondsAgo; - - (Observation memory beforeOrAt, Observation memory atOrAfter) = - getSurroundingObservations(self, time, target, tick, index, liquidity, cardinality); - - if (target == beforeOrAt.blockTimestamp) { - // we're at the left boundary - return (beforeOrAt.tickCumulative, beforeOrAt.secondsPerLiquidityCumulativeX128); - } else if (target == atOrAfter.blockTimestamp) { - // we're at the right boundary - return (atOrAfter.tickCumulative, atOrAfter.secondsPerLiquidityCumulativeX128); - } else { - // we're in the middle - uint32 observationTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp; - uint32 targetDelta = target - beforeOrAt.blockTimestamp; - return ( - beforeOrAt.tickCumulative + - ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / observationTimeDelta) * - targetDelta, - beforeOrAt.secondsPerLiquidityCumulativeX128 + - uint160( - (uint256( - atOrAfter.secondsPerLiquidityCumulativeX128 - beforeOrAt.secondsPerLiquidityCumulativeX128 - ) * targetDelta) / observationTimeDelta - ) - ); - } - } - - /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos` - /// @dev Reverts if `secondsAgos` > oldest observation - /// @param self The stored oracle array - /// @param time The current block.timestamp - /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation - /// @param tick The current tick - /// @param index The index of the observation that was most recently written to the observations array - /// @param liquidity The current in-range pool liquidity - /// @param cardinality The number of populated elements in the oracle array - /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo` - /// @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo` - function observe( - Observation[65535] storage self, - uint32 time, - uint32[] memory secondsAgos, - int24 tick, - uint16 index, - uint128 liquidity, - uint16 cardinality - ) internal view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) { - require(cardinality > 0, 'I'); - - tickCumulatives = new int56[](secondsAgos.length); - secondsPerLiquidityCumulativeX128s = new uint160[](secondsAgos.length); - for (uint256 i = 0; i < secondsAgos.length; i++) { - (tickCumulatives[i], secondsPerLiquidityCumulativeX128s[i]) = observeSingle( - self, - time, - secondsAgos[i], - tick, - index, - liquidity, - cardinality - ); - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol deleted file mode 100644 index 1c67c7f27..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Position.sol +++ /dev/null @@ -1,88 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './FullMath.sol'; -import './FixedPoint128.sol'; -import './LiquidityMath.sol'; - -/// @title Position -/// @notice Positions represent an owner address' liquidity between a lower and upper tick boundary -/// @dev Positions store additional state for tracking fees owed to the position -library Position { - // info stored for each user's position - struct Info { - // the amount of liquidity owned by this position - uint128 liquidity; - // fee growth per unit of liquidity as of the last update to liquidity or fees owed - uint256 feeGrowthInside0LastX128; - uint256 feeGrowthInside1LastX128; - // the fees owed to the position owner in token0/token1 - uint128 tokensOwed0; - uint128 tokensOwed1; - } - - /// @notice Returns the Info struct of a position, given an owner and position boundaries - /// @param self The mapping containing all user positions - /// @param owner The address of the position owner - /// @param tickLower The lower tick boundary of the position - /// @param tickUpper The upper tick boundary of the position - /// @return position The position info struct of the given owners' position - function get( - mapping(bytes32 => Info) storage self, - address owner, - int24 tickLower, - int24 tickUpper - ) internal view returns (Position.Info storage position) { - position = self[keccak256(abi.encodePacked(owner, tickLower, tickUpper))]; - } - - /// @notice Credits accumulated fees to a user's position - /// @param self The individual position to update - /// @param liquidityDelta The change in pool liquidity as a result of the position update - /// @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries - /// @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries - function update( - Info storage self, - int128 liquidityDelta, - uint256 feeGrowthInside0X128, - uint256 feeGrowthInside1X128 - ) internal { - Info memory _self = self; - - uint128 liquidityNext; - if (liquidityDelta == 0) { - require(_self.liquidity > 0, 'NP'); // disallow pokes for 0 liquidity positions - liquidityNext = _self.liquidity; - } else { - liquidityNext = LiquidityMath.addDelta(_self.liquidity, liquidityDelta); - } - - // calculate accumulated fees - uint128 tokensOwed0 = - uint128( - FullMath.mulDiv( - feeGrowthInside0X128 - _self.feeGrowthInside0LastX128, - _self.liquidity, - FixedPoint128.Q128 - ) - ); - uint128 tokensOwed1 = - uint128( - FullMath.mulDiv( - feeGrowthInside1X128 - _self.feeGrowthInside1LastX128, - _self.liquidity, - FixedPoint128.Q128 - ) - ); - - // update the position - if (liquidityDelta != 0) self.liquidity = liquidityNext; - self.feeGrowthInside0LastX128 = feeGrowthInside0X128; - self.feeGrowthInside1LastX128 = feeGrowthInside1X128; - if (tokensOwed0 > 0 || tokensOwed1 > 0) { - // overflow is acceptable, have to withdraw before you hit type(uint128).max fees - self.tokensOwed0 += tokensOwed0; - self.tokensOwed1 += tokensOwed1; - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol deleted file mode 100644 index a8ea22987..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SafeCast.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Safe casting methods -/// @notice Contains methods for safely casting between types -library SafeCast { - /// @notice Cast a uint256 to a uint160, revert on overflow - /// @param y The uint256 to be downcasted - /// @return z The downcasted integer, now type uint160 - function toUint160(uint256 y) internal pure returns (uint160 z) { - require((z = uint160(y)) == y); - } - - /// @notice Cast a int256 to a int128, revert on overflow or underflow - /// @param y The int256 to be downcasted - /// @return z The downcasted integer, now type int128 - function toInt128(int256 y) internal pure returns (int128 z) { - require((z = int128(y)) == y); - } - - /// @notice Cast a uint256 to a int256, revert on overflow - /// @param y The uint256 to be casted - /// @return z The casted integer, now type int256 - function toInt256(uint256 y) internal pure returns (int256 z) { - require(y < 2**255); - z = int256(y); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol deleted file mode 100644 index 685f485da..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SqrtPriceMath.sol +++ /dev/null @@ -1,227 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './LowGasSafeMath.sol'; -import './SafeCast.sol'; - -import './FullMath.sol'; -import './UnsafeMath.sol'; -import './FixedPoint96.sol'; - -/// @title Functions based on Q64.96 sqrt price and liquidity -/// @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas -library SqrtPriceMath { - using LowGasSafeMath for uint256; - using SafeCast for uint256; - - /// @notice Gets the next sqrt price given a delta of token0 - /// @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least - /// far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the - /// price less in order to not send too much output. - /// The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96), - /// if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount). - /// @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta - /// @param liquidity The amount of usable liquidity - /// @param amount How much of token0 to add or remove from virtual reserves - /// @param add Whether to add or remove the amount of token0 - /// @return The price after adding or removing amount, depending on add - function getNextSqrtPriceFromAmount0RoundingUp( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amount, - bool add - ) internal pure returns (uint160) { - // we short circuit amount == 0 because the result is otherwise not guaranteed to equal the input price - if (amount == 0) return sqrtPX96; - uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; - - if (add) { - uint256 product; - if ((product = amount * sqrtPX96) / amount == sqrtPX96) { - uint256 denominator = numerator1 + product; - if (denominator >= numerator1) - // always fits in 160 bits - return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator)); - } - - return uint160(UnsafeMath.divRoundingUp(numerator1, (numerator1 / sqrtPX96).add(amount))); - } else { - uint256 product; - // if the product overflows, we know the denominator underflows - // in addition, we must check that the denominator does not underflow - require((product = amount * sqrtPX96) / amount == sqrtPX96 && numerator1 > product); - uint256 denominator = numerator1 - product; - return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator).toUint160(); - } - } - - /// @notice Gets the next sqrt price given a delta of token1 - /// @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least - /// far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the - /// price less in order to not send too much output. - /// The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity - /// @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta - /// @param liquidity The amount of usable liquidity - /// @param amount How much of token1 to add, or remove, from virtual reserves - /// @param add Whether to add, or remove, the amount of token1 - /// @return The price after adding or removing `amount` - function getNextSqrtPriceFromAmount1RoundingDown( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amount, - bool add - ) internal pure returns (uint160) { - // if we're adding (subtracting), rounding down requires rounding the quotient down (up) - // in both cases, avoid a mulDiv for most inputs - if (add) { - uint256 quotient = - ( - amount <= type(uint160).max - ? (amount << FixedPoint96.RESOLUTION) / liquidity - : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity) - ); - - return uint256(sqrtPX96).add(quotient).toUint160(); - } else { - uint256 quotient = - ( - amount <= type(uint160).max - ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity) - : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity) - ); - - require(sqrtPX96 > quotient); - // always fits 160 bits - return uint160(sqrtPX96 - quotient); - } - } - - /// @notice Gets the next sqrt price given an input amount of token0 or token1 - /// @dev Throws if price or liquidity are 0, or if the next price is out of bounds - /// @param sqrtPX96 The starting price, i.e., before accounting for the input amount - /// @param liquidity The amount of usable liquidity - /// @param amountIn How much of token0, or token1, is being swapped in - /// @param zeroForOne Whether the amount in is token0 or token1 - /// @return sqrtQX96 The price after adding the input amount to token0 or token1 - function getNextSqrtPriceFromInput( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amountIn, - bool zeroForOne - ) internal pure returns (uint160 sqrtQX96) { - require(sqrtPX96 > 0); - require(liquidity > 0); - - // round to make sure that we don't pass the target price - return - zeroForOne - ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true) - : getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true); - } - - /// @notice Gets the next sqrt price given an output amount of token0 or token1 - /// @dev Throws if price or liquidity are 0 or the next price is out of bounds - /// @param sqrtPX96 The starting price before accounting for the output amount - /// @param liquidity The amount of usable liquidity - /// @param amountOut How much of token0, or token1, is being swapped out - /// @param zeroForOne Whether the amount out is token0 or token1 - /// @return sqrtQX96 The price after removing the output amount of token0 or token1 - function getNextSqrtPriceFromOutput( - uint160 sqrtPX96, - uint128 liquidity, - uint256 amountOut, - bool zeroForOne - ) internal pure returns (uint160 sqrtQX96) { - require(sqrtPX96 > 0); - require(liquidity > 0); - - // round to make sure that we pass the target price - return - zeroForOne - ? getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false) - : getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false); - } - - /// @notice Gets the amount0 delta between two prices - /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper), - /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower)) - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The amount of usable liquidity - /// @param roundUp Whether to round the amount up or down - /// @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices - function getAmount0Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - uint128 liquidity, - bool roundUp - ) internal pure returns (uint256 amount0) { - if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); - - uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION; - uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96; - - require(sqrtRatioAX96 > 0); - - return - roundUp - ? UnsafeMath.divRoundingUp( - FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), - sqrtRatioAX96 - ) - : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96; - } - - /// @notice Gets the amount1 delta between two prices - /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower)) - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The amount of usable liquidity - /// @param roundUp Whether to round the amount up, or down - /// @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices - function getAmount1Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - uint128 liquidity, - bool roundUp - ) internal pure returns (uint256 amount1) { - if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96); - - return - roundUp - ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96) - : FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96); - } - - /// @notice Helper that gets signed token0 delta - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The change in liquidity for which to compute the amount0 delta - /// @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices - function getAmount0Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - int128 liquidity - ) internal pure returns (int256 amount0) { - return - liquidity < 0 - ? -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() - : getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); - } - - /// @notice Helper that gets signed token1 delta - /// @param sqrtRatioAX96 A sqrt price - /// @param sqrtRatioBX96 Another sqrt price - /// @param liquidity The change in liquidity for which to compute the amount1 delta - /// @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices - function getAmount1Delta( - uint160 sqrtRatioAX96, - uint160 sqrtRatioBX96, - int128 liquidity - ) internal pure returns (int256 amount1) { - return - liquidity < 0 - ? -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256() - : getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256(); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol deleted file mode 100644 index ee176fbee..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/SwapMath.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './FullMath.sol'; -import './SqrtPriceMath.sol'; - -/// @title Computes the result of a swap within ticks -/// @notice Contains methods for computing the result of a swap within a single tick price range, i.e., a single tick. -library SwapMath { - /// @notice Computes the result of swapping some amount in, or amount out, given the parameters of the swap - /// @dev The fee, plus the amount in, will never exceed the amount remaining if the swap's `amountSpecified` is positive - /// @param sqrtRatioCurrentX96 The current sqrt price of the pool - /// @param sqrtRatioTargetX96 The price that cannot be exceeded, from which the direction of the swap is inferred - /// @param liquidity The usable liquidity - /// @param amountRemaining How much input or output amount is remaining to be swapped in/out - /// @param feePips The fee taken from the input amount, expressed in hundredths of a bip - /// @return sqrtRatioNextX96 The price after swapping the amount in/out, not to exceed the price target - /// @return amountIn The amount to be swapped in, of either token0 or token1, based on the direction of the swap - /// @return amountOut The amount to be received, of either token0 or token1, based on the direction of the swap - /// @return feeAmount The amount of input that will be taken as a fee - function computeSwapStep( - uint160 sqrtRatioCurrentX96, - uint160 sqrtRatioTargetX96, - uint128 liquidity, - int256 amountRemaining, - uint24 feePips - ) - internal - pure - returns ( - uint160 sqrtRatioNextX96, - uint256 amountIn, - uint256 amountOut, - uint256 feeAmount - ) - { - bool zeroForOne = sqrtRatioCurrentX96 >= sqrtRatioTargetX96; - bool exactIn = amountRemaining >= 0; - - if (exactIn) { - uint256 amountRemainingLessFee = FullMath.mulDiv(uint256(amountRemaining), 1e6 - feePips, 1e6); - amountIn = zeroForOne - ? SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, true) - : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, true); - if (amountRemainingLessFee >= amountIn) sqrtRatioNextX96 = sqrtRatioTargetX96; - else - sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromInput( - sqrtRatioCurrentX96, - liquidity, - amountRemainingLessFee, - zeroForOne - ); - } else { - amountOut = zeroForOne - ? SqrtPriceMath.getAmount1Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, false) - : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, false); - if (uint256(-amountRemaining) >= amountOut) sqrtRatioNextX96 = sqrtRatioTargetX96; - else - sqrtRatioNextX96 = SqrtPriceMath.getNextSqrtPriceFromOutput( - sqrtRatioCurrentX96, - liquidity, - uint256(-amountRemaining), - zeroForOne - ); - } - - bool max = sqrtRatioTargetX96 == sqrtRatioNextX96; - - // get the input/output amounts - if (zeroForOne) { - amountIn = max && exactIn - ? amountIn - : SqrtPriceMath.getAmount0Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true); - amountOut = max && !exactIn - ? amountOut - : SqrtPriceMath.getAmount1Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, false); - } else { - amountIn = max && exactIn - ? amountIn - : SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, true); - amountOut = max && !exactIn - ? amountOut - : SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioNextX96, liquidity, false); - } - - // cap the output amount to not exceed the remaining output amount - if (!exactIn && amountOut > uint256(-amountRemaining)) { - amountOut = uint256(-amountRemaining); - } - - if (exactIn && sqrtRatioNextX96 != sqrtRatioTargetX96) { - // we didn't reach the target, so take the remainder of the maximum input as fee - feeAmount = uint256(amountRemaining) - amountIn; - } else { - feeAmount = FullMath.mulDivRoundingUp(amountIn, feePips, 1e6 - feePips); - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol deleted file mode 100644 index 13d342849..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/Tick.sol +++ /dev/null @@ -1,183 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './LowGasSafeMath.sol'; -import './SafeCast.sol'; - -import './TickMath.sol'; -import './LiquidityMath.sol'; - -/// @title Tick -/// @notice Contains functions for managing tick processes and relevant calculations -library Tick { - using LowGasSafeMath for int256; - using SafeCast for int256; - - // info stored for each initialized individual tick - struct Info { - // the total position liquidity that references this tick - uint128 liquidityGross; - // amount of net liquidity added (subtracted) when tick is crossed from left to right (right to left), - int128 liquidityNet; - // fee growth per unit of liquidity on the _other_ side of this tick (relative to the current tick) - // only has relative meaning, not absolute — the value depends on when the tick is initialized - uint256 feeGrowthOutside0X128; - uint256 feeGrowthOutside1X128; - // the cumulative tick value on the other side of the tick - int56 tickCumulativeOutside; - // the seconds per unit of liquidity on the _other_ side of this tick (relative to the current tick) - // only has relative meaning, not absolute — the value depends on when the tick is initialized - uint160 secondsPerLiquidityOutsideX128; - // the seconds spent on the other side of the tick (relative to the current tick) - // only has relative meaning, not absolute — the value depends on when the tick is initialized - uint32 secondsOutside; - // true iff the tick is initialized, i.e. the value is exactly equivalent to the expression liquidityGross != 0 - // these 8 bits are set to prevent fresh sstores when crossing newly initialized ticks - bool initialized; - } - - /// @notice Derives max liquidity per tick from given tick spacing - /// @dev Executed within the pool constructor - /// @param tickSpacing The amount of required tick separation, realized in multiples of `tickSpacing` - /// e.g., a tickSpacing of 3 requires ticks to be initialized every 3rd tick i.e., ..., -6, -3, 0, 3, 6, ... - /// @return The max liquidity per tick - function tickSpacingToMaxLiquidityPerTick(int24 tickSpacing) internal pure returns (uint128) { - int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing; - int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing; - uint24 numTicks = uint24((maxTick - minTick) / tickSpacing) + 1; - return type(uint128).max / numTicks; - } - - /// @notice Retrieves fee growth data - /// @param self The mapping containing all tick information for initialized ticks - /// @param tickLower The lower tick boundary of the position - /// @param tickUpper The upper tick boundary of the position - /// @param tickCurrent The current tick - /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 - /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 - /// @return feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries - /// @return feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries - function getFeeGrowthInside( - mapping(int24 => Tick.Info) storage self, - int24 tickLower, - int24 tickUpper, - int24 tickCurrent, - uint256 feeGrowthGlobal0X128, - uint256 feeGrowthGlobal1X128 - ) internal view returns (uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) { - Info storage lower = self[tickLower]; - Info storage upper = self[tickUpper]; - - // calculate fee growth below - uint256 feeGrowthBelow0X128; - uint256 feeGrowthBelow1X128; - if (tickCurrent >= tickLower) { - feeGrowthBelow0X128 = lower.feeGrowthOutside0X128; - feeGrowthBelow1X128 = lower.feeGrowthOutside1X128; - } else { - feeGrowthBelow0X128 = feeGrowthGlobal0X128 - lower.feeGrowthOutside0X128; - feeGrowthBelow1X128 = feeGrowthGlobal1X128 - lower.feeGrowthOutside1X128; - } - - // calculate fee growth above - uint256 feeGrowthAbove0X128; - uint256 feeGrowthAbove1X128; - if (tickCurrent < tickUpper) { - feeGrowthAbove0X128 = upper.feeGrowthOutside0X128; - feeGrowthAbove1X128 = upper.feeGrowthOutside1X128; - } else { - feeGrowthAbove0X128 = feeGrowthGlobal0X128 - upper.feeGrowthOutside0X128; - feeGrowthAbove1X128 = feeGrowthGlobal1X128 - upper.feeGrowthOutside1X128; - } - - feeGrowthInside0X128 = feeGrowthGlobal0X128 - feeGrowthBelow0X128 - feeGrowthAbove0X128; - feeGrowthInside1X128 = feeGrowthGlobal1X128 - feeGrowthBelow1X128 - feeGrowthAbove1X128; - } - - /// @notice Updates a tick and returns true if the tick was flipped from initialized to uninitialized, or vice versa - /// @param self The mapping containing all tick information for initialized ticks - /// @param tick The tick that will be updated - /// @param tickCurrent The current tick - /// @param liquidityDelta A new amount of liquidity to be added (subtracted) when tick is crossed from left to right (right to left) - /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 - /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 - /// @param secondsPerLiquidityCumulativeX128 The all-time seconds per max(1, liquidity) of the pool - /// @param time The current block timestamp cast to a uint32 - /// @param upper true for updating a position's upper tick, or false for updating a position's lower tick - /// @param maxLiquidity The maximum liquidity allocation for a single tick - /// @return flipped Whether the tick was flipped from initialized to uninitialized, or vice versa - function update( - mapping(int24 => Tick.Info) storage self, - int24 tick, - int24 tickCurrent, - int128 liquidityDelta, - uint256 feeGrowthGlobal0X128, - uint256 feeGrowthGlobal1X128, - uint160 secondsPerLiquidityCumulativeX128, - int56 tickCumulative, - uint32 time, - bool upper, - uint128 maxLiquidity - ) internal returns (bool flipped) { - Tick.Info storage info = self[tick]; - - uint128 liquidityGrossBefore = info.liquidityGross; - uint128 liquidityGrossAfter = LiquidityMath.addDelta(liquidityGrossBefore, liquidityDelta); - - require(liquidityGrossAfter <= maxLiquidity, 'LO'); - - flipped = (liquidityGrossAfter == 0) != (liquidityGrossBefore == 0); - - if (liquidityGrossBefore == 0) { - // by convention, we assume that all growth before a tick was initialized happened _below_ the tick - if (tick <= tickCurrent) { - info.feeGrowthOutside0X128 = feeGrowthGlobal0X128; - info.feeGrowthOutside1X128 = feeGrowthGlobal1X128; - info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128; - info.tickCumulativeOutside = tickCumulative; - info.secondsOutside = time; - } - info.initialized = true; - } - - info.liquidityGross = liquidityGrossAfter; - - // when the lower (upper) tick is crossed left to right (right to left), liquidity must be added (removed) - info.liquidityNet = upper - ? int256(info.liquidityNet).sub(liquidityDelta).toInt128() - : int256(info.liquidityNet).add(liquidityDelta).toInt128(); - } - - /// @notice Clears tick data - /// @param self The mapping containing all initialized tick information for initialized ticks - /// @param tick The tick that will be cleared - function clear(mapping(int24 => Tick.Info) storage self, int24 tick) internal { - delete self[tick]; - } - - /// @notice Transitions to next tick as needed by price movement - /// @param self The mapping containing all tick information for initialized ticks - /// @param tick The destination tick of the transition - /// @param feeGrowthGlobal0X128 The all-time global fee growth, per unit of liquidity, in token0 - /// @param feeGrowthGlobal1X128 The all-time global fee growth, per unit of liquidity, in token1 - /// @param secondsPerLiquidityCumulativeX128 The current seconds per liquidity - /// @param time The current block.timestamp - /// @return liquidityNet The amount of liquidity added (subtracted) when tick is crossed from left to right (right to left) - function cross( - mapping(int24 => Tick.Info) storage self, - int24 tick, - uint256 feeGrowthGlobal0X128, - uint256 feeGrowthGlobal1X128, - uint160 secondsPerLiquidityCumulativeX128, - int56 tickCumulative, - uint32 time - ) internal returns (int128 liquidityNet) { - Tick.Info storage info = self[tick]; - info.feeGrowthOutside0X128 = feeGrowthGlobal0X128 - info.feeGrowthOutside0X128; - info.feeGrowthOutside1X128 = feeGrowthGlobal1X128 - info.feeGrowthOutside1X128; - info.secondsPerLiquidityOutsideX128 = secondsPerLiquidityCumulativeX128 - info.secondsPerLiquidityOutsideX128; - info.tickCumulativeOutside = tickCumulative - info.tickCumulativeOutside; - info.secondsOutside = time - info.secondsOutside; - liquidityNet = info.liquidityNet; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol deleted file mode 100644 index 3c4358577..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickBitmap.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -import './BitMath.sol'; - -/// @title Packed tick initialized state library -/// @notice Stores a packed mapping of tick index to its initialized state -/// @dev The mapping uses int16 for keys since ticks are represented as int24 and there are 256 (2^8) values per word. -library TickBitmap { - /// @notice Computes the position in the mapping where the initialized bit for a tick lives - /// @param tick The tick for which to compute the position - /// @return wordPos The key in the mapping containing the word in which the bit is stored - /// @return bitPos The bit position in the word where the flag is stored - function position(int24 tick) private pure returns (int16 wordPos, uint8 bitPos) { - wordPos = int16(tick >> 8); - bitPos = uint8(tick % 256); - } - - /// @notice Flips the initialized state for a given tick from false to true, or vice versa - /// @param self The mapping in which to flip the tick - /// @param tick The tick to flip - /// @param tickSpacing The spacing between usable ticks - function flipTick( - mapping(int16 => uint256) storage self, - int24 tick, - int24 tickSpacing - ) internal { - require(tick % tickSpacing == 0); // ensure that the tick is spaced - (int16 wordPos, uint8 bitPos) = position(tick / tickSpacing); - uint256 mask = 1 << bitPos; - self[wordPos] ^= mask; - } - - /// @notice Returns the next initialized tick contained in the same word (or adjacent word) as the tick that is either - /// to the left (less than or equal to) or right (greater than) of the given tick - /// @param self The mapping in which to compute the next initialized tick - /// @param tick The starting tick - /// @param tickSpacing The spacing between usable ticks - /// @param lte Whether to search for the next initialized tick to the left (less than or equal to the starting tick) - /// @return next The next initialized or uninitialized tick up to 256 ticks away from the current tick - /// @return initialized Whether the next tick is initialized, as the function only searches within up to 256 ticks - function nextInitializedTickWithinOneWord( - mapping(int16 => uint256) storage self, - int24 tick, - int24 tickSpacing, - bool lte - ) internal view returns (int24 next, bool initialized) { - int24 compressed = tick / tickSpacing; - if (tick < 0 && tick % tickSpacing != 0) compressed--; // round towards negative infinity - - if (lte) { - (int16 wordPos, uint8 bitPos) = position(compressed); - // all the 1s at or to the right of the current bitPos - uint256 mask = (1 << bitPos) - 1 + (1 << bitPos); - uint256 masked = self[wordPos] & mask; - - // if there are no initialized ticks to the right of or at the current tick, return rightmost in the word - initialized = masked != 0; - // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick - next = initialized - ? (compressed - int24(bitPos - BitMath.mostSignificantBit(masked))) * tickSpacing - : (compressed - int24(bitPos)) * tickSpacing; - } else { - // start from the word of the next tick, since the current tick state doesn't matter - (int16 wordPos, uint8 bitPos) = position(compressed + 1); - // all the 1s at or to the left of the bitPos - uint256 mask = ~((1 << bitPos) - 1); - uint256 masked = self[wordPos] & mask; - - // if there are no initialized ticks to the left of the current tick, return leftmost in the word - initialized = masked != 0; - // overflow/underflow is possible, but prevented externally by limiting both tickSpacing and tick - next = initialized - ? (compressed + 1 + int24(BitMath.leastSignificantBit(masked) - bitPos)) * tickSpacing - : (compressed + 1 + int24(type(uint8).max - bitPos)) * tickSpacing; - } - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol deleted file mode 100644 index 378e44528..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TickMath.sol +++ /dev/null @@ -1,205 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Math library for computing sqrt prices from ticks and vice versa -/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports -/// prices between 2**-128 and 2**128 -library TickMath { - /// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128 - int24 internal constant MIN_TICK = -887272; - /// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128 - int24 internal constant MAX_TICK = -MIN_TICK; - - /// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK) - uint160 internal constant MIN_SQRT_RATIO = 4295128739; - /// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK) - uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; - - /// @notice Calculates sqrt(1.0001^tick) * 2^96 - /// @dev Throws if |tick| > max tick - /// @param tick The input tick for the above formula - /// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0) - /// at the given tick - function getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) { - uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick)); - require(absTick <= uint256(MAX_TICK), 'T'); - - uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000; - if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128; - if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128; - if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128; - if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128; - if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128; - if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128; - if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128; - if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128; - if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128; - if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128; - if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128; - if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128; - if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128; - if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128; - if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128; - if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128; - if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128; - if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128; - if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128; - - if (tick > 0) ratio = type(uint256).max / ratio; - - // this divides by 1<<32 rounding up to go from a Q128.128 to a Q128.96. - // we then downcast because we know the result always fits within 160 bits due to our tick input constraint - // we round up in the division so getTickAtSqrtRatio of the output price is always consistent - sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1)); - } - - /// @notice Calculates the greatest tick value such that getRatioAtTick(tick) <= ratio - /// @dev Throws in case sqrtPriceX96 < MIN_SQRT_RATIO, as MIN_SQRT_RATIO is the lowest value getRatioAtTick may - /// ever return. - /// @param sqrtPriceX96 The sqrt ratio for which to compute the tick as a Q64.96 - /// @return tick The greatest tick for which the ratio is less than or equal to the input ratio - function getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) { - // second inequality must be < because the price can never reach the price at the max tick - require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R'); - uint256 ratio = uint256(sqrtPriceX96) << 32; - - uint256 r = ratio; - uint256 msb = 0; - - assembly { - let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(5, gt(r, 0xFFFFFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(4, gt(r, 0xFFFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(3, gt(r, 0xFF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(2, gt(r, 0xF)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := shl(1, gt(r, 0x3)) - msb := or(msb, f) - r := shr(f, r) - } - assembly { - let f := gt(r, 0x1) - msb := or(msb, f) - } - - if (msb >= 128) r = ratio >> (msb - 127); - else r = ratio << (127 - msb); - - int256 log_2 = (int256(msb) - 128) << 64; - - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(63, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(62, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(61, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(60, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(59, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(58, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(57, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(56, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(55, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(54, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(53, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(52, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(51, f)) - r := shr(f, r) - } - assembly { - r := shr(127, mul(r, r)) - let f := shr(128, r) - log_2 := or(log_2, shl(50, f)) - } - - int256 log_sqrt10001 = log_2 * 255738958999603826347141; // 128.128 number - - int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128); - int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128); - - tick = tickLow == tickHi ? tickLow : getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow; - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol deleted file mode 100644 index 25d630902..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/TransferHelper.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.6.0; - -import '../interfaces/IERC20Minimal.sol'; - -/// @title TransferHelper -/// @notice Contains helper methods for interacting with ERC20 tokens that do not consistently return true/false -library TransferHelper { - /// @notice Transfers tokens from msg.sender to a recipient - /// @dev Calls transfer on token contract, errors with TF if transfer fails - /// @param token The contract address of the token which will be transferred - /// @param to The recipient of the transfer - /// @param value The value of the transfer - function safeTransfer( - address token, - address to, - uint256 value - ) internal { - (bool success, bytes memory data) = - token.call(abi.encodeWithSelector(IERC20Minimal.transfer.selector, to, value)); - require(success && (data.length == 0 || abi.decode(data, (bool))), 'TF'); - } -} diff --git a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol b/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol deleted file mode 100644 index f62f84676..000000000 --- a/crytic-export/etherscan-contracts/0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8-UniswapV3Pool/contracts/libraries/UnsafeMath.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity >=0.5.0; - -/// @title Math functions that do not check inputs or outputs -/// @notice Contains methods that perform common math functions but do not do any overflow or underflow checks -library UnsafeMath { - /// @notice Returns ceil(x / y) - /// @dev division by 0 has unspecified behavior, and must be checked externally - /// @param x The dividend - /// @param y The divisor - /// @return z The quotient, ceil(x / y) - function divRoundingUp(uint256 x, uint256 y) internal pure returns (uint256 z) { - assembly { - z := add(div(x, y), gt(mod(x, y), 0)) - } - } -} From d8455e3213ef587f73cbe0ca55118e8ee881a311 Mon Sep 17 00:00:00 2001 From: noxx Date: Mon, 18 Jul 2022 12:43:35 +0100 Subject: [PATCH 098/202] add square brackets to make it clear that the number is an array index of observations --- .gitignore | 3 +++ slither/tools/read_storage/read_storage.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 096634e91..fe1019a11 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,6 @@ ENV/ # Test results test_artifacts/ + +# crytic export +crytic-export/ diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index c2507ce11..daa891ed1 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -325,7 +325,7 @@ class SlitherReadStorage: struct_var = info["elems"][item][key].get('struct_var') # doesn't handle deep keys currently - var_name_struct_or_array_var = "{} -> {} -> {}".format(var, item, struct_var) + var_name_struct_or_array_var = "{}[{}] -> {}".format(var, item, struct_var) if environ.get("TABLE_VALUE") is None: tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var]) From 3d690088e3f434458a7391fbb6d9ac5f214157a3 Mon Sep 17 00:00:00 2001 From: noxx Date: Thu, 21 Jul 2022 07:09:02 +0100 Subject: [PATCH 099/202] lintig and tabulate install on github action --- .github/workflows/read_storage.yml | 1 + slither/tools/read_storage/read_storage.py | 117 ++++++++++++--------- 2 files changed, 70 insertions(+), 48 deletions(-) diff --git a/.github/workflows/read_storage.yml b/.github/workflows/read_storage.yml index 2ca618a19..74d14c39c 100644 --- a/.github/workflows/read_storage.yml +++ b/.github/workflows/read_storage.yml @@ -40,6 +40,7 @@ jobs: pip install pytest==7.0.1 pip install typing_extensions==4.1.1 pip install importlib_metadata==4.8.3 + pip install tabulate==0.8.10 solc-select install 0.8.1 solc-select install 0.8.10 solc-select use 0.8.1 diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index daa891ed1..6d72b9c12 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -145,7 +145,8 @@ class SlitherReadStorage: contracts (`Contract`): The contract that contains the given state variable. **kwargs: key (str): Key of a mapping or index position if an array. - deep_key (str): Key of a mapping embedded within another mapping or secondary index if array. + deep_key (str): Key of a mapping embedded within another mapping or + secondary index if array. struct_var (str): Structure variable name. Returns: (`SlotInfo`) | None : A dictionary of the slot information. @@ -200,14 +201,13 @@ class SlitherReadStorage: "size": size, "offset": offset, } - else: - return { - "type_string": type_to, - "slot": int_slot, - "size": size, - "offset": offset, - "struct_var": struct_var, - } + return { + "type_string": type_to, + "slot": int_slot, + "size": size, + "offset": offset, + "struct_var": struct_var, + } def get_target_variables(self, **kwargs) -> None: """ @@ -261,83 +261,104 @@ class SlitherReadStorage: def print_table(self) -> None: - if environ.get("TABLE_VALUE") is None: - tabulate_headers = ['slot', 'offset', 'size', 'type', 'name'] + if environ.get("TABLE_VALUE") is None: + tabulate_headers = ["slot", "offset", "size", "type", "name"] else: - tabulate_headers = ['slot', 'offset', 'size', 'type', 'name', 'value'] + tabulate_headers = ["slot", "offset", "size", "type", "name", "value"] print("Processing, grabbing values from rpc endpoint...") tabulate_data = [] - for contract, state_var in self.target_variables: + for _, state_var in self.target_variables: type_ = state_var.type - var = state_var.name info = self.slot_info[var] - - slot = info.get('slot') - offset = info.get('offset') - size = info.get('size') - type_string = info.get('type_string') - struct_var = info.get('struct_var') - + slot = info.get("slot") + offset = info.get("offset") + size = info.get("size") + type_string = info.get("type_string") + struct_var = info.get("struct_var") if environ.get("TABLE_VALUE") is None: - tabulate_data.append([slot, offset, size, type_string, var]) + tabulate_data.append( + [slot, offset, size, type_string, var] + ) else: hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - value = self.convert_value_to_type( - hex_bytes, size, offset, type_string + value = self.convert_value_to_type(hex_bytes, size, offset, type_string) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var, + value + ] ) - tabulate_data.append([slot, offset, size, type_string, var, value]) - if is_user_defined_type(type_) and is_struct(type_.type): tabulate_data.pop() for item in info["elems"]: - slot = info["elems"][item].get('slot') - offset = info["elems"][item].get('offset') - size = info["elems"][item].get('size') - type_string = info["elems"][item].get('type_string') - struct_var = info["elems"][item].get('struct_var') + slot = info["elems"][item].get("slot") + offset = info["elems"][item].get("offset") + size = info["elems"][item].get("size") + type_string = info["elems"][item].get("type_string") + struct_var = info["elems"][item].get("struct_var") - # doesn't handle deep keys currently + # doesn't handle deep keys currently var_name_struct_or_array_var = "{} -> {}".format(var, struct_var) - if environ.get("TABLE_VALUE") is None: - tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var]) + tabulate_data.append( + [slot, offset, size, type_string, var_name_struct_or_array_var] + ) else: hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - value = self.convert_value_to_type( - hex_bytes, size, offset, type_string + value = self.convert_value_to_type(hex_bytes, size, offset, type_string) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var_name_struct_or_array_var, + value + ] ) - tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var, value]) if is_array(type_): tabulate_data.pop() for item in info["elems"]: for key in info["elems"][item]: - slot = info["elems"][item][key].get('slot') - offset = info["elems"][item][key].get('offset') - size = info["elems"][item][key].get('size') - type_string = info["elems"][item][key].get('type_string') - struct_var = info["elems"][item][key].get('struct_var') + slot = info["elems"][item][key].get("slot") + offset = info["elems"][item][key].get("offset") + size = info["elems"][item][key].get("size") + type_string = info["elems"][item][key].get("type_string") + struct_var = info["elems"][item][key].get("struct_var") # doesn't handle deep keys currently var_name_struct_or_array_var = "{}[{}] -> {}".format(var, item, struct_var) if environ.get("TABLE_VALUE") is None: - tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var]) + tabulate_data.append( + [slot, offset, size, type_string, var_name_struct_or_array_var] + ) else: hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - value = self.convert_value_to_type( - hex_bytes, size, offset, type_string + value = self.convert_value_to_type(hex_bytes, size, offset, type_string) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var_name_struct_or_array_var, + value, + ] ) - tabulate_data.append([slot, offset, size, type_string, var_name_struct_or_array_var, value]) - - print(tabulate(tabulate_data, headers=tabulate_headers, tablefmt='grid')) + print(tabulate(tabulate_data, headers=tabulate_headers, tablefmt="grid")) @staticmethod def _find_struct_var_slot( From c18b5ae43b31fa711a2adf29f5359f1f169e0cbe Mon Sep 17 00:00:00 2001 From: noxx Date: Tue, 26 Jul 2022 16:21:59 +0100 Subject: [PATCH 100/202] more linting --- slither/tools/read_storage/__main__.py | 9 +- slither/tools/read_storage/read_storage.py | 158 +++++++++++++-------- 2 files changed, 101 insertions(+), 66 deletions(-) diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index 3ec47d176..660af2c17 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -139,8 +139,7 @@ def main() -> None: srs.rpc = args.rpc_url - if args.silent: - environ["SILENT"] = "1" + environ["SILENT"] = args.silent if args.table_storage_layout: environ["TABLE"] = "1" @@ -148,14 +147,12 @@ def main() -> None: srs.get_storage_layout() srs.print_table() return - + if args.table_storage_value: - assert args.rpc_url environ["TABLE"] = "1" - environ["TABLE_VALUE"] = "1" srs.get_all_storage_variables() srs.get_storage_layout() - srs.print_table() + srs.print_table_with_values() return if args.layout: diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 6d72b9c12..5bd2cdbd9 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -145,7 +145,7 @@ class SlitherReadStorage: contracts (`Contract`): The contract that contains the given state variable. **kwargs: key (str): Key of a mapping or index position if an array. - deep_key (str): Key of a mapping embedded within another mapping or + deep_key (str): Key of a mapping embedded within another mapping or secondary index if array. struct_var (str): Structure variable name. Returns: @@ -261,12 +261,6 @@ class SlitherReadStorage: def print_table(self) -> None: - if environ.get("TABLE_VALUE") is None: - tabulate_headers = ["slot", "offset", "size", "type", "name"] - else: - tabulate_headers = ["slot", "offset", "size", "type", "name", "value"] - print("Processing, grabbing values from rpc endpoint...") - tabulate_data = [] for _, state_var in self.target_variables: @@ -279,23 +273,7 @@ class SlitherReadStorage: type_string = info.get("type_string") struct_var = info.get("struct_var") - if environ.get("TABLE_VALUE") is None: - tabulate_data.append( - [slot, offset, size, type_string, var] - ) - else: - hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - value = self.convert_value_to_type(hex_bytes, size, offset, type_string) - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - var, - value - ] - ) + tabulate_data.append([slot, offset, size, type_string, var]) if is_user_defined_type(type_) and is_struct(type_.type): tabulate_data.pop() @@ -307,25 +285,85 @@ class SlitherReadStorage: struct_var = info["elems"][item].get("struct_var") # doesn't handle deep keys currently - var_name_struct_or_array_var = "{} -> {}".format(var, struct_var) + var_name_struct_or_array_var = f"{var} -> {struct_var}" + + tabulate_data.append( + [slot, offset, size, type_string, var_name_struct_or_array_var] + ) + + if is_array(type_): + tabulate_data.pop() + for item in info["elems"]: + for key in info["elems"][item]: + slot = info["elems"][item][key].get("slot") + offset = info["elems"][item][key].get("offset") + size = info["elems"][item][key].get("size") + type_string = info["elems"][item][key].get("type_string") + struct_var = info["elems"][item][key].get("struct_var") + + # doesn't handle deep keys currently + var_name_struct_or_array_var = f"{var}[{item}] -> {struct_var}" - if environ.get("TABLE_VALUE") is None: tabulate_data.append( [slot, offset, size, type_string, var_name_struct_or_array_var] ) - else: - hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - value = self.convert_value_to_type(hex_bytes, size, offset, type_string) - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - var_name_struct_or_array_var, - value - ] - ) + + print( + tabulate( + tabulate_data, headers=["slot", "offset", "size", "type", "name"], tablefmt="grid" + ) + ) + + def print_table_with_values(self) -> None: + + print("Processing, grabbing values from rpc endpoint...") + tabulate_data = [] + + for _, state_var in self.target_variables: + type_ = state_var.type + var = state_var.name + info = self.slot_info[var] + slot = info.get("slot") + offset = info.get("offset") + size = info.get("size") + type_string = info.get("type_string") + struct_var = info.get("struct_var") + + hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var, + self.convert_value_to_type(hex_bytes, size, offset, type_string), + ] + ) + + if is_user_defined_type(type_) and is_struct(type_.type): + tabulate_data.pop() + for item in info["elems"]: + slot = info["elems"][item].get("slot") + offset = info["elems"][item].get("offset") + size = info["elems"][item].get("size") + type_string = info["elems"][item].get("type_string") + struct_var = info["elems"][item].get("struct_var") + + # doesn't handle deep keys currently + var_name_struct_or_array_var = f"{var} -> {struct_var}" + + hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var_name_struct_or_array_var, + self.convert_value_to_type(hex_bytes, size, offset, type_string), + ] + ) if is_array(type_): tabulate_data.pop() @@ -338,27 +376,27 @@ class SlitherReadStorage: struct_var = info["elems"][item][key].get("struct_var") # doesn't handle deep keys currently - var_name_struct_or_array_var = "{}[{}] -> {}".format(var, item, struct_var) - - if environ.get("TABLE_VALUE") is None: - tabulate_data.append( - [slot, offset, size, type_string, var_name_struct_or_array_var] - ) - else: - hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - value = self.convert_value_to_type(hex_bytes, size, offset, type_string) - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - var_name_struct_or_array_var, - value, - ] - ) - - print(tabulate(tabulate_data, headers=tabulate_headers, tablefmt="grid")) + var_name_struct_or_array_var = f"{var}[{item}] -> {struct_var}" + + hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var_name_struct_or_array_var, + self.convert_value_to_type(hex_bytes, size, offset, type_string), + ] + ) + + print( + tabulate( + tabulate_data, + headers=["slot", "offset", "size", "type", "name", "value"], + tablefmt="grid", + ) + ) @staticmethod def _find_struct_var_slot( From 36875c74125003bccda191a85f6f267344451d90 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 17:55:37 +0200 Subject: [PATCH 101/202] using bash scripts now Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/ci.yml | 1 + scripts/ci_test_path_filtering | 11 +++++++++++ tests/test_path_filtering/slither.config.json | 7 +++++++ tests/test_path_filtering/test_path_filtering.py | 4 ---- 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 scripts/ci_test_path_filtering create mode 100644 tests/test_path_filtering/slither.config.json delete mode 100644 tests/test_path_filtering/test_path_filtering.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f2a295452..ff3fa605d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,7 @@ jobs: type: ["cli", "dapp", "data_dependency", + "path_filtering", # "embark", "erc", "etherlime", diff --git a/scripts/ci_test_path_filtering b/scripts/ci_test_path_filtering new file mode 100644 index 000000000..c4a714881 --- /dev/null +++ b/scripts/ci_test_path_filtering @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +### Test path filtering across POSIX and Windows + +slither "tests/test_path_filtering/test_path_filtering.sol" --config "tests/test_path_filtering/slither.config.json" --json "output.json" > "output.txt" 2>&1 + +if ! grep -q "0 result(s) found" "output.txt"; then + echo "Path filtering across POSIX and Windows failed" + rm output.txt + exit 5 +fi diff --git a/tests/test_path_filtering/slither.config.json b/tests/test_path_filtering/slither.config.json new file mode 100644 index 000000000..27d607bde --- /dev/null +++ b/tests/test_path_filtering/slither.config.json @@ -0,0 +1,7 @@ +{ + "detectors_to_run": "all", + "exclude_informational": true, + "exclude_low": true, + "ignore_return_value": true, + "filter_paths": "libs|src/ReentrancyMock.sol" +} diff --git a/tests/test_path_filtering/test_path_filtering.py b/tests/test_path_filtering/test_path_filtering.py deleted file mode 100644 index f90271fb3..000000000 --- a/tests/test_path_filtering/test_path_filtering.py +++ /dev/null @@ -1,4 +0,0 @@ -from slither import Slither - -def test_path_filtering(): - return Slither("./tests/test_path_filtering/test_path_filtering.sol", filter_paths=["filtering_paths/libs", "filtering_paths/src/ReentrancyMock.sol"]) From 11af6921374f99dd87059595b5cf163103e1416a Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 17:57:16 +0200 Subject: [PATCH 102/202] CI test Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff3fa605d..afed4ba5b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,7 @@ on: branches: - master - dev + - patch-1 pull_request: schedule: # run CI every day even if no PRs/merges occur From 25886e2e0d52a2b188e72dc15c89a1bc8e39a626 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 18:07:35 +0200 Subject: [PATCH 103/202] missing format identifier Signed-off-by: Pascal Marco Caversaccio --- scripts/{ci_test_path_filtering => ci_test_path_filtering.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/{ci_test_path_filtering => ci_test_path_filtering.sh} (100%) diff --git a/scripts/ci_test_path_filtering b/scripts/ci_test_path_filtering.sh similarity index 100% rename from scripts/ci_test_path_filtering rename to scripts/ci_test_path_filtering.sh From 0673f89e36b5317a35b5ea9b4306db137ffa04ea Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 18:16:04 +0200 Subject: [PATCH 104/202] remove CI test - everything works now Signed-off-by: Pascal Marco Caversaccio --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afed4ba5b..ff3fa605d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,6 @@ on: branches: - master - dev - - patch-1 pull_request: schedule: # run CI every day even if no PRs/merges occur From 1c1b471159a9ab2c3829f78407e2667a795f4108 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Tue, 26 Jul 2022 18:31:03 +0200 Subject: [PATCH 105/202] remove output file in any case Signed-off-by: Pascal Marco Caversaccio --- scripts/ci_test_path_filtering.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/ci_test_path_filtering.sh b/scripts/ci_test_path_filtering.sh index c4a714881..0ad13e8c2 100644 --- a/scripts/ci_test_path_filtering.sh +++ b/scripts/ci_test_path_filtering.sh @@ -4,8 +4,11 @@ slither "tests/test_path_filtering/test_path_filtering.sol" --config "tests/test_path_filtering/slither.config.json" --json "output.json" > "output.txt" 2>&1 -if ! grep -q "0 result(s) found" "output.txt"; then +if ! grep -q "0 result(s) found" "output.txt" +then echo "Path filtering across POSIX and Windows failed" rm output.txt exit 5 +else + rm output.txt fi From 646b6a62508de096c61cb0e8b6c618f224d3c5f0 Mon Sep 17 00:00:00 2001 From: noxx Date: Wed, 27 Jul 2022 09:13:29 +0100 Subject: [PATCH 106/202] linting --- slither/tools/read_storage/__main__.py | 2 +- slither/tools/read_storage/read_storage.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index 660af2c17..25314f000 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -147,7 +147,7 @@ def main() -> None: srs.get_storage_layout() srs.print_table() return - + if args.table_storage_value: environ["TABLE"] = "1" srs.get_all_storage_variables() diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 5bd2cdbd9..8101ebb38 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -329,7 +329,6 @@ class SlitherReadStorage: type_string = info.get("type_string") struct_var = info.get("struct_var") - hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) tabulate_data.append( [ slot, @@ -337,7 +336,12 @@ class SlitherReadStorage: size, type_string, var, - self.convert_value_to_type(hex_bytes, size, offset, type_string), + self.convert_value_to_type( + get_storage_data(self.web3, self.checksum_address, slot), + size, + offset, + type_string, + ), ] ) @@ -353,7 +357,6 @@ class SlitherReadStorage: # doesn't handle deep keys currently var_name_struct_or_array_var = f"{var} -> {struct_var}" - hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) tabulate_data.append( [ slot, @@ -361,7 +364,12 @@ class SlitherReadStorage: size, type_string, var_name_struct_or_array_var, - self.convert_value_to_type(hex_bytes, size, offset, type_string), + self.convert_value_to_type( + get_storage_data(self.web3, self.checksum_address, slot), + size, + offset, + type_string, + ), ] ) From 26ad3c687220236c59fda175980fb5ad7fa719b6 Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 27 Jul 2022 10:28:12 +0200 Subject: [PATCH 107/202] include enums declared in top level (#1300) * include enums used in top level * mark where parsing is incorrect * update AST tests for custom errors Co-authored-by: alpharush <0xalpharush@protonmail.com> --- .../expressions/expression_parsing.py | 1 - .../solidity_types/type_parsing.py | 6 +++++- .../custom_error-0.8.4.sol-0.8.4-compact.zip | Bin 4871 -> 5732 bytes .../custom_error-0.8.4.sol-0.8.5-compact.zip | Bin 4862 -> 5737 bytes .../custom_error-0.8.4.sol-0.8.6-compact.zip | Bin 4858 -> 5730 bytes .../custom_error-0.8.4.sol-0.8.7-compact.zip | Bin 4849 -> 5702 bytes .../custom_error-0.8.4.sol-0.8.8-compact.zip | Bin 4949 -> 5875 bytes .../custom_error-0.8.4.sol-0.8.9-compact.zip | Bin 4952 -> 5883 bytes tests/ast-parsing/custom_error-0.8.4.sol | 12 +++++++++++- .../custom_error-0.8.4.sol-0.8.4-compact.json | 6 ++++-- .../custom_error-0.8.4.sol-0.8.5-compact.json | 6 ++++-- .../custom_error-0.8.4.sol-0.8.6-compact.json | 6 ++++-- .../custom_error-0.8.4.sol-0.8.7-compact.json | 6 ++++-- .../custom_error-0.8.4.sol-0.8.8-compact.json | 6 ++++-- .../custom_error-0.8.4.sol-0.8.9-compact.json | 6 ++++-- 15 files changed, 40 insertions(+), 15 deletions(-) diff --git a/slither/solc_parsing/expressions/expression_parsing.py b/slither/solc_parsing/expressions/expression_parsing.py index e5c26a548..fe26a0ea6 100644 --- a/slither/solc_parsing/expressions/expression_parsing.py +++ b/slither/solc_parsing/expressions/expression_parsing.py @@ -455,7 +455,6 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) referenced_declaration = expression["referencedDeclaration"] else: referenced_declaration = None - var, was_created = find_variable(value, caller_context, referenced_declaration) if was_created: var.set_offset(src, caller_context.compilation_unit) diff --git a/slither/solc_parsing/solidity_types/type_parsing.py b/slither/solc_parsing/solidity_types/type_parsing.py index 413339611..5891962d1 100644 --- a/slither/solc_parsing/solidity_types/type_parsing.py +++ b/slither/solc_parsing/solidity_types/type_parsing.py @@ -272,8 +272,12 @@ def parse_type( all_structuress = [c.structures for c in scope.contracts.values()] all_structures = [item for sublist in all_structuress for item in sublist] all_structures += structures_direct_access + enums_direct_access = [] - all_enums = scope.enums.values() + all_enumss = [c.enums for c in scope.contracts.values()] + all_enums = [item for sublist in all_enumss for item in sublist] + all_enums += scope.enums.values() + contracts = scope.contracts.values() functions = list(scope.functions) diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.4-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.4-compact.zip index 913457a623127423994808d764a6c5b1ed0f578f..15e749a197c35eab02e52c62ab461de0e75388f5 100644 GIT binary patch delta 5627 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 a=2S@j%*?YD008!(ld2L<2KyBN0002YCE@Y_ delta 4750 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 T6#xMCp_8T(P6qT900000so3J= delta 4753 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 delta 4737 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 Pdz11NP6mS#00000Eb|LZ diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.8-compact.zip index d97e8eb0ffb1f48a873d335eea8843e879902914..d11a080ffb719edead27bc85b1d5fe869c9d071e 100644 GIT binary patch delta 5771 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 delta 4841 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 Pev_vbP6p}{00000X1`1t diff --git a/tests/ast-parsing/custom_error-0.8.4.sol b/tests/ast-parsing/custom_error-0.8.4.sol index d62f96e87..ea185de89 100644 --- a/tests/ast-parsing/custom_error-0.8.4.sol +++ b/tests/ast-parsing/custom_error-0.8.4.sol @@ -1,4 +1,8 @@ pragma solidity ^0.8.4; +interface I { + enum SomeEnum { ONE, TWO, THREE } + error ErrorWithEnum(SomeEnum e); +} struct St{ uint v; @@ -8,7 +12,8 @@ error ErrorSimple(); error ErrorWithArgs(uint, uint); error ErrorWithStruct(St s); -contract VendingMachine { + +contract VendingMachine is I { function err0() public { revert ErrorSimple(); @@ -19,10 +24,14 @@ contract VendingMachine { } function err2() public{ revert ErrorWithArgs(10+10, 10); + revert ErrorWithArgs(uint(SomeEnum.ONE), uint(SomeEnum.ONE)); } function err3() public{ revert('test'); } + function err4() public { + revert ErrorWithEnum(SomeEnum.ONE); + } } contract A{ @@ -43,3 +52,4 @@ contract B is A{ } } + diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json index 995b49f83..0a9029979 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json @@ -1,9 +1,11 @@ { + "I": {}, "VendingMachine": { "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", - "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", - "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" }, "A": { "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json index 995b49f83..0a9029979 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json @@ -1,9 +1,11 @@ { + "I": {}, "VendingMachine": { "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", - "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", - "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" }, "A": { "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json index 995b49f83..0a9029979 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json @@ -1,9 +1,11 @@ { + "I": {}, "VendingMachine": { "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", - "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", - "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" }, "A": { "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json index 995b49f83..0a9029979 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json @@ -1,9 +1,11 @@ { + "I": {}, "VendingMachine": { "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", - "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", - "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" }, "A": { "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json index 995b49f83..0a9029979 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json @@ -1,9 +1,11 @@ { + "I": {}, "VendingMachine": { "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", - "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", - "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" }, "A": { "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json index 995b49f83..0a9029979 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json @@ -1,9 +1,11 @@ { + "I": {}, "VendingMachine": { "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", - "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", - "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" }, "A": { "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" From f10401593ed59581ce9bb739deca2f748c3a273f Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 27 Jul 2022 10:57:39 +0200 Subject: [PATCH 108/202] Add testcase --- .../ternary-with-max.sol-0.8.15-compact.zip | Bin 0 -> 2612 bytes .../ternary-with-max.sol-0.8.15-compact.json | 5 +++++ tests/ast-parsing/ternary-with-max.sol | 7 +++++++ tests/test_ast_parsing.py | 1 + 4 files changed, 13 insertions(+) create mode 100644 tests/ast-parsing/compile/ternary-with-max.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/expected/ternary-with-max.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/ternary-with-max.sol diff --git a/tests/ast-parsing/compile/ternary-with-max.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/ternary-with-max.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..dc4cb99da1f939843c014819229ad1c2bd154b3e GIT binary patch literal 2612 zcma);`9Bj51IK6Xgpey?!sI^Y%3KLKCSz&NA*Ernm}9weA0=PPeUxLBAy?-7y1tCX z+((og$yKQw%QZZGpWmO?>-l^>uh;vR&mZuHTQjp50e}D=K*7zUn@67VL$>(#)liB+=Uc>AK6ZcgeUeF3?<*=+lAD3z7{V6)>x;xS)Na3n_D1s|uCD{!5F_fp>K1}a}MyBj^RND(Z zM4Ho*rt5QW3uUN&US}t%r$yHs`kSjRJ5T*`LjaFvea8NRf#DNNM>D)RIZ{pPRfjE$ zl82vg8oA9N?))p8gsHSbpl}XAu#;$SrPO2P2x`JC`Yh$NzK7YJ-B*CGzWBZzx&VZ3 z$bDgX6ySb?ul5J}WN{)?Z8o((vR-I^eec-#pLMA-2-jfnr>q{rgD$-e0rgLOY9jQQ z9WuFGh1o@%jP5I@$mUz(ywnV)3)_XGeSn@S8AMZE+x!6ahO!zaNQ5=PG~hP z2c0fW?ZhiOC!)OO4a(vfW7oW>1r@?YvkX^$oy;~H5O9k`+iy5op#L)-lbNIBvC=)}HbMmx=_taHS&2$nwQ z*SS+3UXYJyL8?@Se%BE%Xie;bOF*qi^u`TA2U!Zl;{9XJg7pL98vo0m>j$-45!S<1 zmZB$M(VU+LXV|?2#$TsQCiU1(+FI$Ty`5^e>3%GxHs~oW7k1SPcDZ3i>dh{#N-1*M zLszL<4Z=Sm5-GD}`LGz3kxsdfpZmc+tHQiH#j&z0^>t~u4P3ft|IMs*2Lq$XM*3?| zfA7)^3}kZW^wnh#6`o*VvfmqP&2?$LPDzt+XcuGxh(J1qY;A`>I;uaTn5mV!|F%En zA}N*-ror!w5UFj7+HbVNX3RxZfk&Ldu}vqN7aKFT%HstS7z$a8B99ru-QgF!AsbT? zScCgDO~I9TARpQU=(WI&m6hsGP+Fu)8HmheQo^omM~~67uZ@ zDebM(h2B_k|7dC@>{nbK7L2SI4R~!)u8{O-#GG`?5;(AWpz7Gw)qCVMF{kIW0Thkw_1IfAxNg+%iswvI~`9rYdGpg?TdV*Fc+1k+v`+C#)k7aw zqUikt&?!X~f7^3E0*ouuCJoyl`(a}Ca&>vX;+iQ;G4!&-K5#=})tfMb28Sss*z-7u z?o;^|Je!(c6Vh8YX;!bNeIZI+JZw&|cVd#y#|TCUtdMi-R;tTRK9O-MkRJwjd)<%<9_ICD^%P2#x~Hc1*l|bERTW+!>RW_^nOCcLPzEFLX)ugbBxK?|niWzqVf8 z4s_C3Osn`VfBacYO7+UvPj~I726Q))Ui5QnQO1~|`$moL=%qWW>%p$bvYCi@N$Yoq zF2d(4l4WH=z?b=sH^F@iFT7D_L5IAatygf_#MC(DJqn^HAN+I+@)YP&&Jj4h$u=r) za`QPXHbP*?HXe7Y)9HZa+3&M#glDeH$)R%gHXi}-%^{pQT!YgvZV#vRu;eX zgKyT?^#nj$S~X5LaW6S(cRfB zosu!dIklwDdN=Bul2`$AKHFzSBD3Y#eK+Q6XbWmj`0;r~erL5!$OhHur=Rvoil}tZ zt7GHpqnvYG#p+}2DG~@>y83x;6i9hud733`(7O+LmgaDE*V>Qh@)a0E21Sa4_uHpd zhZ(QXG*h)p(o|*2Yx@uB!hDGB8m1PN)Q=9r7t}9r0e~1o@TP?H(>UBSF*ox1O346c zX+GD8lM3HQ%b%~tMsBQdH~z%Z#|L$^t;sXtBe_-XS{*wwk2+r}3@P1Q z2+q>)GLT$H3;BHNCjyP)5=Ha}>_-fZ;7ac-4iE6O&&2+}>@kz+$m0OIF&B(@`sR}N ztk}LJ{_~6$Q*uOV?@EI1q5X?X9GR0iP`dXye*8RYQcQzYapa9lFS8{BJzT{1JBb-h zCla}H%DdbYPd_B^HL=2f48Hbn_4a(Se2+HLR*hi@&4-Yr9C%>0nxh1lVCaNq#@-O0 z6w=nHl@_y5>Yqd}ay?IubT~a>Ln*+mnSe&j|J&sL$lQMu&Gaw+U$28(v$FmBXZq7y Me@Ok~h5*2S05p5*od5s; literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/ternary-with-max.sol-0.8.15-compact.json b/tests/ast-parsing/expected/ternary-with-max.sol-0.8.15-compact.json new file mode 100644 index 000000000..755f83c9e --- /dev/null +++ b/tests/ast-parsing/expected/ternary-with-max.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "TernaryWithMax": { + "f(bool)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->5;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: END_IF 5\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/ternary-with-max.sol b/tests/ast-parsing/ternary-with-max.sol new file mode 100644 index 000000000..6eadf3cfd --- /dev/null +++ b/tests/ast-parsing/ternary-with-max.sol @@ -0,0 +1,7 @@ +contract TernaryWithMax { + function f( + bool condition + ) external returns(uint256 res) { + res = type(uint256).max / (condition ? 10 : 1) ; + } +} diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index ed83e2b20..15be1dd76 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -411,6 +411,7 @@ ALL_TESTS = [ Test("free_functions/libraries_from_free.sol", ["0.8.12"]), Test("free_functions/new_operator.sol", ["0.8.12"]), Test("free_functions/library_constant_function_collision.sol", ["0.8.12"]), + Test("ternary-with-max.sol", ["0.8.15"]), ] # create the output folder if needed try: From 38511dd5d57e4eb7f9f90dfa9257e74f224cec2a Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 27 Jul 2022 11:23:39 +0200 Subject: [PATCH 109/202] Make entry_point return an Optional[Node] and update the detectors Related to #1280 Fix #1279 --- examples/scripts/taint_mapping.py | 3 +++ slither/core/declarations/function.py | 2 +- slither/detectors/statements/calls_in_loop.py | 8 ++++++-- slither/detectors/statements/costly_operations_in_loop.py | 8 ++++++-- slither/detectors/statements/delegatecall_in_loop.py | 8 ++++++-- slither/detectors/statements/msg_value_in_loop.py | 8 ++++++-- .../detectors/variables/uninitialized_local_variables.py | 6 +++++- .../variables/uninitialized_storage_variables.py | 2 +- 8 files changed, 34 insertions(+), 11 deletions(-) diff --git a/examples/scripts/taint_mapping.py b/examples/scripts/taint_mapping.py index feb843b20..75ed3d8df 100644 --- a/examples/scripts/taint_mapping.py +++ b/examples/scripts/taint_mapping.py @@ -10,6 +10,9 @@ from slither.slithir.variables.temporary import TemporaryVariable def visit_node(node, visited): + if node is None: + return + if node in visited: return diff --git a/slither/core/declarations/function.py b/slither/core/declarations/function.py index 8983769cc..8ec5a00ae 100644 --- a/slither/core/declarations/function.py +++ b/slither/core/declarations/function.py @@ -538,7 +538,7 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu self._nodes = nodes @property - def entry_point(self) -> "Node": + def entry_point(self) -> Optional["Node"]: """ Node: Entry point of the function """ diff --git a/slither/detectors/statements/calls_in_loop.py b/slither/detectors/statements/calls_in_loop.py index 7ea83f8fd..fdd0c6732 100644 --- a/slither/detectors/statements/calls_in_loop.py +++ b/slither/detectors/statements/calls_in_loop.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from slither.core.cfg.node import NodeType, Node from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.core.declarations import Contract @@ -22,7 +22,11 @@ def detect_call_in_loop(contract: Contract) -> List[Node]: return ret -def call_in_loop(node: Node, in_loop_counter: int, visited: List[Node], ret: List[Node]) -> None: +def call_in_loop( + node: Optional[Node], in_loop_counter: int, visited: List[Node], ret: List[Node] +) -> None: + if node is None: + return if node in visited: return # shared visited diff --git a/slither/detectors/statements/costly_operations_in_loop.py b/slither/detectors/statements/costly_operations_in_loop.py index d10cfaaf0..930085cc6 100644 --- a/slither/detectors/statements/costly_operations_in_loop.py +++ b/slither/detectors/statements/costly_operations_in_loop.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from slither.core.cfg.node import NodeType, Node from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.core.declarations import Contract @@ -17,8 +17,12 @@ def detect_costly_operations_in_loop(contract: Contract) -> List[Node]: def costly_operations_in_loop( - node: Node, in_loop_counter: int, visited: List[Node], ret: List[Node] + node: Optional[Node], in_loop_counter: int, visited: List[Node], ret: List[Node] ) -> None: + + if node is None: + return + if node in visited: return # shared visited diff --git a/slither/detectors/statements/delegatecall_in_loop.py b/slither/detectors/statements/delegatecall_in_loop.py index 58de0359b..b7bf70cbc 100644 --- a/slither/detectors/statements/delegatecall_in_loop.py +++ b/slither/detectors/statements/delegatecall_in_loop.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from slither.core.cfg.node import NodeType, Node from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.operations import LowLevelCall, InternalCall @@ -15,8 +15,12 @@ def detect_delegatecall_in_loop(contract: Contract) -> List[Node]: def delegatecall_in_loop( - node: Node, in_loop_counter: int, visited: List[Node], results: List[Node] + node: Optional[Node], in_loop_counter: int, visited: List[Node], results: List[Node] ) -> None: + + if node is None: + return + if node in visited: return # shared visited diff --git a/slither/detectors/statements/msg_value_in_loop.py b/slither/detectors/statements/msg_value_in_loop.py index 5bd5c398c..bfd541201 100644 --- a/slither/detectors/statements/msg_value_in_loop.py +++ b/slither/detectors/statements/msg_value_in_loop.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from slither.core.cfg.node import NodeType, Node from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.operations import InternalCall @@ -15,8 +15,12 @@ def detect_msg_value_in_loop(contract: Contract) -> List[Node]: def msg_value_in_loop( - node: Node, in_loop_counter: int, visited: List[Node], results: List[Node] + node: Optional[Node], in_loop_counter: int, visited: List[Node], results: List[Node] ) -> None: + + if node is None: + return + if node in visited: return # shared visited diff --git a/slither/detectors/variables/uninitialized_local_variables.py b/slither/detectors/variables/uninitialized_local_variables.py index 45c86c22d..7f7cb76e0 100644 --- a/slither/detectors/variables/uninitialized_local_variables.py +++ b/slither/detectors/variables/uninitialized_local_variables.py @@ -88,7 +88,11 @@ Bob calls `transfer`. As a result, all Ether is sent to the address `0x0` and is for contract in self.compilation_unit.contracts: for function in contract.functions: - if function.is_implemented and function.contract_declarer == contract: + if ( + function.is_implemented + and function.contract_declarer == contract + and function.entry_point + ): if function.contains_assembly: continue # dont consider storage variable, as they are detected by another detector diff --git a/slither/detectors/variables/uninitialized_storage_variables.py b/slither/detectors/variables/uninitialized_storage_variables.py index a84462f38..a0c35d80d 100644 --- a/slither/detectors/variables/uninitialized_storage_variables.py +++ b/slither/detectors/variables/uninitialized_storage_variables.py @@ -96,7 +96,7 @@ Bob calls `func`. As a result, `owner` is overridden to `0`. for contract in self.compilation_unit.contracts: for function in contract.functions: - if function.is_implemented: + if function.is_implemented and function.entry_point: uninitialized_storage_variables = [ v for v in function.local_variables if v.is_storage and v.uninitialized ] From 0813789c520b2bc40e8caf8a28ea27f82b345898 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 27 Jul 2022 12:13:40 +0200 Subject: [PATCH 110/202] Fix contract_kind --- slither/solc_parsing/declarations/contract.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/solc_parsing/declarations/contract.py b/slither/solc_parsing/declarations/contract.py index efc53f2aa..1d56d5f2f 100644 --- a/slither/solc_parsing/declarations/contract.py +++ b/slither/solc_parsing/declarations/contract.py @@ -157,7 +157,7 @@ class ContractSolc(CallerContextExpression): if "contractKind" in attributes: if attributes["contractKind"] == "interface": self._contract.is_interface = True - self._contract.kind = attributes["contractKind"] + self._contract.contract_kind = attributes["contractKind"] self._linearized_base_contracts = attributes["linearizedBaseContracts"] # self._contract.fullyImplemented = attributes["fullyImplemented"] From d25ebe2acc7306636d1537ff106504341f32f708 Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Thu, 28 Jul 2022 08:42:25 +0200 Subject: [PATCH 111/202] Update ci.yml --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 87b76a0f2..cc58ab718 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,6 +74,5 @@ jobs: PYTHONUTF8: 1 TEST_TYPE: ${{ matrix.type }} GITHUB_ETHERSCAN: ${{ secrets.GITHUB_ETHERSCAN }} - PYTHONUTF8: 1 run: | bash "scripts/ci_test_${TEST_TYPE}.sh" From a1963cbab02d40cec487a0bff95309bf28794c9f Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 28 Jul 2022 10:18:05 +0200 Subject: [PATCH 112/202] Multiple improvements to slither-read-storage - Fix types - Use dataclass - Multiple minor fixes --- slither/tools/read_storage/__main__.py | 8 +- slither/tools/read_storage/read_storage.py | 350 ++++++++++--------- slither/tools/read_storage/utils/__init__.py | 6 - slither/tools/read_storage/utils/utils.py | 38 +- 4 files changed, 196 insertions(+), 206 deletions(-) diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index 25314f000..0f3bb2e83 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -1,6 +1,7 @@ """ Tool to read on-chain storage from EVM """ +import dataclasses import json import argparse from os import environ @@ -139,8 +140,6 @@ def main() -> None: srs.rpc = args.rpc_url - environ["SILENT"] = args.silent - if args.table_storage_layout: environ["TABLE"] = "1" srs.get_all_storage_variables() @@ -173,7 +172,10 @@ def main() -> None: # Only write file if storage layout is used. if len(srs.slot_info) > 1: with open("storage_layout.json", "w", encoding="utf-8") as file: - json.dump(srs.slot_info, file, indent=4) + slot_infos_json = { + key: dataclasses.asdict(value) for key, value in srs.slot_info.items() + } + json.dump(slot_infos_json, file, indent=4) if __name__ == "__main__": diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 8101ebb38..304b4fcfc 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -1,3 +1,4 @@ +import json import sys import logging from math import floor @@ -18,11 +19,6 @@ try: from eth_utils import keccak from hexbytes import HexBytes from .utils import ( - is_elementary, - is_array, - is_mapping, - is_struct, - is_user_defined_type, get_offset_value, get_storage_data, coerce_type, @@ -39,25 +35,28 @@ except ImportError: print("$ pip3 install tabulate --user\n") sys.exit(-1) +from dataclasses import dataclass, field, asdict + from slither.core.solidity_types.type import Type -from slither.core.solidity_types import ArrayType -from slither.core.declarations import Contract, StructureContract +from slither.core.solidity_types import ArrayType, ElementaryType, UserDefinedType, MappingType +from slither.core.declarations import Contract, StructureContract, Structure from slither.core.variables.state_variable import StateVariable from slither.core.variables.structure_variable import StructureVariable - logging.basicConfig() logger = logging.getLogger("Slither-read-storage") logger.setLevel(logging.INFO) -class SlotInfo(TypedDict): +@dataclass +class SlotInfo: type_string: str slot: int size: int offset: int - value: Optional[Union[int, bool, str, ChecksumAddress, hex]] - elems: Optional[TypedDict] # same types as SlotInfo + value: Optional[Union[int, bool, str, ChecksumAddress]] = None + elems: Dict[int, "SlotInfo"] = field(default_factory=lambda: {}) + struct_var: Optional[str] = None class SlitherReadStorageException(Exception): @@ -66,12 +65,12 @@ class SlitherReadStorageException(Exception): # pylint: disable=too-many-instance-attributes class SlitherReadStorage: - def __init__(self, contracts, max_depth): + def __init__(self, contracts: List[Contract], max_depth: int) -> None: self._contracts: List[Contract] = contracts self._max_depth: int = max_depth self._log: str = "" - self._slot_info: SlotInfo = {} - self._target_variables = [] + self._slot_info: Dict[str, SlotInfo] = {} + self._target_variables: List[Tuple[Contract, StateVariable]] = [] self._web3: Optional[Web3] = None self._checksum_address: Optional[ChecksumAddress] = None self.storage_address: Optional[str] = None @@ -90,7 +89,7 @@ class SlitherReadStorage: return self._log @log.setter - def log(self, log) -> str: + def log(self, log: str) -> None: self._log = log @property @@ -111,25 +110,25 @@ class SlitherReadStorage: return self._target_variables @property - def slot_info(self) -> SlotInfo: + def slot_info(self) -> Dict[str, SlotInfo]: """Contains the location, type, size, offset, and value of contract slots.""" return self._slot_info def get_storage_layout(self) -> None: """Retrieves the storage layout of entire contract.""" - tmp = {} + tmp: Dict[str, SlotInfo] = {} for contract, var in self.target_variables: type_ = var.type info = self.get_storage_slot(var, contract) - tmp[var.name] = info + if info: + tmp[var.name] = info + if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): + tmp[var.name].elems = self._all_struct_slots(var, type_.type, contract) + continue - if is_user_defined_type(type_) and is_struct(type_.type): - tmp[var.name]["elems"] = self._all_struct_slots(var, contract) - continue - - if is_array(type_): - elems = self._all_array_slots(var, contract, type_, info["slot"]) - tmp[var.name]["elems"] = elems + if isinstance(type_, ArrayType): + elems = self._all_array_slots(var, contract, type_, info.slot) + tmp[var.name].elems = elems self._slot_info = tmp @@ -155,7 +154,7 @@ class SlitherReadStorage: key = kwargs.get("key", None) deep_key = kwargs.get("deep_key", None) struct_var = kwargs.get("struct_var", None) - info = "" + info: str var_log_name = target_variable.name try: int_slot, size, offset, type_to = self.get_variable_info(contract, target_variable) @@ -168,22 +167,28 @@ class SlitherReadStorage: slot = int.to_bytes(int_slot, 32, byteorder="big") - if is_elementary(target_variable.type): - type_to = target_variable.type.name + target_variable_type = target_variable.type - elif is_array(target_variable.type) and key: + if isinstance(target_variable_type, ElementaryType): + type_to = target_variable_type.name + + elif isinstance(target_variable_type, ArrayType) and key: info, type_to, slot, size, offset = self._find_array_slot( - target_variable, slot, key, deep_key=deep_key, struct_var=struct_var + target_variable_type, + slot, + key, + deep_key=deep_key, + struct_var=struct_var, ) self.log += info - elif is_user_defined_type(target_variable.type) and struct_var: + elif isinstance(target_variable_type, UserDefinedType) and struct_var: var_log_name = struct_var - elems = target_variable.type.type.elems_ordered + elems = target_variable_type.type.elems_ordered info, type_to, slot, size, offset = self._find_struct_var_slot(elems, slot, struct_var) self.log += info - elif is_mapping(target_variable.type) and key: + elif isinstance(target_variable_type, MappingType) and key: info, type_to, slot, size, offset = self._find_mapping_slot( target_variable, slot, key, struct_var=struct_var, deep_key=deep_key ) @@ -195,19 +200,19 @@ class SlitherReadStorage: logger.info(self.log) self.log = "" if environ.get("TABLE") is None: - return { - "type_string": type_to, - "slot": int_slot, - "size": size, - "offset": offset, - } - return { - "type_string": type_to, - "slot": int_slot, - "size": size, - "offset": offset, - "struct_var": struct_var, - } + return SlotInfo( + type_string=type_to, + slot=int_slot, + size=size, + offset=offset, + ) + return SlotInfo( + type_string=type_to, + slot=int_slot, + size=size, + offset=offset, + struct_var=struct_var, + ) def get_target_variables(self, **kwargs) -> None: """ @@ -223,7 +228,7 @@ class SlitherReadStorage: var, contract, **kwargs ) - def get_slot_values(self) -> SlotInfo: + def get_slot_values(self) -> Dict[str, SlotInfo]: """ Fetches the slot values and inserts them in slot info dictionary. Returns: @@ -267,22 +272,21 @@ class SlitherReadStorage: type_ = state_var.type var = state_var.name info = self.slot_info[var] - slot = info.get("slot") - offset = info.get("offset") - size = info.get("size") - type_string = info.get("type_string") - struct_var = info.get("struct_var") + slot = info.slot + offset = info.offset + size = info.size + type_string = info.type_string tabulate_data.append([slot, offset, size, type_string, var]) - if is_user_defined_type(type_) and is_struct(type_.type): + if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): tabulate_data.pop() - for item in info["elems"]: - slot = info["elems"][item].get("slot") - offset = info["elems"][item].get("offset") - size = info["elems"][item].get("size") - type_string = info["elems"][item].get("type_string") - struct_var = info["elems"][item].get("struct_var") + for item in info.elems: + slot = info.elems[item].slot + offset = info.elems[item].offset + size = info.elems[item].size + type_string = info.elems[item].type_string + struct_var = info.elems[item].struct_var # doesn't handle deep keys currently var_name_struct_or_array_var = f"{var} -> {struct_var}" @@ -291,15 +295,15 @@ class SlitherReadStorage: [slot, offset, size, type_string, var_name_struct_or_array_var] ) - if is_array(type_): + if isinstance(type_, ArrayType): tabulate_data.pop() - for item in info["elems"]: - for key in info["elems"][item]: - slot = info["elems"][item][key].get("slot") - offset = info["elems"][item][key].get("offset") - size = info["elems"][item][key].get("size") - type_string = info["elems"][item][key].get("type_string") - struct_var = info["elems"][item][key].get("struct_var") + for item in info.elems: + for elem in info.elems.values(): + slot = elem.slot + offset = elem.offset + size = elem.size + type_string = elem.type_string + struct_var = elem.struct_var # doesn't handle deep keys currently var_name_struct_or_array_var = f"{var}[{item}] -> {struct_var}" @@ -323,11 +327,10 @@ class SlitherReadStorage: type_ = state_var.type var = state_var.name info = self.slot_info[var] - slot = info.get("slot") - offset = info.get("offset") - size = info.get("size") - type_string = info.get("type_string") - struct_var = info.get("struct_var") + slot = info.slot + offset = info.offset + size = info.size + type_string = info.type_string tabulate_data.append( [ @@ -337,7 +340,11 @@ class SlitherReadStorage: type_string, var, self.convert_value_to_type( - get_storage_data(self.web3, self.checksum_address, slot), + get_storage_data( + self.web3, + self.checksum_address, + int.to_bytes(slot, 32, byteorder="big"), + ), size, offset, type_string, @@ -345,14 +352,14 @@ class SlitherReadStorage: ] ) - if is_user_defined_type(type_) and is_struct(type_.type): + if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): tabulate_data.pop() - for item in info["elems"]: - slot = info["elems"][item].get("slot") - offset = info["elems"][item].get("offset") - size = info["elems"][item].get("size") - type_string = info["elems"][item].get("type_string") - struct_var = info["elems"][item].get("struct_var") + for item in info.elems.values(): + slot = item.slot + offset = item.offset + size = item.size + type_string = item.type_string + struct_var = item.struct_var # doesn't handle deep keys currently var_name_struct_or_array_var = f"{var} -> {struct_var}" @@ -365,7 +372,11 @@ class SlitherReadStorage: type_string, var_name_struct_or_array_var, self.convert_value_to_type( - get_storage_data(self.web3, self.checksum_address, slot), + get_storage_data( + self.web3, + self.checksum_address, + int.to_bytes(slot, 32, byteorder="big"), + ), size, offset, type_string, @@ -373,30 +384,32 @@ class SlitherReadStorage: ] ) - if is_array(type_): + if isinstance(type_, ArrayType): tabulate_data.pop() - for item in info["elems"]: - for key in info["elems"][item]: - slot = info["elems"][item][key].get("slot") - offset = info["elems"][item][key].get("offset") - size = info["elems"][item][key].get("size") - type_string = info["elems"][item][key].get("type_string") - struct_var = info["elems"][item][key].get("struct_var") + for item_key, item in info.elems.items(): + # for elem in info.elems[item].values(): + slot = item.slot + offset = item.offset + size = item.size + type_string = item.type_string + struct_var = item.struct_var - # doesn't handle deep keys currently - var_name_struct_or_array_var = f"{var}[{item}] -> {struct_var}" + # doesn't handle deep keys currently + var_name_struct_or_array_var = f"{var}[{item_key}] -> {struct_var}" - hex_bytes = get_storage_data(self.web3, self.checksum_address, slot) - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - var_name_struct_or_array_var, - self.convert_value_to_type(hex_bytes, size, offset, type_string), - ] - ) + hex_bytes = get_storage_data( + self.web3, self.checksum_address, int.to_bytes(slot, 32, byteorder="big") + ) + tabulate_data.append( + [ + slot, + offset, + size, + type_string, + var_name_struct_or_array_var, + self.convert_value_to_type(hex_bytes, size, offset, type_string), + ] + ) print( tabulate( @@ -424,15 +437,22 @@ class SlitherReadStorage: """ slot = int.from_bytes(slot, "big") offset = 0 + type_to = "" + size = 0 # TODO: find out what size should return here? (montyly) for var in elems: - size = var.type.size - if offset >= 256: - slot += 1 - offset = 0 - if struct_var == var.name: - type_to = var.type.name - break # found struct var - offset += size + var_type = var.type + if isinstance(var_type, ElementaryType): + size_ = var_type.size + if size_: + if offset >= 256: + slot += 1 + offset = 0 + if struct_var == var.name: + type_to = var_type.name + break # found struct var + offset += size + else: + print(f'{type(var_type)} is current not implemented in structure') slot = int.to_bytes(slot, 32, byteorder="big") info = f"\nStruct Variable: {struct_var}" @@ -441,12 +461,12 @@ class SlitherReadStorage: # pylint: disable=too-many-branches @staticmethod def _find_array_slot( - target_variable: StateVariable, + target_variable_type: ArrayType, slot: bytes, key: int, deep_key: int = None, struct_var: str = None, - ) -> Tuple[str, str, bytes]: + ) -> Tuple[str, str, bytes, int, int]: """Finds the slot of array's index. Args: target_variable (`StateVariable`): The array that contains the target variable. @@ -458,31 +478,35 @@ class SlitherReadStorage: info (str): Info about the target variable to log. type_to (str): The type of the target variable. slot (bytes): The storage location of the target variable. + size (int): The size + offset (int): The offset """ info = f"\nKey: {key}" offset = 0 size = 256 - if is_array( - target_variable.type.type + target_variable_type_type = target_variable_type.type + + if isinstance( + target_variable_type_type, ArrayType ): # multidimensional array uint[i][], , uint[][i], or uint[][] - size = target_variable.type.type.type.size - type_to = target_variable.type.type.type.name + size = target_variable_type_type.type.size + type_to = target_variable_type_type.type.name - if target_variable.type.is_fixed_array: # uint[][i] + if target_variable_type.is_fixed_array: # uint[][i] slot_int = int.from_bytes(slot, "big") + int(key) else: slot = keccak(slot) key = int(key) - if target_variable.type.type.is_fixed_array: # arr[i][] - key *= int(str(target_variable.type.type.length)) + if target_variable_type_type.is_fixed_array: # arr[i][] + key *= int(str(target_variable_type_type.length)) slot_int = int.from_bytes(slot, "big") + key if not deep_key: return info, type_to, int.to_bytes(slot_int, 32, "big"), size, offset info += f"\nDeep Key: {deep_key}" - if target_variable.type.type.is_dynamic_array: # uint[][] + if target_variable_type_type.is_dynamic_array: # uint[][] # keccak256(keccak256(slot) + index) + floor(j / floor(256 / size)) slot = keccak(int.to_bytes(slot_int, 32, "big")) slot_int = int.from_bytes(slot, "big") @@ -490,13 +514,13 @@ class SlitherReadStorage: # keccak256(slot) + index + floor(j / floor(256 / size)) slot_int += floor(int(deep_key) / floor(256 / size)) # uint[i][] - elif target_variable.type.is_fixed_array: + elif target_variable_type.is_fixed_array: slot_int = int.from_bytes(slot, "big") + int(key) - if is_user_defined_type(target_variable.type.type): # struct[i] - type_to = target_variable.type.type.type.name + if isinstance(target_variable_type_type, UserDefinedType): # struct[i] + type_to = target_variable_type_type.type.name if not struct_var: return info, type_to, int.to_bytes(slot_int, 32, "big"), size, offset - elems = target_variable.type.type.type.elems_ordered + elems = target_variable_type_type.type.elems_ordered slot = int.to_bytes(slot_int, 32, byteorder="big") info_tmp, type_to, slot, size, offset = SlitherReadStorage._find_struct_var_slot( elems, slot, struct_var @@ -504,16 +528,16 @@ class SlitherReadStorage: info += info_tmp else: - type_to = target_variable.type.type.name - size = target_variable.type.type.size # bits + type_to = target_variable_type_type.name + size = ttarget_variable_type_type.size # bits - elif is_user_defined_type(target_variable.type.type): # struct[] + elif isinstance(target_variable_type_type, UserDefinedType): # struct[] slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) - type_to = target_variable.type.type.type.name + type_to = target_variable_type_type.type.name if not struct_var: return info, type_to, int.to_bytes(slot_int, 32, "big"), size, offset - elems = target_variable.type.type.type.elems_ordered + elems = target_variable_type_type.type.elems_ordered slot = int.to_bytes(slot_int, 32, byteorder="big") info_tmp, type_to, slot, size, offset = SlitherReadStorage._find_struct_var_slot( elems, slot, struct_var @@ -523,8 +547,8 @@ class SlitherReadStorage: else: slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) - type_to = target_variable.type.type.name - size = target_variable.type.type.size # bits + type_to = target_variable_type_type.name + size = target_variable_type_type.size # bits slot = int.to_bytes(slot_int, 32, byteorder="big") @@ -631,7 +655,7 @@ class SlitherReadStorage: @staticmethod def convert_value_to_type( hex_bytes: HexBytes, size: int, offset: int, type_to: str - ) -> Union[int, bool, str, ChecksumAddress, hex]: + ) -> Union[int, bool, str, ChecksumAddress]: """Convert slot data to type representation.""" # Account for storage packing offset_hex_bytes = get_offset_value(hex_bytes, offset, size) @@ -643,14 +667,11 @@ class SlitherReadStorage: return value def _all_struct_slots( - self, var: Union[StructureVariable, StructureContract], contract: Contract, key=None + self, var: StateVariable, st: Structure, contract: Contract, key=None ) -> Dict[str, SlotInfo]: """Retrieves all members of a struct.""" - if isinstance(var.type.type, StructureContract): - struct_elems = var.type.type.elems_ordered - else: - struct_elems = var.type.type.type.elems_ordered - data = {} + struct_elems = st.elems_ordered + data: Dict[str, SlotInfo] = {} for elem in struct_elems: info = self.get_storage_slot( var, @@ -658,17 +679,18 @@ class SlitherReadStorage: key=key, struct_var=elem.name, ) - data[elem.name] = info + if info: + data[elem.name] = info return data def _all_array_slots( - self, var: ArrayType, contract: Contract, type_: Type, slot: int + self, var: StateVariable, contract: Contract, type_: Type, slot: int ) -> Dict[int, SlotInfo]: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) - elems = {} - if is_user_defined_type(type_.type): + elems: Dict[int, SlotInfo] = {} + if isinstance(type_, UserDefinedType): for i in range(min(array_length, self.max_depth)): elems[i] = self._all_struct_slots(var, contract, key=str(i)) continue @@ -680,28 +702,29 @@ class SlitherReadStorage: contract, key=str(i), ) - elems[i] = info - - if is_array(type_.type): # multidimensional array - array_length = self._get_array_length(type_.type, info["slot"]) - - elems[i]["elems"] = {} - for j in range(min(array_length, self.max_depth)): - info = self.get_storage_slot( - var, - contract, - key=str(i), - deep_key=str(j), - ) - - elems[i]["elems"][j] = info + if info: + elems[i] = info + + if isinstance(type_.type, ArrayType): # multidimensional array + array_length = self._get_array_length(type_.type, info["slot"]) + + elems[i].elems = {} + for j in range(min(array_length, self.max_depth)): + info = self.get_storage_slot( + var, + contract, + key=str(i), + deep_key=str(j), + ) + + elems[i].elems[j] = info return elems - def _get_array_length(self, type_: Type, slot: int = None) -> int: + def _get_array_length(self, type_: Type, slot: int) -> int: """Gets the length of dynamic and fixed arrays. Args: type_ (`Type`): The array type. - slot (int, optional): Slot a dynamic array's length is stored at. + slot (int): Slot a dynamic array's length is stored at. Returns: (int): The length of the array. """ @@ -709,8 +732,13 @@ class SlitherReadStorage: if self.rpc: # The length of dynamic arrays is stored at the starting slot. # Convert from hexadecimal to decimal. - val = int(get_storage_data(self.web3, self.checksum_address, slot).hex(), 16) - if is_array(type_): + val = int( + get_storage_data( + self.web3, self.checksum_address, int.to_bytes(slot, 32, byteorder="big") + ).hex(), + 16, + ) + if isinstance(type_, ArrayType): if type_.is_fixed_array: val = int(str(type_.length)) diff --git a/slither/tools/read_storage/utils/__init__.py b/slither/tools/read_storage/utils/__init__.py index 5d1cb0d74..2fb43c8b8 100644 --- a/slither/tools/read_storage/utils/__init__.py +++ b/slither/tools/read_storage/utils/__init__.py @@ -1,10 +1,4 @@ from .utils import ( - is_elementary, - is_array, - is_enum, - is_mapping, - is_struct, - is_user_defined_type, get_offset_value, get_storage_data, coerce_type, diff --git a/slither/tools/read_storage/utils/utils.py b/slither/tools/read_storage/utils/utils.py index e14d763d8..0d5c860b2 100644 --- a/slither/tools/read_storage/utils/utils.py +++ b/slither/tools/read_storage/utils/utils.py @@ -1,42 +1,8 @@ -from typing import Union +from typing import Union, Type, List, Optional from hexbytes import HexBytes from eth_typing.evm import ChecksumAddress from eth_utils import to_int, to_text, to_checksum_address -from slither.core.declarations import Structure, Enum -from slither.core.solidity_types import ArrayType, MappingType, UserDefinedType, ElementaryType -from slither.core.variables.state_variable import StateVariable - - -def is_elementary(variable: StateVariable) -> bool: - """Returns whether variable is an elementary type.""" - return isinstance(variable, ElementaryType) - - -def is_array(variable: StateVariable) -> bool: - """Returns whether variable is an array.""" - return isinstance(variable, ArrayType) - - -def is_mapping(variable: StateVariable) -> bool: - """Returns whether variable is a mapping.""" - return isinstance(variable, MappingType) - - -def is_struct(variable: StateVariable) -> bool: - """Returns whether variable is a struct.""" - return isinstance(variable, Structure) - - -def is_enum(variable: StateVariable) -> bool: - """Returns whether variable is an enum.""" - return isinstance(variable, Enum) - - -def is_user_defined_type(variable: StateVariable) -> bool: - """Returns whether variable is a struct.""" - return isinstance(variable, UserDefinedType) - def get_offset_value(hex_bytes: HexBytes, offset: int, size: int) -> bytes: """ @@ -58,7 +24,7 @@ def get_offset_value(hex_bytes: HexBytes, offset: int, size: int) -> bytes: return value -def coerce_type(solidity_type: str, value: bytes) -> Union[int, bool, str, ChecksumAddress, hex]: +def coerce_type(solidity_type: str, value: bytes) -> Union[int, bool, str, ChecksumAddress]: """ Converts input to the indicated type. Args: From e917a8fd90b4185199426d42c6f1d761d0199d52 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 28 Jul 2022 11:22:26 +0200 Subject: [PATCH 113/202] Minor --- slither/tools/read_storage/read_storage.py | 32 ++++++++++++---------- slither/tools/read_storage/utils/utils.py | 5 ++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 304b4fcfc..5df5b35bc 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -1,9 +1,7 @@ -import json -import sys import logging +import sys from math import floor from os import environ - from typing import Callable, Optional, Tuple, Union, List, Dict try: @@ -35,11 +33,11 @@ except ImportError: print("$ pip3 install tabulate --user\n") sys.exit(-1) -from dataclasses import dataclass, field, asdict +from dataclasses import dataclass, field from slither.core.solidity_types.type import Type from slither.core.solidity_types import ArrayType, ElementaryType, UserDefinedType, MappingType -from slither.core.declarations import Contract, StructureContract, Structure +from slither.core.declarations import Contract, Structure from slither.core.variables.state_variable import StateVariable from slither.core.variables.structure_variable import StructureVariable @@ -438,7 +436,7 @@ class SlitherReadStorage: slot = int.from_bytes(slot, "big") offset = 0 type_to = "" - size = 0 # TODO: find out what size should return here? (montyly) + size = 0 # TODO: find out what size should return here? (montyly) for var in elems: var_type = var.type if isinstance(var_type, ElementaryType): @@ -452,7 +450,7 @@ class SlitherReadStorage: break # found struct var offset += size else: - print(f'{type(var_type)} is current not implemented in structure') + print(f"{type(var_type)} is current not implemented in structure") slot = int.to_bytes(slot, 32, byteorder="big") info = f"\nStruct Variable: {struct_var}" @@ -529,7 +527,7 @@ class SlitherReadStorage: else: type_to = target_variable_type_type.name - size = ttarget_variable_type_type.size # bits + size = target_variable_type_type.size # bits elif isinstance(target_variable_type_type, UserDefinedType): # struct[] slot = keccak(slot) @@ -590,7 +588,7 @@ class SlitherReadStorage: key = coerce_type(key_type, key) slot = keccak(encode_abi([key_type, "uint256"], [key, decode_single("uint256", slot)])) - if is_user_defined_type(target_variable.type.type_to) and is_struct( + if isinstance(target_variable.type.type_to, UserDefinedType) and is_struct( target_variable.type.type_to.type ): # mapping(elem => struct) assert struct_var @@ -600,7 +598,9 @@ class SlitherReadStorage: ) info += info_tmp - elif is_mapping(target_variable.type.type_to): # mapping(elem => mapping(elem => ???)) + elif isinstance( + target_variable.type.type_to, MappingType + ): # mapping(elem => mapping(elem => ???)) assert deep_key key_type = target_variable.type.type_to.type_from.name if "int" in key_type: # without this eth_utils encoding fails @@ -615,7 +615,7 @@ class SlitherReadStorage: size = byte_size * 8 # bits offset = 0 - if is_user_defined_type(target_variable.type.type_to.type_to) and is_struct( + if isinstance(target_variable.type.type_to.type_to, UserDefinedType) and is_struct( target_variable.type.type_to.type_to.type ): # mapping(elem => mapping(elem => struct)) assert struct_var @@ -691,9 +691,13 @@ class SlitherReadStorage: array_length = self._get_array_length(type_, slot) elems: Dict[int, SlotInfo] = {} if isinstance(type_, UserDefinedType): - for i in range(min(array_length, self.max_depth)): - elems[i] = self._all_struct_slots(var, contract, key=str(i)) - continue + st = type_.type + if isinstance(st, Structure): + for i in range(min(array_length, self.max_depth)): + # TODO: figure out why _all_struct_slots returns a Dict[str, SlotInfo] + # but this expect a SlotInfo (montyly) + elems[i] = self._all_struct_slots(var, st, key=str(i)) + continue else: for i in range(min(array_length, self.max_depth)): diff --git a/slither/tools/read_storage/utils/utils.py b/slither/tools/read_storage/utils/utils.py index 0d5c860b2..d9f38d0f0 100644 --- a/slither/tools/read_storage/utils/utils.py +++ b/slither/tools/read_storage/utils/utils.py @@ -1,7 +1,8 @@ -from typing import Union, Type, List, Optional -from hexbytes import HexBytes +from typing import Union + from eth_typing.evm import ChecksumAddress from eth_utils import to_int, to_text, to_checksum_address +from hexbytes import HexBytes def get_offset_value(hex_bytes: HexBytes, offset: int, size: int) -> bytes: From c57acfdde7ed7f7747eaa56bc38b63e9c5b01097 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 28 Jul 2022 11:38:40 +0200 Subject: [PATCH 114/202] Fix get_slot_values + minor improvements --- slither/tools/read_storage/read_storage.py | 56 ++++++++-------------- 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 5df5b35bc..89af17218 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -4,12 +4,6 @@ from math import floor from os import environ from typing import Callable, Optional, Tuple, Union, List, Dict -try: - from typing import TypedDict -except ImportError: - # < Python 3.8 - from typing_extensions import TypedDict - try: from web3 import Web3 from eth_typing.evm import ChecksumAddress @@ -130,6 +124,8 @@ class SlitherReadStorage: self._slot_info = tmp + # TODO: remove this pylint exception (montyly) + # pylint: disable=too-many-locals def get_storage_slot( self, target_variable: StateVariable, @@ -226,24 +222,18 @@ class SlitherReadStorage: var, contract, **kwargs ) - def get_slot_values(self) -> Dict[str, SlotInfo]: + def get_slot_values(self) -> None: """ - Fetches the slot values and inserts them in slot info dictionary. - Returns: - (`SlotInfo`): The dictionary of slot info. + Fetches the slot values """ - stack = list(self.slot_info.items()) - while stack: - _, v = stack.pop() - if isinstance(v, dict): - stack.extend(v.items()) - if "slot" in v: - hex_bytes = get_storage_data(self.web3, self.checksum_address, v["slot"]) - v["value"] = self.convert_value_to_type( - hex_bytes, v["size"], v["offset"], v["type_string"] - ) - logger.info(f"\nValue: {v['value']}\n") - return self.slot_info + for slot_info in self.slot_info.values(): + hex_bytes = get_storage_data( + self.web3, self.checksum_address, int.to_bytes(slot_info.slot, 32, byteorder="big") + ) + slot_info.value = self.convert_value_to_type( + hex_bytes, slot_info.size, slot_info.offset, slot_info.type_string + ) + logger.info(f"\nValue: {slot_info.value}\n") def get_all_storage_variables(self, func: Callable = None) -> None: """Fetches all storage variables from a list of contracts. @@ -359,16 +349,13 @@ class SlitherReadStorage: type_string = item.type_string struct_var = item.struct_var - # doesn't handle deep keys currently - var_name_struct_or_array_var = f"{var} -> {struct_var}" - tabulate_data.append( [ slot, offset, size, type_string, - var_name_struct_or_array_var, + f"{var} -> {struct_var}", # doesn't handle deep keys currently self.convert_value_to_type( get_storage_data( self.web3, @@ -392,9 +379,6 @@ class SlitherReadStorage: type_string = item.type_string struct_var = item.struct_var - # doesn't handle deep keys currently - var_name_struct_or_array_var = f"{var}[{item_key}] -> {struct_var}" - hex_bytes = get_storage_data( self.web3, self.checksum_address, int.to_bytes(slot, 32, byteorder="big") ) @@ -404,7 +388,7 @@ class SlitherReadStorage: offset, size, type_string, - var_name_struct_or_array_var, + f"{var}[{item_key}] -> {struct_var}", # doesn't handle deep keys currently self.convert_value_to_type(hex_bytes, size, offset, type_string), ] ) @@ -588,8 +572,8 @@ class SlitherReadStorage: key = coerce_type(key_type, key) slot = keccak(encode_abi([key_type, "uint256"], [key, decode_single("uint256", slot)])) - if isinstance(target_variable.type.type_to, UserDefinedType) and is_struct( - target_variable.type.type_to.type + if isinstance(target_variable.type.type_to, UserDefinedType) and isinstance( + target_variable.type.type_to.type, Structure ): # mapping(elem => struct) assert struct_var elems = target_variable.type.type_to.type.elems_ordered @@ -615,8 +599,8 @@ class SlitherReadStorage: size = byte_size * 8 # bits offset = 0 - if isinstance(target_variable.type.type_to.type_to, UserDefinedType) and is_struct( - target_variable.type.type_to.type_to.type + if isinstance(target_variable.type.type_to.type_to, UserDefinedType) and isinstance( + target_variable.type.type_to.type_to.type, Structure ): # mapping(elem => mapping(elem => struct)) assert struct_var elems = target_variable.type.type_to.type_to.type.elems_ordered @@ -696,7 +680,7 @@ class SlitherReadStorage: for i in range(min(array_length, self.max_depth)): # TODO: figure out why _all_struct_slots returns a Dict[str, SlotInfo] # but this expect a SlotInfo (montyly) - elems[i] = self._all_struct_slots(var, st, key=str(i)) + elems[i] = self._all_struct_slots(var, st, contract, key=str(i)) continue else: @@ -710,7 +694,7 @@ class SlitherReadStorage: elems[i] = info if isinstance(type_.type, ArrayType): # multidimensional array - array_length = self._get_array_length(type_.type, info["slot"]) + array_length = self._get_array_length(type_.type, info.slot) elems[i].elems = {} for j in range(min(array_length, self.max_depth)): From 46cb8a5cd24908d41a254cc05ca3755eeb2db8ee Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 28 Jul 2022 11:45:00 +0200 Subject: [PATCH 115/202] Fix test_read_storage.py --- tests/test_read_storage.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/test_read_storage.py b/tests/test_read_storage.py index 0dbbb5bf2..157394000 100644 --- a/tests/test_read_storage.py +++ b/tests/test_read_storage.py @@ -1,3 +1,4 @@ +import dataclasses import re import os import sys @@ -14,6 +15,7 @@ from slither.tools.read_storage import SlitherReadStorage try: from web3 import Web3 + from web3.contract import Contract except ImportError: print("ERROR: in order to use slither-read-storage, you need to install web3") print("$ pip3 install web3 --user\n") @@ -67,14 +69,14 @@ def fixture_ganache() -> Generator[GanacheInstance, None, None]: p.wait() -def get_source_file(file_path): +def get_source_file(file_path) -> str: with open(file_path, "r", encoding="utf8") as f: source = f.read() return source -def deploy_contract(w3, ganache, contract_bin, contract_abi): +def deploy_contract(w3, ganache, contract_bin, contract_abi) -> Contract: """Deploy contract to the local ganache network""" signed_txn = w3.eth.account.sign_transaction( dict( @@ -96,7 +98,7 @@ def deploy_contract(w3, ganache, contract_bin, contract_abi): # pylint: disable=too-many-locals @pytest.mark.usefixtures("web3", "ganache") -def test_read_storage(web3, ganache): +def test_read_storage(web3, ganache) -> None: assert web3.isConnected() bin_path = os.path.join(STORAGE_TEST_ROOT, "StorageLayout.bin") abi_path = os.path.join(STORAGE_TEST_ROOT, "StorageLayout.abi") @@ -116,7 +118,8 @@ def test_read_storage(web3, ganache): srs.get_storage_layout() srs.get_slot_values() with open("storage_layout.json", "w", encoding="utf-8") as file: - json.dump(srs.slot_info, file, indent=4) + slot_infos_json = {key: dataclasses.asdict(value) for key, value in srs.slot_info.items()} + json.dump(slot_infos_json, file, indent=4) expected_file = os.path.join(STORAGE_TEST_ROOT, "TEST_storage_layout.json") actual_file = os.path.join(SLITHER_ROOT, "storage_layout.json") From 485e4a9674ba6f492afae332f6eb5edb0a90a000 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 28 Jul 2022 15:16:42 +0200 Subject: [PATCH 116/202] Additional improvements - CI still failing --- slither/tools/read_storage/read_storage.py | 141 +++++++++++---------- tests/test_read_storage.py | 4 +- 2 files changed, 74 insertions(+), 71 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 89af17218..f961557ef 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -2,7 +2,7 @@ import logging import sys from math import floor from os import environ -from typing import Callable, Optional, Tuple, Union, List, Dict +from typing import Callable, Optional, Tuple, Union, List, Dict, Any try: from web3 import Web3 @@ -31,7 +31,7 @@ from dataclasses import dataclass, field from slither.core.solidity_types.type import Type from slither.core.solidity_types import ArrayType, ElementaryType, UserDefinedType, MappingType -from slither.core.declarations import Contract, Structure +from slither.core.declarations import Contract, Structure, StructureContract from slither.core.variables.state_variable import StateVariable from slither.core.variables.structure_variable import StructureVariable @@ -47,7 +47,8 @@ class SlotInfo: size: int offset: int value: Optional[Union[int, bool, str, ChecksumAddress]] = None - elems: Dict[int, "SlotInfo"] = field(default_factory=lambda: {}) + # For structure, str->SlotInfo, for array, str-> SlotInfo + elems: Dict[str, "SlotInfo"] = field(default_factory=lambda: {}) struct_var: Optional[str] = None @@ -116,9 +117,8 @@ class SlitherReadStorage: tmp[var.name] = info if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): tmp[var.name].elems = self._all_struct_slots(var, type_.type, contract) - continue - if isinstance(type_, ArrayType): + elif isinstance(type_, ArrayType): elems = self._all_array_slots(var, contract, type_, info.slot) tmp[var.name].elems = elems @@ -127,27 +127,27 @@ class SlitherReadStorage: # TODO: remove this pylint exception (montyly) # pylint: disable=too-many-locals def get_storage_slot( - self, - target_variable: StateVariable, - contract: Contract, - **kwargs, + self, + target_variable: StateVariable, + contract: Contract, + **kwargs: Any, ) -> Union[SlotInfo, None]: """Finds the storage slot of a variable in a given contract. Args: target_variable (`StateVariable`): The variable to retrieve the slot for. contracts (`Contract`): The contract that contains the given state variable. **kwargs: - key (str): Key of a mapping or index position if an array. - deep_key (str): Key of a mapping embedded within another mapping or + key (int): Key of a mapping or index position if an array. + deep_key (int): Key of a mapping embedded within another mapping or secondary index if array. struct_var (str): Structure variable name. Returns: (`SlotInfo`) | None : A dictionary of the slot information. """ - key = kwargs.get("key", None) - deep_key = kwargs.get("deep_key", None) - struct_var = kwargs.get("struct_var", None) + key: Optional[int] = kwargs.get("key", None) + deep_key: Optional[int]= kwargs.get("deep_key", None) + struct_var: Optional[str] = kwargs.get("struct_var", None) info: str var_log_name = target_variable.name try: @@ -178,7 +178,9 @@ class SlitherReadStorage: elif isinstance(target_variable_type, UserDefinedType) and struct_var: var_log_name = struct_var - elems = target_variable_type.type.elems_ordered + target_variable_type_type = target_variable_type.type + assert isinstance(target_variable_type_type, Structure) + elems = target_variable_type_type.elems_ordered info, type_to, slot, size, offset = self._find_struct_var_slot(elems, slot, struct_var) self.log += info @@ -226,7 +228,11 @@ class SlitherReadStorage: """ Fetches the slot values """ - for slot_info in self.slot_info.values(): + stack = list(self.slot_info.values()) + while stack: + slot_info = stack.pop() + if slot_info.elems: + stack.extend(slot_info.elems.values()) hex_bytes = get_storage_data( self.web3, self.checksum_address, int.to_bytes(slot_info.slot, 32, byteorder="big") ) @@ -269,12 +275,12 @@ class SlitherReadStorage: if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): tabulate_data.pop() - for item in info.elems: - slot = info.elems[item].slot - offset = info.elems[item].offset - size = info.elems[item].size - type_string = info.elems[item].type_string - struct_var = info.elems[item].struct_var + for item in info.elems.values(): + slot = item.slot + offset = item.offset + size = item.size + type_string = item.type_string + struct_var = item.struct_var # doesn't handle deep keys currently var_name_struct_or_array_var = f"{var} -> {struct_var}" @@ -285,20 +291,19 @@ class SlitherReadStorage: if isinstance(type_, ArrayType): tabulate_data.pop() - for item in info.elems: - for elem in info.elems.values(): - slot = elem.slot - offset = elem.offset - size = elem.size - type_string = elem.type_string - struct_var = elem.struct_var + for item_key, item in info.elems.items(): + slot = item.slot + offset = item.offset + size = item.size + type_string = item.type_string + struct_var = item.struct_var - # doesn't handle deep keys currently - var_name_struct_or_array_var = f"{var}[{item}] -> {struct_var}" + # doesn't handle deep keys currently + var_name_struct_or_array_var = f"{var}[{item_key}] -> {struct_var}" - tabulate_data.append( - [slot, offset, size, type_string, var_name_struct_or_array_var] - ) + tabulate_data.append( + [slot, offset, size, type_string, var_name_struct_or_array_var] + ) print( tabulate( @@ -403,12 +408,12 @@ class SlitherReadStorage: @staticmethod def _find_struct_var_slot( - elems: List[StructureVariable], slot: bytes, struct_var: str + elems: List[StructureVariable], slot_as_bytes: bytes, struct_var: str ) -> Tuple[str, str, bytes, int, int]: """Finds the slot of a structure variable. Args: elems (List[StructureVariable]): Ordered list of structure variables. - slot (bytes): The slot of the struct to begin searching at. + slot_as_bytes (bytes): The slot of the struct to begin searching at. struct_var (str): The target structure variable. Returns: info (str): Info about the target variable to log. @@ -417,15 +422,15 @@ class SlitherReadStorage: size (int): The size (in bits) of the target variable. offset (int): The size of other variables that share the same slot. """ - slot = int.from_bytes(slot, "big") + slot = int.from_bytes(slot_as_bytes, "big") offset = 0 type_to = "" - size = 0 # TODO: find out what size should return here? (montyly) + size = 0 for var in elems: var_type = var.type if isinstance(var_type, ElementaryType): - size_ = var_type.size - if size_: + size = var_type.size + if size: if offset >= 256: slot += 1 offset = 0 @@ -434,20 +439,20 @@ class SlitherReadStorage: break # found struct var offset += size else: - print(f"{type(var_type)} is current not implemented in structure") + logger.info(f"{type(var_type)} is current not implemented in _find_struct_var_slot") - slot = int.to_bytes(slot, 32, byteorder="big") + slot_as_bytes = int.to_bytes(slot, 32, byteorder="big") info = f"\nStruct Variable: {struct_var}" - return info, type_to, slot, size, offset + return info, type_to, slot_as_bytes, size, offset # pylint: disable=too-many-branches @staticmethod def _find_array_slot( - target_variable_type: ArrayType, - slot: bytes, - key: int, - deep_key: int = None, - struct_var: str = None, + target_variable_type: ArrayType, + slot: bytes, + key: int, + deep_key: int = None, + struct_var: str = None, ) -> Tuple[str, str, bytes, int, int]: """Finds the slot of array's index. Args: @@ -470,7 +475,7 @@ class SlitherReadStorage: target_variable_type_type = target_variable_type.type if isinstance( - target_variable_type_type, ArrayType + target_variable_type_type, ArrayType ): # multidimensional array uint[i][], , uint[][i], or uint[][] size = target_variable_type_type.type.size type_to = target_variable_type_type.type.name @@ -538,11 +543,11 @@ class SlitherReadStorage: @staticmethod def _find_mapping_slot( - target_variable: StateVariable, - slot: bytes, - key: Union[int, str], - deep_key: Union[int, str] = None, - struct_var: str = None, + target_variable: StateVariable, + slot: bytes, + key: Union[int, str], + deep_key: Union[int, str] = None, + struct_var: str = None, ) -> Tuple[str, str, bytes, int, int]: """Finds the data slot of a target variable within a mapping. target_variable (`StateVariable`): The mapping that contains the target variable. @@ -573,7 +578,7 @@ class SlitherReadStorage: slot = keccak(encode_abi([key_type, "uint256"], [key, decode_single("uint256", slot)])) if isinstance(target_variable.type.type_to, UserDefinedType) and isinstance( - target_variable.type.type_to.type, Structure + target_variable.type.type_to.type, Structure ): # mapping(elem => struct) assert struct_var elems = target_variable.type.type_to.type.elems_ordered @@ -583,7 +588,7 @@ class SlitherReadStorage: info += info_tmp elif isinstance( - target_variable.type.type_to, MappingType + target_variable.type.type_to, MappingType ): # mapping(elem => mapping(elem => ???)) assert deep_key key_type = target_variable.type.type_to.type_from.name @@ -600,7 +605,7 @@ class SlitherReadStorage: offset = 0 if isinstance(target_variable.type.type_to.type_to, UserDefinedType) and isinstance( - target_variable.type.type_to.type_to.type, Structure + target_variable.type.type_to.type_to.type, Structure ): # mapping(elem => mapping(elem => struct)) assert struct_var elems = target_variable.type.type_to.type_to.type.elems_ordered @@ -621,7 +626,7 @@ class SlitherReadStorage: @staticmethod def get_variable_info( - contract: Contract, target_variable: StateVariable + contract: Contract, target_variable: StateVariable ) -> Tuple[int, int, int, str]: """Return slot, size, offset, and type.""" type_to = str(target_variable.type) @@ -638,7 +643,7 @@ class SlitherReadStorage: @staticmethod def convert_value_to_type( - hex_bytes: HexBytes, size: int, offset: int, type_to: str + hex_bytes: HexBytes, size: int, offset: int, type_to: str ) -> Union[int, bool, str, ChecksumAddress]: """Convert slot data to type representation.""" # Account for storage packing @@ -651,7 +656,7 @@ class SlitherReadStorage: return value def _all_struct_slots( - self, var: StateVariable, st: Structure, contract: Contract, key=None + self, var: StateVariable, st: Structure, contract: Contract, key: Optional[int] = None ) -> Dict[str, SlotInfo]: """Retrieves all members of a struct.""" struct_elems = st.elems_ordered @@ -669,19 +674,18 @@ class SlitherReadStorage: return data def _all_array_slots( - self, var: StateVariable, contract: Contract, type_: Type, slot: int - ) -> Dict[int, SlotInfo]: + self, var: StateVariable, contract: Contract, type_: Type, slot: int + ) -> Dict[str, SlotInfo]: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) - elems: Dict[int, SlotInfo] = {} + elems: Dict[str, SlotInfo] = {} if isinstance(type_, UserDefinedType): st = type_.type if isinstance(st, Structure): for i in range(min(array_length, self.max_depth)): # TODO: figure out why _all_struct_slots returns a Dict[str, SlotInfo] # but this expect a SlotInfo (montyly) - elems[i] = self._all_struct_slots(var, st, contract, key=str(i)) - continue + elems[str(i)] = self._all_struct_slots(var, st, contract, key=i) else: for i in range(min(array_length, self.max_depth)): @@ -691,12 +695,11 @@ class SlitherReadStorage: key=str(i), ) if info: - elems[i] = info + elems[str(i)] = info if isinstance(type_.type, ArrayType): # multidimensional array array_length = self._get_array_length(type_.type, info.slot) - elems[i].elems = {} for j in range(min(array_length, self.max_depth)): info = self.get_storage_slot( var, @@ -704,8 +707,8 @@ class SlitherReadStorage: key=str(i), deep_key=str(j), ) - - elems[i].elems[j] = info + if info: + elems[str(i)].elems[str(j)] = info return elems def _get_array_length(self, type_: Type, slot: int) -> int: diff --git a/tests/test_read_storage.py b/tests/test_read_storage.py index 157394000..3b1aaa823 100644 --- a/tests/test_read_storage.py +++ b/tests/test_read_storage.py @@ -135,8 +135,8 @@ def test_read_storage(web3, ganache) -> None: path_list = re.findall(r"\['(.*?)'\]", change.path()) path = "_".join(path_list) with open(f"{path}_expected.txt", "w", encoding="utf8") as f: - f.write(change.t1) + f.write(str(change.t1)) with open(f"{path}_actual.txt", "w", encoding="utf8") as f: - f.write(change.t2) + f.write(str(change.t2)) assert not diff From 14ae013c9a36ae79df3d52ea71d6a2a38f47c235 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 28 Jul 2022 15:32:31 +0200 Subject: [PATCH 117/202] black & pylint --- slither/tools/read_storage/read_storage.py | 52 +++++++++++----------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index f961557ef..96365dcf8 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -31,7 +31,7 @@ from dataclasses import dataclass, field from slither.core.solidity_types.type import Type from slither.core.solidity_types import ArrayType, ElementaryType, UserDefinedType, MappingType -from slither.core.declarations import Contract, Structure, StructureContract +from slither.core.declarations import Contract, Structure from slither.core.variables.state_variable import StateVariable from slither.core.variables.structure_variable import StructureVariable @@ -127,10 +127,10 @@ class SlitherReadStorage: # TODO: remove this pylint exception (montyly) # pylint: disable=too-many-locals def get_storage_slot( - self, - target_variable: StateVariable, - contract: Contract, - **kwargs: Any, + self, + target_variable: StateVariable, + contract: Contract, + **kwargs: Any, ) -> Union[SlotInfo, None]: """Finds the storage slot of a variable in a given contract. Args: @@ -146,7 +146,7 @@ class SlitherReadStorage: """ key: Optional[int] = kwargs.get("key", None) - deep_key: Optional[int]= kwargs.get("deep_key", None) + deep_key: Optional[int] = kwargs.get("deep_key", None) struct_var: Optional[str] = kwargs.get("struct_var", None) info: str var_log_name = target_variable.name @@ -408,7 +408,7 @@ class SlitherReadStorage: @staticmethod def _find_struct_var_slot( - elems: List[StructureVariable], slot_as_bytes: bytes, struct_var: str + elems: List[StructureVariable], slot_as_bytes: bytes, struct_var: str ) -> Tuple[str, str, bytes, int, int]: """Finds the slot of a structure variable. Args: @@ -448,11 +448,11 @@ class SlitherReadStorage: # pylint: disable=too-many-branches @staticmethod def _find_array_slot( - target_variable_type: ArrayType, - slot: bytes, - key: int, - deep_key: int = None, - struct_var: str = None, + target_variable_type: ArrayType, + slot: bytes, + key: int, + deep_key: int = None, + struct_var: str = None, ) -> Tuple[str, str, bytes, int, int]: """Finds the slot of array's index. Args: @@ -475,7 +475,7 @@ class SlitherReadStorage: target_variable_type_type = target_variable_type.type if isinstance( - target_variable_type_type, ArrayType + target_variable_type_type, ArrayType ): # multidimensional array uint[i][], , uint[][i], or uint[][] size = target_variable_type_type.type.size type_to = target_variable_type_type.type.name @@ -543,11 +543,11 @@ class SlitherReadStorage: @staticmethod def _find_mapping_slot( - target_variable: StateVariable, - slot: bytes, - key: Union[int, str], - deep_key: Union[int, str] = None, - struct_var: str = None, + target_variable: StateVariable, + slot: bytes, + key: Union[int, str], + deep_key: Union[int, str] = None, + struct_var: str = None, ) -> Tuple[str, str, bytes, int, int]: """Finds the data slot of a target variable within a mapping. target_variable (`StateVariable`): The mapping that contains the target variable. @@ -578,7 +578,7 @@ class SlitherReadStorage: slot = keccak(encode_abi([key_type, "uint256"], [key, decode_single("uint256", slot)])) if isinstance(target_variable.type.type_to, UserDefinedType) and isinstance( - target_variable.type.type_to.type, Structure + target_variable.type.type_to.type, Structure ): # mapping(elem => struct) assert struct_var elems = target_variable.type.type_to.type.elems_ordered @@ -588,7 +588,7 @@ class SlitherReadStorage: info += info_tmp elif isinstance( - target_variable.type.type_to, MappingType + target_variable.type.type_to, MappingType ): # mapping(elem => mapping(elem => ???)) assert deep_key key_type = target_variable.type.type_to.type_from.name @@ -605,7 +605,7 @@ class SlitherReadStorage: offset = 0 if isinstance(target_variable.type.type_to.type_to, UserDefinedType) and isinstance( - target_variable.type.type_to.type_to.type, Structure + target_variable.type.type_to.type_to.type, Structure ): # mapping(elem => mapping(elem => struct)) assert struct_var elems = target_variable.type.type_to.type_to.type.elems_ordered @@ -626,7 +626,7 @@ class SlitherReadStorage: @staticmethod def get_variable_info( - contract: Contract, target_variable: StateVariable + contract: Contract, target_variable: StateVariable ) -> Tuple[int, int, int, str]: """Return slot, size, offset, and type.""" type_to = str(target_variable.type) @@ -643,7 +643,7 @@ class SlitherReadStorage: @staticmethod def convert_value_to_type( - hex_bytes: HexBytes, size: int, offset: int, type_to: str + hex_bytes: HexBytes, size: int, offset: int, type_to: str ) -> Union[int, bool, str, ChecksumAddress]: """Convert slot data to type representation.""" # Account for storage packing @@ -656,7 +656,7 @@ class SlitherReadStorage: return value def _all_struct_slots( - self, var: StateVariable, st: Structure, contract: Contract, key: Optional[int] = None + self, var: StateVariable, st: Structure, contract: Contract, key: Optional[int] = None ) -> Dict[str, SlotInfo]: """Retrieves all members of a struct.""" struct_elems = st.elems_ordered @@ -673,8 +673,10 @@ class SlitherReadStorage: return data + # TODO: remove this exception (montyly) + # pylint: disable=too-many-nested-blocks def _all_array_slots( - self, var: StateVariable, contract: Contract, type_: Type, slot: int + self, var: StateVariable, contract: Contract, type_: Type, slot: int ) -> Dict[str, SlotInfo]: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) From f4f686e8d3f0625193b30741f15a4d88a78257d3 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 15:13:42 +0200 Subject: [PATCH 118/202] Minor --- tests/test_detectors.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 6075919af..255a4ac88 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1331,6 +1331,7 @@ ALL_TEST_OBJECTS = [ all_detectors.SimilarVarsDetection, "similar_variables.sol", "0.7.6", + ), Test( all_detectors.MsgValueInLoop, "msg_value_loop.sol", From 2b06b49cb7b6267ee3ef7c049dfa97fa607997d4 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 15:15:54 +0200 Subject: [PATCH 119/202] Minor --- slither/solc_parsing/slither_compilation_unit_solc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/solc_parsing/slither_compilation_unit_solc.py b/slither/solc_parsing/slither_compilation_unit_solc.py index e057d00e8..3054b4470 100644 --- a/slither/solc_parsing/slither_compilation_unit_solc.py +++ b/slither/solc_parsing/slither_compilation_unit_solc.py @@ -459,7 +459,7 @@ Please rename it, this name is reserved for Slither's internals""" txt = f"Missing inheritance {contract_parser.underlying_contract} ({contract_parser.compilation_unit.crytic_compile_compilation_unit.unique_id})\n" txt += f"Missing inheritance ID: {missing_inheritance}\n" if contract_parser.underlying_contract.inheritance: - txt += f"Inheritance found:\n" + txt += "Inheritance found:\n" for contract_inherited in contract_parser.underlying_contract.inheritance: txt += f"\t - {contract_inherited} (ID {contract_inherited.id})\n" contract_parser.log_incorrect_parsing(txt) From 6d3149a59a4560942a774826ce53ef9a0f585b65 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 15:24:15 +0200 Subject: [PATCH 120/202] Minor --- tests/test_detectors.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 255a4ac88..7aea45bbe 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1257,11 +1257,12 @@ ALL_TEST_OBJECTS = [ "unimplemented_interface.sol", "0.7.6", ), - Test( - all_detectors.EnumConversion, - "enum_conversion.sol", - "0.4.2", - ), + # Does not work on the CI. Most likely because of solc 0.4.2? + # Test( + # all_detectors.EnumConversion, + # "enum_conversion.sol", + # "0.4.2", + # ), Test( all_detectors.MultipleConstructorSchemes, "multiple_constructor_schemes.sol", From 3d7344e85fd105ce76648ed1d4d2e3d4e683b6c0 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 16:51:45 +0200 Subject: [PATCH 121/202] Re-order --- slither/core/slither_core.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 7d7d1ffb8..77f172c96 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -245,9 +245,7 @@ class SlitherCore(Context): if r["elements"] and matching: return False - if r["elements"] and self._exclude_dependencies: - if all(element["source_mapping"]["is_dependency"] for element in r["elements"]): - return False + if self._show_ignored_findings: return True if self.has_ignore_comment(r): @@ -255,7 +253,8 @@ class SlitherCore(Context): if r["id"] in self._previous_results_ids: return False if r["elements"] and self._exclude_dependencies: - return not all(element["source_mapping"]["is_dependency"] for element in r["elements"]) + if all(element["source_mapping"]["is_dependency"] for element in r["elements"]): + return False # Conserve previous result filtering. This is conserved for compatibility, but is meant to be removed if r["description"] in [pr["description"] for pr in self._previous_results]: return False From 74ae4909ae8b376f382a2480283b7f51a237bd2b Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 17:08:45 +0200 Subject: [PATCH 122/202] Minor improvements --- slither/core/solidity_types/array_type.py | 1 - slither/core/solidity_types/type.py | 2 +- slither/core/solidity_types/type_alias.py | 2 +- slither/core/solidity_types/type_information.py | 4 ++++ slither/core/solidity_types/user_defined_type.py | 3 +-- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/slither/core/solidity_types/array_type.py b/slither/core/solidity_types/array_type.py index 15b53eb03..97d735c89 100644 --- a/slither/core/solidity_types/array_type.py +++ b/slither/core/solidity_types/array_type.py @@ -29,7 +29,6 @@ class ArrayType(Type): def type(self) -> Type: return self._type - @property def is_dynamic(self) -> bool: return self.length is None diff --git a/slither/core/solidity_types/type.py b/slither/core/solidity_types/type.py index bfec7d8bc..c06e5984f 100644 --- a/slither/core/solidity_types/type.py +++ b/slither/core/solidity_types/type.py @@ -18,4 +18,4 @@ class Type(SourceMapping, metaclass=abc.ABCMeta): @property @abc.abstractmethod def is_dynamic(self) -> bool: - """ True if the size of the type is dynamic""" + """True if the size of the type is dynamic""" diff --git a/slither/core/solidity_types/type_alias.py b/slither/core/solidity_types/type_alias.py index 0a1f99d23..703d0f4f6 100644 --- a/slither/core/solidity_types/type_alias.py +++ b/slither/core/solidity_types/type_alias.py @@ -15,7 +15,6 @@ class TypeAlias(Type): self.name = name self.underlying_type = underlying_type - @property def storage_size(self) -> Tuple[int, bool]: return self.underlying_type.storage_size @@ -27,6 +26,7 @@ class TypeAlias(Type): def is_dynamic(self) -> bool: return self.underlying_type.is_dynamic + class TypeAliasTopLevel(TypeAlias, TopLevel): def __init__(self, underlying_type: Type, name: str, scope: "FileScope"): super().__init__(underlying_type, name) diff --git a/slither/core/solidity_types/type_information.py b/slither/core/solidity_types/type_information.py index ccc84e8c1..0477bb7e6 100644 --- a/slither/core/solidity_types/type_information.py +++ b/slither/core/solidity_types/type_information.py @@ -35,6 +35,10 @@ class TypeInformation(Type): """ return 32, True + @property + def is_dynamic(self) -> bool: + raise NotImplementedError + def __str__(self): return f"type({self.type.name})" diff --git a/slither/core/solidity_types/user_defined_type.py b/slither/core/solidity_types/user_defined_type.py index 21f9c0911..38300cdd9 100644 --- a/slither/core/solidity_types/user_defined_type.py +++ b/slither/core/solidity_types/user_defined_type.py @@ -22,13 +22,12 @@ class UserDefinedType(Type): @property def is_dynamic(self) -> bool: - raise NotImplemented + return False @property def type(self) -> Union["Contract", "Enum", "Structure"]: return self._type - @property def storage_size(self) -> Tuple[int, bool]: from slither.core.declarations.structure import Structure From 1592cb376cacdcd223ce81cfecddcd78960d12de Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 17:14:29 +0200 Subject: [PATCH 123/202] Update dapp test --- scripts/ci_test_dapp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index c9d3f5a24..4f2db4e47 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -18,7 +18,7 @@ dapp init slither . --detect external-function # TODO: make more elaborate test -if [ $? -eq 4 ] +if [ $? -eq 0 ] then exit 0 fi From d04e6cf8ae4c66cc2f3892f494baa13cb8c2ae8c Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 1 Aug 2022 18:28:38 +0200 Subject: [PATCH 124/202] Minor --- scripts/ci_test_dapp.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index 4f2db4e47..b6d74b0a7 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -15,11 +15,7 @@ nix-env -f "$HOME/.dapp/dapptools" -iA dapp seth solc hevm ethsign dapp init -slither . --detect external-function - -# TODO: make more elaborate test -if [ $? -eq 0 ] -then +if !slither . --detect external-function; then exit 0 fi From 5669dc5cd4aab7f380097c133470f2a489092271 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Mon, 1 Aug 2022 16:54:12 -0500 Subject: [PATCH 125/202] address mypy warnings --- .../core/solidity_types/elementary_type.py | 4 +- slither/tools/read_storage/read_storage.py | 109 ++++++++++-------- slither/tools/read_storage/utils/utils.py | 24 ++-- 3 files changed, 76 insertions(+), 61 deletions(-) diff --git a/slither/core/solidity_types/elementary_type.py b/slither/core/solidity_types/elementary_type.py index ce782a5e6..e589054c2 100644 --- a/slither/core/solidity_types/elementary_type.py +++ b/slither/core/solidity_types/elementary_type.py @@ -172,7 +172,7 @@ class ElementaryType(Type): return self.type @property - def size(self) -> Optional[int]: + def size(self) -> int: """ Return the size in bits Return None if the size is not known @@ -190,7 +190,7 @@ class ElementaryType(Type): return int(160) if t.startswith("bytes") and t != "bytes": return int(t[len("bytes") :]) * 8 - return None + raise SlitherException(f"{t} does not have a size") @property def storage_size(self) -> Tuple[int, bool]: diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 96365dcf8..5acfb83ed 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -2,7 +2,7 @@ import logging import sys from math import floor from os import environ -from typing import Callable, Optional, Tuple, Union, List, Dict, Any +from typing import Callable, Optional, Tuple, Union, List, Dict, Any, NewType try: from web3 import Web3 @@ -20,12 +20,12 @@ except ImportError: print("$ pip3 install web3 --user\n") sys.exit(-1) -try: - from tabulate import tabulate -except ImportError: - print("ERROR: in order to use slither-read-storage --table, you need to install tabulate") - print("$ pip3 install tabulate --user\n") - sys.exit(-1) +# try: +# from tabulate import tabulate +# except ImportError: +# print("ERROR: in order to use slither-read-storage --table, you need to install tabulate") +# print("$ pip3 install tabulate --user\n") +# sys.exit(-1) from dataclasses import dataclass, field @@ -39,7 +39,8 @@ logging.basicConfig() logger = logging.getLogger("Slither-read-storage") logger.setLevel(logging.INFO) - +Elem = NewType("Elem", Dict[str, "SlotInfo"]) +NestedElem = NewType("NestedElem", Dict[str, Elem]) @dataclass class SlotInfo: type_string: str @@ -48,7 +49,7 @@ class SlotInfo: offset: int value: Optional[Union[int, bool, str, ChecksumAddress]] = None # For structure, str->SlotInfo, for array, str-> SlotInfo - elems: Dict[str, "SlotInfo"] = field(default_factory=lambda: {}) + elems: Elem = field(default_factory=lambda: {}) struct_var: Optional[str] = None @@ -109,7 +110,7 @@ class SlitherReadStorage: def get_storage_layout(self) -> None: """Retrieves the storage layout of entire contract.""" - tmp: Dict[str, SlotInfo] = {} + tmp: Elem for contract, var in self.target_variables: type_ = var.type info = self.get_storage_slot(var, contract) @@ -186,7 +187,7 @@ class SlitherReadStorage: elif isinstance(target_variable_type, MappingType) and key: info, type_to, slot, size, offset = self._find_mapping_slot( - target_variable, slot, key, struct_var=struct_var, deep_key=deep_key + target_variable_type, slot, key, struct_var=struct_var, deep_key=deep_key ) self.log += info @@ -220,9 +221,11 @@ class SlitherReadStorage: struct_var (str): Structure variable name. """ for contract, var in self.target_variables: - self._slot_info[f"{contract.name}.{var.name}"] = self.get_storage_slot( + slot_info = self.get_storage_slot( var, contract, **kwargs ) + if slot_info: + self._slot_info[f"{contract.name}.{var.name}"] = slot_info def get_slot_values(self) -> None: """ @@ -425,7 +428,6 @@ class SlitherReadStorage: slot = int.from_bytes(slot_as_bytes, "big") offset = 0 type_to = "" - size = 0 for var in elems: var_type = var.type if isinstance(var_type, ElementaryType): @@ -477,6 +479,8 @@ class SlitherReadStorage: if isinstance( target_variable_type_type, ArrayType ): # multidimensional array uint[i][], , uint[][i], or uint[][] + assert isinstance(target_variable_type_type.type, ElementaryType) + assert target_variable_type_type.type.size size = target_variable_type_type.type.size type_to = target_variable_type_type.type.name @@ -503,7 +507,7 @@ class SlitherReadStorage: elif target_variable_type.is_fixed_array: slot_int = int.from_bytes(slot, "big") + int(key) - if isinstance(target_variable_type_type, UserDefinedType): # struct[i] + if isinstance(target_variable_type_type, UserDefinedType) and isinstance(target_variable_type_type.type, Structure): # struct[i] type_to = target_variable_type_type.type.name if not struct_var: return info, type_to, int.to_bytes(slot_int, 32, "big"), size, offset @@ -515,10 +519,12 @@ class SlitherReadStorage: info += info_tmp else: + assert isinstance(target_variable_type_type, ElementaryType) type_to = target_variable_type_type.name + assert target_variable_type_type.size size = target_variable_type_type.size # bits - elif isinstance(target_variable_type_type, UserDefinedType): # struct[] + elif isinstance(target_variable_type_type, UserDefinedType) and isinstance(target_variable_type_type.type, Structure): # struct[] slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) type_to = target_variable_type_type.type.name @@ -532,6 +538,7 @@ class SlitherReadStorage: info += info_tmp else: + assert isinstance(target_variable_type_type, ElementaryType) and target_variable_type_type.size slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) type_to = target_variable_type_type.name @@ -543,7 +550,7 @@ class SlitherReadStorage: @staticmethod def _find_mapping_slot( - target_variable: StateVariable, + target_variable_type: MappingType, slot: bytes, key: Union[int, str], deep_key: Union[int, str] = None, @@ -557,7 +564,7 @@ class SlitherReadStorage: struct_var (str, optional): Structure variable name. :returns: log (str): Info about the target variable to log. - type_to (bytes): The type of the target variable. + type_to (str): The type of the target variable. slot (bytes): The storage location of the target variable. size (int): The size (in bits) of the target variable. offset (int): The size of other variables that share the same slot. @@ -569,29 +576,30 @@ class SlitherReadStorage: info += f"\nKey: {key}" if deep_key: info += f"\nDeep Key: {deep_key}" - - key_type = target_variable.type.type_from.name + assert isinstance(target_variable_type.type_from, ElementaryType) + key_type = target_variable_type.type_from.name assert key if "int" in key_type: # without this eth_utils encoding fails key = int(key) key = coerce_type(key_type, key) slot = keccak(encode_abi([key_type, "uint256"], [key, decode_single("uint256", slot)])) - if isinstance(target_variable.type.type_to, UserDefinedType) and isinstance( - target_variable.type.type_to.type, Structure + if isinstance(target_variable_type.type_to, UserDefinedType) and isinstance( + target_variable_type.type_to.type, Structure ): # mapping(elem => struct) assert struct_var - elems = target_variable.type.type_to.type.elems_ordered + elems = target_variable_type.type_to.type.elems_ordered info_tmp, type_to, slot, size, offset = SlitherReadStorage._find_struct_var_slot( elems, slot, struct_var ) info += info_tmp elif isinstance( - target_variable.type.type_to, MappingType + target_variable_type.type_to, MappingType ): # mapping(elem => mapping(elem => ???)) assert deep_key - key_type = target_variable.type.type_to.type_from.name + assert isinstance(target_variable_type.type_to.type_from, ElementaryType) + key_type = target_variable_type.type_to.type_from.name if "int" in key_type: # without this eth_utils encoding fails deep_key = int(deep_key) @@ -599,16 +607,18 @@ class SlitherReadStorage: slot = keccak(encode_abi([key_type, "bytes32"], [deep_key, slot])) # mapping(elem => mapping(elem => elem)) - type_to = target_variable.type.type_to.type_to.type - byte_size, _ = target_variable.type.type_to.type_to.storage_size + target_variable_type_type_to_type_to = target_variable_type.type_to.type_to + assert isinstance(target_variable_type_type_to_type_to, (UserDefinedType, ElementaryType)) + type_to = str(target_variable_type_type_to_type_to.type) + byte_size, _ = target_variable_type_type_to_type_to.storage_size size = byte_size * 8 # bits offset = 0 - if isinstance(target_variable.type.type_to.type_to, UserDefinedType) and isinstance( - target_variable.type.type_to.type_to.type, Structure + if isinstance(target_variable_type_type_to_type_to, UserDefinedType) and isinstance( + target_variable_type_type_to_type_to.type, Structure ): # mapping(elem => mapping(elem => struct)) assert struct_var - elems = target_variable.type.type_to.type_to.type.elems_ordered + elems = target_variable_type_type_to_type_to.type.elems_ordered # If map struct, will be bytes32(uint256(keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot)))))) + structFieldDepth); info_tmp, type_to, slot, size, offset = SlitherReadStorage._find_struct_var_slot( elems, slot, struct_var @@ -617,11 +627,15 @@ class SlitherReadStorage: # TODO: suppory mapping with dynamic arrays - else: # mapping(elem => elem) - type_to = target_variable.type.type_to.name # the value's elementary type - byte_size, _ = target_variable.type.type_to.storage_size + # mapping(elem => elem) + elif isinstance(target_variable_type.type_to, ElementaryType): + type_to = target_variable_type.type_to.name # the value's elementary type + byte_size, _ = target_variable_type.type_to.storage_size size = byte_size * 8 # bits + else: + raise NotImplementedError(f"{target_variable_type} => {target_variable_type.type_to} not implemented") + return info, type_to, slot, size, offset @staticmethod @@ -629,6 +643,7 @@ class SlitherReadStorage: contract: Contract, target_variable: StateVariable ) -> Tuple[int, int, int, str]: """Return slot, size, offset, and type.""" + assert isinstance(target_variable.type, Type) type_to = str(target_variable.type) byte_size, _ = target_variable.type.storage_size size = byte_size * 8 # bits @@ -643,7 +658,7 @@ class SlitherReadStorage: @staticmethod def convert_value_to_type( - hex_bytes: HexBytes, size: int, offset: int, type_to: str + hex_bytes: bytes, size: int, offset: int, type_to: str ) -> Union[int, bool, str, ChecksumAddress]: """Convert slot data to type representation.""" # Account for storage packing @@ -657,10 +672,10 @@ class SlitherReadStorage: def _all_struct_slots( self, var: StateVariable, st: Structure, contract: Contract, key: Optional[int] = None - ) -> Dict[str, SlotInfo]: + ) -> Elem: """Retrieves all members of a struct.""" struct_elems = st.elems_ordered - data: Dict[str, SlotInfo] = {} + data: Elem for elem in struct_elems: info = self.get_storage_slot( var, @@ -673,21 +688,18 @@ class SlitherReadStorage: return data - # TODO: remove this exception (montyly) # pylint: disable=too-many-nested-blocks def _all_array_slots( - self, var: StateVariable, contract: Contract, type_: Type, slot: int - ) -> Dict[str, SlotInfo]: + self, var: StateVariable, contract: Contract, type_: ArrayType, slot: int + ) -> Elem: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) - elems: Dict[str, SlotInfo] = {} + elems: Elem + tartget_variable_type = type_.type if isinstance(type_, UserDefinedType): - st = type_.type - if isinstance(st, Structure): + if isinstance(tartget_variable_type, Structure): for i in range(min(array_length, self.max_depth)): - # TODO: figure out why _all_struct_slots returns a Dict[str, SlotInfo] - # but this expect a SlotInfo (montyly) - elems[str(i)] = self._all_struct_slots(var, st, contract, key=i) + elems[str(i)] = self._all_struct_slots(var, tartget_variable_type, contract, key=i) else: for i in range(min(array_length, self.max_depth)): @@ -699,8 +711,8 @@ class SlitherReadStorage: if info: elems[str(i)] = info - if isinstance(type_.type, ArrayType): # multidimensional array - array_length = self._get_array_length(type_.type, info.slot) + if isinstance(tartget_variable_type, ArrayType): # multidimensional array + array_length = self._get_array_length(tartget_variable_type, info.slot) for j in range(min(array_length, self.max_depth)): info = self.get_storage_slot( @@ -710,13 +722,14 @@ class SlitherReadStorage: deep_key=str(j), ) if info: - elems[str(i)].elems[str(j)] = info + elem = elems[str(i)] + elem.elems[str(j)] = info return elems def _get_array_length(self, type_: Type, slot: int) -> int: """Gets the length of dynamic and fixed arrays. Args: - type_ (`Type`): The array type. + type_ (`AbstractType`): The array type. slot (int): Slot a dynamic array's length is stored at. Returns: (int): The length of the array. diff --git a/slither/tools/read_storage/utils/utils.py b/slither/tools/read_storage/utils/utils.py index d9f38d0f0..04cc6518f 100644 --- a/slither/tools/read_storage/utils/utils.py +++ b/slither/tools/read_storage/utils/utils.py @@ -2,10 +2,9 @@ from typing import Union from eth_typing.evm import ChecksumAddress from eth_utils import to_int, to_text, to_checksum_address -from hexbytes import HexBytes -def get_offset_value(hex_bytes: HexBytes, offset: int, size: int) -> bytes: +def get_offset_value(hex_bytes: bytes, offset: int, size: int) -> bytes: """ Trims slot data to only contain the target variable's. Args: @@ -25,7 +24,7 @@ def get_offset_value(hex_bytes: HexBytes, offset: int, size: int) -> bytes: return value -def coerce_type(solidity_type: str, value: bytes) -> Union[int, bool, str, ChecksumAddress]: +def coerce_type(solidity_type: str, value: Union[int, str, bytes]) -> Union[int, bool, str, ChecksumAddress]: """ Converts input to the indicated type. Args: @@ -35,24 +34,27 @@ def coerce_type(solidity_type: str, value: bytes) -> Union[int, bool, str, Check (Union[int, bool, str, ChecksumAddress, hex]): The type representation of the value. """ if "int" in solidity_type: - converted_value = to_int(value) + return to_int(value) elif "bool" in solidity_type: - converted_value = bool(to_int(value)) - elif "string" in solidity_type: + return bool(to_int(value)) + elif "string" in solidity_type and isinstance(value, bytes): # length * 2 is stored in lower end bits # TODO handle bytes and strings greater than 32 bytes length = int(int.from_bytes(value[-2:], "big") / 2) - converted_value = to_text(value[:length]) + return to_text(value[:length]) elif "address" in solidity_type: - converted_value = to_checksum_address(value) + if not isinstance(value, (str, bytes)): + raise TypeError + return to_checksum_address(value) else: - converted_value = value.hex() + if not isinstance(value, bytes): + raise TypeError + return value.hex() - return converted_value -def get_storage_data(web3, checksum_address: ChecksumAddress, slot: bytes) -> HexBytes: +def get_storage_data(web3, checksum_address: ChecksumAddress, slot: bytes) -> bytes: """ Retrieves the storage data from the blockchain at target address and slot. Args: From a236975f397404c0167ca5321367c7efd4648293 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 00:08:56 -0500 Subject: [PATCH 126/202] initialize Elems --- slither/tools/read_storage/read_storage.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 5acfb83ed..0454888dd 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -110,7 +110,7 @@ class SlitherReadStorage: def get_storage_layout(self) -> None: """Retrieves the storage layout of entire contract.""" - tmp: Elem + tmp = Elem({}) for contract, var in self.target_variables: type_ = var.type info = self.get_storage_slot(var, contract) @@ -675,7 +675,7 @@ class SlitherReadStorage: ) -> Elem: """Retrieves all members of a struct.""" struct_elems = st.elems_ordered - data: Elem + data = Elem({}) for elem in struct_elems: info = self.get_storage_slot( var, @@ -694,7 +694,7 @@ class SlitherReadStorage: ) -> Elem: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) - elems: Elem + elems = Elem({}) tartget_variable_type = type_.type if isinstance(type_, UserDefinedType): if isinstance(tartget_variable_type, Structure): From e0a0679ff7542d4031b3382a4ba39f1ca29869aa Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 2 Aug 2022 09:40:16 +0200 Subject: [PATCH 127/202] Fix spellcheck error --- scripts/ci_test_dapp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index b6d74b0a7..4c2be3bf4 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -15,7 +15,7 @@ nix-env -f "$HOME/.dapp/dapptools" -iA dapp seth solc hevm ethsign dapp init -if !slither . --detect external-function; then +if ! slither . --detect external-function; then exit 0 fi From fc6178ff8695a4aa9922ce5684c6f1ab5c4e927f Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 2 Aug 2022 13:09:31 +0200 Subject: [PATCH 128/202] Minor --- scripts/ci_test_dapp.sh | 2 +- scripts/ci_test_truffle.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index 4c2be3bf4..354e43732 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -15,7 +15,7 @@ nix-env -f "$HOME/.dapp/dapptools" -iA dapp seth solc hevm ethsign dapp init -if ! slither . --detect external-function; then +if slither . --detect external-function; then exit 0 fi diff --git a/scripts/ci_test_truffle.sh b/scripts/ci_test_truffle.sh index a28e1d2c3..b8473b26d 100755 --- a/scripts/ci_test_truffle.sh +++ b/scripts/ci_test_truffle.sh @@ -15,7 +15,7 @@ npm install -g truffle truffle unbox metacoin slither . -if [ $? -eq 6 ] +if [ $? -eq 3 ] then exit 0 fi From adace8ecc41ad042aa79260154a47bb76f05a916 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 09:18:22 -0500 Subject: [PATCH 129/202] fix isinstance check in _all_array_slots --- slither/tools/read_storage/read_storage.py | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 0454888dd..02533d402 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -49,7 +49,7 @@ class SlotInfo: offset: int value: Optional[Union[int, bool, str, ChecksumAddress]] = None # For structure, str->SlotInfo, for array, str-> SlotInfo - elems: Elem = field(default_factory=lambda: {}) + elems: Elem = field(default_factory=lambda: Elem({})) struct_var: Optional[str] = None @@ -674,7 +674,10 @@ class SlitherReadStorage: self, var: StateVariable, st: Structure, contract: Contract, key: Optional[int] = None ) -> Elem: """Retrieves all members of a struct.""" - struct_elems = st.elems_ordered + if isinstance(var.type.type, Structure): + struct_elems = var.type.type.elems_ordered + else: + struct_elems = var.type.type.type.elems_ordered data = Elem({}) for elem in struct_elems: info = self.get_storage_slot( @@ -695,11 +698,10 @@ class SlitherReadStorage: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) elems = Elem({}) - tartget_variable_type = type_.type - if isinstance(type_, UserDefinedType): - if isinstance(tartget_variable_type, Structure): - for i in range(min(array_length, self.max_depth)): - elems[str(i)] = self._all_struct_slots(var, tartget_variable_type, contract, key=i) + target_variable_type = type_.type + if isinstance(target_variable_type, UserDefinedType) and isinstance(target_variable_type.type, Structure): + for i in range(min(array_length, self.max_depth)): + elems[str(i)] = self._all_struct_slots(var, target_variable_type, contract, key=i) else: for i in range(min(array_length, self.max_depth)): @@ -711,8 +713,8 @@ class SlitherReadStorage: if info: elems[str(i)] = info - if isinstance(tartget_variable_type, ArrayType): # multidimensional array - array_length = self._get_array_length(tartget_variable_type, info.slot) + if isinstance(target_variable_type, ArrayType): # multidimensional array + array_length = self._get_array_length(target_variable_type, info.slot) for j in range(min(array_length, self.max_depth)): info = self.get_storage_slot( @@ -722,8 +724,7 @@ class SlitherReadStorage: deep_key=str(j), ) if info: - elem = elems[str(i)] - elem.elems[str(j)] = info + elems[str(i)].elems[str(j)] = info return elems def _get_array_length(self, type_: Type, slot: int) -> int: From 28b4b84ef838cff4514d3c8e6ae1c6bb0db024ed Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 11:04:01 -0500 Subject: [PATCH 130/202] add NestedElem type hint and fix get_slot_values for nested type --- slither/tools/read_storage/read_storage.py | 51 ++++++++++------------ 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 02533d402..33f18dd84 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -48,9 +48,8 @@ class SlotInfo: size: int offset: int value: Optional[Union[int, bool, str, ChecksumAddress]] = None - # For structure, str->SlotInfo, for array, str-> SlotInfo - elems: Elem = field(default_factory=lambda: Elem({})) - struct_var: Optional[str] = None + # For structure and array, str->SlotInfo + elems: Elem = field(default_factory=lambda:{}) class SlitherReadStorageException(Exception): @@ -196,19 +195,12 @@ class SlitherReadStorage: if environ.get("SILENT") is None: logger.info(self.log) self.log = "" - if environ.get("TABLE") is None: - return SlotInfo( - type_string=type_to, - slot=int_slot, - size=size, - offset=offset, - ) + return SlotInfo( type_string=type_to, slot=int_slot, size=size, offset=offset, - struct_var=struct_var, ) def get_target_variables(self, **kwargs) -> None: @@ -234,15 +226,18 @@ class SlitherReadStorage: stack = list(self.slot_info.values()) while stack: slot_info = stack.pop() - if slot_info.elems: - stack.extend(slot_info.elems.values()) - hex_bytes = get_storage_data( - self.web3, self.checksum_address, int.to_bytes(slot_info.slot, 32, byteorder="big") - ) - slot_info.value = self.convert_value_to_type( - hex_bytes, slot_info.size, slot_info.offset, slot_info.type_string - ) - logger.info(f"\nValue: {slot_info.value}\n") + if isinstance(slot_info, dict): # NestedElem + stack.extend(slot_info.values()) + elif slot_info.elems: + stack.extend(list(slot_info.elems.values())) + if isinstance(slot_info, SlotInfo): + hex_bytes = get_storage_data( + self.web3, self.checksum_address, int.to_bytes(slot_info.slot, 32, byteorder="big") + ) + slot_info.value = self.convert_value_to_type( + hex_bytes, slot_info.size, slot_info.offset, slot_info.type_string + ) + logger.info(f"\nValue: {slot_info.value}\n") def get_all_storage_variables(self, func: Callable = None) -> None: """Fetches all storage variables from a list of contracts. @@ -674,10 +669,7 @@ class SlitherReadStorage: self, var: StateVariable, st: Structure, contract: Contract, key: Optional[int] = None ) -> Elem: """Retrieves all members of a struct.""" - if isinstance(var.type.type, Structure): - struct_elems = var.type.type.elems_ordered - else: - struct_elems = var.type.type.type.elems_ordered + struct_elems = st.elems_ordered data = Elem({}) for elem in struct_elems: info = self.get_storage_slot( @@ -694,16 +686,17 @@ class SlitherReadStorage: # pylint: disable=too-many-nested-blocks def _all_array_slots( self, var: StateVariable, contract: Contract, type_: ArrayType, slot: int - ) -> Elem: + ) -> Union[Elem, NestedElem]: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) - elems = Elem({}) target_variable_type = type_.type if isinstance(target_variable_type, UserDefinedType) and isinstance(target_variable_type.type, Structure): + nested_elems = NestedElem({}) for i in range(min(array_length, self.max_depth)): - elems[str(i)] = self._all_struct_slots(var, target_variable_type, contract, key=i) - + nested_elems[str(i)] = self._all_struct_slots(var, target_variable_type.type, contract, key=i) + return nested_elems else: + elems = Elem({}) for i in range(min(array_length, self.max_depth)): info = self.get_storage_slot( var, @@ -725,7 +718,7 @@ class SlitherReadStorage: ) if info: elems[str(i)].elems[str(j)] = info - return elems + return elems def _get_array_length(self, type_: Type, slot: int) -> int: """Gets the length of dynamic and fixed arrays. From a5a8df6a799b66a4627a7cbe77feecaf819df03c Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 11:55:29 -0500 Subject: [PATCH 131/202] implement table for MyPrettyTable and remove tabulate dep. --- .github/workflows/read_storage.yml | 1 - slither/tools/read_storage/__main__.py | 32 +--- slither/tools/read_storage/read_storage.py | 198 ++++----------------- 3 files changed, 37 insertions(+), 194 deletions(-) diff --git a/.github/workflows/read_storage.yml b/.github/workflows/read_storage.yml index 250c214e1..8a423d6c2 100644 --- a/.github/workflows/read_storage.yml +++ b/.github/workflows/read_storage.yml @@ -37,7 +37,6 @@ jobs: run: | pip install ".[dev]" pip install web3 - pip install tabulate==0.8.10 solc-select install 0.8.1 solc-select install 0.8.10 solc-select use 0.8.1 diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index 0f3bb2e83..bb6689d45 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -4,7 +4,6 @@ Tool to read on-chain storage from EVM import dataclasses import json import argparse -from os import environ from crytic_compile import cryticparser @@ -87,17 +86,11 @@ def parse_args() -> argparse.Namespace: ) parser.add_argument( - "--table-storage-layout", + "--table", action="store_true", help="Print table view of storage layout", ) - parser.add_argument( - "--table-storage-value", - action="store_true", - help="Print table view of storage layout & values", - ) - parser.add_argument( "--silent", action="store_true", @@ -140,20 +133,6 @@ def main() -> None: srs.rpc = args.rpc_url - if args.table_storage_layout: - environ["TABLE"] = "1" - srs.get_all_storage_variables() - srs.get_storage_layout() - srs.print_table() - return - - if args.table_storage_value: - environ["TABLE"] = "1" - srs.get_all_storage_variables() - srs.get_storage_layout() - srs.print_table_with_values() - return - if args.layout: srs.get_all_storage_variables() srs.get_storage_layout() @@ -167,10 +146,13 @@ def main() -> None: # To retrieve slot values an rpc url is required. if args.value: assert args.rpc_url - srs.get_slot_values() + srs.walk_slot_info(srs.get_slot_values) - # Only write file if storage layout is used. - if len(srs.slot_info) > 1: + if args.table: + srs.walk_slot_info(srs.convert_slot_info_to_rows) + print(srs.table) + # Only write file if storage layout is used. TODO add flag for file + elif len(srs.slot_info) > 1: with open("storage_layout.json", "w", encoding="utf-8") as file: slot_infos_json = { key: dataclasses.asdict(value) for key, value in srs.slot_info.items() diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 33f18dd84..f4b911e2d 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -3,7 +3,7 @@ import sys from math import floor from os import environ from typing import Callable, Optional, Tuple, Union, List, Dict, Any, NewType - +from slither.utils.myprettytable import MyPrettyTable try: from web3 import Web3 from eth_typing.evm import ChecksumAddress @@ -20,14 +20,7 @@ except ImportError: print("$ pip3 install web3 --user\n") sys.exit(-1) -# try: -# from tabulate import tabulate -# except ImportError: -# print("ERROR: in order to use slither-read-storage --table, you need to install tabulate") -# print("$ pip3 install tabulate --user\n") -# sys.exit(-1) - -from dataclasses import dataclass, field +from dataclasses import dataclass, field, fields from slither.core.solidity_types.type import Type from slither.core.solidity_types import ArrayType, ElementaryType, UserDefinedType, MappingType @@ -43,6 +36,7 @@ Elem = NewType("Elem", Dict[str, "SlotInfo"]) NestedElem = NewType("NestedElem", Dict[str, Elem]) @dataclass class SlotInfo: + name: str type_string: str slot: int size: int @@ -68,6 +62,7 @@ class SlitherReadStorage: self._checksum_address: Optional[ChecksumAddress] = None self.storage_address: Optional[str] = None self.rpc: Optional[str] = None + self.table: Optional[MyPrettyTable] = None @property def contracts(self) -> List[Contract]: @@ -167,6 +162,7 @@ class SlitherReadStorage: type_to = target_variable_type.name elif isinstance(target_variable_type, ArrayType) and key: + var_log_name = f"{var_log_name}[{key}]" info, type_to, slot, size, offset = self._find_array_slot( target_variable_type, slot, @@ -177,7 +173,7 @@ class SlitherReadStorage: self.log += info elif isinstance(target_variable_type, UserDefinedType) and struct_var: - var_log_name = struct_var + var_log_name = f"{var_log_name}.{struct_var}" target_variable_type_type = target_variable_type.type assert isinstance(target_variable_type_type, Structure) elems = target_variable_type_type.elems_ordered @@ -197,6 +193,7 @@ class SlitherReadStorage: self.log = "" return SlotInfo( + name=var_log_name, type_string=type_to, slot=int_slot, size=size, @@ -219,10 +216,7 @@ class SlitherReadStorage: if slot_info: self._slot_info[f"{contract.name}.{var.name}"] = slot_info - def get_slot_values(self) -> None: - """ - Fetches the slot values - """ + def walk_slot_info(self, func: Callable) -> None: stack = list(self.slot_info.values()) while stack: slot_info = stack.pop() @@ -231,13 +225,19 @@ class SlitherReadStorage: elif slot_info.elems: stack.extend(list(slot_info.elems.values())) if isinstance(slot_info, SlotInfo): - hex_bytes = get_storage_data( - self.web3, self.checksum_address, int.to_bytes(slot_info.slot, 32, byteorder="big") - ) - slot_info.value = self.convert_value_to_type( - hex_bytes, slot_info.size, slot_info.offset, slot_info.type_string - ) - logger.info(f"\nValue: {slot_info.value}\n") + func(slot_info) + + def get_slot_values(self, slot_info: SlotInfo) -> None: + """ Fetches the slot value of `SlotInfo` object + :param slot_info: + """ + hex_bytes = get_storage_data( + self.web3, self.checksum_address, int.to_bytes(slot_info.slot, 32, byteorder="big") + ) + slot_info.value = self.convert_value_to_type( + hex_bytes, slot_info.size, slot_info.offset, slot_info.type_string + ) + logger.info(f"\nValue: {slot_info.value}\n") def get_all_storage_variables(self, func: Callable = None) -> None: """Fetches all storage variables from a list of contracts. @@ -256,153 +256,15 @@ class SlitherReadStorage: ) ) - def print_table(self) -> None: - - tabulate_data = [] - - for _, state_var in self.target_variables: - type_ = state_var.type - var = state_var.name - info = self.slot_info[var] - slot = info.slot - offset = info.offset - size = info.size - type_string = info.type_string - - tabulate_data.append([slot, offset, size, type_string, var]) - - if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): - tabulate_data.pop() - for item in info.elems.values(): - slot = item.slot - offset = item.offset - size = item.size - type_string = item.type_string - struct_var = item.struct_var - - # doesn't handle deep keys currently - var_name_struct_or_array_var = f"{var} -> {struct_var}" - - tabulate_data.append( - [slot, offset, size, type_string, var_name_struct_or_array_var] - ) - - if isinstance(type_, ArrayType): - tabulate_data.pop() - for item_key, item in info.elems.items(): - slot = item.slot - offset = item.offset - size = item.size - type_string = item.type_string - struct_var = item.struct_var - - # doesn't handle deep keys currently - var_name_struct_or_array_var = f"{var}[{item_key}] -> {struct_var}" - - tabulate_data.append( - [slot, offset, size, type_string, var_name_struct_or_array_var] - ) - - print( - tabulate( - tabulate_data, headers=["slot", "offset", "size", "type", "name"], tablefmt="grid" - ) - ) - - def print_table_with_values(self) -> None: - - print("Processing, grabbing values from rpc endpoint...") - tabulate_data = [] - - for _, state_var in self.target_variables: - type_ = state_var.type - var = state_var.name - info = self.slot_info[var] - slot = info.slot - offset = info.offset - size = info.size - type_string = info.type_string - - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - var, - self.convert_value_to_type( - get_storage_data( - self.web3, - self.checksum_address, - int.to_bytes(slot, 32, byteorder="big"), - ), - size, - offset, - type_string, - ), - ] - ) - - if isinstance(type_, UserDefinedType) and isinstance(type_.type, Structure): - tabulate_data.pop() - for item in info.elems.values(): - slot = item.slot - offset = item.offset - size = item.size - type_string = item.type_string - struct_var = item.struct_var - - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - f"{var} -> {struct_var}", # doesn't handle deep keys currently - self.convert_value_to_type( - get_storage_data( - self.web3, - self.checksum_address, - int.to_bytes(slot, 32, byteorder="big"), - ), - size, - offset, - type_string, - ), - ] - ) - - if isinstance(type_, ArrayType): - tabulate_data.pop() - for item_key, item in info.elems.items(): - # for elem in info.elems[item].values(): - slot = item.slot - offset = item.offset - size = item.size - type_string = item.type_string - struct_var = item.struct_var - - hex_bytes = get_storage_data( - self.web3, self.checksum_address, int.to_bytes(slot, 32, byteorder="big") - ) - tabulate_data.append( - [ - slot, - offset, - size, - type_string, - f"{var}[{item_key}] -> {struct_var}", # doesn't handle deep keys currently - self.convert_value_to_type(hex_bytes, size, offset, type_string), - ] - ) - - print( - tabulate( - tabulate_data, - headers=["slot", "offset", "size", "type", "name", "value"], - tablefmt="grid", - ) - ) + def convert_slot_info_to_rows(self, slot_info: SlotInfo) -> None: + """ Convert and append slot info to table. Create table if it + does not yet exist + :param slot_info: + """ + field_names = [field.name for field in fields(SlotInfo) if field.name != "elems"] + if not self.table: + self.table = MyPrettyTable(field_names) + self.table.add_row([getattr(slot_info, field) for field in field_names]) @staticmethod def _find_struct_var_slot( From d11ed3608dbc9ac528e23f56d5afd22a93059158 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 16:39:19 -0500 Subject: [PATCH 132/202] fix json output and update with new fields (name and elems) --- slither/tools/read_storage/__main__.py | 5 +- slither/tools/read_storage/read_storage.py | 128 +++++---- tests/storage-layout/TEST_storage_layout.json | 259 +++++++++++++----- tests/test_read_storage.py | 5 +- 4 files changed, 258 insertions(+), 139 deletions(-) diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index bb6689d45..435a13872 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -1,7 +1,6 @@ """ Tool to read on-chain storage from EVM """ -import dataclasses import json import argparse @@ -154,9 +153,7 @@ def main() -> None: # Only write file if storage layout is used. TODO add flag for file elif len(srs.slot_info) > 1: with open("storage_layout.json", "w", encoding="utf-8") as file: - slot_infos_json = { - key: dataclasses.asdict(value) for key, value in srs.slot_info.items() - } + slot_infos_json = srs.to_json() json.dump(slot_infos_json, file, indent=4) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index f4b911e2d..c23d8f661 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -1,15 +1,13 @@ import logging import sys from math import floor -from os import environ from typing import Callable, Optional, Tuple, Union, List, Dict, Any, NewType -from slither.utils.myprettytable import MyPrettyTable + try: from web3 import Web3 from eth_typing.evm import ChecksumAddress from eth_abi import decode_single, encode_abi from eth_utils import keccak - from hexbytes import HexBytes from .utils import ( get_offset_value, get_storage_data, @@ -20,8 +18,8 @@ except ImportError: print("$ pip3 install web3 --user\n") sys.exit(-1) -from dataclasses import dataclass, field, fields - +import dataclasses +from slither.utils.myprettytable import MyPrettyTable from slither.core.solidity_types.type import Type from slither.core.solidity_types import ArrayType, ElementaryType, UserDefinedType, MappingType from slither.core.declarations import Contract, Structure @@ -33,8 +31,10 @@ logger = logging.getLogger("Slither-read-storage") logger.setLevel(logging.INFO) Elem = NewType("Elem", Dict[str, "SlotInfo"]) -NestedElem = NewType("NestedElem", Dict[str, Elem]) -@dataclass +NestedElem = NewType("NestedElem", Dict[str, Elem]) + + +@dataclasses.dataclass class SlotInfo: name: str type_string: str @@ -43,7 +43,7 @@ class SlotInfo: offset: int value: Optional[Union[int, bool, str, ChecksumAddress]] = None # For structure and array, str->SlotInfo - elems: Elem = field(default_factory=lambda:{}) + elems: Elem = dataclasses.field(default_factory=lambda: {}) class SlitherReadStorageException(Exception): @@ -161,7 +161,7 @@ class SlitherReadStorage: if isinstance(target_variable_type, ElementaryType): type_to = target_variable_type.name - elif isinstance(target_variable_type, ArrayType) and key: + elif isinstance(target_variable_type, ArrayType) and key is not None: var_log_name = f"{var_log_name}[{key}]" info, type_to, slot, size, offset = self._find_array_slot( target_variable_type, @@ -172,7 +172,7 @@ class SlitherReadStorage: ) self.log += info - elif isinstance(target_variable_type, UserDefinedType) and struct_var: + elif isinstance(target_variable_type, UserDefinedType) and struct_var is not None: var_log_name = f"{var_log_name}.{struct_var}" target_variable_type_type = target_variable_type.type assert isinstance(target_variable_type_type, Structure) @@ -188,8 +188,7 @@ class SlitherReadStorage: int_slot = int.from_bytes(slot, byteorder="big") self.log += f"\nName: {var_log_name}\nType: {type_to}\nSlot: {int_slot}\n" - if environ.get("SILENT") is None: - logger.info(self.log) + logger.info(self.log) self.log = "" return SlotInfo( @@ -210,9 +209,7 @@ class SlitherReadStorage: struct_var (str): Structure variable name. """ for contract, var in self.target_variables: - slot_info = self.get_storage_slot( - var, contract, **kwargs - ) + slot_info = self.get_storage_slot(var, contract, **kwargs) if slot_info: self._slot_info[f"{contract.name}.{var.name}"] = slot_info @@ -220,15 +217,15 @@ class SlitherReadStorage: stack = list(self.slot_info.values()) while stack: slot_info = stack.pop() - if isinstance(slot_info, dict): # NestedElem + if isinstance(slot_info, dict): # NestedElem stack.extend(slot_info.values()) elif slot_info.elems: stack.extend(list(slot_info.elems.values())) if isinstance(slot_info, SlotInfo): func(slot_info) - + def get_slot_values(self, slot_info: SlotInfo) -> None: - """ Fetches the slot value of `SlotInfo` object + """Fetches the slot value of `SlotInfo` object :param slot_info: """ hex_bytes = get_storage_data( @@ -257,15 +254,20 @@ class SlitherReadStorage: ) def convert_slot_info_to_rows(self, slot_info: SlotInfo) -> None: - """ Convert and append slot info to table. Create table if it - does not yet exist + """Convert and append slot info to table. Create table if it + does not yet exist :param slot_info: """ - field_names = [field.name for field in fields(SlotInfo) if field.name != "elems"] + field_names = [ + field.name for field in dataclasses.fields(SlotInfo) if field.name != "elems" + ] if not self.table: self.table = MyPrettyTable(field_names) self.table.add_row([getattr(slot_info, field) for field in field_names]) + def to_json(self) -> Dict: + return {key: dataclasses.asdict(value) for key, value in self.slot_info.items()} + @staticmethod def _find_struct_var_slot( elems: List[StructureVariable], slot_as_bytes: bytes, struct_var: str @@ -364,7 +366,9 @@ class SlitherReadStorage: elif target_variable_type.is_fixed_array: slot_int = int.from_bytes(slot, "big") + int(key) - if isinstance(target_variable_type_type, UserDefinedType) and isinstance(target_variable_type_type.type, Structure): # struct[i] + if isinstance(target_variable_type_type, UserDefinedType) and isinstance( + target_variable_type_type.type, Structure + ): # struct[i] type_to = target_variable_type_type.type.name if not struct_var: return info, type_to, int.to_bytes(slot_int, 32, "big"), size, offset @@ -381,7 +385,9 @@ class SlitherReadStorage: assert target_variable_type_type.size size = target_variable_type_type.size # bits - elif isinstance(target_variable_type_type, UserDefinedType) and isinstance(target_variable_type_type.type, Structure): # struct[] + elif isinstance(target_variable_type_type, UserDefinedType) and isinstance( + target_variable_type_type.type, Structure + ): # struct[] slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) type_to = target_variable_type_type.type.name @@ -395,7 +401,10 @@ class SlitherReadStorage: info += info_tmp else: - assert isinstance(target_variable_type_type, ElementaryType) and target_variable_type_type.size + assert ( + isinstance(target_variable_type_type, ElementaryType) + and target_variable_type_type.size + ) slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) type_to = target_variable_type_type.name @@ -465,7 +474,9 @@ class SlitherReadStorage: # mapping(elem => mapping(elem => elem)) target_variable_type_type_to_type_to = target_variable_type.type_to.type_to - assert isinstance(target_variable_type_type_to_type_to, (UserDefinedType, ElementaryType)) + assert isinstance( + target_variable_type_type_to_type_to, (UserDefinedType, ElementaryType) + ) type_to = str(target_variable_type_type_to_type_to.type) byte_size, _ = target_variable_type_type_to_type_to.storage_size size = byte_size * 8 # bits @@ -491,7 +502,9 @@ class SlitherReadStorage: size = byte_size * 8 # bits else: - raise NotImplementedError(f"{target_variable_type} => {target_variable_type.type_to} not implemented") + raise NotImplementedError( + f"{target_variable_type} => {target_variable_type.type_to} not implemented" + ) return info, type_to, slot, size, offset @@ -506,10 +519,9 @@ class SlitherReadStorage: size = byte_size * 8 # bits (int_slot, offset) = contract.compilation_unit.storage_layout_of(contract, target_variable) offset *= 8 # bits - if environ.get("SILENT") is None: - logger.info( - f"\nContract '{contract.name}'\n{target_variable.canonical_name} with type {target_variable.type} is located at slot: {int_slot}\n" - ) + logger.info( + f"\nContract '{contract.name}'\n{target_variable.canonical_name} with type {target_variable.type} is located at slot: {int_slot}\n" + ) return int_slot, size, offset, type_to @@ -552,35 +564,39 @@ class SlitherReadStorage: """Retrieves all members of an array.""" array_length = self._get_array_length(type_, slot) target_variable_type = type_.type - if isinstance(target_variable_type, UserDefinedType) and isinstance(target_variable_type.type, Structure): + if isinstance(target_variable_type, UserDefinedType) and isinstance( + target_variable_type.type, Structure + ): nested_elems = NestedElem({}) for i in range(min(array_length, self.max_depth)): - nested_elems[str(i)] = self._all_struct_slots(var, target_variable_type.type, contract, key=i) - return nested_elems - else: - elems = Elem({}) - for i in range(min(array_length, self.max_depth)): - info = self.get_storage_slot( - var, - contract, - key=str(i), + nested_elems[str(i)] = self._all_struct_slots( + var, target_variable_type.type, contract, key=i ) - if info: - elems[str(i)] = info - - if isinstance(target_variable_type, ArrayType): # multidimensional array - array_length = self._get_array_length(target_variable_type, info.slot) - - for j in range(min(array_length, self.max_depth)): - info = self.get_storage_slot( - var, - contract, - key=str(i), - deep_key=str(j), - ) - if info: - elems[str(i)].elems[str(j)] = info - return elems + return nested_elems + + elems = Elem({}) + for i in range(min(array_length, self.max_depth)): + info = self.get_storage_slot( + var, + contract, + key=str(i), + ) + if info: + elems[str(i)] = info + + if isinstance(target_variable_type, ArrayType): # multidimensional array + array_length = self._get_array_length(target_variable_type, info.slot) + + for j in range(min(array_length, self.max_depth)): + info = self.get_storage_slot( + var, + contract, + key=str(i), + deep_key=str(j), + ) + if info: + elems[str(i)].elems[str(j)] = info + return elems def _get_array_length(self, type_: Type, slot: int) -> int: """Gets the length of dynamic and fixed arrays. diff --git a/tests/storage-layout/TEST_storage_layout.json b/tests/storage-layout/TEST_storage_layout.json index e981b1782..9de3aacfd 100644 --- a/tests/storage-layout/TEST_storage_layout.json +++ b/tests/storage-layout/TEST_storage_layout.json @@ -1,469 +1,576 @@ { "packedUint": { + "name": "packedUint", "type_string": "uint248", "slot": 0, "size": 248, "offset": 0, - "value": 1 + "value": 1, + "elems": {} }, "packedBool": { + "name": "packedBool", "type_string": "bool", "slot": 0, "size": 8, "offset": 248, - "value": true + "value": true, + "elems": {} }, "_packedStruct": { + "name": "_packedStruct", "type_string": "StorageLayout.PackedStruct", "slot": 1, "size": 256, "offset": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000101", "elems": { "b": { + "name": "_packedStruct.b", "type_string": "bool", "slot": 1, "size": 8, "offset": 0, - "value": true + "value": true, + "elems": {} }, "a": { + "name": "_packedStruct.a", "type_string": "uint248", "slot": 1, "size": 248, "offset": 8, - "value": 1 + "value": 1, + "elems": {} } - }, - "value": "0000000000000000000000000000000000000000000000000000000000000101" + } }, "mappingPackedStruct": { + "name": "mappingPackedStruct", "type_string": "mapping(uint256 => StorageLayout.PackedStruct)", "slot": 2, "size": 256, "offset": 0, - "value": 0 + "value": 0, + "elems": {} }, "deepMappingPackedStruct": { + "name": "deepMappingPackedStruct", "type_string": "mapping(address => mapping(uint256 => StorageLayout.PackedStruct))", "slot": 3, "size": 256, "offset": 0, - "value": 0 + "value": 0, + "elems": {} }, "deepMappingElementaryTypes": { + "name": "deepMappingElementaryTypes", "type_string": "mapping(address => mapping(uint256 => bool))", "slot": 4, "size": 256, "offset": 0, - "value": 0 + "value": 0, + "elems": {} }, "mappingDynamicArrayOfStructs": { + "name": "mappingDynamicArrayOfStructs", "type_string": "mapping(address => StorageLayout.PackedStruct[])", "slot": 5, "size": 256, "offset": 0, - "value": 0 + "value": 0, + "elems": {} }, "_address": { + "name": "_address", "type_string": "address", "slot": 6, "size": 160, "offset": 0, - "value": "0xae17D2dD99e07CA3bF2571CCAcEAA9e2Aefc2Dc6" + "value": "0xae17D2dD99e07CA3bF2571CCAcEAA9e2Aefc2Dc6", + "elems": {} }, "_string": { + "name": "_string", "type_string": "string", "slot": 7, "size": 256, "offset": 0, - "value": "slither-read-storage" + "value": "slither-read-storage", + "elems": {} }, "packedUint8": { + "name": "packedUint8", "type_string": "uint8", "slot": 8, "size": 8, "offset": 0, - "value": 8 + "value": 8, + "elems": {} }, "packedBytes": { + "name": "packedBytes", "type_string": "bytes8", "slot": 8, "size": 64, "offset": 8, - "value": "6161616161616161" + "value": "6161616161616161", + "elems": {} }, "_enumA": { + "name": "_enumA", "type_string": "StorageLayout.Enum", "slot": 8, "size": 8, "offset": 72, - "value": "00" + "value": "00", + "elems": {} }, "_enumB": { + "name": "_enumB", "type_string": "StorageLayout.Enum", "slot": 8, "size": 8, "offset": 80, - "value": "01" + "value": "01", + "elems": {} }, "_enumC": { + "name": "_enumC", "type_string": "StorageLayout.Enum", "slot": 8, "size": 8, "offset": 88, - "value": "02" + "value": "02", + "elems": {} }, "fixedArray": { + "name": "fixedArray", "type_string": "uint256[3]", "slot": 9, "size": 768, "offset": 0, + "value": 1, "elems": { "0": { + "name": "fixedArray[0]", "type_string": "uint256", "slot": 9, "size": 256, "offset": 0, - "value": 1 + "value": 1, + "elems": {} }, "1": { + "name": "fixedArray[1]", "type_string": "uint256", "slot": 10, "size": 256, "offset": 0, - "value": 2 + "value": 2, + "elems": {} }, "2": { + "name": "fixedArray[2]", "type_string": "uint256", "slot": 11, "size": 256, "offset": 0, - "value": 3 + "value": 3, + "elems": {} } - }, - "value": 1 + } }, "dynamicArrayOfFixedArrays": { + "name": "dynamicArrayOfFixedArrays", "type_string": "uint256[3][]", "slot": 12, "size": 256, "offset": 0, + "value": 2, "elems": { "0": { + "name": "dynamicArrayOfFixedArrays[0]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386055, "size": 256, "offset": 0, + "value": 1, "elems": { "0": { + "name": "dynamicArrayOfFixedArrays[0]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386055, "size": 256, "offset": 0, - "value": 1 + "value": 1, + "elems": {} }, "1": { + "name": "dynamicArrayOfFixedArrays[0]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386056, "size": 256, "offset": 0, - "value": 2 + "value": 2, + "elems": {} }, "2": { + "name": "dynamicArrayOfFixedArrays[0]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386057, "size": 256, "offset": 0, - "value": 3 + "value": 3, + "elems": {} } - }, - "value": 1 + } }, "1": { + "name": "dynamicArrayOfFixedArrays[1]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386058, "size": 256, "offset": 0, + "value": 4, "elems": { "0": { + "name": "dynamicArrayOfFixedArrays[1]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386058, "size": 256, "offset": 0, - "value": 4 + "value": 4, + "elems": {} }, "1": { + "name": "dynamicArrayOfFixedArrays[1]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386059, "size": 256, "offset": 0, - "value": 5 + "value": 5, + "elems": {} }, "2": { + "name": "dynamicArrayOfFixedArrays[1]", "type_string": "uint256", "slot": 101051993584849178915136821395265346177868384823507754984078593667947067386060, "size": 256, "offset": 0, - "value": 6 + "value": 6, + "elems": {} } - }, - "value": 4 + } } - }, - "value": 2 + } }, "fixedArrayofDynamicArrays": { + "name": "fixedArrayofDynamicArrays", "type_string": "uint256[][3]", "slot": 13, "size": 768, "offset": 0, + "value": 1, "elems": { "0": { + "name": "fixedArrayofDynamicArrays[0]", "type_string": "uint256", "slot": 13, "size": 256, "offset": 0, + "value": 1, "elems": { "0": { + "name": "fixedArrayofDynamicArrays[0]", "type_string": "uint256", "slot": 97569884605916225051403212656556507955018248777258318895762758024193532305077, "size": 256, "offset": 0, - "value": 7 + "value": 7, + "elems": {} } - }, - "value": 1 + } }, "1": { + "name": "fixedArrayofDynamicArrays[1]", "type_string": "uint256", "slot": 14, "size": 256, "offset": 0, + "value": 2, "elems": { "0": { + "name": "fixedArrayofDynamicArrays[1]", "type_string": "uint256", "slot": 84800337471693920904250232874319843718400766719524250287777680170677855896573, "size": 256, "offset": 0, - "value": 8 + "value": 8, + "elems": {} }, "1": { + "name": "fixedArrayofDynamicArrays[1]", "type_string": "uint256", "slot": 84800337471693920904250232874319843718400766719524250287777680170677855896574, "size": 256, "offset": 0, - "value": 9 + "value": 9, + "elems": {} } - }, - "value": 2 + } }, "2": { + "name": "fixedArrayofDynamicArrays[2]", "type_string": "uint256", "slot": 15, "size": 256, "offset": 0, + "value": 3, "elems": { "0": { + "name": "fixedArrayofDynamicArrays[2]", "type_string": "uint256", "slot": 63806209331542711802848847270949280092855778197726125910674179583545433573378, "size": 256, "offset": 0, - "value": 10 + "value": 10, + "elems": {} }, "1": { + "name": "fixedArrayofDynamicArrays[2]", "type_string": "uint256", "slot": 63806209331542711802848847270949280092855778197726125910674179583545433573379, "size": 256, "offset": 0, - "value": 11 + "value": 11, + "elems": {} }, "2": { + "name": "fixedArrayofDynamicArrays[2]", "type_string": "uint256", "slot": 63806209331542711802848847270949280092855778197726125910674179583545433573380, "size": 256, "offset": 0, - "value": 12 + "value": 12, + "elems": {} } - }, - "value": 3 + } } - }, - "value": 1 + } }, "multidimensionalArray": { + "name": "multidimensionalArray", "type_string": "uint256[][]", "slot": 16, "size": 256, "offset": 0, + "value": 3, "elems": { "0": { + "name": "multidimensionalArray[0]", "type_string": "uint256", "slot": 12396694973890998440467380340983585058878106250672390494374587083972727727730, "size": 256, "offset": 0, + "value": 1, "elems": { "0": { + "name": "multidimensionalArray[0]", "type_string": "uint256", "slot": 93856215500098298973000561543003607329881518401177956003908346942307446808932, "size": 256, "offset": 0, - "value": 13 + "value": 13, + "elems": {} } - }, - "value": 1 + } }, "1": { + "name": "multidimensionalArray[1]", "type_string": "uint256", "slot": 12396694973890998440467380340983585058878106250672390494374587083972727727731, "size": 256, "offset": 0, + "value": 2, "elems": { "0": { + "name": "multidimensionalArray[1]", "type_string": "uint256", "slot": 48332168562525185806884758054388614910060623018875025120987491603435926351511, "size": 256, "offset": 0, - "value": 14 + "value": 14, + "elems": {} }, "1": { + "name": "multidimensionalArray[1]", "type_string": "uint256", "slot": 48332168562525185806884758054388614910060623018875025120987491603435926351512, "size": 256, "offset": 0, - "value": 15 + "value": 15, + "elems": {} } - }, - "value": 2 + } }, "2": { + "name": "multidimensionalArray[2]", "type_string": "uint256", "slot": 12396694973890998440467380340983585058878106250672390494374587083972727727732, "size": 256, "offset": 0, + "value": 3, "elems": { "0": { + "name": "multidimensionalArray[2]", "type_string": "uint256", "slot": 69037578548663760355678879060995014288537668748590083357305779656188235687653, "size": 256, "offset": 0, - "value": 16 + "value": 16, + "elems": {} }, "1": { + "name": "multidimensionalArray[2]", "type_string": "uint256", "slot": 69037578548663760355678879060995014288537668748590083357305779656188235687654, "size": 256, "offset": 0, - "value": 17 + "value": 17, + "elems": {} }, "2": { + "name": "multidimensionalArray[2]", "type_string": "uint256", "slot": 69037578548663760355678879060995014288537668748590083357305779656188235687655, "size": 256, "offset": 0, - "value": 18 + "value": 18, + "elems": {} } - }, - "value": 3 + } } - }, - "value": 3 + } }, "dynamicArrayOfStructs": { + "name": "dynamicArrayOfStructs", "type_string": "StorageLayout.PackedStruct[]", "slot": 17, "size": 256, "offset": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000002", "elems": { "0": { "b": { + "name": "dynamicArrayOfStructs[0]", "type_string": "bool", "slot": 22581645139872629890233439717971975110198959689450188087151966948260709403752, "size": 8, "offset": 0, - "value": true + "value": true, + "elems": {} }, "a": { + "name": "dynamicArrayOfStructs[0]", "type_string": "uint248", "slot": 22581645139872629890233439717971975110198959689450188087151966948260709403752, "size": 248, "offset": 8, - "value": 1 + "value": 1, + "elems": {} } }, "1": { "b": { + "name": "dynamicArrayOfStructs[1]", "type_string": "bool", "slot": 22581645139872629890233439717971975110198959689450188087151966948260709403753, "size": 8, "offset": 0, - "value": false + "value": false, + "elems": {} }, "a": { + "name": "dynamicArrayOfStructs[1]", "type_string": "uint248", "slot": 22581645139872629890233439717971975110198959689450188087151966948260709403753, "size": 248, "offset": 8, - "value": 10 + "value": 10, + "elems": {} } } - }, - "value": "0000000000000000000000000000000000000000000000000000000000000002" + } }, "fixedArrayOfStructs": { + "name": "fixedArrayOfStructs", "type_string": "StorageLayout.PackedStruct[3]", "slot": 18, "size": 768, "offset": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000101", "elems": { "0": { "b": { + "name": "fixedArrayOfStructs[0]", "type_string": "bool", "slot": 18, "size": 8, "offset": 0, - "value": true + "value": true, + "elems": {} }, "a": { + "name": "fixedArrayOfStructs[0]", "type_string": "uint248", "slot": 18, "size": 248, "offset": 8, - "value": 1 + "value": 1, + "elems": {} } }, "1": { "b": { + "name": "fixedArrayOfStructs[1]", "type_string": "bool", "slot": 19, "size": 8, "offset": 0, - "value": false + "value": false, + "elems": {} }, "a": { + "name": "fixedArrayOfStructs[1]", "type_string": "uint248", "slot": 19, "size": 248, "offset": 8, - "value": 10 + "value": 10, + "elems": {} } }, "2": { "b": { + "name": "fixedArrayOfStructs[2]", "type_string": "bool", "slot": 20, "size": 8, "offset": 0, - "value": false + "value": false, + "elems": {} }, "a": { + "name": "fixedArrayOfStructs[2]", "type_string": "uint248", "slot": 20, "size": 248, "offset": 8, - "value": 0 + "value": 0, + "elems": {} } } - }, - "value": "0000000000000000000000000000000000000000000000000000000000000101" + } } } diff --git a/tests/test_read_storage.py b/tests/test_read_storage.py index 3b1aaa823..67a89dae8 100644 --- a/tests/test_read_storage.py +++ b/tests/test_read_storage.py @@ -1,4 +1,3 @@ -import dataclasses import re import os import sys @@ -116,9 +115,9 @@ def test_read_storage(web3, ganache) -> None: srs.storage_address = address srs.get_all_storage_variables() srs.get_storage_layout() - srs.get_slot_values() + srs.walk_slot_info(srs.get_slot_values) with open("storage_layout.json", "w", encoding="utf-8") as file: - slot_infos_json = {key: dataclasses.asdict(value) for key, value in srs.slot_info.items()} + slot_infos_json = srs.to_json() json.dump(slot_infos_json, file, indent=4) expected_file = os.path.join(STORAGE_TEST_ROOT, "TEST_storage_layout.json") From 7ec42127cc01472d18f027662cef861bac1e621a Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 17:04:55 -0500 Subject: [PATCH 133/202] more pylint and black warnings --- .../core/solidity_types/elementary_type.py | 2 +- slither/tools/read_storage/read_storage.py | 43 +++++++++---------- slither/tools/read_storage/utils/utils.py | 19 ++++---- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/slither/core/solidity_types/elementary_type.py b/slither/core/solidity_types/elementary_type.py index e589054c2..396bd200b 100644 --- a/slither/core/solidity_types/elementary_type.py +++ b/slither/core/solidity_types/elementary_type.py @@ -1,5 +1,5 @@ import itertools -from typing import Optional, Tuple +from typing import Tuple from slither.core.solidity_types.type import Type diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index c23d8f661..78e0d610b 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -1,7 +1,7 @@ import logging import sys from math import floor -from typing import Callable, Optional, Tuple, Union, List, Dict, Any, NewType +from typing import Callable, Optional, Tuple, Union, List, Dict, Any try: from web3 import Web3 @@ -30,8 +30,8 @@ logging.basicConfig() logger = logging.getLogger("Slither-read-storage") logger.setLevel(logging.INFO) -Elem = NewType("Elem", Dict[str, "SlotInfo"]) -NestedElem = NewType("NestedElem", Dict[str, Elem]) +Elem = Dict[str, "SlotInfo"] +NestedElem = Dict[str, Elem] @dataclasses.dataclass @@ -43,7 +43,7 @@ class SlotInfo: offset: int value: Optional[Union[int, bool, str, ChecksumAddress]] = None # For structure and array, str->SlotInfo - elems: Elem = dataclasses.field(default_factory=lambda: {}) + elems: Union[Elem, NestedElem] = dataclasses.field(default_factory=lambda: {}) # type: ignore[assignment] class SlitherReadStorageException(Exception): @@ -88,6 +88,8 @@ class SlitherReadStorage: @property def checksum_address(self) -> ChecksumAddress: + if not self.storage_address: + raise ValueError if not self._checksum_address: self._checksum_address = self.web3.toChecksumAddress(self.storage_address) return self._checksum_address @@ -104,7 +106,7 @@ class SlitherReadStorage: def get_storage_layout(self) -> None: """Retrieves the storage layout of entire contract.""" - tmp = Elem({}) + tmp = {} for contract, var in self.target_variables: type_ = var.type info = self.get_storage_slot(var, contract) @@ -291,14 +293,13 @@ class SlitherReadStorage: var_type = var.type if isinstance(var_type, ElementaryType): size = var_type.size - if size: - if offset >= 256: - slot += 1 - offset = 0 - if struct_var == var.name: - type_to = var_type.name - break # found struct var - offset += size + if offset >= 256: + slot += 1 + offset = 0 + if struct_var == var.name: + type_to = var_type.name + break # found struct var + offset += size else: logger.info(f"{type(var_type)} is current not implemented in _find_struct_var_slot") @@ -306,7 +307,7 @@ class SlitherReadStorage: info = f"\nStruct Variable: {struct_var}" return info, type_to, slot_as_bytes, size, offset - # pylint: disable=too-many-branches + # pylint: disable=too-many-branches,too-many-statements @staticmethod def _find_array_slot( target_variable_type: ArrayType, @@ -339,7 +340,6 @@ class SlitherReadStorage: target_variable_type_type, ArrayType ): # multidimensional array uint[i][], , uint[][i], or uint[][] assert isinstance(target_variable_type_type.type, ElementaryType) - assert target_variable_type_type.type.size size = target_variable_type_type.type.size type_to = target_variable_type_type.type.name @@ -382,7 +382,6 @@ class SlitherReadStorage: else: assert isinstance(target_variable_type_type, ElementaryType) type_to = target_variable_type_type.name - assert target_variable_type_type.size size = target_variable_type_type.size # bits elif isinstance(target_variable_type_type, UserDefinedType) and isinstance( @@ -401,10 +400,8 @@ class SlitherReadStorage: info += info_tmp else: - assert ( - isinstance(target_variable_type_type, ElementaryType) - and target_variable_type_type.size - ) + assert isinstance(target_variable_type_type, ElementaryType) + slot = keccak(slot) slot_int = int.from_bytes(slot, "big") + int(key) type_to = target_variable_type_type.name @@ -544,7 +541,7 @@ class SlitherReadStorage: ) -> Elem: """Retrieves all members of a struct.""" struct_elems = st.elems_ordered - data = Elem({}) + data: Elem = {} for elem in struct_elems: info = self.get_storage_slot( var, @@ -567,14 +564,14 @@ class SlitherReadStorage: if isinstance(target_variable_type, UserDefinedType) and isinstance( target_variable_type.type, Structure ): - nested_elems = NestedElem({}) + nested_elems: NestedElem = {} for i in range(min(array_length, self.max_depth)): nested_elems[str(i)] = self._all_struct_slots( var, target_variable_type.type, contract, key=i ) return nested_elems - elems = Elem({}) + elems: Elem = {} for i in range(min(array_length, self.max_depth)): info = self.get_storage_slot( var, diff --git a/slither/tools/read_storage/utils/utils.py b/slither/tools/read_storage/utils/utils.py index 04cc6518f..db2052286 100644 --- a/slither/tools/read_storage/utils/utils.py +++ b/slither/tools/read_storage/utils/utils.py @@ -24,7 +24,9 @@ def get_offset_value(hex_bytes: bytes, offset: int, size: int) -> bytes: return value -def coerce_type(solidity_type: str, value: Union[int, str, bytes]) -> Union[int, bool, str, ChecksumAddress]: +def coerce_type( + solidity_type: str, value: Union[int, str, bytes] +) -> Union[int, bool, str, ChecksumAddress]: """ Converts input to the indicated type. Args: @@ -35,23 +37,22 @@ def coerce_type(solidity_type: str, value: Union[int, str, bytes]) -> Union[int, """ if "int" in solidity_type: return to_int(value) - elif "bool" in solidity_type: + if "bool" in solidity_type: return bool(to_int(value)) - elif "string" in solidity_type and isinstance(value, bytes): + if "string" in solidity_type and isinstance(value, bytes): # length * 2 is stored in lower end bits # TODO handle bytes and strings greater than 32 bytes length = int(int.from_bytes(value[-2:], "big") / 2) return to_text(value[:length]) - elif "address" in solidity_type: + if "address" in solidity_type: if not isinstance(value, (str, bytes)): - raise TypeError + raise TypeError return to_checksum_address(value) - else: - if not isinstance(value, bytes): - raise TypeError - return value.hex() + if not isinstance(value, bytes): + raise TypeError + return value.hex() def get_storage_data(web3, checksum_address: ChecksumAddress, slot: bytes) -> bytes: From f01be2e4da0f0599b75a7379f03fc8c31d61a0be Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 7 Jul 2022 20:00:23 -0500 Subject: [PATCH 134/202] implement fail for each severity level --- slither/__main__.py | 124 ++++++++++++++++++------- slither/core/slither_core.py | 13 +-- slither/detectors/abstract_detector.py | 16 ++-- slither/utils/command_line.py | 4 + slither/utils/output.py | 61 ++++++------ 5 files changed, 144 insertions(+), 74 deletions(-) diff --git a/slither/__main__.py b/slither/__main__.py index f6f84feeb..afda141ea 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -10,7 +10,7 @@ import os import pstats import sys import traceback -from typing import Optional +from typing import Tuple, Optional, List from pkg_resources import iter_entry_points, require @@ -24,7 +24,13 @@ from slither.detectors.abstract_detector import AbstractDetector, DetectorClassi from slither.printers import all_printers from slither.printers.abstract_printer import AbstractPrinter from slither.slither import Slither -from slither.utils.output import output_to_json, output_to_zip, output_to_sarif, ZIP_TYPES_ACCEPTED +from slither.utils.output import ( + output_to_json, + output_to_zip, + output_to_sarif, + ZIP_TYPES_ACCEPTED, + OutputData, +) from slither.utils.output_capture import StandardOutputCapture from slither.utils.colors import red, set_colorization_enabled from slither.utils.command_line import ( @@ -54,7 +60,12 @@ logger = logging.getLogger("Slither") ################################################################################### -def process_single(target, args, detector_classes, printer_classes): +def process_single( + target: str, + args: argparse.Namespace, + detector_classes: List[AbstractDetector], + printer_classes: List[AbstractPrinter], +) -> Tuple[Slither, List[OutputData], List[OutputData], int]: """ The core high-level code for running Slither static analysis. @@ -72,7 +83,12 @@ def process_single(target, args, detector_classes, printer_classes): return _process(slither, detector_classes, printer_classes) -def process_all(target, args, detector_classes, printer_classes): +def process_all( + target: str, + args: argparse.Namespace, + detector_classes: List[AbstractDetector], + printer_classes: List[AbstractPrinter], +) -> Tuple[List[Slither], List[OutputData], List[OutputData], int]: compilations = compile_all(target, **vars(args)) slither_instances = [] results_detectors = [] @@ -97,7 +113,11 @@ def process_all(target, args, detector_classes, printer_classes): ) -def _process(slither, detector_classes, printer_classes): +def _process( + slither: Slither, + detector_classes: List[AbstractDetector], + printer_classes: List[AbstractPrinter], +) -> Tuple[Slither, List[OutputData], List[OutputData], int]: for detector_cls in detector_classes: slither.register_detector(detector_cls) @@ -123,7 +143,12 @@ def _process(slither, detector_classes, printer_classes): return slither, results_detectors, results_printers, analyzed_contracts_count -def process_from_asts(filenames, args, detector_classes, printer_classes): +def process_from_asts( + filenames: List[str], + args: argparse.Namespace, + detector_classes: List[AbstractDetector], + printer_classes: List[AbstractPrinter], +): all_contracts = [] for filename in filenames: @@ -137,29 +162,13 @@ def process_from_asts(filenames, args, detector_classes, printer_classes): # endregion ################################################################################### ################################################################################### -# region Exit -################################################################################### -################################################################################### - -def my_exit(results): - if not results: - sys.exit(0) - sys.exit(len(results)) - - -# endregion -################################################################################### -################################################################################### # region Detectors and printers ################################################################################### ################################################################################### def get_detectors_and_printers(): - """ - NOTE: This contains just a few detectors and printers that we made public. - """ detectors = [getattr(all_detectors, name) for name in dir(all_detectors)] detectors = [d for d in detectors if inspect.isclass(d) and issubclass(d, AbstractDetector)] @@ -190,7 +199,9 @@ def get_detectors_and_printers(): # pylint: disable=too-many-branches -def choose_detectors(args, all_detector_classes): +def choose_detectors( + args: argparse.Namespace, all_detector_classes: List[AbstractDetector] +) -> List[AbstractDetector]: # If detectors are specified, run only these ones detectors_to_run = [] @@ -212,22 +223,22 @@ def choose_detectors(args, all_detector_classes): detectors_to_run = sorted(detectors_to_run, key=lambda x: x.IMPACT) return detectors_to_run - if args.exclude_optimization: + if args.exclude_optimization and not args.fail_pedantic: detectors_to_run = [ d for d in detectors_to_run if d.IMPACT != DetectorClassification.OPTIMIZATION ] - if args.exclude_informational: + if args.exclude_informational and not args.fail_pedantic: detectors_to_run = [ d for d in detectors_to_run if d.IMPACT != DetectorClassification.INFORMATIONAL ] - if args.exclude_low: + if args.exclude_low and not args.fail_low: detectors_to_run = [d for d in detectors_to_run if d.IMPACT != DetectorClassification.LOW] - if args.exclude_medium: + if args.exclude_medium and not args.fail_medium: detectors_to_run = [ d for d in detectors_to_run if d.IMPACT != DetectorClassification.MEDIUM ] - if args.exclude_high: + if args.exclude_high and not args.fail_high: detectors_to_run = [d for d in detectors_to_run if d.IMPACT != DetectorClassification.HIGH] if args.detectors_to_exclude: detectors_to_run = [ @@ -239,7 +250,9 @@ def choose_detectors(args, all_detector_classes): return detectors_to_run -def choose_printers(args, all_printer_classes): +def choose_printers( + args: argparse.Namespace, all_printer_classes: List[AbstractPrinter] +) -> List[AbstractPrinter]: printers_to_run = [] # disable default printer @@ -388,6 +401,34 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s default=defaults_flag_in_config["exclude_high"], ) + group_detector.add_argument( + "--fail-pedantic", + help="Fail if any finding is detected", + action="store_true", + default=defaults_flag_in_config["fail_pedantic"], + ) + + group_detector.add_argument( + "--fail-low", + help="Fail if low or greater impact finding is detected", + action="store_true", + default=defaults_flag_in_config["fail_low"], + ) + + group_detector.add_argument( + "--fail-medium", + help="Fail if medium or greater impact finding is detected", + action="store_true", + default=defaults_flag_in_config["fail_medium"], + ) + + group_detector.add_argument( + "--fail-high", + help="Fail if high impact finding is detected", + action="store_true", + default=defaults_flag_in_config["fail_high"], + ) + group_detector.add_argument( "--show-ignored-findings", help="Show all the findings", @@ -644,7 +685,9 @@ def main(): # pylint: disable=too-many-statements,too-many-branches,too-many-locals -def main_impl(all_detector_classes, all_printer_classes): +def main_impl( + all_detector_classes: List[AbstractDetector], all_printer_classes: List[AbstractPrinter] +): """ :param all_detector_classes: A list of all detectors that can be included/excluded. :param all_printer_classes: A list of all printers that can be included. @@ -840,11 +883,26 @@ def main_impl(all_detector_classes, all_printer_classes): stats = pstats.Stats(cp).sort_stats("cumtime") stats.print_stats() - # Exit with the appropriate status code - if output_error: + if args.fail_high: + fail_on_detection = any(result["impact"] == "High" for result in results_detectors) + elif args.fail_medium: + fail_on_detection = any( + result["impact"] in ["Medium", "High"] for result in results_detectors + ) + elif args.fail_low: + fail_on_detection = any( + result["impact"] in ["Low", "Medium", "High"] for result in results_detectors + ) + elif args.fail_pedantic: + fail_on_detection = bool(len(results_detectors)) + else: + fail_on_detection = False + + # Exit with them appropriate status code + if output_error or fail_on_detection: sys.exit(-1) else: - my_exit(results_detectors) + sys.exit(0) if __name__ == "__main__": diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 77f172c96..d89714202 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -16,6 +16,7 @@ from slither.core.context.context import Context from slither.core.declarations import Contract from slither.slithir.variables import Constant from slither.utils.colors import red +from slither.utils.output import OutputData logger = logging.getLogger("Slither") logging.basicConfig() @@ -177,7 +178,7 @@ class SlitherCore(Context): posixpath.normpath(elem["source_mapping"]["filename_absolute"]), elem["source_mapping"]["lines"], ) - for elem in r["elements"] + for elem in r.elements if "source_mapping" in elem and "filename_absolute" in elem["source_mapping"] and "lines" in elem["source_mapping"] @@ -199,7 +200,7 @@ class SlitherCore(Context): return False - def valid_result(self, r: Dict) -> bool: + def valid_result(self, r: OutputData) -> bool: """ Check if the result is valid A result is invalid if: @@ -212,11 +213,11 @@ class SlitherCore(Context): # Remove duplicate due to the multiple compilation support if r["id"] in self._currently_seen_resuts: return False - self._currently_seen_resuts.add(r["id"]) + self._currently_seen_resuts.add(r.id) source_mapping_elements = [ elem["source_mapping"].get("filename_absolute", "unknown") - for elem in r["elements"] + for elem in r.elements if "source_mapping" in elem ] @@ -243,14 +244,14 @@ class SlitherCore(Context): ": https://docs.python.org/3/library/re.html" ) - if r["elements"] and matching: + if r.elements and matching: return False if self._show_ignored_findings: return True if self.has_ignore_comment(r): return False - if r["id"] in self._previous_results_ids: + if r.id in self._previous_results_ids: return False if r["elements"] and self._exclude_dependencies: if all(element["source_mapping"]["is_dependency"] for element in r["elements"]): diff --git a/slither/detectors/abstract_detector.py b/slither/detectors/abstract_detector.py index f2ba734db..acc94d076 100644 --- a/slither/detectors/abstract_detector.py +++ b/slither/detectors/abstract_detector.py @@ -9,7 +9,7 @@ from slither.utils.colors import green, yellow, red from slither.formatters.exceptions import FormatImpossible from slither.formatters.utils.patches import apply_patch, create_diff from slither.utils.comparable_enum import ComparableEnum -from slither.utils.output import Output, SupportedOutput +from slither.utils.output import Output, SupportedOutput, OutputData if TYPE_CHECKING: from slither import Slither @@ -145,9 +145,9 @@ class AbstractDetector(metaclass=abc.ABCMeta): return [] # pylint: disable=too-many-branches - def detect(self) -> List[Dict]: - results: List[Dict] = [] - # only keep valid result, and remove dupplicate + def detect(self) -> List[OutputData]: + results: List[OutputData] = [] + # only keep valid result, and remove duplicate # Keep only dictionaries for r in [output.data for output in self._detect()]: if self.compilation_unit.core.valid_result(r) and r not in results: @@ -208,7 +208,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): return [r for (idx, r) in enumerate(results) if idx not in indexes_converted] except ValueError: self.logger.error(yellow("Malformed input. Example of valid input: 0,1,2,3")) - results = sorted(results, key=lambda x: x["id"]) + results = sorted(results, key=lambda x: x.id) return results @@ -235,15 +235,15 @@ class AbstractDetector(metaclass=abc.ABCMeta): return output @staticmethod - def _format(_compilation_unit: SlitherCompilationUnit, _result: Dict) -> None: + def _format(_compilation_unit: SlitherCompilationUnit, _result: OutputData) -> None: """Implement format""" return - def _log_result(self, results: List[Dict]) -> None: + def _log_result(self, results: List[OutputData]) -> None: info = "\n" for idx, result in enumerate(results): if self.slither.triage_mode: info += f"{idx}: " - info += result["description"] + info += result.description info += f"Reference: {self.WIKI}" self._log(info) diff --git a/slither/utils/command_line.py b/slither/utils/command_line.py index 6d5ad1e61..d47784380 100644 --- a/slither/utils/command_line.py +++ b/slither/utils/command_line.py @@ -34,6 +34,10 @@ defaults_flag_in_config = { "exclude_low": False, "exclude_medium": False, "exclude_high": False, + "fail_pedantic": False, + "fail_low": False, + "fail_medium": False, + "fail_high": False, "json": None, "sarif": None, "json-types": ",".join(DEFAULT_JSON_OUTPUT_TYPES), diff --git a/slither/utils/output.py b/slither/utils/output.py index 6ee59b4c6..fb6c02cee 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -4,7 +4,7 @@ import json import logging import zipfile from collections import OrderedDict -from typing import Optional, Dict, List, Union, Any, TYPE_CHECKING +from typing import Optional, Dict, List, TypedDict, Union, Any, TYPE_CHECKING from zipfile import ZipFile from pkg_resources import require @@ -323,17 +323,17 @@ def _create_parent_element(element): if element.contract_declarer: contract = Output("") contract.add_contract(element.contract_declarer) - return contract.data["elements"][0] + return contract.data.elements[0] elif isinstance(element, ChildContract): if element.contract: contract = Output("") contract.add_contract(element.contract) - return contract.data["elements"][0] + return contract.data.elements[0] elif isinstance(element, ChildFunction): if element.function: function = Output("") function.add_function(element.function) - return function.data["elements"][0] + return function.data.elements[0] return None @@ -341,6 +341,15 @@ SupportedOutput = Union[Variable, Contract, Function, Enum, Event, Structure, Pr AllSupportedOutput = Union[str, SupportedOutput] +class OutputData(TypedDict): + elements: List + description: str + markdown: str + first_markdown_element: str + id: str + additional_fields: Dict + + class Output: def __init__( self, @@ -359,15 +368,15 @@ class Output: else: info = info_ - self._data: Dict[str, Any] = OrderedDict() - self._data["elements"] = [] - self._data["description"] = "".join(_convert_to_description(d) for d in info) - self._data["markdown"] = "".join(_convert_to_markdown(d, markdown_root) for d in info) - self._data["first_markdown_element"] = "" + self._data: OutputData = OrderedDict() + self._data.elements = [] + self._data.description = "".join(_convert_to_description(d) for d in info) + self._data.markdown = "".join(_convert_to_markdown(d, markdown_root) for d in info) + self._data.first_markdown_element = "" self._markdown_root = markdown_root id_txt = "".join(_convert_to_id(d) for d in info) - self._data["id"] = hashlib.sha3_256(id_txt.encode("utf-8")).hexdigest() + self._data.id = hashlib.sha3_256(id_txt.encode("utf-8")).hexdigest() if standard_format: to_add = [i for i in info if not isinstance(i, str)] @@ -376,13 +385,11 @@ class Output: self.add(add) if additional_fields: - self._data["additional_fields"] = additional_fields + self._data.additional_fields = additional_fields def add(self, add: SupportedOutput, additional_fields: Optional[Dict] = None): - if not self._data["first_markdown_element"]: - self._data["first_markdown_element"] = add.source_mapping_to_markdown( - self._markdown_root - ) + if not self._data.first_markdown_element: + self._data.first_markdown_element = add.source_mapping_to_markdown(self._markdown_root) if isinstance(add, Variable): self.add_variable(add, additional_fields=additional_fields) elif isinstance(add, Contract): @@ -408,7 +415,7 @@ class Output: @property def elements(self) -> List[Dict]: - return self._data["elements"] + return self._data.elements # endregion ################################################################################### @@ -428,7 +435,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) def add_variables(self, variables: List[Variable]): for variable in sorted(variables, key=lambda x: x.name): @@ -447,7 +454,7 @@ class Output: element = _create_base_element( "contract", contract.name, contract.source_mapping, {}, additional_fields ) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -470,7 +477,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) def add_functions(self, functions: List[Function], additional_fields: Optional[Dict] = None): if additional_fields is None: @@ -496,7 +503,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -516,7 +523,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -540,7 +547,7 @@ class Output: additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -563,7 +570,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) def add_nodes(self, nodes: List[Node]): for node in sorted(nodes, key=lambda x: x.node_id): @@ -587,7 +594,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -602,7 +609,7 @@ class Output: type_specific_fields = {"filename": filename, "content": content} element = _create_base_element("file", type_specific_fields, additional_fields) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -622,7 +629,7 @@ class Output: type_specific_fields = {"content": content.to_json(), "name": name} element = _create_base_element("pretty_table", type_specific_fields, additional_fields) - self._data["elements"].append(element) + self._data.elements.append(element) # endregion ################################################################################### @@ -671,4 +678,4 @@ class Output: # Create the underlying element and add it to our resulting json element = _create_base_element("other", name, source_mapping, {}, additional_fields) - self._data["elements"].append(element) + self._data.elements.append(element) From 77d097bf880ced0ae7d8ea116e7d3fb8af2a5a54 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 8 Jul 2022 14:42:47 -0500 Subject: [PATCH 135/202] update ci tests --- scripts/ci_test.sh | 4 ++-- scripts/ci_test_dapp.sh | 10 ++++------ scripts/ci_test_embark.sh | 9 ++++----- scripts/ci_test_etherlime.sh | 10 ++++------ scripts/ci_test_etherscan.sh | 8 ++++---- scripts/ci_test_truffle.sh | 9 ++++----- 6 files changed, 22 insertions(+), 28 deletions(-) diff --git a/scripts/ci_test.sh b/scripts/ci_test.sh index 2ef5b0357..70ba067ab 100755 --- a/scripts/ci_test.sh +++ b/scripts/ci_test.sh @@ -14,7 +14,7 @@ test_slither(){ # run slither detector on input file and save output as json slither "$1" --solc-disable-warnings --detect "$2" --json "$DIR/tmp-test.json" - if [ $? -eq 255 ] + if [ $? -ne 0 ] then echo "Slither crashed" exit 255 @@ -41,7 +41,7 @@ test_slither(){ # run slither detector on input file and save output as json slither "$1" --solc-disable-warnings --detect "$2" --legacy-ast --json "$DIR/tmp-test.json" - if [ $? -eq 255 ] + if [ $? -ne 0] then echo "Slither crashed" exit 255 diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index c9d3f5a24..95a79f939 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -15,13 +15,11 @@ nix-env -f "$HOME/.dapp/dapptools" -iA dapp seth solc hevm ethsign dapp init -slither . --detect external-function +slither . --fail-pedantic -# TODO: make more elaborate test -if [ $? -eq 4 ] +if [ $? -ne 255 ] then - exit 0 + echo "Truffle test failed" + exit 255 fi -echo "Dapp test failed" -exit 255 diff --git a/scripts/ci_test_embark.sh b/scripts/ci_test_embark.sh index ad34ffa4f..0a92ffea3 100755 --- a/scripts/ci_test_embark.sh +++ b/scripts/ci_test_embark.sh @@ -15,13 +15,12 @@ npm install -g embark@4.2.0 embark demo cd embark_demo || exit 255 npm install -slither . --embark-overwrite-config +slither . --embark-overwrite-config --fail-pedantic -if [ $? -eq 4 ] +if [ $? -ne 255 ] then - exit 0 + echo "Embark test failed" + exit 255 fi -echo "Embark test failed" -exit 255 diff --git a/scripts/ci_test_etherlime.sh b/scripts/ci_test_etherlime.sh index 9a2f24080..3b86f8aa0 100755 --- a/scripts/ci_test_etherlime.sh +++ b/scripts/ci_test_etherlime.sh @@ -13,12 +13,10 @@ nvm use 10.17.0 npm i -g etherlime etherlime init -slither . +slither . --fail-pedantic -if [ $? -eq 7 ] +if [ $? -ne 255 ] then - exit 0 + echo "Etherlime test failed" + exit 255 fi - -echo "Etherlime test failed" -exit 255 diff --git a/scripts/ci_test_etherscan.sh b/scripts/ci_test_etherscan.sh index 08a160f50..d064ad0a5 100755 --- a/scripts/ci_test_etherscan.sh +++ b/scripts/ci_test_etherscan.sh @@ -5,17 +5,17 @@ mkdir etherscan cd etherscan || exit 255 -slither 0x7F37f78cBD74481E593F9C737776F7113d76B315 --etherscan-apikey "$GITHUB_ETHERSCAN" +slither 0x7F37f78cBD74481E593F9C737776F7113d76B315 --etherscan-apikey "$GITHUB_ETHERSCAN" --fail-pedantic -if [ $? -ne 5 ] +if [ $? -ne 255 ] then echo "Etherscan test failed" exit 255 fi -slither rinkeby:0xFe05820C5A92D9bc906D4A46F662dbeba794d3b7 --etherscan-apikey "$GITHUB_ETHERSCAN" +slither rinkeby:0xFe05820C5A92D9bc906D4A46F662dbeba794d3b7 --etherscan-apikey "$GITHUB_ETHERSCAN" --fail-pedantic -if [ $? -ne 70 ] +if [ $? -ne 255 ] then echo "Etherscan test failed" exit 255 diff --git a/scripts/ci_test_truffle.sh b/scripts/ci_test_truffle.sh index a28e1d2c3..bac1f94db 100755 --- a/scripts/ci_test_truffle.sh +++ b/scripts/ci_test_truffle.sh @@ -13,12 +13,11 @@ nvm use --lts npm install -g truffle truffle unbox metacoin -slither . +slither . --fail-pedantic -if [ $? -eq 6 ] +if [ $? -ne 255 ] then - exit 0 + echo "Truffle test failed" + exit 255 fi -echo "Truffle test failed" -exit 255 From 7e95c0d82f02da0ff68c06b53e0cf873f7d4ec31 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 8 Jul 2022 14:50:26 -0500 Subject: [PATCH 136/202] import typing_extensions for python < 3.8 --- slither/utils/output.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/slither/utils/output.py b/slither/utils/output.py index fb6c02cee..f203bea59 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -4,7 +4,7 @@ import json import logging import zipfile from collections import OrderedDict -from typing import Optional, Dict, List, TypedDict, Union, Any, TYPE_CHECKING +from typing import Optional, Dict, List, Union, Any, TYPE_CHECKING from zipfile import ZipFile from pkg_resources import require @@ -22,7 +22,11 @@ if TYPE_CHECKING: logger = logging.getLogger("Slither") - +try: + from typing import TypedDict +except ImportError: + # < Python 3.8 + from typing_extensions import TypedDict ################################################################################### ################################################################################### # region Output From cd9a13727f927d85c7a7a5396b08abfc84ddca9f Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 8 Jul 2022 14:56:09 -0500 Subject: [PATCH 137/202] read from stdout --- scripts/ci_test.sh | 2 +- scripts/ci_test_erc.sh | 2 +- scripts/ci_test_find_paths.sh | 4 ++-- scripts/ci_test_kspec.sh | 2 +- scripts/ci_test_printers.sh | 2 +- scripts/ci_test_simil.sh | 2 +- scripts/ci_test_upgradability.sh | 24 ++++++++++++------------ 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/scripts/ci_test.sh b/scripts/ci_test.sh index 70ba067ab..10404d648 100755 --- a/scripts/ci_test.sh +++ b/scripts/ci_test.sh @@ -77,7 +77,7 @@ generate_expected_json(){ output_filename_txt="$DIR/../tests/expected_json/$(basename "$1" .sol).$2.txt" # run slither detector on input file and save output as json - slither "$1" --solc-disable-warnings --detect "$2" --json "$output_filename" > "$output_filename_txt" 2>&1 + slither "$1" --solc-disable-warnings --detect "$2" --json "$output_filename" > "$output_filename_txt" sed "s|$CURRENT_PATH|$TRAVIS_PATH|g" "$output_filename" -i diff --git a/scripts/ci_test_erc.sh b/scripts/ci_test_erc.sh index ce9a62363..dd0ef9c60 100755 --- a/scripts/ci_test_erc.sh +++ b/scripts/ci_test_erc.sh @@ -5,7 +5,7 @@ DIR_TESTS="tests/check-erc" solc-select use 0.5.0 -slither-check-erc "$DIR_TESTS/erc20.sol" ERC20 > test_1.txt 2>&1 +slither-check-erc "$DIR_TESTS/erc20.sol" ERC20 > test_1.txt DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_find_paths.sh b/scripts/ci_test_find_paths.sh index a916fb5a9..fc1f07ee5 100755 --- a/scripts/ci_test_find_paths.sh +++ b/scripts/ci_test_find_paths.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash -### Test slither-check-upgradability +### Test slither-check-upgradeability DIR_TESTS="tests/possible_paths" solc-select use "0.5.0" -slither-find-paths "$DIR_TESTS/paths.sol" A.destination > test_possible_paths.txt 2>&1 +slither-find-paths "$DIR_TESTS/paths.sol" A.destination > test_possible_paths.txt DIFF=$(diff test_possible_paths.txt "$DIR_TESTS/paths.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_kspec.sh b/scripts/ci_test_kspec.sh index 3bd827e69..70195798f 100755 --- a/scripts/ci_test_kspec.sh +++ b/scripts/ci_test_kspec.sh @@ -3,7 +3,7 @@ DIR_TESTS="tests/check-kspec" solc-select use "0.5.0" -slither-check-kspec "$DIR_TESTS/safeAdd/safeAdd.sol" "$DIR_TESTS/safeAdd/spec.md" > test_1.txt 2>&1 +slither-check-kspec "$DIR_TESTS/safeAdd/safeAdd.sol" "$DIR_TESTS/safeAdd/spec.md" > test_1.txt DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_printers.sh b/scripts/ci_test_printers.sh index e542286fe..564e2a384 100755 --- a/scripts/ci_test_printers.sh +++ b/scripts/ci_test_printers.sh @@ -9,7 +9,7 @@ ALL_PRINTERS="cfg,constructor-calls,contract-summary,data-dependency,echidna,fun # Only test 0.5.17 to limit test time for file in *0.5.17-compact.zip; do - if ! slither "$file" --print "$ALL_PRINTERS" > /dev/null 2>&1 ; then + if ! slither "$file" --print "$ALL_PRINTERS" > /dev/null ; then echo "Printer failed" echo "$file" exit 1 diff --git a/scripts/ci_test_simil.sh b/scripts/ci_test_simil.sh index 7ef511759..a02bf2c88 100755 --- a/scripts/ci_test_simil.sh +++ b/scripts/ci_test_simil.sh @@ -10,7 +10,7 @@ pip3.8 install https://github.com/facebookresearch/fastText/archive/0.2.0.zip solc-select use "0.4.25" DIR_TESTS="tests/simil" -slither-simil info "" --filename $DIR_TESTS/../complex_func.sol --fname Complex.complexExternalWrites > test_1.txt 2>&1 +slither-simil info "" --filename $DIR_TESTS/../complex_func.sol --fname Complex.complexExternalWrites > test_1.txt DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_upgradability.sh b/scripts/ci_test_upgradability.sh index b34564003..435c01a83 100755 --- a/scripts/ci_test_upgradability.sh +++ b/scripts/ci_test_upgradability.sh @@ -5,7 +5,7 @@ DIR_TESTS="tests/check-upgradeability" solc-select use "0.5.0" -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_1.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_1.txt DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then @@ -16,7 +16,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2.sol" --new-contract-name ContractV2 > test_2.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2.sol" --new-contract-name ContractV2 > test_2.txt DIFF=$(diff test_2.txt "$DIR_TESTS/test_2.txt") if [ "$DIFF" != "" ] then @@ -27,7 +27,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug.sol" --new-contract-name ContractV2 > test_3.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug.sol" --new-contract-name ContractV2 > test_3.txt DIFF=$(diff test_3.txt "$DIR_TESTS/test_3.txt") if [ "$DIFF" != "" ] then @@ -38,7 +38,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug2.sol" --new-contract-name ContractV2 > test_4.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug2.sol" --new-contract-name ContractV2 > test_4.txt DIFF=$(diff test_4.txt "$DIR_TESTS/test_4.txt") if [ "$DIFF" != "" ] then @@ -49,7 +49,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt DIFF=$(diff test_5.txt "$DIR_TESTS/test_5.txt") if [ "$DIFF" != "" ] then @@ -62,7 +62,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt DIFF=$(diff test_5.txt "$DIR_TESTS/test_5.txt") if [ "$DIFF" != "" ] then @@ -76,7 +76,7 @@ then fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_lack_to_call_modifier --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_6.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_lack_to_call_modifier --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_6.txt DIFF=$(diff test_6.txt "$DIR_TESTS/test_6.txt") if [ "$DIFF" != "" ] then @@ -90,7 +90,7 @@ then fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_not_called_super_init --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_7.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_not_called_super_init --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_7.txt DIFF=$(diff test_7.txt "$DIR_TESTS/test_7.txt") if [ "$DIFF" != "" ] then @@ -103,7 +103,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug_inherits --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_8.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug_inherits --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_8.txt DIFF=$(diff test_8.txt "$DIR_TESTS/test_8.txt") if [ "$DIFF" != "" ] then @@ -116,7 +116,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_double_call --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_9.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_double_call --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_9.txt DIFF=$(diff test_9.txt "$DIR_TESTS/test_9.txt") if [ "$DIFF" != "" ] then @@ -129,7 +129,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --new-contract-filename "$DIR_TESTS/contract_v2_constant.sol" --new-contract-name ContractV2 > test_10.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --new-contract-filename "$DIR_TESTS/contract_v2_constant.sol" --new-contract-name ContractV2 > test_10.txt DIFF=$(diff test_10.txt "$DIR_TESTS/test_10.txt") if [ "$DIFF" != "" ] then @@ -142,7 +142,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_v1_var_init.sol" ContractV1 > test_11.txt 2>&1 +slither-check-upgradeability "$DIR_TESTS/contract_v1_var_init.sol" ContractV1 > test_11.txt DIFF=$(diff test_11.txt "$DIR_TESTS/test_11.txt") if [ "$DIFF" != "" ] then From 479835b40e6e74c0e961f0075077d9d4bac3907c Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 22:13:53 -0500 Subject: [PATCH 138/202] revert output back to dict --- slither/__main__.py | 16 +++---- slither/core/slither_core.py | 13 +++--- slither/detectors/abstract_detector.py | 14 +++--- slither/utils/output.py | 62 +++++++++++--------------- 4 files changed, 43 insertions(+), 62 deletions(-) diff --git a/slither/__main__.py b/slither/__main__.py index afda141ea..d1b37368b 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -10,7 +10,7 @@ import os import pstats import sys import traceback -from typing import Tuple, Optional, List +from typing import Tuple, Optional, List, Dict from pkg_resources import iter_entry_points, require @@ -24,13 +24,7 @@ from slither.detectors.abstract_detector import AbstractDetector, DetectorClassi from slither.printers import all_printers from slither.printers.abstract_printer import AbstractPrinter from slither.slither import Slither -from slither.utils.output import ( - output_to_json, - output_to_zip, - output_to_sarif, - ZIP_TYPES_ACCEPTED, - OutputData, -) +from slither.utils.output import output_to_json, output_to_zip, output_to_sarif, ZIP_TYPES_ACCEPTED from slither.utils.output_capture import StandardOutputCapture from slither.utils.colors import red, set_colorization_enabled from slither.utils.command_line import ( @@ -65,7 +59,7 @@ def process_single( args: argparse.Namespace, detector_classes: List[AbstractDetector], printer_classes: List[AbstractPrinter], -) -> Tuple[Slither, List[OutputData], List[OutputData], int]: +) -> Tuple[Slither, List[Dict], List[Dict], int]: """ The core high-level code for running Slither static analysis. @@ -88,7 +82,7 @@ def process_all( args: argparse.Namespace, detector_classes: List[AbstractDetector], printer_classes: List[AbstractPrinter], -) -> Tuple[List[Slither], List[OutputData], List[OutputData], int]: +) -> Tuple[List[Slither], List[Dict], List[Dict], int]: compilations = compile_all(target, **vars(args)) slither_instances = [] results_detectors = [] @@ -117,7 +111,7 @@ def _process( slither: Slither, detector_classes: List[AbstractDetector], printer_classes: List[AbstractPrinter], -) -> Tuple[Slither, List[OutputData], List[OutputData], int]: +) -> Tuple[Slither, List[Dict], List[Dict], int]: for detector_cls in detector_classes: slither.register_detector(detector_cls) diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index d89714202..77f172c96 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -16,7 +16,6 @@ from slither.core.context.context import Context from slither.core.declarations import Contract from slither.slithir.variables import Constant from slither.utils.colors import red -from slither.utils.output import OutputData logger = logging.getLogger("Slither") logging.basicConfig() @@ -178,7 +177,7 @@ class SlitherCore(Context): posixpath.normpath(elem["source_mapping"]["filename_absolute"]), elem["source_mapping"]["lines"], ) - for elem in r.elements + for elem in r["elements"] if "source_mapping" in elem and "filename_absolute" in elem["source_mapping"] and "lines" in elem["source_mapping"] @@ -200,7 +199,7 @@ class SlitherCore(Context): return False - def valid_result(self, r: OutputData) -> bool: + def valid_result(self, r: Dict) -> bool: """ Check if the result is valid A result is invalid if: @@ -213,11 +212,11 @@ class SlitherCore(Context): # Remove duplicate due to the multiple compilation support if r["id"] in self._currently_seen_resuts: return False - self._currently_seen_resuts.add(r.id) + self._currently_seen_resuts.add(r["id"]) source_mapping_elements = [ elem["source_mapping"].get("filename_absolute", "unknown") - for elem in r.elements + for elem in r["elements"] if "source_mapping" in elem ] @@ -244,14 +243,14 @@ class SlitherCore(Context): ": https://docs.python.org/3/library/re.html" ) - if r.elements and matching: + if r["elements"] and matching: return False if self._show_ignored_findings: return True if self.has_ignore_comment(r): return False - if r.id in self._previous_results_ids: + if r["id"] in self._previous_results_ids: return False if r["elements"] and self._exclude_dependencies: if all(element["source_mapping"]["is_dependency"] for element in r["elements"]): diff --git a/slither/detectors/abstract_detector.py b/slither/detectors/abstract_detector.py index acc94d076..528981c92 100644 --- a/slither/detectors/abstract_detector.py +++ b/slither/detectors/abstract_detector.py @@ -9,7 +9,7 @@ from slither.utils.colors import green, yellow, red from slither.formatters.exceptions import FormatImpossible from slither.formatters.utils.patches import apply_patch, create_diff from slither.utils.comparable_enum import ComparableEnum -from slither.utils.output import Output, SupportedOutput, OutputData +from slither.utils.output import Output, SupportedOutput if TYPE_CHECKING: from slither import Slither @@ -145,8 +145,8 @@ class AbstractDetector(metaclass=abc.ABCMeta): return [] # pylint: disable=too-many-branches - def detect(self) -> List[OutputData]: - results: List[OutputData] = [] + def detect(self) -> List[Dict]: + results: List[Dict] = [] # only keep valid result, and remove duplicate # Keep only dictionaries for r in [output.data for output in self._detect()]: @@ -208,7 +208,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): return [r for (idx, r) in enumerate(results) if idx not in indexes_converted] except ValueError: self.logger.error(yellow("Malformed input. Example of valid input: 0,1,2,3")) - results = sorted(results, key=lambda x: x.id) + results = sorted(results, key=lambda x: x["id"]) return results @@ -235,15 +235,15 @@ class AbstractDetector(metaclass=abc.ABCMeta): return output @staticmethod - def _format(_compilation_unit: SlitherCompilationUnit, _result: OutputData) -> None: + def _format(_compilation_unit: SlitherCompilationUnit, _result: Dict) -> None: """Implement format""" return - def _log_result(self, results: List[OutputData]) -> None: + def _log_result(self, results: List[Dict]) -> None: info = "\n" for idx, result in enumerate(results): if self.slither.triage_mode: info += f"{idx}: " - info += result.description + info += result["description"] info += f"Reference: {self.WIKI}" self._log(info) diff --git a/slither/utils/output.py b/slither/utils/output.py index f203bea59..99ca7f43e 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -22,11 +22,6 @@ if TYPE_CHECKING: logger = logging.getLogger("Slither") -try: - from typing import TypedDict -except ImportError: - # < Python 3.8 - from typing_extensions import TypedDict ################################################################################### ################################################################################### # region Output @@ -327,17 +322,17 @@ def _create_parent_element(element): if element.contract_declarer: contract = Output("") contract.add_contract(element.contract_declarer) - return contract.data.elements[0] + return contract.data["elements"][0] elif isinstance(element, ChildContract): if element.contract: contract = Output("") contract.add_contract(element.contract) - return contract.data.elements[0] + return contract.data["elements"][0] elif isinstance(element, ChildFunction): if element.function: function = Output("") function.add_function(element.function) - return function.data.elements[0] + return function.data["elements"][0] return None @@ -345,15 +340,6 @@ SupportedOutput = Union[Variable, Contract, Function, Enum, Event, Structure, Pr AllSupportedOutput = Union[str, SupportedOutput] -class OutputData(TypedDict): - elements: List - description: str - markdown: str - first_markdown_element: str - id: str - additional_fields: Dict - - class Output: def __init__( self, @@ -372,15 +358,15 @@ class Output: else: info = info_ - self._data: OutputData = OrderedDict() - self._data.elements = [] - self._data.description = "".join(_convert_to_description(d) for d in info) - self._data.markdown = "".join(_convert_to_markdown(d, markdown_root) for d in info) - self._data.first_markdown_element = "" + self._data = OrderedDict() + self._data["elements"] = [] + self._data["description"] = "".join(_convert_to_description(d) for d in info) + self._data["markdown"] = "".join(_convert_to_markdown(d, markdown_root) for d in info) + self._data["first_markdown_element"] = "" self._markdown_root = markdown_root id_txt = "".join(_convert_to_id(d) for d in info) - self._data.id = hashlib.sha3_256(id_txt.encode("utf-8")).hexdigest() + self._data["id"] = hashlib.sha3_256(id_txt.encode("utf-8")).hexdigest() if standard_format: to_add = [i for i in info if not isinstance(i, str)] @@ -392,8 +378,10 @@ class Output: self._data.additional_fields = additional_fields def add(self, add: SupportedOutput, additional_fields: Optional[Dict] = None): - if not self._data.first_markdown_element: - self._data.first_markdown_element = add.source_mapping_to_markdown(self._markdown_root) + if not self._data["first_markdown_element"]: + self._data["first_markdown_element"] = add.source_mapping_to_markdown( + self._markdown_root + ) if isinstance(add, Variable): self.add_variable(add, additional_fields=additional_fields) elif isinstance(add, Contract): @@ -419,7 +407,7 @@ class Output: @property def elements(self) -> List[Dict]: - return self._data.elements + return self._data["elements"] # endregion ################################################################################### @@ -439,7 +427,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) def add_variables(self, variables: List[Variable]): for variable in sorted(variables, key=lambda x: x.name): @@ -458,7 +446,7 @@ class Output: element = _create_base_element( "contract", contract.name, contract.source_mapping, {}, additional_fields ) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -481,7 +469,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) def add_functions(self, functions: List[Function], additional_fields: Optional[Dict] = None): if additional_fields is None: @@ -507,7 +495,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -527,7 +515,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -551,7 +539,7 @@ class Output: additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -574,7 +562,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) def add_nodes(self, nodes: List[Node]): for node in sorted(nodes, key=lambda x: x.node_id): @@ -598,7 +586,7 @@ class Output: type_specific_fields, additional_fields, ) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -613,7 +601,7 @@ class Output: type_specific_fields = {"filename": filename, "content": content} element = _create_base_element("file", type_specific_fields, additional_fields) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -633,7 +621,7 @@ class Output: type_specific_fields = {"content": content.to_json(), "name": name} element = _create_base_element("pretty_table", type_specific_fields, additional_fields) - self._data.elements.append(element) + self._data["elements"].append(element) # endregion ################################################################################### @@ -682,4 +670,4 @@ class Output: # Create the underlying element and add it to our resulting json element = _create_base_element("other", name, source_mapping, {}, additional_fields) - self._data.elements.append(element) + self._data["elements"].append(element) From e170df045052c45eeaa6a29522d9e1993e4ed955 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 2 Aug 2022 22:32:02 -0500 Subject: [PATCH 139/202] fix test --- scripts/ci_test.sh | 2 +- slither/utils/output.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci_test.sh b/scripts/ci_test.sh index 10404d648..c966766b8 100755 --- a/scripts/ci_test.sh +++ b/scripts/ci_test.sh @@ -41,7 +41,7 @@ test_slither(){ # run slither detector on input file and save output as json slither "$1" --solc-disable-warnings --detect "$2" --legacy-ast --json "$DIR/tmp-test.json" - if [ $? -ne 0] + if [ $? -ne 0 ] then echo "Slither crashed" exit 255 diff --git a/slither/utils/output.py b/slither/utils/output.py index 99ca7f43e..b9c1328e9 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -375,7 +375,7 @@ class Output: self.add(add) if additional_fields: - self._data.additional_fields = additional_fields + self._data["additional_fields"] = additional_fields def add(self, add: SupportedOutput, additional_fields: Optional[Dict] = None): if not self._data["first_markdown_element"]: From 4b7541f8e3fca3e5e3f667dbde74f40e03e5b8cb Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 3 Aug 2022 15:36:19 +0200 Subject: [PATCH 140/202] Improve generation of solidity signature - Better support nested types/array/structure/mapping - Clarify the API for full_name versus solidity_signature - Addd contract.get_function_from_full_name - Use the same API for function and variable - Add tests Replace #483 Fix #1077 --- .github/workflows/features.yml | 1 + slither/core/declarations/contract.py | 21 ++- slither/core/declarations/function.py | 14 +- slither/core/declarations/structure.py | 4 +- .../core/solidity_types/elementary_type.py | 2 +- slither/core/variables/state_variable.py | 32 +--- slither/core/variables/variable.py | 61 ++++--- .../formatters/attributes/const_functions.py | 2 +- .../formatters/functions/external_function.py | 2 +- .../naming_convention/naming_convention.py | 4 +- slither/printers/guidance/echidna.py | 5 +- slither/printers/summary/function_ids.py | 2 +- .../upgradeability/checks/functions_ids.py | 2 +- slither/utils/type.py | 164 ++++++++++++++---- tests/printers/functions_ids.sol | 64 +++++++ tests/test_functions_ids.py | 60 +++++++ 16 files changed, 338 insertions(+), 102 deletions(-) create mode 100644 tests/printers/functions_ids.sol create mode 100644 tests/test_functions_ids.py diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml index 8757d654a..18d5d49b4 100644 --- a/.github/workflows/features.yml +++ b/.github/workflows/features.yml @@ -47,3 +47,4 @@ jobs: pytest tests/test_features.py pytest tests/test_constant_folding_unary.py pytest tests/slithir/test_ternary_expressions.py + pytest tests/test_functions_ids.py diff --git a/slither/core/declarations/contract.py b/slither/core/declarations/contract.py index 333d906fa..0dfaa273c 100644 --- a/slither/core/declarations/contract.py +++ b/slither/core/declarations/contract.py @@ -650,6 +650,21 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods """ return [f for f in self.functions if f.is_writing(variable)] + def get_function_from_full_name(self, full_name: str) -> Optional["Function"]: + """ + Return a function from a full name + The full name differs from the solidity's signature are the type are conserved + For example contract type are kept, structure are not unrolled, etc + Args: + full_name (str): signature of the function (without return statement) + Returns: + Function + """ + return next( + (f for f in self.functions if f.full_name == full_name and not f.is_shadowed), + None, + ) + def get_function_from_signature(self, function_signature: str) -> Optional["Function"]: """ Return a function from a signature @@ -659,7 +674,11 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods Function """ return next( - (f for f in self.functions if f.full_name == function_signature and not f.is_shadowed), + ( + f + for f in self.functions + if f.solidity_signature == function_signature and not f.is_shadowed + ), None, ) diff --git a/slither/core/declarations/function.py b/slither/core/declarations/function.py index 8ec5a00ae..674fe1cce 100644 --- a/slither/core/declarations/function.py +++ b/slither/core/declarations/function.py @@ -20,11 +20,11 @@ from slither.core.expressions import ( MemberAccess, UnaryOperation, ) -from slither.core.solidity_types import UserDefinedType from slither.core.solidity_types.type import Type from slither.core.source_mapping.source_mapping import SourceMapping from slither.core.variables.local_variable import LocalVariable from slither.core.variables.state_variable import StateVariable +from slither.utils.type import convert_type_for_solidity_signature_to_string from slither.utils.utils import unroll # pylint: disable=import-outside-toplevel,too-many-instance-attributes,too-many-statements,too-many-lines @@ -265,6 +265,8 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu """ str: func_name(type1,type2) Return the function signature without the return values + The difference between this function and solidity_function is that full_name does not translate the underlying + type (ex: structure, contract to address, ...) """ if self._full_name is None: name, parameters, _ = self.signature @@ -952,14 +954,6 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu ################################################################################### ################################################################################### - @staticmethod - def _convert_type_for_solidity_signature(t: Type): - from slither.core.declarations import Contract - - if isinstance(t, UserDefinedType) and isinstance(t.type, Contract): - return "address" - return str(t) - @property def solidity_signature(self) -> str: """ @@ -969,7 +963,7 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu """ if self._solidity_signature is None: parameters = [ - self._convert_type_for_solidity_signature(x.type) for x in self.parameters + convert_type_for_solidity_signature_to_string(x.type) for x in self.parameters ] self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" return self._solidity_signature diff --git a/slither/core/declarations/structure.py b/slither/core/declarations/structure.py index eb5f5e00d..39b1948ee 100644 --- a/slither/core/declarations/structure.py +++ b/slither/core/declarations/structure.py @@ -1,4 +1,4 @@ -from typing import List, TYPE_CHECKING, Dict +from typing import List, TYPE_CHECKING, Dict, Optional from slither.core.source_mapping.source_mapping import SourceMapping @@ -10,7 +10,7 @@ if TYPE_CHECKING: class Structure(SourceMapping): def __init__(self, compilation_unit: "SlitherCompilationUnit"): super().__init__() - self._name = None + self._name: Optional[str] = None self._canonical_name = None self._elems: Dict[str, "StructureVariable"] = {} # Name of the elements in the order of declaration diff --git a/slither/core/solidity_types/elementary_type.py b/slither/core/solidity_types/elementary_type.py index ce782a5e6..24eeb39ae 100644 --- a/slither/core/solidity_types/elementary_type.py +++ b/slither/core/solidity_types/elementary_type.py @@ -151,7 +151,7 @@ class NonElementaryType(Exception): class ElementaryType(Type): - def __init__(self, t): + def __init__(self, t: str) -> None: if t not in ElementaryTypeName: raise NonElementaryType super().__init__() diff --git a/slither/core/variables/state_variable.py b/slither/core/variables/state_variable.py index 3b37d57c3..c9a90f36b 100644 --- a/slither/core/variables/state_variable.py +++ b/slither/core/variables/state_variable.py @@ -1,8 +1,7 @@ -from typing import Optional, TYPE_CHECKING, Tuple, List +from typing import Optional, TYPE_CHECKING -from slither.core.variables.variable import Variable from slither.core.children.child_contract import ChildContract -from slither.utils.type import export_nested_types_from_variable +from slither.core.variables.variable import Variable if TYPE_CHECKING: from slither.core.cfg.node import Node @@ -22,33 +21,6 @@ class StateVariable(ChildContract, Variable): """ return self.contract == contract - ################################################################################### - ################################################################################### - # region Signature - ################################################################################### - ################################################################################### - - @property - def signature(self) -> Tuple[str, List[str], str]: - """ - Return the signature of the state variable as a function signature - :return: (str, list(str), list(str)), as (name, list parameters type, list return values type) - """ - return ( - self.name, - [str(x) for x in export_nested_types_from_variable(self)], - str(self.type), - ) - - @property - def signature_str(self) -> str: - """ - Return the signature of the state variable as a function signature - :return: str: func_name(type1,type2) returns(type3) - """ - name, parameters, returnVars = self.signature - return name + "(" + ",".join(parameters) + ") returns(" + ",".join(returnVars) + ")" - # endregion ################################################################################### ################################################################################### diff --git a/slither/core/variables/variable.py b/slither/core/variables/variable.py index 5f94bc922..0558be52c 100644 --- a/slither/core/variables/variable.py +++ b/slither/core/variables/variable.py @@ -1,7 +1,7 @@ """ Variable module """ -from typing import Optional, TYPE_CHECKING, List, Union +from typing import Optional, TYPE_CHECKING, List, Union, Tuple from slither.core.source_mapping.source_mapping import SourceMapping from slither.core.solidity_types.type import Type @@ -44,7 +44,7 @@ class Variable(SourceMapping): return self._initial_expression @expression.setter - def expression(self, expr: "Expression"): + def expression(self, expr: "Expression") -> None: self._initial_expression = expr @property @@ -70,6 +70,7 @@ class Variable(SourceMapping): """ str: variable name """ + assert self._name return self._name @name.setter @@ -97,7 +98,7 @@ class Variable(SourceMapping): return self._is_reentrant @is_reentrant.setter - def is_reentrant(self, is_reentrant: bool): + def is_reentrant(self, is_reentrant: bool) -> None: self._is_reentrant = is_reentrant @property @@ -105,7 +106,7 @@ class Variable(SourceMapping): return self._write_protection @write_protection.setter - def write_protection(self, write_protection: List[str]): + def write_protection(self, write_protection: List[str]) -> None: self._write_protection = write_protection @property @@ -116,12 +117,13 @@ class Variable(SourceMapping): return self._visibility @visibility.setter - def visibility(self, v: str): + def visibility(self, v: str) -> None: self._visibility = v - def set_type(self, t): + def set_type(self, t: Optional[Union[List, Type, str]]) -> None: if isinstance(t, str): - t = ElementaryType(t) + self._type = ElementaryType(t) + return assert isinstance(t, (Type, list)) or t is None self._type = t @@ -135,27 +137,46 @@ class Variable(SourceMapping): return self._is_immutable @is_immutable.setter - def is_immutable(self, immutablility: bool): + def is_immutable(self, immutablility: bool) -> None: self._is_immutable = immutablility + ################################################################################### + ################################################################################### + # region Signature + ################################################################################### + ################################################################################### + @property - def function_name(self): + def signature(self) -> Tuple[str, List[str], List[str]]: """ - Return the name of the variable as a function signature - :return: + Return the signature of the state variable as a function signature + :return: (str, list(str), list(str)), as (name, list parameters type, list return values type) """ # pylint: disable=import-outside-toplevel - from slither.core.solidity_types import ArrayType, MappingType - from slither.utils.type import export_nested_types_from_variable + from slither.utils.type import ( + export_nested_types_from_variable, + export_return_type_from_variable, + ) - variable_getter_args = "" - return_type = self.type - assert return_type + return ( + self.name, + [str(x) for x in export_nested_types_from_variable(self)], + [str(x) for x in export_return_type_from_variable(self)], + ) - if isinstance(return_type, (ArrayType, MappingType)): - variable_getter_args = ",".join(map(str, export_nested_types_from_variable(self))) + @property + def signature_str(self) -> str: + """ + Return the signature of the state variable as a function signature + :return: str: func_name(type1,type2) returns(type3) + """ + name, parameters, returnVars = self.signature + return name + "(" + ",".join(parameters) + ") returns(" + ",".join(returnVars) + ")" - return f"{self.name}({variable_getter_args})" + @property + def solidity_signature(self) -> str: + name, parameters, _ = self.signature + return f'{name}({",".join(parameters)})' - def __str__(self): + def __str__(self) -> str: return self._name diff --git a/slither/formatters/attributes/const_functions.py b/slither/formatters/attributes/const_functions.py index 2f28ac615..7be42ac04 100644 --- a/slither/formatters/attributes/const_functions.py +++ b/slither/formatters/attributes/const_functions.py @@ -16,7 +16,7 @@ def custom_format(compilation_unit: SlitherCompilationUnit, result): element["type_specific_fields"]["parent"]["name"] ) if target_contract: - function = target_contract.get_function_from_signature( + function = target_contract.get_function_from_full_name( element["type_specific_fields"]["signature"] ) if function: diff --git a/slither/formatters/functions/external_function.py b/slither/formatters/functions/external_function.py index 07316abed..67fdf66e9 100644 --- a/slither/formatters/functions/external_function.py +++ b/slither/formatters/functions/external_function.py @@ -12,7 +12,7 @@ def custom_format(compilation_unit: SlitherCompilationUnit, result): element["type_specific_fields"]["parent"]["name"] ) if target_contract: - function = target_contract.get_function_from_signature( + function = target_contract.get_function_from_full_name( element["type_specific_fields"]["signature"] ) if function: diff --git a/slither/formatters/naming_convention/naming_convention.py b/slither/formatters/naming_convention/naming_convention.py index d7720cc5a..9b4de3830 100644 --- a/slither/formatters/naming_convention/naming_convention.py +++ b/slither/formatters/naming_convention/naming_convention.py @@ -254,7 +254,7 @@ def _patch(compilation_unit: SlitherCompilationUnit, result, element, _target): ] param_name = element["name"] contract = scope.get_contract_from_name(contract_name) - function = contract.get_function_from_signature(function_sig) + function = contract.get_function_from_full_name(function_sig) target = function.get_local_variable_from_name(param_name) elif _target in ["variable", "variable_constant"]: @@ -268,7 +268,7 @@ def _patch(compilation_unit: SlitherCompilationUnit, result, element, _target): ] var_name = element["name"] contract = scope.get_contract_from_name(contract_name) - function = contract.get_function_from_signature(function_sig) + function = contract.get_function_from_full_name(function_sig) target = function.get_local_variable_from_name(var_name) # State variable else: diff --git a/slither/printers/guidance/echidna.py b/slither/printers/guidance/echidna.py index 2ae7c4612..dbfa54121 100644 --- a/slither/printers/guidance/echidna.py +++ b/slither/printers/guidance/echidna.py @@ -37,8 +37,7 @@ def _get_name(f: Union[Function, Variable]) -> str: if isinstance(f, Function): if f.is_fallback or f.is_receive: return "()" - return f.solidity_signature - return f.function_name + return f.solidity_signature def _extract_payable(slither: SlitherCore) -> Dict[str, List[str]]: @@ -117,7 +116,7 @@ def _extract_constant_functions(slither: SlitherCore) -> Dict[str, List[str]]: for contract in slither.contracts: cst_functions = [_get_name(f) for f in contract.functions_entry_points if _is_constant(f)] cst_functions += [ - v.function_name for v in contract.state_variables if v.visibility in ["public"] + v.solidity_signature for v in contract.state_variables if v.visibility in ["public"] ] if cst_functions: ret[contract.name] = cst_functions diff --git a/slither/printers/summary/function_ids.py b/slither/printers/summary/function_ids.py index 6c998880d..c3738ac5f 100644 --- a/slither/printers/summary/function_ids.py +++ b/slither/printers/summary/function_ids.py @@ -31,7 +31,7 @@ class FunctionIds(AbstractPrinter): table.add_row([function.solidity_signature, f"{function_id:#0{10}x}"]) for variable in contract.state_variables: if variable.visibility in ["public"]: - sig = variable.function_name + sig = variable.solidity_signature function_id = get_function_id(sig) table.add_row([sig, f"{function_id:#0{10}x}"]) txt += str(table) + "\n" diff --git a/slither/tools/upgradeability/checks/functions_ids.py b/slither/tools/upgradeability/checks/functions_ids.py index 255ae01ec..a7a45f405 100644 --- a/slither/tools/upgradeability/checks/functions_ids.py +++ b/slither/tools/upgradeability/checks/functions_ids.py @@ -22,7 +22,7 @@ def get_signatures(c): def _get_function_or_variable(contract, signature): - f = contract.get_function_from_signature(signature) + f = contract.get_function_from_full_name(signature) if f: return f diff --git a/slither/utils/type.py b/slither/utils/type.py index a70ee754b..1ce5fc158 100644 --- a/slither/utils/type.py +++ b/slither/utils/type.py @@ -1,21 +1,93 @@ +import math from typing import List, Union -from slither.core.solidity_types import ArrayType, MappingType, ElementaryType +from slither.core.solidity_types import ArrayType, MappingType, ElementaryType, UserDefinedType from slither.core.solidity_types.type import Type from slither.core.variables.variable import Variable -def _add_mapping_parameter(t: Type, l: List[Type]): - while isinstance(t, MappingType): - l.append(t.type_from) - t = t.type_to - _add_array_parameter(t, l) +def _convert_type_for_solidity_signature_to_string(types: Union[Type, List[Type]]) -> str: + if isinstance(types, Type): + # Array might be struct, so we need to go again through the conversion here + # We could have this logic in convert_type_for_solidity_signature + # But the slither type system is not straightforward to manipulate here + # And it would require to create a new ArrayType, which a potential List[Type] as input + # Which is currently not supported. This comes down to (uint, uint)[] not being possible in Solidity + # While having an array of a struct of two uint leads to a (uint, uint)[] signature + if isinstance(types, ArrayType): + underlying_type = convert_type_for_solidity_signature(types.type) + underlying_type_str = _convert_type_for_solidity_signature_to_string(underlying_type) + return underlying_type_str + "[]" + return str(types) -def _add_array_parameter(t: Type, l: List[Type]): - while isinstance(t, ArrayType): - l.append(ElementaryType("uint256")) - t = t.type + first_item = True + + ret = "(" + for underlying_type in types: + if first_item: + ret += _convert_type_for_solidity_signature_to_string(underlying_type) + else: + ret += "," + _convert_type_for_solidity_signature_to_string(underlying_type) + first_item = False + + ret += ")" + return ret + + +def convert_type_for_solidity_signature_to_string(t: Type) -> str: + types = convert_type_for_solidity_signature(t) + return _convert_type_for_solidity_signature_to_string(types) + + +def convert_type_for_solidity_signature(t: Type) -> Union[Type, List[Type]]: + # pylint: disable=import-outside-toplevel + from slither.core.declarations import Contract, Enum, Structure + + if isinstance(t, UserDefinedType): + underlying_type = t.type + if isinstance(underlying_type, Contract): + return ElementaryType("address") + if isinstance(underlying_type, Enum): + number_values = len(underlying_type.values) + # IF below 65536, avoid calling log2 + if number_values <= 256: + uint = "8" + elif number_values <= 65536: + uint = "16" + else: + uint = str(int(math.log2(number_values))) + return ElementaryType(f"uint{uint}") + if isinstance(underlying_type, Structure): + # We can't have recursive types for structure, so recursion is ok here + types = [ + convert_type_for_solidity_signature(x.type) for x in underlying_type.elems_ordered + ] + return types + + return t + + +def _export_nested_types_from_variable(current_type: Type, ret: List[Type]) -> None: + """ + Export the list of nested types (mapping/array) + :param variable: + :return: list(Type) + """ + if isinstance(current_type, MappingType): + underlying_type = convert_type_for_solidity_signature(current_type.type_from) + if isinstance(underlying_type, list): + ret.extend(underlying_type) + else: + ret.append(underlying_type) + next_type = current_type.type_to + + elif isinstance(current_type, ArrayType): + ret.append(ElementaryType("uint256")) + next_type = current_type.type + else: + return + _export_nested_types_from_variable(next_type, ret) def export_nested_types_from_variable(variable: Variable) -> List[Type]: @@ -25,33 +97,67 @@ def export_nested_types_from_variable(variable: Variable) -> List[Type]: :return: list(Type) """ l: List[Type] = [] - if isinstance(variable.type, MappingType): - t = variable.type - _add_mapping_parameter(t, l) + _export_nested_types_from_variable(variable.type, l) + return l - if isinstance(variable.type, ArrayType): - v = variable - _add_array_parameter(v.type, l) - return l +def _export_return_type_from_variable(underlying_type: Type, all_types: bool) -> List[Type]: + # pylint: disable=import-outside-toplevel + from slither.core.declarations import Structure + if isinstance(underlying_type, MappingType): + if not all_types: + return [] + return export_return_type_from_variable(underlying_type.type_to) -def export_return_type_from_variable(variable: Union[Type, Variable]): + if isinstance(underlying_type, ArrayType): + if not all_types: + return [] + return export_return_type_from_variable(underlying_type.type) + + if isinstance(underlying_type, UserDefinedType) and isinstance(underlying_type.type, Structure): + ret = [] + for r in underlying_type.type.elems_ordered: + ret += export_return_type_from_variable(r, all_types=False) + + return ret + + return [underlying_type] + + +def export_return_type_from_variable( + variable_or_type: Union[Type, Variable], all_types: bool = True +) -> List[Type]: """ - Return the type returned by a variable - :param variable + Return the type returned by a variable. + If all_types set to false, filter array/mapping. This is useful as the mapping/array in a structure are not + returned by solidity + :param variable_or_type + :param all_types :return: Type """ - if isinstance(variable, MappingType): - return export_return_type_from_variable(variable.type_to) + # pylint: disable=import-outside-toplevel + from slither.core.declarations import Structure + + if isinstance(variable_or_type, Type): + return _export_return_type_from_variable(variable_or_type, all_types) - if isinstance(variable, ArrayType): - return variable.type + if isinstance(variable_or_type.type, MappingType): + if not all_types: + return [] + return export_return_type_from_variable(variable_or_type.type.type_to) - if isinstance(variable.type, MappingType): - return export_return_type_from_variable(variable.type.type_to) + if isinstance(variable_or_type.type, ArrayType): + if not all_types: + return [] + return export_return_type_from_variable(variable_or_type.type.type) - if isinstance(variable.type, ArrayType): - return variable.type.type + if isinstance(variable_or_type.type, UserDefinedType) and isinstance( + variable_or_type.type.type, Structure + ): + ret = [] + for r in variable_or_type.type.type.elems_ordered: + ret += export_return_type_from_variable(r, all_types=False) + return ret - return variable.type + return [variable_or_type.type] diff --git a/tests/printers/functions_ids.sol b/tests/printers/functions_ids.sol new file mode 100644 index 000000000..2f4eea6a7 --- /dev/null +++ b/tests/printers/functions_ids.sol @@ -0,0 +1,64 @@ +pragma experimental ABIEncoderV2; + +contract Contract{} + +contract C{ + + mapping(uint => address)[] public arrayOfMappings; + + mapping(uint => address[]) public normalMappingArrayField; + + enum State{a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,a41,a42,a43,a44,a45,a46,a47,a48,a49,a50,a51,a52,a53,a54,a55,a56,a57,a58,a59,a60,a61,a62,a63,a64,a65,a66,a67,a68,a69,a70,a71,a72,a73,a74,a75,a76,a77,a78,a79,a80,a81,a82,a83,a84,a85,a86,a87,a88,a89,a90,a91,a92,a93,a94,a95,a96,a97,a98,a99,a100,a101,a102,a103,a104,a105,a106,a107,a108,a109,a110,a111,a112,a113,a114,a115,a116,a117,a118,a119,a120,a121,a122,a123,a124,a125,a126,a127,a128,a129,a130,a131,a132,a133,a134,a135,a136,a137,a138,a139,a140,a141,a142,a143,a144,a145,a146,a147,a148,a149,a150,a151,a152,a153,a154,a155,a156,a157,a158,a159,a160,a161,a162,a163,a164,a165,a166,a167,a168,a169,a170,a171,a172,a173,a174,a175,a176,a177,a178,a179,a180,a181,a182,a183,a184,a185,a186,a187,a188,a189,a190,a191,a192,a193,a194,a195,a196,a197,a198,a199,a200,a201,a202,a203,a204,a205,a206,a207,a208,a209,a210,a211,a212,a213,a214,a215,a216,a217,a218,a219,a220,a221,a222,a223,a224,a225,a226,a227,a228,a229,a230,a231,a232,a233,a234,a235,a236,a237,a238,a239,a240,a241,a242,a243,a244,a245,a246,a247,a248,a249,a250,a251,a252,a253,a254,a255,a256} + mapping(State => uint) public stateMap; + + mapping(Contract => uint) public contractMap; + + uint[][] public multiDimensionalArray; + + struct Simple { + uint a; + uint b; + mapping(uint => uint) c; + uint[] d; + function(uint) external returns (uint) e; + } + + Simple public simple; + + struct Inner { + uint a; + uint b; + } + + struct Outer { + Inner inner; + uint c; + } + + Outer public outer; + + + struct A { + Inner inner; + uint a; + } + struct B { + uint a; + Inner inner; + } + + A public a; + A[] public a_array; + mapping(address => B[]) public b_mapping_of_array; + + function function_with_struct(A memory a) public{} + + function function_with_array(A[] memory array, B memory b) public {} + + struct AnotherStruct{ + B b; + A[] a; + } + mapping(address => AnotherStruct[][]) public mapping_of_double_array_of_struct; +} + diff --git a/tests/test_functions_ids.py b/tests/test_functions_ids.py new file mode 100644 index 000000000..49818347f --- /dev/null +++ b/tests/test_functions_ids.py @@ -0,0 +1,60 @@ +from solc_select import solc_select +from slither import Slither + +# % solc functions_ids.sol --hashes +# ======= functions_ids.sol:C ======= +# Function signatures: +# 0dbe671f: a() +# 4a1f689d: a_array(uint256) +# 98fc2aa5: arrayOfMappings(uint256,uint256) +# 4ea7a557: b_mapping_of_array(address,uint256) +# 3c0af344: contractMap(address) +# 20969954: function_with_array(((uint256,uint256),uint256)[],(uint256,(uint256,uint256))) +# 1c039831: function_with_struct(((uint256,uint256),uint256)) +# 37e66bae: mapping_of_double_array_of_struct(address,uint256,uint256) +# f29872a8: multiDimensionalArray(uint256,uint256) +# 9539e3c8: normalMappingArrayField(uint256,uint256) +# 87c3dbb6: outer() +# df201a46: simple() +# 5a20851f: stateMap(uint16) + +# {"contracts":{"functions_ids.sol:C":{"hashes":{"a()":"0dbe671f","a_array(uint256)":"4a1f689d","arrayOfMappings(uint256,uint256)":"98fc2aa5","b_mapping_of_array(address,uint256)":"4ea7a557","contractMap(address)":"3c0af344","function_with_array(((uint256,uint256),uint256)[],(uint256,(uint256,uint256)))":"20969954","function_with_struct(((uint256,uint256),uint256))":"1c039831","mapping_of_double_array_of_struct(address,uint256,uint256)":"37e66bae","multiDimensionalArray(uint256,uint256)":"f29872a8","normalMappingArrayField(uint256,uint256)":"9539e3c8","outer()":"87c3dbb6","simple()":"df201a46","stateMap(uint16)":"5a20851f"}},"functions_ids.sol:Contract":{"hashes":{}}},"version":"0.7.0+commit.9e61f92b.Darwin.appleclang"} +from slither.utils.function import get_function_id + +signatures = { + "a()": "0dbe671f", + "a_array(uint256)": "4a1f689d", + "arrayOfMappings(uint256,uint256)": "98fc2aa5", + "b_mapping_of_array(address,uint256)": "4ea7a557", + "contractMap(address)": "3c0af344", + "function_with_array(((uint256,uint256),uint256)[],(uint256,(uint256,uint256)))": "20969954", + "function_with_struct(((uint256,uint256),uint256))": "1c039831", + "mapping_of_double_array_of_struct(address,uint256,uint256)": "37e66bae", + "multiDimensionalArray(uint256,uint256)": "f29872a8", + "normalMappingArrayField(uint256,uint256)": "9539e3c8", + "outer()": "87c3dbb6", + "simple()": "df201a46", + "stateMap(uint16)": "5a20851f", +} + + +def test_functions_ids() -> None: + solc_select.switch_global_version("0.7.0") + sl = Slither("tests/printers/functions_ids.sol") + contracts_c = sl.get_contract_from_name("C") + assert len(contracts_c) == 1 + contract_c = contracts_c[0] + + for sig, hashes in signatures.items(): + func = contract_c.get_function_from_signature(sig) + if not func: + var_name = sig[: sig.find("(")] + var = contract_c.get_state_variable_from_name(var_name) + assert var + assert get_function_id(var.solidity_signature) == int(hashes, 16) + else: + assert get_function_id(func.solidity_signature) == int(hashes, 16) + + +if __name__ == "__main__": + test_functions_ids() From ce1fc4f60a952632149b8e407b982e73d1466f79 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 3 Aug 2022 16:23:27 +0200 Subject: [PATCH 141/202] Fix type on variable.name --- slither/core/variables/variable.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/slither/core/variables/variable.py b/slither/core/variables/variable.py index 0558be52c..5fda02e93 100644 --- a/slither/core/variables/variable.py +++ b/slither/core/variables/variable.py @@ -66,11 +66,10 @@ class Variable(SourceMapping): return not self._initialized @property - def name(self) -> str: + def name(self) -> Optional[str]: """ str: variable name """ - assert self._name return self._name @name.setter From 350b26596da5c470263dac9ba05dc97b914abb81 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 3 Aug 2022 16:56:42 +0200 Subject: [PATCH 142/202] Minor --- slither/tools/erc_conformance/erc/ercs.py | 2 +- tests/test_functions_ids.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/slither/tools/erc_conformance/erc/ercs.py b/slither/tools/erc_conformance/erc/ercs.py index afc9a698a..ef459eef9 100644 --- a/slither/tools/erc_conformance/erc/ercs.py +++ b/slither/tools/erc_conformance/erc/ercs.py @@ -51,7 +51,7 @@ def _check_signature(erc_function, contract, ret): ret["missing_function"].append(missing_func.data) return - function_return_type = [export_return_type_from_variable(state_variable_as_function)] + function_return_type = export_return_type_from_variable(state_variable_as_function) function = state_variable_as_function function_view = True diff --git a/tests/test_functions_ids.py b/tests/test_functions_ids.py index 49818347f..eacbf4930 100644 --- a/tests/test_functions_ids.py +++ b/tests/test_functions_ids.py @@ -39,7 +39,7 @@ signatures = { def test_functions_ids() -> None: - solc_select.switch_global_version("0.7.0") + solc_select.switch_global_version("0.7.0", always_install=True) sl = Slither("tests/printers/functions_ids.sol") contracts_c = sl.get_contract_from_name("C") assert len(contracts_c) == 1 From 5fd74401664724aa498cc0e44b185f4776391ebe Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 4 Aug 2022 14:29:57 +0200 Subject: [PATCH 143/202] black --- slither/solc_parsing/solidity_types/type_parsing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/solc_parsing/solidity_types/type_parsing.py b/slither/solc_parsing/solidity_types/type_parsing.py index 65b3ea3ed..9a8ef5db2 100644 --- a/slither/solc_parsing/solidity_types/type_parsing.py +++ b/slither/solc_parsing/solidity_types/type_parsing.py @@ -397,7 +397,7 @@ def parse_type( name = renaming[name] if name in user_defined_types: return user_defined_types[name] - type_found = _find_from_type_name( + type_found = _find_from_type_name( name, functions, contracts, From 633e4adf5abceb682b8bffa62dcd1ba07c192d29 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 4 Aug 2022 14:34:34 +0200 Subject: [PATCH 144/202] regenerate tests --- ...t.sol.0.4.25.ArbitrarySendErc20Permit.json | 20 --- ...t.sol.0.5.16.ArbitrarySendErc20Permit.json | 20 --- ...t.sol.0.6.11.ArbitrarySendErc20Permit.json | 20 --- ...it.sol.0.7.6.ArbitrarySendErc20Permit.json | 20 --- ...it.sol.0.8.0.ArbitrarySendErc20Permit.json | 20 --- ...sol.0.4.25.ArbitrarySendErc20NoPermit.json | 15 --- ...sol.0.5.16.ArbitrarySendErc20NoPermit.json | 15 --- ...sol.0.6.11.ArbitrarySendErc20NoPermit.json | 15 --- ....sol.0.7.6.ArbitrarySendErc20NoPermit.json | 15 --- ....sol.0.8.0.ArbitrarySendErc20NoPermit.json | 15 --- ....sol.0.8.0.ArbitrarySendErc20NoPermit.json | 5 - ..._calls.sol.0.4.25.DeprecatedStandards.json | 46 +++---- ...tiply.sol.0.4.25.DivideBeforeMultiply.json | 5 - ...tiply.sol.0.5.16.DivideBeforeMultiply.json | 5 - ...tiply.sol.0.6.11.DivideBeforeMultiply.json | 5 - ...ltiply.sol.0.7.6.DivideBeforeMultiply.json | 5 - ..._mixup.sol.0.6.11.ShiftParameterMixup.json | 5 - ...r_mixup.sol.0.7.6.ShiftParameterMixup.json | 5 - ...terface.sol.0.4.25.MissingInheritance.json | 2 - ...terface.sol.0.5.16.MissingInheritance.json | 2 - ...terface.sol.0.6.11.MissingInheritance.json | 2 - ...nterface.sol.0.7.6.MissingInheritance.json | 2 - ...sol.0.4.22.MultipleConstructorSchemes.json | 5 - .../comment.sol.0.8.2.ProtectedVariables.json | 6 - ...verride.sol.0.8.0.RightToLeftOverride.json | 3 - ....sol.0.7.5.ShadowingAbstractDetection.json | 4 - ...gap_variable.sol.0.7.5.StateShadowing.json | 4 - ...ables.sol.0.4.25.SimilarVarsDetection.json | 6 - ...ables.sol.0.5.16.SimilarVarsDetection.json | 6 - ...ables.sol.0.6.11.SimilarVarsDetection.json | 6 - ...iables.sol.0.7.6.SimilarVarsDetection.json | 6 - ...utology.sol.0.4.25.TypeBasedTautology.json | 118 ++++++++---------- ...utology.sol.0.5.16.TypeBasedTautology.json | 118 ++++++++---------- ...utology.sol.0.6.11.TypeBasedTautology.json | 118 ++++++++---------- ...autology.sol.0.7.6.TypeBasedTautology.json | 118 ++++++++---------- 35 files changed, 236 insertions(+), 546 deletions(-) diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol.0.4.25.ArbitrarySendErc20Permit.json b/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol.0.4.25.ArbitrarySendErc20Permit.json index e8486f5e1..d31a3f423 100644 --- a/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol.0.4.25.ArbitrarySendErc20Permit.json +++ b/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol.0.4.25.ArbitrarySendErc20Permit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1794, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -29,7 +28,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -88,7 +86,6 @@ "source_mapping": { "start": 1986, "length": 50, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -106,7 +103,6 @@ "source_mapping": { "start": 1794, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -127,7 +123,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -199,7 +194,6 @@ "source_mapping": { "start": 1294, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -220,7 +214,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -279,7 +272,6 @@ "source_mapping": { "start": 1498, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -297,7 +289,6 @@ "source_mapping": { "start": 1294, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -318,7 +309,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -390,7 +380,6 @@ "source_mapping": { "start": 843, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -411,7 +400,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -470,7 +458,6 @@ "source_mapping": { "start": 1033, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -488,7 +475,6 @@ "source_mapping": { "start": 843, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -509,7 +495,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -581,7 +566,6 @@ "source_mapping": { "start": 1546, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -602,7 +586,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -661,7 +644,6 @@ "source_mapping": { "start": 1738, "length": 39, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -679,7 +661,6 @@ "source_mapping": { "start": 1546, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", @@ -700,7 +681,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol", diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol.0.5.16.ArbitrarySendErc20Permit.json b/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol.0.5.16.ArbitrarySendErc20Permit.json index 6452e06f9..cd4b2cb69 100644 --- a/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol.0.5.16.ArbitrarySendErc20Permit.json +++ b/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol.0.5.16.ArbitrarySendErc20Permit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1794, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -29,7 +28,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -88,7 +86,6 @@ "source_mapping": { "start": 1986, "length": 50, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -106,7 +103,6 @@ "source_mapping": { "start": 1794, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -127,7 +123,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -199,7 +194,6 @@ "source_mapping": { "start": 843, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -220,7 +214,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -279,7 +272,6 @@ "source_mapping": { "start": 1033, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -297,7 +289,6 @@ "source_mapping": { "start": 843, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -318,7 +309,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -390,7 +380,6 @@ "source_mapping": { "start": 1546, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -411,7 +400,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -470,7 +458,6 @@ "source_mapping": { "start": 1738, "length": 39, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -488,7 +475,6 @@ "source_mapping": { "start": 1546, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -509,7 +495,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -581,7 +566,6 @@ "source_mapping": { "start": 1294, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -602,7 +586,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -661,7 +644,6 @@ "source_mapping": { "start": 1498, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -679,7 +661,6 @@ "source_mapping": { "start": 1294, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", @@ -700,7 +681,6 @@ "source_mapping": { "start": 613, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol", diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol.0.6.11.ArbitrarySendErc20Permit.json b/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol.0.6.11.ArbitrarySendErc20Permit.json index 911573c67..16cad916f 100644 --- a/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol.0.6.11.ArbitrarySendErc20Permit.json +++ b/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol.0.6.11.ArbitrarySendErc20Permit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1564, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -29,7 +28,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -88,7 +86,6 @@ "source_mapping": { "start": 1756, "length": 39, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -106,7 +103,6 @@ "source_mapping": { "start": 1564, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -127,7 +123,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -199,7 +194,6 @@ "source_mapping": { "start": 1812, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -220,7 +214,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -279,7 +272,6 @@ "source_mapping": { "start": 2004, "length": 50, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -297,7 +289,6 @@ "source_mapping": { "start": 1812, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -318,7 +309,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -390,7 +380,6 @@ "source_mapping": { "start": 1312, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -411,7 +400,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -470,7 +458,6 @@ "source_mapping": { "start": 1516, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -488,7 +475,6 @@ "source_mapping": { "start": 1312, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -509,7 +495,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -581,7 +566,6 @@ "source_mapping": { "start": 861, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -602,7 +586,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -661,7 +644,6 @@ "source_mapping": { "start": 1051, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -679,7 +661,6 @@ "source_mapping": { "start": 861, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", @@ -700,7 +681,6 @@ "source_mapping": { "start": 631, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol", diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol.0.7.6.ArbitrarySendErc20Permit.json b/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol.0.7.6.ArbitrarySendErc20Permit.json index f31ee33e1..d243657e2 100644 --- a/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol.0.7.6.ArbitrarySendErc20Permit.json +++ b/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol.0.7.6.ArbitrarySendErc20Permit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1563, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -29,7 +28,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -88,7 +86,6 @@ "source_mapping": { "start": 1755, "length": 39, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -106,7 +103,6 @@ "source_mapping": { "start": 1563, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -127,7 +123,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -199,7 +194,6 @@ "source_mapping": { "start": 1811, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -220,7 +214,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -279,7 +272,6 @@ "source_mapping": { "start": 2003, "length": 50, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -297,7 +289,6 @@ "source_mapping": { "start": 1811, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -318,7 +309,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -390,7 +380,6 @@ "source_mapping": { "start": 860, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -411,7 +400,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -470,7 +458,6 @@ "source_mapping": { "start": 1050, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -488,7 +475,6 @@ "source_mapping": { "start": 860, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -509,7 +495,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -581,7 +566,6 @@ "source_mapping": { "start": 1311, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -602,7 +586,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -661,7 +644,6 @@ "source_mapping": { "start": 1515, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -679,7 +661,6 @@ "source_mapping": { "start": 1311, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", @@ -700,7 +681,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol", diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol.0.8.0.ArbitrarySendErc20Permit.json b/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol.0.8.0.ArbitrarySendErc20Permit.json index 8adf73c17..9533e8bd0 100644 --- a/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol.0.8.0.ArbitrarySendErc20Permit.json +++ b/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol.0.8.0.ArbitrarySendErc20Permit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1811, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -29,7 +28,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -88,7 +86,6 @@ "source_mapping": { "start": 2003, "length": 50, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -106,7 +103,6 @@ "source_mapping": { "start": 1811, "length": 249, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -127,7 +123,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -199,7 +194,6 @@ "source_mapping": { "start": 1311, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -220,7 +214,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -279,7 +272,6 @@ "source_mapping": { "start": 1515, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -297,7 +289,6 @@ "source_mapping": { "start": 1311, "length": 246, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -318,7 +309,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -390,7 +380,6 @@ "source_mapping": { "start": 860, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -411,7 +400,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -470,7 +458,6 @@ "source_mapping": { "start": 1050, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -488,7 +475,6 @@ "source_mapping": { "start": 860, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -509,7 +495,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -581,7 +566,6 @@ "source_mapping": { "start": 1563, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -602,7 +586,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -661,7 +644,6 @@ "source_mapping": { "start": 1755, "length": 39, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -679,7 +661,6 @@ "source_mapping": { "start": 1563, "length": 238, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", @@ -700,7 +681,6 @@ "source_mapping": { "start": 630, "length": 1433, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol", diff --git a/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol.0.4.25.ArbitrarySendErc20NoPermit.json b/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol.0.4.25.ArbitrarySendErc20NoPermit.json index cf6feaa5a..8330b947c 100644 --- a/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol.0.4.25.ArbitrarySendErc20NoPermit.json +++ b/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol.0.4.25.ArbitrarySendErc20NoPermit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 780, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -109,7 +107,6 @@ "source_mapping": { "start": 835, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -127,7 +124,6 @@ "source_mapping": { "start": 780, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -147,7 +143,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -241,7 +236,6 @@ "source_mapping": { "start": 1702, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -261,7 +255,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -342,7 +335,6 @@ "source_mapping": { "start": 1777, "length": 51, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -360,7 +352,6 @@ "source_mapping": { "start": 1702, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -380,7 +371,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -474,7 +464,6 @@ "source_mapping": { "start": 1434, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -494,7 +483,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -575,7 +563,6 @@ "source_mapping": { "start": 1509, "length": 40, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -593,7 +580,6 @@ "source_mapping": { "start": 1434, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", @@ -613,7 +599,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol", diff --git a/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol.0.5.16.ArbitrarySendErc20NoPermit.json b/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol.0.5.16.ArbitrarySendErc20NoPermit.json index 18a210262..c1ccea8b5 100644 --- a/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol.0.5.16.ArbitrarySendErc20NoPermit.json +++ b/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol.0.5.16.ArbitrarySendErc20NoPermit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1702, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -109,7 +107,6 @@ "source_mapping": { "start": 1777, "length": 51, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -127,7 +124,6 @@ "source_mapping": { "start": 1702, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -147,7 +143,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -241,7 +236,6 @@ "source_mapping": { "start": 780, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -261,7 +255,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -342,7 +335,6 @@ "source_mapping": { "start": 835, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -360,7 +352,6 @@ "source_mapping": { "start": 780, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -380,7 +371,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -474,7 +464,6 @@ "source_mapping": { "start": 1434, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -494,7 +483,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -575,7 +563,6 @@ "source_mapping": { "start": 1509, "length": 40, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -593,7 +580,6 @@ "source_mapping": { "start": 1434, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", @@ -613,7 +599,6 @@ "source_mapping": { "start": 394, "length": 1717, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol", diff --git a/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol.0.6.11.ArbitrarySendErc20NoPermit.json b/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol.0.6.11.ArbitrarySendErc20NoPermit.json index 8d6b2a67d..0e722340e 100644 --- a/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol.0.6.11.ArbitrarySendErc20NoPermit.json +++ b/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol.0.6.11.ArbitrarySendErc20NoPermit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 789, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 403, "length": 1721, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -109,7 +107,6 @@ "source_mapping": { "start": 844, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -127,7 +124,6 @@ "source_mapping": { "start": 789, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -147,7 +143,6 @@ "source_mapping": { "start": 403, "length": 1721, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -241,7 +236,6 @@ "source_mapping": { "start": 1711, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -261,7 +255,6 @@ "source_mapping": { "start": 403, "length": 1721, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -342,7 +335,6 @@ "source_mapping": { "start": 1786, "length": 51, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -360,7 +352,6 @@ "source_mapping": { "start": 1711, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -380,7 +371,6 @@ "source_mapping": { "start": 403, "length": 1721, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -474,7 +464,6 @@ "source_mapping": { "start": 1443, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -494,7 +483,6 @@ "source_mapping": { "start": 403, "length": 1721, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -575,7 +563,6 @@ "source_mapping": { "start": 1518, "length": 40, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -593,7 +580,6 @@ "source_mapping": { "start": 1443, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", @@ -613,7 +599,6 @@ "source_mapping": { "start": 403, "length": 1721, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol", diff --git a/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol.0.7.6.ArbitrarySendErc20NoPermit.json b/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol.0.7.6.ArbitrarySendErc20NoPermit.json index 72b78d67a..6ce6f095e 100644 --- a/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol.0.7.6.ArbitrarySendErc20NoPermit.json +++ b/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol.0.7.6.ArbitrarySendErc20NoPermit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1435, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -109,7 +107,6 @@ "source_mapping": { "start": 1510, "length": 40, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -127,7 +124,6 @@ "source_mapping": { "start": 1435, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -147,7 +143,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -241,7 +236,6 @@ "source_mapping": { "start": 781, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -261,7 +255,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -342,7 +335,6 @@ "source_mapping": { "start": 836, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -360,7 +352,6 @@ "source_mapping": { "start": 781, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -380,7 +371,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -474,7 +464,6 @@ "source_mapping": { "start": 1703, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -494,7 +483,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -575,7 +563,6 @@ "source_mapping": { "start": 1778, "length": 51, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -593,7 +580,6 @@ "source_mapping": { "start": 1703, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", @@ -613,7 +599,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol", diff --git a/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol.0.8.0.ArbitrarySendErc20NoPermit.json b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol.0.8.0.ArbitrarySendErc20NoPermit.json index de242ae4e..740c797d8 100644 --- a/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol.0.8.0.ArbitrarySendErc20NoPermit.json +++ b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol.0.8.0.ArbitrarySendErc20NoPermit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 1435, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -109,7 +107,6 @@ "source_mapping": { "start": 1510, "length": 40, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -127,7 +124,6 @@ "source_mapping": { "start": 1435, "length": 122, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -147,7 +143,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -241,7 +236,6 @@ "source_mapping": { "start": 1703, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -261,7 +255,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -342,7 +335,6 @@ "source_mapping": { "start": 1778, "length": 51, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -360,7 +352,6 @@ "source_mapping": { "start": 1703, "length": 133, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -380,7 +371,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -474,7 +464,6 @@ "source_mapping": { "start": 781, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -494,7 +483,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -575,7 +563,6 @@ "source_mapping": { "start": 836, "length": 35, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -593,7 +580,6 @@ "source_mapping": { "start": 781, "length": 97, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", @@ -613,7 +599,6 @@ "source_mapping": { "start": 402, "length": 1710, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol", diff --git a/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol.0.8.0.ArbitrarySendErc20NoPermit.json b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol.0.8.0.ArbitrarySendErc20NoPermit.json index e89b664bb..ca64318a1 100644 --- a/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol.0.8.0.ArbitrarySendErc20NoPermit.json +++ b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol.0.8.0.ArbitrarySendErc20NoPermit.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 196, "length": 88, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 138, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", @@ -56,7 +54,6 @@ "source_mapping": { "start": 234, "length": 46, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", @@ -74,7 +71,6 @@ "source_mapping": { "start": 196, "length": 88, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", @@ -94,7 +90,6 @@ "source_mapping": { "start": 138, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol", diff --git a/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json b/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json index ad121123d..841e68328 100644 --- a/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json +++ b/tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol.0.4.25.DeprecatedStandards.json @@ -4,20 +4,19 @@ "elements": [ { "type": "node", - "name": "msg.gas == msg.value", + "name": "", "source_mapping": { - "start": 140, - "length": 20, - "filename_used": "/GENERIC_PATH", + "start": 228, + "length": 5, "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "is_dependency": false, "lines": [ - 5 + 7 ], - "starting_column": 12, - "ending_column": 32 + "starting_column": 13, + "ending_column": 18 }, "type_specific_fields": { "parent": { @@ -26,7 +25,6 @@ "source_mapping": { "start": 21, "length": 229, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", @@ -50,7 +48,6 @@ "source_mapping": { "start": 0, "length": 252, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", @@ -78,10 +75,10 @@ } } ], - "description": "Deprecated standard detected msg.gas == msg.value (tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#5):\n\t- Usage of \"msg.gas\" should be replaced with \"gasleft()\"\n", - "markdown": "Deprecated standard detected [msg.gas == msg.value](tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L5):\n\t- Usage of \"msg.gas\" should be replaced with \"gasleft()\"\n", - "first_markdown_element": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L5", - "id": "e779713eabc28919356310f06b9413a8a3b7e9e713026d6cfae2d9f6839c1e57", + "description": "Deprecated standard detected THROW (tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#7):\n\t- Usage of \"throw\" should be replaced with \"revert()\"\n", + "markdown": "Deprecated standard detected [THROW](tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L7):\n\t- Usage of \"throw\" should be replaced with \"revert()\"\n", + "first_markdown_element": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L7", + "id": "5fbf4a42467953d0fd8d0661cbb4eeb81d4b40f69ae3820196bf10c4be53044e", "check": "deprecated-standards", "impact": "Informational", "confidence": "High" @@ -90,20 +87,19 @@ "elements": [ { "type": "node", - "name": "", + "name": "msg.gas == msg.value", "source_mapping": { - "start": 228, - "length": 5, - "filename_used": "/GENERIC_PATH", + "start": 140, + "length": 20, "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "is_dependency": false, "lines": [ - 7 + 5 ], - "starting_column": 13, - "ending_column": 18 + "starting_column": 12, + "ending_column": 32 }, "type_specific_fields": { "parent": { @@ -112,7 +108,6 @@ "source_mapping": { "start": 21, "length": 229, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", @@ -136,7 +131,6 @@ "source_mapping": { "start": 0, "length": 252, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol", @@ -164,10 +158,10 @@ } } ], - "description": "Deprecated standard detected THROW (tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#7):\n\t- Usage of \"throw\" should be replaced with \"revert()\"\n", - "markdown": "Deprecated standard detected [THROW](tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L7):\n\t- Usage of \"throw\" should be replaced with \"revert()\"\n", - "first_markdown_element": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L7", - "id": "5fbf4a42467953d0fd8d0661cbb4eeb81d4b40f69ae3820196bf10c4be53044e", + "description": "Deprecated standard detected msg.gas == msg.value (tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#5):\n\t- Usage of \"msg.gas\" should be replaced with \"gasleft()\"\n", + "markdown": "Deprecated standard detected [msg.gas == msg.value](tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L5):\n\t- Usage of \"msg.gas\" should be replaced with \"gasleft()\"\n", + "first_markdown_element": "tests/detectors/deprecated-standards/0.4.25/deprecated_calls.sol#L5", + "id": "e779713eabc28919356310f06b9413a8a3b7e9e713026d6cfae2d9f6839c1e57", "check": "deprecated-standards", "impact": "Informational", "confidence": "High" diff --git a/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json index 529f9444b..d164f9c60 100644 --- a/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json +++ b/tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol.0.4.25.DivideBeforeMultiply.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", @@ -54,7 +52,6 @@ "source_mapping": { "start": 81, "length": 18, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", @@ -72,7 +69,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", @@ -92,7 +88,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.4.25/divide_before_multiply.sol", diff --git a/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json index 4421fa0ef..6aee4f301 100644 --- a/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json +++ b/tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol.0.5.16.DivideBeforeMultiply.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", @@ -54,7 +52,6 @@ "source_mapping": { "start": 81, "length": 18, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", @@ -72,7 +69,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", @@ -92,7 +88,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.5.16/divide_before_multiply.sol", diff --git a/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json index 564cac140..2639708b2 100644 --- a/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json +++ b/tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol.0.6.11.DivideBeforeMultiply.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", @@ -54,7 +52,6 @@ "source_mapping": { "start": 81, "length": 18, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", @@ -72,7 +69,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", @@ -92,7 +88,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.6.11/divide_before_multiply.sol", diff --git a/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json b/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json index 23dd10c28..69310a741 100644 --- a/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json +++ b/tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol.0.7.6.DivideBeforeMultiply.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", @@ -54,7 +52,6 @@ "source_mapping": { "start": 81, "length": 18, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", @@ -72,7 +69,6 @@ "source_mapping": { "start": 14, "length": 92, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", @@ -92,7 +88,6 @@ "source_mapping": { "start": 0, "length": 108, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/divide-before-multiply/0.7.6/divide_before_multiply.sol", diff --git a/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json b/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json index e6a1c784f..25e424df0 100644 --- a/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json +++ b/tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol.0.6.11.ShiftParameterMixup.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 19, "length": 106, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", @@ -30,7 +29,6 @@ "source_mapping": { "start": 0, "length": 128, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", @@ -58,7 +56,6 @@ "source_mapping": { "start": 93, "length": 14, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", @@ -76,7 +73,6 @@ "source_mapping": { "start": 19, "length": 106, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", @@ -98,7 +94,6 @@ "source_mapping": { "start": 0, "length": 128, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.6.11/shift_parameter_mixup.sol", diff --git a/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json b/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json index 5960eb824..f8d135a4d 100644 --- a/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json +++ b/tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol.0.7.6.ShiftParameterMixup.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 19, "length": 106, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", @@ -30,7 +29,6 @@ "source_mapping": { "start": 0, "length": 128, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", @@ -58,7 +56,6 @@ "source_mapping": { "start": 93, "length": 14, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", @@ -76,7 +73,6 @@ "source_mapping": { "start": 19, "length": 106, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", @@ -98,7 +94,6 @@ "source_mapping": { "start": 0, "length": 128, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/incorrect-shift/0.7.6/shift_parameter_mixup.sol", diff --git a/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json b/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json index bb52cfa9b..467d65961 100644 --- a/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json +++ b/tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol.0.4.25.MissingInheritance.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 68, "length": 89, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", @@ -31,7 +30,6 @@ "source_mapping": { "start": 0, "length": 66, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.4.25/unimplemented_interface.sol", diff --git a/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json b/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json index 4dc27f5b5..5561e4bf8 100644 --- a/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json +++ b/tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol.0.5.16.MissingInheritance.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 68, "length": 89, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", @@ -31,7 +30,6 @@ "source_mapping": { "start": 0, "length": 66, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.5.16/unimplemented_interface.sol", diff --git a/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json b/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json index 800114e0c..40adbfb75 100644 --- a/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json +++ b/tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol.0.6.11.MissingInheritance.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 68, "length": 89, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", @@ -31,7 +30,6 @@ "source_mapping": { "start": 0, "length": 66, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.6.11/unimplemented_interface.sol", diff --git a/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json b/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json index 7746c4a37..734587caa 100644 --- a/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json +++ b/tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol.0.7.6.MissingInheritance.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 68, "length": 89, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", @@ -31,7 +30,6 @@ "source_mapping": { "start": 0, "length": 66, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/missing-inheritance/0.7.6/unimplemented_interface.sol", diff --git a/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json b/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json index cf72d53fb..01975d3bd 100644 --- a/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json +++ b/tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol.0.4.22.MultipleConstructorSchemes.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 0, "length": 193, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", @@ -39,7 +38,6 @@ "source_mapping": { "start": 29, "length": 43, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", @@ -59,7 +57,6 @@ "source_mapping": { "start": 0, "length": 193, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", @@ -93,7 +90,6 @@ "source_mapping": { "start": 77, "length": 42, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", @@ -113,7 +109,6 @@ "source_mapping": { "start": 0, "length": 193, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/multiple-constructors/0.4.22/multiple_constructor_schemes.sol", diff --git a/tests/detectors/protected-vars/0.8.2/comment.sol.0.8.2.ProtectedVariables.json b/tests/detectors/protected-vars/0.8.2/comment.sol.0.8.2.ProtectedVariables.json index 3b1d1eb07..cb1ead621 100644 --- a/tests/detectors/protected-vars/0.8.2/comment.sol.0.8.2.ProtectedVariables.json +++ b/tests/detectors/protected-vars/0.8.2/comment.sol.0.8.2.ProtectedVariables.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 653, "length": 85, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/protected-vars/0.8.2/comment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/protected-vars/0.8.2/comment.sol", @@ -28,7 +27,6 @@ "source_mapping": { "start": 55, "length": 685, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/protected-vars/0.8.2/comment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/protected-vars/0.8.2/comment.sol", @@ -78,7 +76,6 @@ "source_mapping": { "start": 210, "length": 88, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/protected-vars/0.8.2/comment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/protected-vars/0.8.2/comment.sol", @@ -99,7 +96,6 @@ "source_mapping": { "start": 55, "length": 685, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/protected-vars/0.8.2/comment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/protected-vars/0.8.2/comment.sol", @@ -149,7 +145,6 @@ "source_mapping": { "start": 184, "length": 19, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/protected-vars/0.8.2/comment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/protected-vars/0.8.2/comment.sol", @@ -167,7 +162,6 @@ "source_mapping": { "start": 55, "length": 685, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/protected-vars/0.8.2/comment.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/protected-vars/0.8.2/comment.sol", diff --git a/tests/detectors/rtlo/0.8.0/unicode_direction_override.sol.0.8.0.RightToLeftOverride.json b/tests/detectors/rtlo/0.8.0/unicode_direction_override.sol.0.8.0.RightToLeftOverride.json index 97160fb1f..0ea71a81f 100644 --- a/tests/detectors/rtlo/0.8.0/unicode_direction_override.sol.0.8.0.RightToLeftOverride.json +++ b/tests/detectors/rtlo/0.8.0/unicode_direction_override.sol.0.8.0.RightToLeftOverride.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 336, "length": 3, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/rtlo/0.8.0/unicode_direction_override.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/rtlo/0.8.0/unicode_direction_override.sol", @@ -37,7 +36,6 @@ "source_mapping": { "start": 348, "length": 3, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/rtlo/0.8.0/unicode_direction_override.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/rtlo/0.8.0/unicode_direction_override.sol", @@ -66,7 +64,6 @@ "source_mapping": { "start": 342, "length": 3, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/rtlo/0.8.0/unicode_direction_override.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/rtlo/0.8.0/unicode_direction_override.sol", diff --git a/tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol.0.7.5.ShadowingAbstractDetection.json b/tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol.0.7.5.ShadowingAbstractDetection.json index c20743f0d..97c3998d4 100644 --- a/tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol.0.7.5.ShadowingAbstractDetection.json +++ b/tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol.0.7.5.ShadowingAbstractDetection.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 127, "length": 24, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", @@ -26,7 +25,6 @@ "source_mapping": { "start": 81, "length": 73, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", @@ -48,7 +46,6 @@ "source_mapping": { "start": 51, "length": 25, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", @@ -66,7 +63,6 @@ "source_mapping": { "start": 24, "length": 55, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-abstract/0.7.5/public_gap_variable.sol", diff --git a/tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol.0.7.5.StateShadowing.json b/tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol.0.7.5.StateShadowing.json index e40c6a413..fb9824ca1 100644 --- a/tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol.0.7.5.StateShadowing.json +++ b/tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol.0.7.5.StateShadowing.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 156, "length": 24, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", @@ -26,7 +25,6 @@ "source_mapping": { "start": 110, "length": 102, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", @@ -49,7 +47,6 @@ "source_mapping": { "start": 51, "length": 25, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", @@ -67,7 +64,6 @@ "source_mapping": { "start": 24, "length": 84, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/shadowing-state/0.7.5/public_gap_variable.sol", diff --git a/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json b/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json index 3393d1d06..71d0228f9 100644 --- a/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json +++ b/tests/detectors/similar-names/0.4.25/similar_variables.sol.0.4.25.SimilarVarsDetection.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 69, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", @@ -26,7 +25,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", @@ -48,7 +46,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", @@ -78,7 +75,6 @@ "source_mapping": { "start": 100, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", @@ -96,7 +92,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", @@ -118,7 +113,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.4.25/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.4.25/similar_variables.sol", diff --git a/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json b/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json index 543023e43..29a08ad8a 100644 --- a/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json +++ b/tests/detectors/similar-names/0.5.16/similar_variables.sol.0.5.16.SimilarVarsDetection.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 69, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", @@ -26,7 +25,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", @@ -48,7 +46,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", @@ -78,7 +75,6 @@ "source_mapping": { "start": 100, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", @@ -96,7 +92,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", @@ -118,7 +113,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.5.16/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.5.16/similar_variables.sol", diff --git a/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json b/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json index 89aa1e5dc..18be023a0 100644 --- a/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json +++ b/tests/detectors/similar-names/0.6.11/similar_variables.sol.0.6.11.SimilarVarsDetection.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 69, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", @@ -26,7 +25,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", @@ -48,7 +46,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", @@ -78,7 +75,6 @@ "source_mapping": { "start": 100, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", @@ -96,7 +92,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", @@ -118,7 +113,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.6.11/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.6.11/similar_variables.sol", diff --git a/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json b/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json index dd05b4133..fbb5dd766 100644 --- a/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json +++ b/tests/detectors/similar-names/0.7.6/similar_variables.sol.0.7.6.SimilarVarsDetection.json @@ -8,7 +8,6 @@ "source_mapping": { "start": 69, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", @@ -26,7 +25,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", @@ -48,7 +46,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", @@ -78,7 +75,6 @@ "source_mapping": { "start": 100, "length": 21, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", @@ -96,7 +92,6 @@ "source_mapping": { "start": 23, "length": 149, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", @@ -118,7 +113,6 @@ "source_mapping": { "start": 0, "length": 174, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/similar-names/0.7.6/similar_variables.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/similar-names/0.7.6/similar_variables.sol", diff --git a/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json b/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json index 1592c496c..6164ab1c6 100644 --- a/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json +++ b/tests/detectors/tautology/0.4.25/type_based_tautology.sol.0.4.25.TypeBasedTautology.json @@ -4,22 +4,18 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -31,7 +27,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", @@ -55,45 +50,40 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } }, { "type": "node", - "name": "x >= 0", + "name": "(y < 512)", "source_mapping": { - "start": 69, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 202, + "length": 16, "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "is_dependency": false, "lines": [ - 3 + 10 ], - "starting_column": 13, - "ending_column": 19 + "starting_column": 9, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -105,7 +95,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", @@ -129,16 +118,16 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } } } } ], - "description": "A.f(uint256) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.4.25/type_based_tautology.sol#3)\n", - "markdown": "[A.f(uint256)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L3)\n", - "first_markdown_element": "tests/detectors/tautology/0.4.25/type_based_tautology.sol#L2-L7", - "id": "c9b8085dbb7e6d0dfc2ee5711ac45a70e4c0f494ac4efcae42a6b947e3170ddb", + "description": "A.g(uint8) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.4.25/type_based_tautology.sol#L9-L11", + "id": "75dfe0b8776a8cf490a4e3f30366dec173fd0dc7418335f77c68ba5bca536382", "check": "tautology", "impact": "Medium", "confidence": "High" @@ -147,19 +136,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -171,7 +162,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", @@ -195,42 +185,43 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } }, { "type": "node", - "name": "(y < 512)", + "name": "x >= 0", "source_mapping": { - "start": 202, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 69, + "length": 6, "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "is_dependency": false, "lines": [ - 10 + 3 ], - "starting_column": 9, - "ending_column": 25 + "starting_column": 13, + "ending_column": 19 }, "type_specific_fields": { "parent": { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -242,7 +233,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.4.25/type_based_tautology.sol", @@ -266,16 +256,16 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } } } } ], - "description": "A.g(uint8) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#10)\n", - "markdown": "[A.g(uint8)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L10)\n", - "first_markdown_element": "tests/detectors/tautology/0.4.25/type_based_tautology.sol#L9-L11", - "id": "75dfe0b8776a8cf490a4e3f30366dec173fd0dc7418335f77c68ba5bca536382", + "description": "A.f(uint256) (tests/detectors/tautology/0.4.25/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.4.25/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.4.25/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.4.25/type_based_tautology.sol#L2-L7", + "id": "c9b8085dbb7e6d0dfc2ee5711ac45a70e4c0f494ac4efcae42a6b947e3170ddb", "check": "tautology", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json b/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json index 2b347f0e8..35a608c61 100644 --- a/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json +++ b/tests/detectors/tautology/0.5.16/type_based_tautology.sol.0.5.16.TypeBasedTautology.json @@ -4,22 +4,18 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -31,7 +27,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", @@ -55,45 +50,40 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } }, { "type": "node", - "name": "x >= 0", + "name": "(y < 512)", "source_mapping": { - "start": 69, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 202, + "length": 16, "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "is_dependency": false, "lines": [ - 3 + 10 ], - "starting_column": 13, - "ending_column": 19 + "starting_column": 9, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -105,7 +95,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", @@ -129,16 +118,16 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } } } } ], - "description": "A.f(uint256) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.5.16/type_based_tautology.sol#3)\n", - "markdown": "[A.f(uint256)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L3)\n", - "first_markdown_element": "tests/detectors/tautology/0.5.16/type_based_tautology.sol#L2-L7", - "id": "764eb2c7aa5cd1a30d16deb620e0dc3b8a9e9170978908bcc1f6fc1ac5a8daa1", + "description": "A.g(uint8) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.5.16/type_based_tautology.sol#L9-L11", + "id": "0c29aa92764cb30104a4c4ba02e307d5949143b4cbfa2d8a52d9473140907872", "check": "tautology", "impact": "Medium", "confidence": "High" @@ -147,19 +136,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -171,7 +162,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", @@ -195,42 +185,43 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } }, { "type": "node", - "name": "(y < 512)", + "name": "x >= 0", "source_mapping": { - "start": 202, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 69, + "length": 6, "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "is_dependency": false, "lines": [ - 10 + 3 ], - "starting_column": 9, - "ending_column": 25 + "starting_column": 13, + "ending_column": 19 }, "type_specific_fields": { "parent": { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -242,7 +233,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.5.16/type_based_tautology.sol", @@ -266,16 +256,16 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } } } } ], - "description": "A.g(uint8) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#10)\n", - "markdown": "[A.g(uint8)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L10)\n", - "first_markdown_element": "tests/detectors/tautology/0.5.16/type_based_tautology.sol#L9-L11", - "id": "0c29aa92764cb30104a4c4ba02e307d5949143b4cbfa2d8a52d9473140907872", + "description": "A.f(uint256) (tests/detectors/tautology/0.5.16/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.5.16/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.5.16/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.5.16/type_based_tautology.sol#L2-L7", + "id": "764eb2c7aa5cd1a30d16deb620e0dc3b8a9e9170978908bcc1f6fc1ac5a8daa1", "check": "tautology", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json b/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json index 971033eae..38090fa5b 100644 --- a/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json +++ b/tests/detectors/tautology/0.6.11/type_based_tautology.sol.0.6.11.TypeBasedTautology.json @@ -4,22 +4,18 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -31,7 +27,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", @@ -55,45 +50,40 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } }, { "type": "node", - "name": "x >= 0", + "name": "(y < 512)", "source_mapping": { - "start": 69, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 202, + "length": 16, "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "is_dependency": false, "lines": [ - 3 + 10 ], - "starting_column": 13, - "ending_column": 19 + "starting_column": 9, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -105,7 +95,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", @@ -129,16 +118,16 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } } } } ], - "description": "A.f(uint256) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.6.11/type_based_tautology.sol#3)\n", - "markdown": "[A.f(uint256)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L3)\n", - "first_markdown_element": "tests/detectors/tautology/0.6.11/type_based_tautology.sol#L2-L7", - "id": "fec3df769045cbe4984e50b2f651f60ffc36b116bc7273a64f761e8fbfc674b9", + "description": "A.g(uint8) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.6.11/type_based_tautology.sol#L9-L11", + "id": "51bc777574da16aab9aefb9d0294fdad9ef3a44136e9e7b1f7e05cfd9c1d4e54", "check": "tautology", "impact": "Medium", "confidence": "High" @@ -147,19 +136,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -171,7 +162,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", @@ -195,42 +185,43 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } }, { "type": "node", - "name": "(y < 512)", + "name": "x >= 0", "source_mapping": { - "start": 202, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 69, + "length": 6, "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "is_dependency": false, "lines": [ - 10 + 3 ], - "starting_column": 9, - "ending_column": 25 + "starting_column": 13, + "ending_column": 19 }, "type_specific_fields": { "parent": { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -242,7 +233,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.6.11/type_based_tautology.sol", @@ -266,16 +256,16 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } } } } ], - "description": "A.g(uint8) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#10)\n", - "markdown": "[A.g(uint8)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L10)\n", - "first_markdown_element": "tests/detectors/tautology/0.6.11/type_based_tautology.sol#L9-L11", - "id": "51bc777574da16aab9aefb9d0294fdad9ef3a44136e9e7b1f7e05cfd9c1d4e54", + "description": "A.f(uint256) (tests/detectors/tautology/0.6.11/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.6.11/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.6.11/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.6.11/type_based_tautology.sol#L2-L7", + "id": "fec3df769045cbe4984e50b2f651f60ffc36b116bc7273a64f761e8fbfc674b9", "check": "tautology", "impact": "Medium", "confidence": "High" diff --git a/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json b/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json index 633bbaa05..a667c1551 100644 --- a/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json +++ b/tests/detectors/tautology/0.7.6/type_based_tautology.sol.0.7.6.TypeBasedTautology.json @@ -4,22 +4,18 @@ "elements": [ { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -31,7 +27,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", @@ -55,45 +50,40 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } }, { "type": "node", - "name": "x >= 0", + "name": "(y < 512)", "source_mapping": { - "start": 69, - "length": 6, - "filename_used": "/GENERIC_PATH", + "start": 202, + "length": 16, "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "is_dependency": false, "lines": [ - 3 + 10 ], - "starting_column": 13, - "ending_column": 19 + "starting_column": 9, + "ending_column": 25 }, "type_specific_fields": { "parent": { "type": "function", - "name": "f", + "name": "g", "source_mapping": { - "start": 14, - "length": 133, - "filename_used": "/GENERIC_PATH", + "start": 150, + "length": 80, "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "is_dependency": false, "lines": [ - 2, - 3, - 4, - 5, - 6, - 7 + 9, + 10, + 11 ], "starting_column": 2, "ending_column": 3 @@ -105,7 +95,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", @@ -129,16 +118,16 @@ "ending_column": 0 } }, - "signature": "f(uint256)" + "signature": "g(uint8)" } } } } ], - "description": "A.f(uint256) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.7.6/type_based_tautology.sol#3)\n", - "markdown": "[A.f(uint256)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L3)\n", - "first_markdown_element": "tests/detectors/tautology/0.7.6/type_based_tautology.sol#L2-L7", - "id": "e444c1c7287bff97cae3505472d10d8ef5e01aa1f2e7660c81a3beb11eeaea0e", + "description": "A.g(uint8) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#10)\n", + "markdown": "[A.g(uint8)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L10)\n", + "first_markdown_element": "tests/detectors/tautology/0.7.6/type_based_tautology.sol#L9-L11", + "id": "036b1ecab6ee0dcb07806dbd8ffb05abf29941bbbcbb161da0013b31be51b3de", "check": "tautology", "impact": "Medium", "confidence": "High" @@ -147,19 +136,21 @@ "elements": [ { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -171,7 +162,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", @@ -195,42 +185,43 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } }, { "type": "node", - "name": "(y < 512)", + "name": "x >= 0", "source_mapping": { - "start": 202, - "length": 16, - "filename_used": "/GENERIC_PATH", + "start": 69, + "length": 6, "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "is_dependency": false, "lines": [ - 10 + 3 ], - "starting_column": 9, - "ending_column": 25 + "starting_column": 13, + "ending_column": 19 }, "type_specific_fields": { "parent": { "type": "function", - "name": "g", + "name": "f", "source_mapping": { - "start": 150, - "length": 80, - "filename_used": "/GENERIC_PATH", + "start": 14, + "length": 133, "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "is_dependency": false, "lines": [ - 9, - 10, - 11 + 2, + 3, + 4, + 5, + 6, + 7 ], "starting_column": 2, "ending_column": 3 @@ -242,7 +233,6 @@ "source_mapping": { "start": 0, "length": 232, - "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", "filename_absolute": "/GENERIC_PATH", "filename_short": "tests/detectors/tautology/0.7.6/type_based_tautology.sol", @@ -266,16 +256,16 @@ "ending_column": 0 } }, - "signature": "g(uint8)" + "signature": "f(uint256)" } } } } ], - "description": "A.g(uint8) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#9-11) contains a tautology or contradiction:\n\t- (y < 512) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#10)\n", - "markdown": "[A.g(uint8)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L9-L11) contains a tautology or contradiction:\n\t- [(y < 512)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L10)\n", - "first_markdown_element": "tests/detectors/tautology/0.7.6/type_based_tautology.sol#L9-L11", - "id": "036b1ecab6ee0dcb07806dbd8ffb05abf29941bbbcbb161da0013b31be51b3de", + "description": "A.f(uint256) (tests/detectors/tautology/0.7.6/type_based_tautology.sol#2-7) contains a tautology or contradiction:\n\t- x >= 0 (tests/detectors/tautology/0.7.6/type_based_tautology.sol#3)\n", + "markdown": "[A.f(uint256)](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L2-L7) contains a tautology or contradiction:\n\t- [x >= 0](tests/detectors/tautology/0.7.6/type_based_tautology.sol#L3)\n", + "first_markdown_element": "tests/detectors/tautology/0.7.6/type_based_tautology.sol#L2-L7", + "id": "e444c1c7287bff97cae3505472d10d8ef5e01aa1f2e7660c81a3beb11eeaea0e", "check": "tautology", "impact": "Medium", "confidence": "High" From 091fe7ac131f83815c32ef4fe8ffd574b39acab6 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 4 Aug 2022 14:41:46 +0200 Subject: [PATCH 145/202] Fix pytest --- .github/workflows/features.yml | 2 ++ .github/workflows/pytest.yml | 42 ---------------------------------- 2 files changed, 2 insertions(+), 42 deletions(-) delete mode 100644 .github/workflows/pytest.yml diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml index 18d5d49b4..f9323a015 100644 --- a/.github/workflows/features.yml +++ b/.github/workflows/features.yml @@ -48,3 +48,5 @@ jobs: pytest tests/test_constant_folding_unary.py pytest tests/slithir/test_ternary_expressions.py pytest tests/test_functions_ids.py + gpytest tests/test_function.py + pytest tests/test_source_mapping.py diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml deleted file mode 100644 index 185bcf325..000000000 --- a/.github/workflows/pytest.yml +++ /dev/null @@ -1,42 +0,0 @@ ---- -name: API tests - -defaults: - run: - # To load bashrc - shell: bash -ieo pipefail {0} - -on: - pull_request: - branches: [master, dev] - schedule: - # run CI every day even if no PRs/merges occur - - cron: '0 12 * * *' - -jobs: - build: - name: Parser tests - runs-on: ubuntu-latest - - steps: - - name: Checkout Code - uses: actions/checkout@v2 - - - name: Set up Python 3.6 - uses: actions/setup-python@v2 - with: - python-version: 3.6 - - - name: Install dependencies - run: | - python setup.py install - pip install pytest - pip install solc-select - solc-select install all - solc-select use 0.6.12 - - - name: Test with pytest - run: | - pytest tests/test_function.py - pytest tests/test_source_mapping.py - From 48b5202551f722d769e50bccfbec8783c36428d3 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 4 Aug 2022 14:56:14 +0200 Subject: [PATCH 146/202] Minor --- .github/workflows/features.yml | 2 +- slither/solc_parsing/expressions/expression_parsing.py | 9 --------- tests/test_function.py | 2 ++ tests/test_source_mapping.py | 6 +++--- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml index f9323a015..7414e9ebe 100644 --- a/.github/workflows/features.yml +++ b/.github/workflows/features.yml @@ -48,5 +48,5 @@ jobs: pytest tests/test_constant_folding_unary.py pytest tests/slithir/test_ternary_expressions.py pytest tests/test_functions_ids.py - gpytest tests/test_function.py + pytest tests/test_function.py pytest tests/test_source_mapping.py diff --git a/slither/solc_parsing/expressions/expression_parsing.py b/slither/solc_parsing/expressions/expression_parsing.py index 60c8fb54a..0f319b104 100644 --- a/slither/solc_parsing/expressions/expression_parsing.py +++ b/slither/solc_parsing/expressions/expression_parsing.py @@ -464,8 +464,6 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) identifier = Identifier(var) identifier.set_offset(src, caller_context.compilation_unit) - # for i in range(0, identifier.source_mapping.length+1): - # caller_context.compilation_unit.core.offset_to_objects[identifier.source_mapping.filename][identifier.source_mapping.start + i] = var var.references.append(identifier.source_mapping) return identifier @@ -522,9 +520,6 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) sup = SuperIdentifier(var) sup.set_offset(src, caller_context.compilation_unit) - # for i in range(0, sup.source_mapping.length + 1): - # caller_context.compilation_unit.core.offset_to_objects[sup.source_mapping.filename][ - # sup.source_mapping.start + i] = var var.references.append(sup.source_mapping) return sup @@ -655,10 +650,6 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) identifier = Identifier(var) identifier.set_offset(src, caller_context.compilation_unit) - # for i in range(0, identifier.source_mapping.length + 1): - # caller_context.compilation_unit.core.offset_to_objects[identifier.source_mapping.filename][ - # identifier.source_mapping.start + i] = var - var.references.append(identifier.source_mapping) return identifier diff --git a/tests/test_function.py b/tests/test_function.py index 94420c2fd..19fa596ab 100644 --- a/tests/test_function.py +++ b/tests/test_function.py @@ -4,6 +4,7 @@ tests that `tests/test_function.sol` gets translated into correct `slither.core.declarations.Function` objects or its subclasses and that these objects behave correctly. """ +from solc_select import solc_select from slither import Slither from slither.core.declarations.function import FunctionType @@ -12,6 +13,7 @@ from slither.core.solidity_types.elementary_type import ElementaryType def test_functions(): # pylint: disable=too-many-statements + solc_select.switch_global_version("0.6.12", always_install=True) slither = Slither("tests/test_function.sol") compilation_unit = slither.compilation_units[0] functions = compilation_unit.get_contract_from_name("TestFunction")[ diff --git a/tests/test_source_mapping.py b/tests/test_source_mapping.py index 3b0a13ff5..2ada121fe 100644 --- a/tests/test_source_mapping.py +++ b/tests/test_source_mapping.py @@ -1,8 +1,11 @@ +from solc_select import solc_select + from slither import Slither from slither.core.declarations import Function def test_source_mapping(): + solc_select.switch_global_version("0.6.12", always_install=True) slither = Slither("tests/src_mapping/inheritance.sol") # Check if A.f() is at the offset 27 @@ -78,6 +81,3 @@ def test_source_mapping(): (x.start, x.end) for x in slither.offset_to_implementations("tests/src_mapping/inheritance.sol", 93) } == {(17, 53), (193, 230), (129, 166)} - - -test_source_mapping() From 5287b0aebf3452b174c1910ff903f43b48aba683 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 4 Aug 2022 16:26:21 +0200 Subject: [PATCH 147/202] Minor --- slither/tools/read_storage/__main__.py | 23 +++++++++++----------- slither/tools/read_storage/read_storage.py | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index 435a13872..f3cc90efc 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -23,7 +23,7 @@ def parse_args() -> argparse.Namespace: + "To retrieve a contract's storage layout:\n" + "\tslither-read-storage $TARGET address --contract-name $NAME --layout\n" + "To retrieve a contract's storage layout and values:\n" - + "\tslither-read-storage $TARGET address --contract-name $NAME --layout --values\n" + + "\tslither-read-storage $TARGET address --contract-name $NAME --layout --value\n" + "TARGET can be a contract address or project directory" ), ) @@ -73,9 +73,9 @@ def parse_args() -> argparse.Namespace: ) parser.add_argument( - "--layout", - action="store_true", - help="Toggle used to write a JSON file with the entire storage layout.", + "--json", + action="store", + help="Save the result in a JSON file.", ) parser.add_argument( @@ -132,15 +132,14 @@ def main() -> None: srs.rpc = args.rpc_url - if args.layout: - srs.get_all_storage_variables() - srs.get_storage_layout() - else: - assert args.variable_name + if args.variable_name: # Use a lambda func to only return variables that have same name as target. # x is a tuple (`Contract`, `StateVariable`). srs.get_all_storage_variables(lambda x: bool(x[1].name == args.variable_name)) srs.get_target_variables(**vars(args)) + else: + srs.get_all_storage_variables() + srs.get_storage_layout() # To retrieve slot values an rpc url is required. if args.value: @@ -150,9 +149,9 @@ def main() -> None: if args.table: srs.walk_slot_info(srs.convert_slot_info_to_rows) print(srs.table) - # Only write file if storage layout is used. TODO add flag for file - elif len(srs.slot_info) > 1: - with open("storage_layout.json", "w", encoding="utf-8") as file: + + if args.json: + with open(args.json, "w", encoding="utf-8") as file: slot_infos_json = srs.to_json() json.dump(slot_infos_json, file, indent=4) diff --git a/slither/tools/read_storage/read_storage.py b/slither/tools/read_storage/read_storage.py index 78e0d610b..c9523f733 100644 --- a/slither/tools/read_storage/read_storage.py +++ b/slither/tools/read_storage/read_storage.py @@ -106,7 +106,7 @@ class SlitherReadStorage: def get_storage_layout(self) -> None: """Retrieves the storage layout of entire contract.""" - tmp = {} + tmp: Dict[str, SlotInfo] = {} for contract, var in self.target_variables: type_ = var.type info = self.get_storage_slot(var, contract) From 1576e00cc9c3657ef01a78de44a109095cb64d97 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 14:26:47 +0200 Subject: [PATCH 148/202] Add 0.6.12 --- slither/detectors/functions/external_function.py | 1 + 1 file changed, 1 insertion(+) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index a24bc0e93..d38c0cb30 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -126,6 +126,7 @@ class ExternalFunction(AbstractDetector): "0.6.9", "0.6.10", "0.6.11", + "0.6.12", ]: return results From 36879c057db04d2b1679389fcbef83c281157333 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 14:40:19 +0200 Subject: [PATCH 149/202] Improve python types --- .../detectors/functions/external_function.py | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/slither/detectors/functions/external_function.py b/slither/detectors/functions/external_function.py index d38c0cb30..631e5ffc1 100644 --- a/slither/detectors/functions/external_function.py +++ b/slither/detectors/functions/external_function.py @@ -1,10 +1,15 @@ -from slither.core.solidity_types.array_type import ArrayType +from typing import List, Set + +from slither.core.declarations import Function, FunctionContract, Contract from slither.core.declarations.structure import Structure +from slither.core.solidity_types.array_type import ArrayType from slither.core.solidity_types.user_defined_type import UserDefinedType +from slither.core.variables.variable import Variable from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification -from slither.slithir.operations import SolidityCall -from slither.slithir.operations import InternalCall, InternalDynamicCall from slither.formatters.functions.external_function import custom_format +from slither.slithir.operations import InternalCall, InternalDynamicCall +from slither.slithir.operations import SolidityCall +from slither.utils.output import Output class ExternalFunction(AbstractDetector): @@ -27,7 +32,7 @@ class ExternalFunction(AbstractDetector): WIKI_RECOMMENDATION = "Use the `external` attribute for functions never called from the contract, and change the location of immutable parameters to `calldata` to save gas." @staticmethod - def detect_functions_called(contract): + def detect_functions_called(contract: Contract) -> List[Function]: """Returns a list of InternallCall, SolidityCall calls made in a function @@ -38,6 +43,8 @@ class ExternalFunction(AbstractDetector): # Obtain all functions reachable by this contract. for func in contract.all_functions_called: + if not isinstance(func, Function): + continue # Loop through all nodes in the function, add all calls to a list. for node in func.nodes: for ir in node.irs: @@ -46,7 +53,7 @@ class ExternalFunction(AbstractDetector): return result @staticmethod - def _contains_internal_dynamic_call(contract): + def _contains_internal_dynamic_call(contract: Contract) -> bool: """ Checks if a contract contains a dynamic call either in a direct definition, or through inheritance. @@ -54,6 +61,8 @@ class ExternalFunction(AbstractDetector): (boolean): True if this contract contains a dynamic call (including through inheritance). """ for func in contract.all_functions_called: + if not isinstance(func, Function): + continue for node in func.nodes: for ir in node.irs: if isinstance(ir, (InternalDynamicCall)): @@ -61,7 +70,7 @@ class ExternalFunction(AbstractDetector): return False @staticmethod - def get_base_most_function(function): + def get_base_most_function(function: FunctionContract) -> FunctionContract: """ Obtains the base function definition for the provided function. This could be used to obtain the original definition of a function, if the provided function is an override. @@ -85,7 +94,9 @@ class ExternalFunction(AbstractDetector): raise Exception("Could not resolve the base-most function for the provided function.") @staticmethod - def get_all_function_definitions(base_most_function): + def get_all_function_definitions( + base_most_function: FunctionContract, + ) -> List[FunctionContract]: """ Obtains all function definitions given a base-most function. This includes the provided function, plus any overrides of that function. @@ -100,26 +111,28 @@ class ExternalFunction(AbstractDetector): for derived_contract in base_most_function.contract.derived_contracts for function in derived_contract.functions if function.full_name == base_most_function.full_name + and isinstance(function, FunctionContract) ] @staticmethod - def function_parameters_written(function): + def function_parameters_written(function: Function) -> bool: return any(p in function.variables_written for p in function.parameters) @staticmethod - def is_reference_type(parameter): - if isinstance(parameter.type, ArrayType): + def is_reference_type(parameter: Variable) -> bool: + parameter_type = parameter.type + if isinstance(parameter_type, ArrayType): return True - if isinstance(parameter.type, UserDefinedType) and isinstance( - parameter.type.type, Structure + if isinstance(parameter_type, UserDefinedType) and isinstance( + parameter_type.type, Structure ): return True - if str(parameter.type) in ["bytes", "string"]: + if str(parameter_type) in ["bytes", "string"]: return True return False - def _detect(self): # pylint: disable=too-many-locals,too-many-branches - results = [] + def _detect(self) -> List[Output]: # pylint: disable=too-many-locals,too-many-branches + results: List[Output] = [] # After solc 0.6.9, calldata arguments are allowed in public functions if self.compilation_unit.solc_version >= "0.7." or self.compilation_unit.solc_version in [ @@ -132,11 +145,11 @@ class ExternalFunction(AbstractDetector): # Create a set to track contracts with dynamic calls. All contracts with dynamic calls could potentially be # calling functions internally, and thus we can't assume any function in such contracts isn't called by them. - dynamic_call_contracts = set() + dynamic_call_contracts: Set[Contract] = set() # Create a completed functions set to skip over functions already processed (any functions which are the base # of, or override hierarchically are processed together). - completed_functions = set() + completed_functions: Set[Function] = set() # First we build our set of all contracts with dynamic calls for contract in self.contracts: @@ -219,10 +232,12 @@ class ExternalFunction(AbstractDetector): # As we collect all shadowed functions in get_all_function_definitions # Some function coming from a base might already been declared as external - all_function_definitions = [ + all_function_definitions: List[FunctionContract] = [ f for f in all_function_definitions - if f.visibility == "public" and f.contract == f.contract_declarer + if isinstance(f, FunctionContract) + and f.visibility == "public" + and f.contract == f.contract_declarer ] if all_function_definitions: all_function_definitions = sorted( From 8a8ade792d56d64f17af61fee5bea68b6c7a6951 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 14:54:22 +0200 Subject: [PATCH 150/202] Fix OZ name --- slither/utils/standard_libraries.py | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/slither/utils/standard_libraries.py b/slither/utils/standard_libraries.py index 166475f52..897954b95 100644 --- a/slither/utils/standard_libraries.py +++ b/slither/utils/standard_libraries.py @@ -7,11 +7,11 @@ if TYPE_CHECKING: from slither.core.declarations import Contract libraries = { - "Openzeppelin-SafeMath": lambda x: is_openzepellin_safemath(x), - "Openzeppelin-ECRecovery": lambda x: is_openzepellin_ecrecovery(x), - "Openzeppelin-Ownable": lambda x: is_openzepellin_ownable(x), - "Openzeppelin-ERC20": lambda x: is_openzepellin_erc20(x), - "Openzeppelin-ERC721": lambda x: is_openzepellin_erc721(x), + "Openzeppelin-SafeMath": lambda x: is_openzeppelin_safemath(x), + "Openzeppelin-ECRecovery": lambda x: is_openzeppelin_ecrecovery(x), + "Openzeppelin-Ownable": lambda x: is_openzeppelin_ownable(x), + "Openzeppelin-ERC20": lambda x: is_openzeppelin_erc20(x), + "Openzeppelin-ERC721": lambda x: is_openzeppelin_erc721(x), "Zos-Upgrade": lambda x: is_zos_initializable(x), "Dapphub-DSAuth": lambda x: is_dapphub_ds_auth(x), "Dapphub-DSMath": lambda x: is_dapphub_ds_math(x), @@ -53,7 +53,7 @@ def is_standard_library(contract: "Contract") -> Optional[str]: ################################################################################### -def is_openzepellin(contract: "Contract") -> bool: +def is_openzeppelin(contract: "Contract") -> bool: if not contract.is_from_dependency(): return False path = Path(contract.source_mapping.filename.absolute).parts @@ -67,11 +67,11 @@ def is_openzepellin(contract: "Contract") -> bool: return is_zep -def is_openzepellin_strict(contract: "Contract") -> bool: - start = contract.source_mapping["start"] - end = start + contract.source_mapping["length"] +def is_openzeppelin_strict(contract: "Contract") -> bool: + start = contract.source_mapping.start + end = start + contract.source_mapping.length source_code = contract.compilation_unit.core.source_code[ - contract.source_mapping["filename_absolute"] + contract.source_mapping.filename.absolute ][start:end] source_hash = sha1(source_code.encode("utf-8")).hexdigest() return source_hash in oz_hashes @@ -101,8 +101,8 @@ def is_safemath(contract: "Contract") -> bool: return contract.name == "SafeMath" -def is_openzepellin_safemath(contract: "Contract") -> bool: - return is_safemath(contract) and is_openzepellin(contract) +def is_openzeppelin_safemath(contract: "Contract") -> bool: + return is_safemath(contract) and is_openzeppelin(contract) def is_aragonos_safemath(contract: "Contract") -> bool: @@ -121,8 +121,8 @@ def is_ecrecovery(contract: "Contract") -> bool: return contract.name == "ECRecovery" -def is_openzepellin_ecrecovery(contract: "Contract") -> bool: - return is_ecrecovery(contract) and is_openzepellin(contract) +def is_openzeppelin_ecrecovery(contract: "Contract") -> bool: + return is_ecrecovery(contract) and is_openzeppelin(contract) # endregion @@ -137,8 +137,8 @@ def is_ownable(contract: "Contract") -> bool: return contract.name == "Ownable" -def is_openzepellin_ownable(contract: "Contract") -> bool: - return is_ownable(contract) and is_openzepellin(contract) +def is_openzeppelin_ownable(contract: "Contract") -> bool: + return is_ownable(contract) and is_openzeppelin(contract) # endregion @@ -153,8 +153,8 @@ def is_erc20(contract: "Contract") -> bool: return contract.name == "ERC20" -def is_openzepellin_erc20(contract: "Contract") -> bool: - return is_erc20(contract) and is_openzepellin(contract) +def is_openzeppelin_erc20(contract: "Contract") -> bool: + return is_erc20(contract) and is_openzeppelin(contract) def is_aragonos_erc20(contract: "Contract") -> bool: @@ -173,8 +173,8 @@ def is_erc721(contract: "Contract") -> bool: return contract.name == "ERC721" -def is_openzepellin_erc721(contract: "Contract") -> bool: - return is_erc721(contract) and is_openzepellin(contract) +def is_openzeppelin_erc721(contract: "Contract") -> bool: + return is_erc721(contract) and is_openzeppelin(contract) # endregion From c32b3e16b75b9fd0c657c0dc65fdf21fbbba9e46 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 15:28:12 +0200 Subject: [PATCH 151/202] Simplify CI Remove --ignore-reurn-value flag (it becomes useless with the new exit code strategy) --- scripts/ci_test_cli.sh | 6 +++--- scripts/ci_test_dapp.sh | 8 ++++---- scripts/ci_test_embark.sh | 6 ++---- scripts/ci_test_etherlime.sh | 8 ++++---- scripts/ci_test_etherscan.sh | 16 ++++++---------- scripts/ci_test_truffle.sh | 7 +++---- slither/__main__.py | 9 --------- slither/utils/command_line.py | 1 - 8 files changed, 22 insertions(+), 39 deletions(-) diff --git a/scripts/ci_test_cli.sh b/scripts/ci_test_cli.sh index 9bfe63d5b..4b06959e2 100755 --- a/scripts/ci_test_cli.sh +++ b/scripts/ci_test_cli.sh @@ -4,17 +4,17 @@ solc-select use 0.7.0 -if ! slither "tests/config/test.sol" --solc-ast --ignore-return-value; then +if slither "tests/config/test.sol" --solc-ast; then echo "--solc-ast failed" exit 1 fi -if ! slither "tests/config/test.sol" --solc-disable-warnings --ignore-return-value; then +if slither "tests/config/test.sol" --solc-disable-warnings; then echo "--solc-disable-warnings failed" exit 1 fi -if ! slither "tests/config/test.sol" --disable-color --ignore-return-value; then +if slither "tests/config/test.sol" --disable-color; then echo "--disable-color failed" exit 1 fi diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index 51ca38f43..49be57129 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -15,9 +15,9 @@ nix-env -f "$HOME/.dapp/dapptools" -iA dapp seth solc hevm ethsign dapp init -if slither . --detect external-function --fail-pedantic; then - exit 0 +if slither . --detect external-function; then + echo "Dapp test failed" + exit 1 fi -echo "Dapp test failed" -exit 255 +exit 0 diff --git a/scripts/ci_test_embark.sh b/scripts/ci_test_embark.sh index 0a92ffea3..691d86452 100755 --- a/scripts/ci_test_embark.sh +++ b/scripts/ci_test_embark.sh @@ -15,12 +15,10 @@ npm install -g embark@4.2.0 embark demo cd embark_demo || exit 255 npm install -slither . --embark-overwrite-config --fail-pedantic -if [ $? -ne 255 ] -then +if slither . --embark-overwrite-config; then echo "Embark test failed" exit 255 fi - +exit 0 diff --git a/scripts/ci_test_etherlime.sh b/scripts/ci_test_etherlime.sh index 3b86f8aa0..72ed7b0e1 100755 --- a/scripts/ci_test_etherlime.sh +++ b/scripts/ci_test_etherlime.sh @@ -13,10 +13,10 @@ nvm use 10.17.0 npm i -g etherlime etherlime init -slither . --fail-pedantic -if [ $? -ne 255 ] -then +if slither .; then echo "Etherlime test failed" - exit 255 + exit 1 fi + +exit 0 \ No newline at end of file diff --git a/scripts/ci_test_etherscan.sh b/scripts/ci_test_etherscan.sh index d064ad0a5..c7aab8a1e 100755 --- a/scripts/ci_test_etherscan.sh +++ b/scripts/ci_test_etherscan.sh @@ -5,19 +5,15 @@ mkdir etherscan cd etherscan || exit 255 -slither 0x7F37f78cBD74481E593F9C737776F7113d76B315 --etherscan-apikey "$GITHUB_ETHERSCAN" --fail-pedantic - -if [ $? -ne 255 ] -then +if slither 0x7F37f78cBD74481E593F9C737776F7113d76B315 --etherscan-apikey "$GITHUB_ETHERSCAN"; then echo "Etherscan test failed" - exit 255 + exit 1 fi -slither rinkeby:0xFe05820C5A92D9bc906D4A46F662dbeba794d3b7 --etherscan-apikey "$GITHUB_ETHERSCAN" --fail-pedantic - -if [ $? -ne 255 ] -then +if slither rinkeby:0xFe05820C5A92D9bc906D4A46F662dbeba794d3b7 --etherscan-apikey "$GITHUB_ETHERSCAN"; then echo "Etherscan test failed" - exit 255 + exit 1 fi +exit 0 + diff --git a/scripts/ci_test_truffle.sh b/scripts/ci_test_truffle.sh index b0888ed7c..b4ebaf563 100755 --- a/scripts/ci_test_truffle.sh +++ b/scripts/ci_test_truffle.sh @@ -13,11 +13,10 @@ nvm use --lts npm install -g truffle truffle unbox metacoin -slither . -if [ $? -ne 0 ] -then +if slither .; then echo "Truffle test failed" - exit 255 + exit 1 fi +exit 0 \ No newline at end of file diff --git a/slither/__main__.py b/slither/__main__.py index fe2d291dd..f96ce2b52 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -573,13 +573,6 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s default=defaults_flag_in_config["skip_assembly"], ) - parser.add_argument( - "--ignore-return-value", - help=argparse.SUPPRESS, - action="store_true", - default=defaults_flag_in_config["ignore_return_value"], - ) - parser.add_argument( "--perf", help=argparse.SUPPRESS, @@ -845,8 +838,6 @@ def main_impl( len(detector_classes), len(results_detectors), ) - if args.ignore_return_value: - return except SlitherException as slither_exception: output_error = str(slither_exception) diff --git a/slither/utils/command_line.py b/slither/utils/command_line.py index d47784380..d0d77c45f 100644 --- a/slither/utils/command_line.py +++ b/slither/utils/command_line.py @@ -47,7 +47,6 @@ defaults_flag_in_config = { # debug command "skip_assembly": False, "legacy_ast": False, - "ignore_return_value": False, "zip": None, "zip_type": "lzma", "show_ignored_findings": False, From 0381589cfdd00e33e0b4ccc8bfc43665d646243a Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 15:51:08 +0200 Subject: [PATCH 152/202] Fix CI --- scripts/ci_test.sh | 8 +++----- scripts/ci_test_erc.sh | 2 +- scripts/ci_test_find_paths.sh | 2 +- scripts/ci_test_kspec.sh | 2 +- scripts/ci_test_printers.sh | 2 +- scripts/ci_test_simil.sh | 2 +- scripts/ci_test_upgradability.sh | 24 ++++++++++++------------ 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/scripts/ci_test.sh b/scripts/ci_test.sh index c966766b8..4ce09efdc 100755 --- a/scripts/ci_test.sh +++ b/scripts/ci_test.sh @@ -13,8 +13,7 @@ test_slither(){ expected="$DIR/../tests/expected_json/$(basename "$1" .sol).$2.json" # run slither detector on input file and save output as json - slither "$1" --solc-disable-warnings --detect "$2" --json "$DIR/tmp-test.json" - if [ $? -ne 0 ] + if slither "$1" --solc-disable-warnings --detect "$2" --json "$DIR/tmp-test.json"; then echo "Slither crashed" exit 255 @@ -40,8 +39,7 @@ test_slither(){ fi # run slither detector on input file and save output as json - slither "$1" --solc-disable-warnings --detect "$2" --legacy-ast --json "$DIR/tmp-test.json" - if [ $? -ne 0 ] + if slither "$1" --solc-disable-warnings --detect "$2" --legacy-ast --json "$DIR/tmp-test.json"; then echo "Slither crashed" exit 255 @@ -77,7 +75,7 @@ generate_expected_json(){ output_filename_txt="$DIR/../tests/expected_json/$(basename "$1" .sol).$2.txt" # run slither detector on input file and save output as json - slither "$1" --solc-disable-warnings --detect "$2" --json "$output_filename" > "$output_filename_txt" + slither "$1" --solc-disable-warnings --detect "$2" --json "$output_filename" > "$output_filename_txt" 2>&1 sed "s|$CURRENT_PATH|$TRAVIS_PATH|g" "$output_filename" -i diff --git a/scripts/ci_test_erc.sh b/scripts/ci_test_erc.sh index dd0ef9c60..ce9a62363 100755 --- a/scripts/ci_test_erc.sh +++ b/scripts/ci_test_erc.sh @@ -5,7 +5,7 @@ DIR_TESTS="tests/check-erc" solc-select use 0.5.0 -slither-check-erc "$DIR_TESTS/erc20.sol" ERC20 > test_1.txt +slither-check-erc "$DIR_TESTS/erc20.sol" ERC20 > test_1.txt 2>&1 DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_find_paths.sh b/scripts/ci_test_find_paths.sh index fc1f07ee5..1c3652745 100755 --- a/scripts/ci_test_find_paths.sh +++ b/scripts/ci_test_find_paths.sh @@ -5,7 +5,7 @@ DIR_TESTS="tests/possible_paths" solc-select use "0.5.0" -slither-find-paths "$DIR_TESTS/paths.sol" A.destination > test_possible_paths.txt +slither-find-paths "$DIR_TESTS/paths.sol" A.destination > test_possible_paths.txt 2>&1 DIFF=$(diff test_possible_paths.txt "$DIR_TESTS/paths.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_kspec.sh b/scripts/ci_test_kspec.sh index 70195798f..3bd827e69 100755 --- a/scripts/ci_test_kspec.sh +++ b/scripts/ci_test_kspec.sh @@ -3,7 +3,7 @@ DIR_TESTS="tests/check-kspec" solc-select use "0.5.0" -slither-check-kspec "$DIR_TESTS/safeAdd/safeAdd.sol" "$DIR_TESTS/safeAdd/spec.md" > test_1.txt +slither-check-kspec "$DIR_TESTS/safeAdd/safeAdd.sol" "$DIR_TESTS/safeAdd/spec.md" > test_1.txt 2>&1 DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_printers.sh b/scripts/ci_test_printers.sh index 564e2a384..e542286fe 100755 --- a/scripts/ci_test_printers.sh +++ b/scripts/ci_test_printers.sh @@ -9,7 +9,7 @@ ALL_PRINTERS="cfg,constructor-calls,contract-summary,data-dependency,echidna,fun # Only test 0.5.17 to limit test time for file in *0.5.17-compact.zip; do - if ! slither "$file" --print "$ALL_PRINTERS" > /dev/null ; then + if ! slither "$file" --print "$ALL_PRINTERS" > /dev/null 2>&1 ; then echo "Printer failed" echo "$file" exit 1 diff --git a/scripts/ci_test_simil.sh b/scripts/ci_test_simil.sh index a02bf2c88..7ef511759 100755 --- a/scripts/ci_test_simil.sh +++ b/scripts/ci_test_simil.sh @@ -10,7 +10,7 @@ pip3.8 install https://github.com/facebookresearch/fastText/archive/0.2.0.zip solc-select use "0.4.25" DIR_TESTS="tests/simil" -slither-simil info "" --filename $DIR_TESTS/../complex_func.sol --fname Complex.complexExternalWrites > test_1.txt +slither-simil info "" --filename $DIR_TESTS/../complex_func.sol --fname Complex.complexExternalWrites > test_1.txt 2>&1 DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then diff --git a/scripts/ci_test_upgradability.sh b/scripts/ci_test_upgradability.sh index 435c01a83..b34564003 100755 --- a/scripts/ci_test_upgradability.sh +++ b/scripts/ci_test_upgradability.sh @@ -5,7 +5,7 @@ DIR_TESTS="tests/check-upgradeability" solc-select use "0.5.0" -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_1.txt +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_1.txt 2>&1 DIFF=$(diff test_1.txt "$DIR_TESTS/test_1.txt") if [ "$DIFF" != "" ] then @@ -16,7 +16,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2.sol" --new-contract-name ContractV2 > test_2.txt +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2.sol" --new-contract-name ContractV2 > test_2.txt 2>&1 DIFF=$(diff test_2.txt "$DIR_TESTS/test_2.txt") if [ "$DIFF" != "" ] then @@ -27,7 +27,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug.sol" --new-contract-name ContractV2 > test_3.txt +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug.sol" --new-contract-name ContractV2 > test_3.txt 2>&1 DIFF=$(diff test_3.txt "$DIR_TESTS/test_3.txt") if [ "$DIFF" != "" ] then @@ -38,7 +38,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug2.sol" --new-contract-name ContractV2 > test_4.txt +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy --new-contract-filename "$DIR_TESTS/contractV2_bug2.sol" --new-contract-name ContractV2 > test_4.txt 2>&1 DIFF=$(diff test_4.txt "$DIR_TESTS/test_4.txt") if [ "$DIFF" != "" ] then @@ -49,7 +49,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt 2>&1 DIFF=$(diff test_5.txt "$DIR_TESTS/test_5.txt") if [ "$DIFF" != "" ] then @@ -62,7 +62,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_5.txt 2>&1 DIFF=$(diff test_5.txt "$DIR_TESTS/test_5.txt") if [ "$DIFF" != "" ] then @@ -76,7 +76,7 @@ then fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_lack_to_call_modifier --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_6.txt +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_lack_to_call_modifier --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_6.txt 2>&1 DIFF=$(diff test_6.txt "$DIR_TESTS/test_6.txt") if [ "$DIFF" != "" ] then @@ -90,7 +90,7 @@ then fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_not_called_super_init --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_7.txt +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_not_called_super_init --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_7.txt 2>&1 DIFF=$(diff test_7.txt "$DIR_TESTS/test_7.txt") if [ "$DIFF" != "" ] then @@ -103,7 +103,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug_inherits --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_8.txt +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_no_bug_inherits --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_8.txt 2>&1 DIFF=$(diff test_8.txt "$DIR_TESTS/test_8.txt") if [ "$DIFF" != "" ] then @@ -116,7 +116,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_double_call --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_9.txt +slither-check-upgradeability "$DIR_TESTS/contract_initialization.sol" Contract_double_call --proxy-filename "$DIR_TESTS/proxy.sol" --proxy-name Proxy > test_9.txt 2>&1 DIFF=$(diff test_9.txt "$DIR_TESTS/test_9.txt") if [ "$DIFF" != "" ] then @@ -129,7 +129,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --new-contract-filename "$DIR_TESTS/contract_v2_constant.sol" --new-contract-name ContractV2 > test_10.txt +slither-check-upgradeability "$DIR_TESTS/contractV1.sol" ContractV1 --new-contract-filename "$DIR_TESTS/contract_v2_constant.sol" --new-contract-name ContractV2 > test_10.txt 2>&1 DIFF=$(diff test_10.txt "$DIR_TESTS/test_10.txt") if [ "$DIFF" != "" ] then @@ -142,7 +142,7 @@ then exit 255 fi -slither-check-upgradeability "$DIR_TESTS/contract_v1_var_init.sol" ContractV1 > test_11.txt +slither-check-upgradeability "$DIR_TESTS/contract_v1_var_init.sol" ContractV1 > test_11.txt 2>&1 DIFF=$(diff test_11.txt "$DIR_TESTS/test_11.txt") if [ "$DIFF" != "" ] then From a5b326f37d9927f7a495ec5c77ad83fb5417a041 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 16:02:24 +0200 Subject: [PATCH 153/202] Minor --- scripts/ci_test.sh | 4 ++-- scripts/ci_test_cli.sh | 6 +++--- scripts/ci_test_dapp.sh | 2 +- scripts/ci_test_embark.sh | 2 +- scripts/ci_test_etherlime.sh | 2 +- scripts/ci_test_etherscan.sh | 4 ++-- scripts/ci_test_truffle.sh | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/ci_test.sh b/scripts/ci_test.sh index 4ce09efdc..6696a4e89 100755 --- a/scripts/ci_test.sh +++ b/scripts/ci_test.sh @@ -13,7 +13,7 @@ test_slither(){ expected="$DIR/../tests/expected_json/$(basename "$1" .sol).$2.json" # run slither detector on input file and save output as json - if slither "$1" --solc-disable-warnings --detect "$2" --json "$DIR/tmp-test.json"; + if ! slither "$1" --solc-disable-warnings --detect "$2" --json "$DIR/tmp-test.json"; then echo "Slither crashed" exit 255 @@ -39,7 +39,7 @@ test_slither(){ fi # run slither detector on input file and save output as json - if slither "$1" --solc-disable-warnings --detect "$2" --legacy-ast --json "$DIR/tmp-test.json"; + if ! slither "$1" --solc-disable-warnings --detect "$2" --legacy-ast --json "$DIR/tmp-test.json"; then echo "Slither crashed" exit 255 diff --git a/scripts/ci_test_cli.sh b/scripts/ci_test_cli.sh index 4b06959e2..56e6ff0a4 100755 --- a/scripts/ci_test_cli.sh +++ b/scripts/ci_test_cli.sh @@ -4,17 +4,17 @@ solc-select use 0.7.0 -if slither "tests/config/test.sol" --solc-ast; then +if ! slither "tests/config/test.sol" --solc-ast; then echo "--solc-ast failed" exit 1 fi -if slither "tests/config/test.sol" --solc-disable-warnings; then +if ! slither "tests/config/test.sol" --solc-disable-warnings; then echo "--solc-disable-warnings failed" exit 1 fi -if slither "tests/config/test.sol" --disable-color; then +if ! slither "tests/config/test.sol" --disable-color; then echo "--disable-color failed" exit 1 fi diff --git a/scripts/ci_test_dapp.sh b/scripts/ci_test_dapp.sh index 49be57129..b5051b131 100755 --- a/scripts/ci_test_dapp.sh +++ b/scripts/ci_test_dapp.sh @@ -15,7 +15,7 @@ nix-env -f "$HOME/.dapp/dapptools" -iA dapp seth solc hevm ethsign dapp init -if slither . --detect external-function; then +if ! slither . --detect external-function; then echo "Dapp test failed" exit 1 fi diff --git a/scripts/ci_test_embark.sh b/scripts/ci_test_embark.sh index 691d86452..4bcb6f78c 100755 --- a/scripts/ci_test_embark.sh +++ b/scripts/ci_test_embark.sh @@ -16,7 +16,7 @@ embark demo cd embark_demo || exit 255 npm install -if slither . --embark-overwrite-config; then +if ! slither . --embark-overwrite-config; then echo "Embark test failed" exit 255 fi diff --git a/scripts/ci_test_etherlime.sh b/scripts/ci_test_etherlime.sh index 72ed7b0e1..53d3d3350 100755 --- a/scripts/ci_test_etherlime.sh +++ b/scripts/ci_test_etherlime.sh @@ -14,7 +14,7 @@ nvm use 10.17.0 npm i -g etherlime etherlime init -if slither .; then +if ! slither .; then echo "Etherlime test failed" exit 1 fi diff --git a/scripts/ci_test_etherscan.sh b/scripts/ci_test_etherscan.sh index c7aab8a1e..c8e69958c 100755 --- a/scripts/ci_test_etherscan.sh +++ b/scripts/ci_test_etherscan.sh @@ -5,12 +5,12 @@ mkdir etherscan cd etherscan || exit 255 -if slither 0x7F37f78cBD74481E593F9C737776F7113d76B315 --etherscan-apikey "$GITHUB_ETHERSCAN"; then +if ! slither 0x7F37f78cBD74481E593F9C737776F7113d76B315 --etherscan-apikey "$GITHUB_ETHERSCAN"; then echo "Etherscan test failed" exit 1 fi -if slither rinkeby:0xFe05820C5A92D9bc906D4A46F662dbeba794d3b7 --etherscan-apikey "$GITHUB_ETHERSCAN"; then +if ! slither rinkeby:0xFe05820C5A92D9bc906D4A46F662dbeba794d3b7 --etherscan-apikey "$GITHUB_ETHERSCAN"; then echo "Etherscan test failed" exit 1 fi diff --git a/scripts/ci_test_truffle.sh b/scripts/ci_test_truffle.sh index b4ebaf563..da1a350c9 100755 --- a/scripts/ci_test_truffle.sh +++ b/scripts/ci_test_truffle.sh @@ -14,7 +14,7 @@ nvm use --lts npm install -g truffle truffle unbox metacoin -if slither .; then +if ! slither .; then echo "Truffle test failed" exit 1 fi From 475de74d9b9c0329fe2f78bcc10aa60485997cc9 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 8 Aug 2022 16:28:43 +0200 Subject: [PATCH 154/202] Minor --- slither/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/__main__.py b/slither/__main__.py index f96ce2b52..b27c8ae75 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -887,7 +887,7 @@ def main_impl( result["impact"] in ["Low", "Medium", "High"] for result in results_detectors ) elif args.fail_pedantic: - fail_on_detection = bool(len(results_detectors)) + fail_on_detection = bool(results_detectors) else: fail_on_detection = False From b82a082ac7317a6df1379850e99711281a9dc895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Wed, 10 Aug 2022 12:06:53 +0200 Subject: [PATCH 155/202] Dockerfile: upgrade to jammy, separate building from installation --- Dockerfile | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 369bcf865..4d3dd54e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,18 @@ -FROM ubuntu:focal +# syntax=docker/dockerfile:1.3 +FROM ubuntu:jammy AS python-wheels +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + gcc \ + python3-dev \ + python3-pip + +COPY . /slither + +RUN cd /slither && \ + echo pip3 install --no-cache-dir --upgrade pip && \ + pip3 wheel -w /wheels . pip setuptools wheel + + +FROM ubuntu:jammy AS final LABEL name=slither LABEL src="https://github.com/trailofbits/slither" @@ -8,8 +22,7 @@ LABEL desc="Static Analyzer for Solidity" RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get upgrade -yq \ - && apt-get install -yq gcc git python3 python3-dev python3-setuptools wget software-properties-common + && apt-get install -y python3-pip wget RUN wget -q https://github.com/ethereum/solidity/releases/download/v0.4.25/solc-static-linux \ && chmod +x solc-static-linux \ @@ -24,6 +37,10 @@ RUN [ "c9b268750506b88fe71371100050e9dd1e7edcf8f69da34d1cd09557ecb24580 /usr/bi COPY --chown=slither:slither . /home/slither/slither WORKDIR /home/slither/slither -RUN python3 setup.py install --user ENV PATH="/home/slither/.local/bin:${PATH}" + +# no-index ensures we install the freshly-built wheels +RUN --mount=type=bind,target=/mnt,source=/wheels,from=python-wheels \ + pip3 install --user --no-cache-dir --upgrade --no-index --find-links /mnt pip slither-analyzer + CMD /bin/bash From 9a3b21bb7105100868adae44ee403dbe7ed4684d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Wed, 10 Aug 2022 12:11:05 +0200 Subject: [PATCH 156/202] Dockerfile: add solc-select --- Dockerfile | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4d3dd54e5..174487bc6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ COPY . /slither RUN cd /slither && \ echo pip3 install --no-cache-dir --upgrade pip && \ - pip3 wheel -w /wheels . pip setuptools wheel + pip3 wheel -w /wheels . solc-select pip setuptools wheel FROM ubuntu:jammy AS final @@ -22,18 +22,11 @@ LABEL desc="Static Analyzer for Solidity" RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get install -y python3-pip wget - -RUN wget -q https://github.com/ethereum/solidity/releases/download/v0.4.25/solc-static-linux \ - && chmod +x solc-static-linux \ - && mv solc-static-linux /usr/bin/solc + && apt-get install -y --no-install-recommends python3-pip RUN useradd -m slither USER slither -# If this fails, the solc-static-linux binary has changed while it should not. -RUN [ "c9b268750506b88fe71371100050e9dd1e7edcf8f69da34d1cd09557ecb24580 /usr/bin/solc" = "$(sha256sum /usr/bin/solc)" ] - COPY --chown=slither:slither . /home/slither/slither WORKDIR /home/slither/slither @@ -41,6 +34,8 @@ ENV PATH="/home/slither/.local/bin:${PATH}" # no-index ensures we install the freshly-built wheels RUN --mount=type=bind,target=/mnt,source=/wheels,from=python-wheels \ - pip3 install --user --no-cache-dir --upgrade --no-index --find-links /mnt pip slither-analyzer + pip3 install --user --no-cache-dir --upgrade --no-index --find-links /mnt pip slither-analyzer solc-select + +RUN solc-select install 0.4.25 && solc-select use 0.4.25 CMD /bin/bash From ddb8ee2769cce75b4be628ed9a82a7373d637705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Wed, 10 Aug 2022 12:19:42 +0200 Subject: [PATCH 157/202] Add Docker build and push workflow This workflow builds the Slither docker image and publishes it on GHCR --- .github/workflows/docker.yml | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/docker.yml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..0b26e75a0 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,56 @@ +name: Docker + +on: + push: + branches: + - master + - dev-update-dockerfile + tags: + - '*' + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + id: buildx + with: + install: true + + - name: Set Docker metadata + id: metadata + uses: docker/metadata-action@v4 + with: + images: | + ghcr.io/${{ github.repository }} + tags: | + type=ref,event=tag + type=ref,event=branch,prefix=testing- + type=edge + + - name: GitHub Container Registry Login + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker Build and Push + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm64/v8,linux/arm/v7 + target: final + file: Dockerfile + pull: true + push: true + tags: ${{ steps.metadata.outputs.tags }} + labels: ${{ steps.metadata.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max From b90531e75d4fd90fb65a5865239cdbd5eb5c1093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Wed, 10 Aug 2022 12:49:17 +0200 Subject: [PATCH 158/202] Dockerfile: clean apt state after installing packages --- Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 174487bc6..2f3251592 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,8 @@ FROM ubuntu:jammy AS python-wheels RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ gcc \ python3-dev \ - python3-pip + python3-pip \ + && rm -rf /var/lib/apt/lists/* COPY . /slither @@ -22,7 +23,8 @@ LABEL desc="Static Analyzer for Solidity" RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get install -y --no-install-recommends python3-pip + && apt-get install -y --no-install-recommends python3-pip \ + && rm -rf /var/lib/apt/lists/* RUN useradd -m slither USER slither From cc8c3b87f0f98049bc1b28ca05bb2f404d923507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Wed, 10 Aug 2022 13:20:07 +0200 Subject: [PATCH 159/202] Enable Docker workflow for `dev` branch --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 0b26e75a0..76c18379e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -4,7 +4,7 @@ on: push: branches: - master - - dev-update-dockerfile + - dev tags: - '*' From f7295533d6095f9fb8b0ea9df35ee1ddc629d4e9 Mon Sep 17 00:00:00 2001 From: Aranya Dan Date: Thu, 11 Aug 2022 00:44:52 +0200 Subject: [PATCH 160/202] Fixed Pypi Markdown render Added long_description_content_type value to have Pypi website correctly render Readme.md with markdown --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 993862f03..ecb05c534 100644 --- a/setup.py +++ b/setup.py @@ -31,6 +31,7 @@ setup( dependency_links=["git+https://github.com/crytic/crytic-compile.git@master#egg=crytic-compile"], license="AGPL-3.0", long_description=long_description, + long_description_content_type='text/markdown', entry_points={ "console_scripts": [ "slither = slither.__main__:main", From d1321a4212f3f1a25ff873aff2ee45d325a03b0b Mon Sep 17 00:00:00 2001 From: Aranya Dan Date: Fri, 12 Aug 2022 16:06:23 +0200 Subject: [PATCH 161/202] Fixed linting error --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ecb05c534..4b0c5e8e0 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ setup( dependency_links=["git+https://github.com/crytic/crytic-compile.git@master#egg=crytic-compile"], license="AGPL-3.0", long_description=long_description, - long_description_content_type='text/markdown', + long_description_content_type="text/markdown", entry_points={ "console_scripts": [ "slither = slither.__main__:main", From 8c8e54b00710755a15f538cd4c20a4f46dac6cf5 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Fri, 12 Aug 2022 18:44:34 +0200 Subject: [PATCH 162/202] Add printer for dominator tree --- slither/printers/all_printers.py | 1 + slither/printers/functions/dominator.py | 38 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 slither/printers/functions/dominator.py diff --git a/slither/printers/all_printers.py b/slither/printers/all_printers.py index 3165d220f..d72dce062 100644 --- a/slither/printers/all_printers.py +++ b/slither/printers/all_printers.py @@ -19,3 +19,4 @@ from .guidance.echidna import Echidna from .summary.evm import PrinterEVM from .summary.when_not_paused import PrinterWhenNotPaused from .summary.declaration import Declaration +from .functions.dominator import Dominator \ No newline at end of file diff --git a/slither/printers/functions/dominator.py b/slither/printers/functions/dominator.py new file mode 100644 index 000000000..bafa8cc73 --- /dev/null +++ b/slither/printers/functions/dominator.py @@ -0,0 +1,38 @@ +from typing import List + +from slither.core.declarations import Function +from slither.printers.abstract_printer import AbstractPrinter + + +class Dominator(AbstractPrinter): + + ARGUMENT = "dominator" + HELP = "Export the dominator tree of each functions" + + WIKI = "https://github.com/trailofbits/slither/wiki/Printer-documentation#dominator" + + def output(self, filename): + """ + _filename is not used + Args: + _filename(string) + """ + + info = "" + all_files = [] + for contract in self.contracts: + for function in contract.functions + contract.modifiers: + if filename: + new_filename = f"{filename}-{contract.name}-{function.full_name}.dot" + else: + new_filename = f"dominator-{contract.name}-{function.full_name}.dot" + info += f"Export {new_filename}\n" + content = function.dominator_tree_to_dot(new_filename) + all_files.append((new_filename, content)) + + self.info(info) + + res = self.generate_output(info) + for filename_result, content in all_files: + res.add_file(filename_result, content) + return res From ab778b3fa0af62f1ac8f1dffa02f96181492cf04 Mon Sep 17 00:00:00 2001 From: plotchy Date: Sun, 14 Aug 2022 12:07:39 -0400 Subject: [PATCH 163/202] add _disableInitializers() detection --- .../statements/unprotected_upgradeable.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/slither/detectors/statements/unprotected_upgradeable.py b/slither/detectors/statements/unprotected_upgradeable.py index 89abaa34b..8808bf15c 100644 --- a/slither/detectors/statements/unprotected_upgradeable.py +++ b/slither/detectors/statements/unprotected_upgradeable.py @@ -21,12 +21,22 @@ def _can_be_destroyed(contract: Contract) -> List[Function]: break return targets +def _has_initializing_protection(functions: List[Function]) -> bool: + # Detects "initializer" constructor modifiers and "_disableInitializers()" constructor internal calls + # https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#initializing_the_implementation_contract -def _has_initializer_modifier(functions: List[Function]) -> bool: for f in functions: for m in f.modifiers: if m.name == "initializer": return True + # filtering out SolidityFunction from the internal calls as we don't need to match against those names + internal_func_calls = [c for c in f.all_internal_calls() if not isinstance(c, SolidityFunction)] + for ifc in internal_func_calls: + if ifc.name == "_disableInitializers": + return True + + # to avoid future FPs in different modifier + function naming implementations, we can also implement a broader check for state var "_initialized" being written to in the constructor + # though this is still subject to naming false positives... return False @@ -82,7 +92,7 @@ class UnprotectedUpgradeable(AbstractDetector): for contract in self.compilation_unit.contracts_derived: if contract.is_upgradeable: - if not _has_initializer_modifier(contract.constructors): + if not _has_initializing_protection(contract.constructors): functions_that_can_destroy = _can_be_destroyed(contract) if functions_that_can_destroy: initialize_functions = _initialize_functions(contract) From 1bec56f64e6a19bca1b323d6ed9979348e4179f1 Mon Sep 17 00:00:00 2001 From: plotchy Date: Sun, 14 Aug 2022 19:48:33 -0400 Subject: [PATCH 164/202] add 0.8.15/0.7.6 tests for disableInitializers --- .../unprotected-upgrade/0.7.6/Fixed.sol | 18 +++ .../0.7.6/Initializable.sol | 16 +- .../unprotected-upgrade/0.8.15/Buggy.sol | 14 ++ ...ggy.sol.0.8.15.UnprotectedUpgradeable.json | 145 ++++++++++++++++++ .../unprotected-upgrade/0.8.15/Fixed.sol | 73 +++++++++ ...xed.sol.0.8.15.UnprotectedUpgradeable.json | 3 + .../0.8.15/Initializable.sol | 15 ++ .../unprotected-upgrade/0.8.15/OnlyProxy.sol | 5 + .../0.8.15/whitelisted.sol | 15 ++ ...ted.sol.0.8.15.UnprotectedUpgradeable.json | 3 + tests/test_detectors.py | 15 ++ 11 files changed, 319 insertions(+), 3 deletions(-) create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol.0.8.15.UnprotectedUpgradeable.json create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol.0.8.15.UnprotectedUpgradeable.json create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/Initializable.sol create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/OnlyProxy.sol create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol create mode 100644 tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol.0.8.15.UnprotectedUpgradeable.json diff --git a/tests/detectors/unprotected-upgrade/0.7.6/Fixed.sol b/tests/detectors/unprotected-upgrade/0.7.6/Fixed.sol index f9e8d45c3..53a949ee0 100644 --- a/tests/detectors/unprotected-upgrade/0.7.6/Fixed.sol +++ b/tests/detectors/unprotected-upgrade/0.7.6/Fixed.sol @@ -47,6 +47,24 @@ contract Fixed2 is Initializable { owner = msg.sender; } + function kill() external { + require(msg.sender == owner); + selfdestruct(owner); + } +} + +contract Fixed3 is Initializable { + address payable owner; + + constructor() { + _disableInitializers(); + } + + function initialize() external initializer { + require(owner == address(0)); + owner = payable(msg.sender); + } + function kill() external { require(msg.sender == owner); selfdestruct(owner); diff --git a/tests/detectors/unprotected-upgrade/0.7.6/Initializable.sol b/tests/detectors/unprotected-upgrade/0.7.6/Initializable.sol index 779a0e87c..cff401bae 100644 --- a/tests/detectors/unprotected-upgrade/0.7.6/Initializable.sol +++ b/tests/detectors/unprotected-upgrade/0.7.6/Initializable.sol @@ -1,5 +1,15 @@ contract Initializable{ - modifier initializer() { - _; - } + uint8 private _initialized; + bool private _initializing; + + modifier initializer() { + _; + } + + function _disableInitializers() internal virtual { + require(!_initializing, "Initializable: contract is initializing"); + if (_initialized < type(uint8).max) { + _initialized = type(uint8).max; + } + } } \ No newline at end of file diff --git a/tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol b/tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol new file mode 100644 index 000000000..dd27ddd82 --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol @@ -0,0 +1,14 @@ +import "./Initializable.sol"; + +contract Buggy is Initializable{ + address payable owner; + + function initialize() external initializer{ + require(owner == address(0)); + owner = payable(msg.sender); + } + function kill() external{ + require(msg.sender == owner); + selfdestruct(owner); + } +} diff --git a/tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol.0.8.15.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol.0.8.15.UnprotectedUpgradeable.json new file mode 100644 index 000000000..79bcda746 --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol.0.8.15.UnprotectedUpgradeable.json @@ -0,0 +1,145 @@ +[ + [ + { + "elements": [ + { + "type": "contract", + "name": "Buggy", + "source_mapping": { + "start": 31, + "length": 294, + "filename_relative": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + { + "type": "function", + "name": "initialize", + "source_mapping": { + "start": 96, + "length": 124, + "filename_relative": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "is_dependency": false, + "lines": [ + 6, + 7, + 8, + 9 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Buggy", + "source_mapping": { + "start": 31, + "length": 294, + "filename_relative": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "initialize()" + } + }, + { + "type": "function", + "name": "kill", + "source_mapping": { + "start": 225, + "length": 98, + "filename_relative": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "is_dependency": false, + "lines": [ + 10, + 11, + 12, + 13 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "Buggy", + "source_mapping": { + "start": 31, + "length": 294, + "filename_relative": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "filename_absolute": "/GENERIC_PATH", + "filename_short": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol", + "is_dependency": false, + "lines": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "kill()" + } + } + ], + "description": "Buggy (tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#3-14) is an upgradeable contract that does not protect its initialize functions: Buggy.initialize() (tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#6-9). Anyone can delete the contract with: Buggy.kill() (tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#10-13)", + "markdown": "[Buggy](tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#L3-L14) is an upgradeable contract that does not protect its initialize functions: [Buggy.initialize()](tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#L6-L9). Anyone can delete the contract with: [Buggy.kill()](tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#L10-L13)", + "first_markdown_element": "tests/detectors/unprotected-upgrade/0.8.15/Buggy.sol#L3-L14", + "id": "d85b90230632a30f7ffb5140a791d4a9ae8b0be045c5b27175f3c477e189c08c", + "check": "unprotected-upgrade", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol b/tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol new file mode 100644 index 000000000..a4ae7b206 --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol @@ -0,0 +1,73 @@ +import "./Initializable.sol"; + +contract Fixed is Initializable{ + address payable owner; + + constructor() { + owner = payable(msg.sender); + } + + function initialize() external initializer{ + require(owner == address(0)); + owner = payable(msg.sender); + + } + function kill() external{ + require(msg.sender == owner); + selfdestruct(owner); + } + + function other_function() external{ + + } +} + +contract Not_Upgradeable{ +} + +contract UpgradeableNoDestruct is Initializable{ + address payable owner; + + constructor() { + owner = payable(msg.sender); + } + + function initialize() external initializer{ + require(owner == address(0)); + owner = payable(msg.sender); + } +} + +contract Fixed2 is Initializable { + address payable owner; + + constructor() initializer {} + + function initialize() external initializer { + require(owner == address(0)); + owner = payable(msg.sender); + } + + function kill() external { + require(msg.sender == owner); + selfdestruct(owner); + } +} + +contract Fixed3 is Initializable { + address payable owner; + + constructor() { + _disableInitializers(); + } + + function initialize() external initializer { + require(owner == address(0)); + owner = payable(msg.sender); + } + + function kill() external { + require(msg.sender == owner); + selfdestruct(owner); + } +} \ No newline at end of file diff --git a/tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol.0.8.15.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol.0.8.15.UnprotectedUpgradeable.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/Fixed.sol.0.8.15.UnprotectedUpgradeable.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/detectors/unprotected-upgrade/0.8.15/Initializable.sol b/tests/detectors/unprotected-upgrade/0.8.15/Initializable.sol new file mode 100644 index 000000000..4fd7561c8 --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/Initializable.sol @@ -0,0 +1,15 @@ +contract Initializable { + uint8 private _initialized; + bool private _initializing; + + modifier initializer() { + _; + } + + function _disableInitializers() internal virtual { + require(!_initializing, "Initializable: contract is initializing"); + if (_initialized < type(uint8).max) { + _initialized = type(uint8).max; + } + } +} \ No newline at end of file diff --git a/tests/detectors/unprotected-upgrade/0.8.15/OnlyProxy.sol b/tests/detectors/unprotected-upgrade/0.8.15/OnlyProxy.sol new file mode 100644 index 000000000..1ffa63272 --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/OnlyProxy.sol @@ -0,0 +1,5 @@ +contract OnlyProxy { + modifier onlyProxy() { + _; + } +} diff --git a/tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol b/tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol new file mode 100644 index 000000000..dafeff691 --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol @@ -0,0 +1,15 @@ +import "./Initializable.sol"; +import "./OnlyProxy.sol"; + +contract Whitelisted is Initializable, OnlyProxy{ + address payable owner; + + function initialize() external initializer onlyProxy { + owner = payable(msg.sender); + } + + function kill() external { + require(msg.sender == owner); + selfdestruct(owner); + } +} diff --git a/tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol.0.8.15.UnprotectedUpgradeable.json b/tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol.0.8.15.UnprotectedUpgradeable.json new file mode 100644 index 000000000..5825bcacc --- /dev/null +++ b/tests/detectors/unprotected-upgrade/0.8.15/whitelisted.sol.0.8.15.UnprotectedUpgradeable.json @@ -0,0 +1,3 @@ +[ + [] +] \ No newline at end of file diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 69cef53bb..2c42ec189 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -928,6 +928,21 @@ ALL_TEST_OBJECTS = [ "whitelisted.sol", "0.7.6", ), + Test( + all_detectors.UnprotectedUpgradeable, + "Buggy.sol", + "0.8.15", + ), + Test( + all_detectors.UnprotectedUpgradeable, + "Fixed.sol", + "0.8.15", + ), + Test( + all_detectors.UnprotectedUpgradeable, + "whitelisted.sol", + "0.8.15", + ), Test( all_detectors.ABIEncoderV2Array, "storage_ABIEncoderV2_array.sol", From eed53dd4b077490c66d30891181d5ed0b541696e Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 15 Aug 2022 12:00:46 +0200 Subject: [PATCH 165/202] minor --- slither/printers/all_printers.py | 2 +- slither/printers/functions/dominator.py | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/slither/printers/all_printers.py b/slither/printers/all_printers.py index d72dce062..6dc8dddbd 100644 --- a/slither/printers/all_printers.py +++ b/slither/printers/all_printers.py @@ -19,4 +19,4 @@ from .guidance.echidna import Echidna from .summary.evm import PrinterEVM from .summary.when_not_paused import PrinterWhenNotPaused from .summary.declaration import Declaration -from .functions.dominator import Dominator \ No newline at end of file +from .functions.dominator import Dominator diff --git a/slither/printers/functions/dominator.py b/slither/printers/functions/dominator.py index bafa8cc73..f618fd5db 100644 --- a/slither/printers/functions/dominator.py +++ b/slither/printers/functions/dominator.py @@ -1,6 +1,3 @@ -from typing import List - -from slither.core.declarations import Function from slither.printers.abstract_printer import AbstractPrinter From 8d8eb9d685199b0c64981a71d81a1492a4bd581e Mon Sep 17 00:00:00 2001 From: plotchy <98172525+plotchy@users.noreply.github.com> Date: Mon, 15 Aug 2022 10:06:25 -0500 Subject: [PATCH 166/202] Update slither/detectors/statements/unprotected_upgradeable.py Co-authored-by: alpharush <0xalpharush@protonmail.com> --- slither/detectors/statements/unprotected_upgradeable.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/slither/detectors/statements/unprotected_upgradeable.py b/slither/detectors/statements/unprotected_upgradeable.py index 8808bf15c..e5ff22fbb 100644 --- a/slither/detectors/statements/unprotected_upgradeable.py +++ b/slither/detectors/statements/unprotected_upgradeable.py @@ -29,9 +29,7 @@ def _has_initializing_protection(functions: List[Function]) -> bool: for m in f.modifiers: if m.name == "initializer": return True - # filtering out SolidityFunction from the internal calls as we don't need to match against those names - internal_func_calls = [c for c in f.all_internal_calls() if not isinstance(c, SolidityFunction)] - for ifc in internal_func_calls: + for ifc in f.all_internal_calls() : if ifc.name == "_disableInitializers": return True From a34c87812b7b02f3335dd3a69c8d681c51a6ad07 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Mon, 15 Aug 2022 17:13:27 +0200 Subject: [PATCH 167/202] Add tests for solc 0.8.13+ --- ...difier_identifier_path.sol-0.8.13-compact.zip | Bin 0 -> 1543 bytes ...difier_identifier_path.sol-0.8.14-compact.zip | Bin 0 -> 1546 bytes ...difier_identifier_path.sol-0.8.15-compact.zip | Bin 0 -> 1547 bytes ...ifier_identifier_path.sol-0.8.13-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.14-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.15-compact.json | 10 ++++++++++ 6 files changed, 30 insertions(+) create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.15-compact.json diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..47066aa8b650a72f72f2a5098cee0c3179304acb GIT binary patch literal 1543 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 UjwmYq_{nWFc!LES#s`4E0Rhh5NB{r; literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..233e4a87ff97cf671338678f36bc3cc6c7e4300b GIT binary patch literal 1547 zcmb7^Ydq5n0EYi#%w=M(XF_3;IgQBSRI(zG}@5vAGQf;jlq&I8Q8|`0ot3PV`0v6a3t;;Q@poqTBVL8{W83EXpUCfENY}04@L! z0|17}$v1VkbpuOB1{+U_753n9Y8^_6X}0ob4vhsrmp#6*P%;h73ow3+9^f;%r6<&U zZg&|Kud3D4&s~e$i6uF^b9--`;}1KMqIM`OQ|P4BZ=sjvVF8-)sDVpz5e-7xY5b}B zyMCSqh(#N_?_;l2Vn1Ma&JVi5u@dij2D2&3Et4-etuVf9W(WF8y}iTP`Ooye?RR5r ze8yag=Wr(Cq}~PJ=L#7G4Vin7447V|rqNW(dEH%6!vbD4eLCwZMURhB{GrMT+7NJ) z*L22LPr$dOBASFtJipGa@ir^$VL>rPW=rLZm2=fH9MwFGF~YLWM^TKBJDxlgm<=u_ zcU`(v1?{LzxUQ38F^`kb`bgUb@Y*;mObd)}j$7rt?R4EcE z)KvL$46SiFr1zANQ1O8KaJPls>Of8;7_5;z-VV1?N(nvg0Wm!+(NAEVX zB@10cd?8pB8QmP>rHN2PXQv@&Mc5RspcmhACrYGC{Pb-7BDJ6A3&$6CXiy*z;Wfvr zl@AQ_!h zI^T zj7C~>uF5~~civc?KP+PN{&eq@)CnD@mDtSfx_V>~Upl~!CrV6{OoiXU)61NrepE%j{JUt!5j!oZ^Q}`|_VEabXm{)AX zl=Eka7;tI^nUAJ!TO-Wo6SAAD?iIFmHSG|Z)zY@v=bp_JP zgXcOdy)WyzgYOhhbu$ZS{yBmVyu^S+z^Net*0{;#I3 TEd&IA{XqM5-Dlpu@&Vv)#ZJ!C literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.13-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.13-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.13-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.14-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.14-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.14-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.15-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.15-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.15-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file From cc9b4630a674ed9dc6aa1c2825dfaeeb14a8e9eb Mon Sep 17 00:00:00 2001 From: plotchy Date: Mon, 15 Aug 2022 11:16:33 -0400 Subject: [PATCH 168/202] lints fixed --- slither/detectors/statements/unprotected_upgradeable.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/slither/detectors/statements/unprotected_upgradeable.py b/slither/detectors/statements/unprotected_upgradeable.py index e5ff22fbb..c91b5bb16 100644 --- a/slither/detectors/statements/unprotected_upgradeable.py +++ b/slither/detectors/statements/unprotected_upgradeable.py @@ -21,6 +21,7 @@ def _can_be_destroyed(contract: Contract) -> List[Function]: break return targets + def _has_initializing_protection(functions: List[Function]) -> bool: # Detects "initializer" constructor modifiers and "_disableInitializers()" constructor internal calls # https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#initializing_the_implementation_contract @@ -29,12 +30,12 @@ def _has_initializing_protection(functions: List[Function]) -> bool: for m in f.modifiers: if m.name == "initializer": return True - for ifc in f.all_internal_calls() : + for ifc in f.all_internal_calls(): if ifc.name == "_disableInitializers": return True # to avoid future FPs in different modifier + function naming implementations, we can also implement a broader check for state var "_initialized" being written to in the constructor - # though this is still subject to naming false positives... + # though this is still subject to naming false positives... return False From c599972cbf900923a581d94771a8022f2c40d504 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Mon, 15 Aug 2022 23:15:18 -0500 Subject: [PATCH 169/202] implement hash for constants Fixes https://github.com/trailofbits/slither-private/issues/316 --- slither/slithir/variables/constant.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/slither/slithir/variables/constant.py b/slither/slithir/variables/constant.py index 96a2864e9..d5d4d0766 100644 --- a/slither/slithir/variables/constant.py +++ b/slither/slithir/variables/constant.py @@ -75,3 +75,6 @@ class Constant(SlithIRVariable): def __repr__(self): return f"{str(self.value)}" + + def __hash__(self) -> int: + return self._val.__hash__() From 681908417742b5686b86bd491be9cab627043dd8 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Mon, 15 Aug 2022 23:29:51 -0500 Subject: [PATCH 170/202] implement eq for literal Fixes https://github.com/crytic/slither/issues/1286 IR generated after this PR ``` Contract Setter Function Setter.set(uint256[1],uint256,uint256) (*) Expression: self[key] = value IRs: REF_0(uint256) -> self[key] REF_0 (->self) := value(uint256) Contract SetterTest Function SetterTest.f(uint256,uint256) (*) Expression: params.set(key,value) IRs: LIBRARY_CALL, dest:Setter, function:Setter.set(uint256[1],uint256,uint256), arguments:['params', 'key', 'value'] ``` --- slither/core/expressions/literal.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/slither/core/expressions/literal.py b/slither/core/expressions/literal.py index ffda38b4d..3303a9aa8 100644 --- a/slither/core/expressions/literal.py +++ b/slither/core/expressions/literal.py @@ -31,3 +31,8 @@ class Literal(Expression): return str(convert_subdenomination(self._value, self.subdenomination)) # be sure to handle any character return str(self._value) + + def __eq__(self, other): + if not isinstance(other, Literal): + return False + return (self.value, self.subdenomination) == (other.value, other.subdenomination) From 3e9859cd89b03b3256fa9d9c4be38b529125c0b2 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 16 Aug 2022 17:53:12 -0500 Subject: [PATCH 171/202] implement full name for custom error and match on it --- slither/core/declarations/custom_error.py | 20 ++++++++++++--- .../solc_parsing/expressions/find_variable.py | 2 +- .../custom_error-0.8.4.sol-0.8.10-compact.zip | Bin 0 -> 6971 bytes .../custom_error-0.8.4.sol-0.8.11-compact.zip | Bin 0 -> 6974 bytes .../custom_error-0.8.4.sol-0.8.12-compact.zip | Bin 0 -> 6966 bytes .../custom_error-0.8.4.sol-0.8.13-compact.zip | Bin 0 -> 7009 bytes .../custom_error-0.8.4.sol-0.8.14-compact.zip | Bin 0 -> 7001 bytes .../custom_error-0.8.4.sol-0.8.15-compact.zip | Bin 0 -> 6999 bytes .../custom_error-0.8.4.sol-0.8.4-compact.zip | Bin 5732 -> 6785 bytes .../custom_error-0.8.4.sol-0.8.5-compact.zip | Bin 5737 -> 6788 bytes .../custom_error-0.8.4.sol-0.8.6-compact.zip | Bin 5730 -> 6784 bytes .../custom_error-0.8.4.sol-0.8.7-compact.zip | Bin 5702 -> 6775 bytes .../custom_error-0.8.4.sol-0.8.8-compact.zip | Bin 5875 -> 6998 bytes .../custom_error-0.8.4.sol-0.8.9-compact.zip | Bin 5883 -> 7002 bytes tests/ast-parsing/custom_error-0.8.4.sol | 17 +++++++++++++ ...custom_error-0.8.4.sol-0.8.10-compact.json | 23 ++++++++++++++++++ ...custom_error-0.8.4.sol-0.8.11-compact.json | 23 ++++++++++++++++++ ...custom_error-0.8.4.sol-0.8.12-compact.json | 23 ++++++++++++++++++ ...custom_error-0.8.4.sol-0.8.13-compact.json | 23 ++++++++++++++++++ ...custom_error-0.8.4.sol-0.8.14-compact.json | 23 ++++++++++++++++++ ...custom_error-0.8.4.sol-0.8.15-compact.json | 23 ++++++++++++++++++ .../custom_error-0.8.4.sol-0.8.4-compact.json | 5 ++++ .../custom_error-0.8.4.sol-0.8.5-compact.json | 5 ++++ .../custom_error-0.8.4.sol-0.8.6-compact.json | 5 ++++ .../custom_error-0.8.4.sol-0.8.7-compact.json | 5 ++++ .../custom_error-0.8.4.sol-0.8.8-compact.json | 5 ++++ .../custom_error-0.8.4.sol-0.8.9-compact.json | 5 ++++ tests/test_ast_parsing.py | 2 +- 28 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.15-compact.json diff --git a/slither/core/declarations/custom_error.py b/slither/core/declarations/custom_error.py index 9ae6370ae..a1a689fcc 100644 --- a/slither/core/declarations/custom_error.py +++ b/slither/core/declarations/custom_error.py @@ -16,6 +16,7 @@ class CustomError(SourceMapping): self._compilation_unit = compilation_unit self._solidity_signature: Optional[str] = None + self._full_name: Optional[str] = None @property def name(self) -> str: @@ -50,7 +51,7 @@ class CustomError(SourceMapping): return str(t) @property - def solidity_signature(self) -> str: + def solidity_signature(self) -> Optional[str]: """ Return a signature following the Solidity Standard Contract and converted into address @@ -71,8 +72,21 @@ class CustomError(SourceMapping): Returns: """ - parameters = [self._convert_type_for_solidity_signature(x.type) for x in self.parameters] - self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" + parameters = [x.type for x in self.parameters] + self._full_name = self.name + "(" + ",".join(map(str, parameters)) + ")" + solidity_parameters = map(self._convert_type_for_solidity_signature, parameters) + self._solidity_signature = self.name + "(" + ",".join(solidity_parameters) + ")" + + @property + def full_name(self) -> Optional[str]: + """ + Return the error signature without + converting contract into address + :return: the error signature + """ + if self._full_name is None: + raise ValueError("Custom Error not yet built") + return self._full_name # endregion ################################################################################### diff --git a/slither/solc_parsing/expressions/find_variable.py b/slither/solc_parsing/expressions/find_variable.py index 200e14a41..471f1a750 100644 --- a/slither/solc_parsing/expressions/find_variable.py +++ b/slither/solc_parsing/expressions/find_variable.py @@ -224,7 +224,7 @@ def _find_in_contract( custom_errors = contract.custom_errors try: for custom_error in custom_errors: - if var_name == custom_error.solidity_signature: + if var_name in [custom_error.solidity_signature, custom_error.full_name]: return custom_error except ValueError: # This can happen as custom error sol signature might not have been built diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fc45cb40e298c9742ce96b9c4804bbec36ccd2d4 GIT binary patch literal 6971 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e36f5b94e5e637d30c007a838d1973a3a475b88e GIT binary patch literal 7001 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

h$%FB^N#jsI~{ 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�_+*>%wDr&Zv96WNyp+$P{uiTV<1k!oJR#`?jtm0SJJSI&Z7(=agR)w#Xn*V^+8nbZ zm-~r?4d>@V58i3N@Rm1v6*g7u+{?{6_VSTJ3DQ?{PX7QxXA|i<;m22c`p*+dT?8+N zTy-p@wt=ukKbeGDyGmtWOd~f7lh(*#lAeD?^JTg}>Z>}A?RRQUu=nyd0Ux}QMd%$xn3}!46R~4|LR+7DyYk-f(Y*3`66Get$ya}* zk9Gi@LoRtS%+IDojp+^^y~$FUj2^!)K)r3nCPIu%ubypPZ4&PPL+I&QFV#M6DujQ~ zhZTAw9RJ}@ov$|DbN4tdH?gqW6@#G120c-cv`v!QdYRC_U>9cDC$2GInIBx9mamCj zuAEyEKSH9iO-!EH%n8Y_jEx*?uEKvI6EYF`kKC>VyB(1G9*jv@lqmv0!AwkcjSmMk zzzU9caH4_Y9XW1Z&9`$0ZJDBP_16IfZgUyM%K=Qq3@KezCf%tTOHF%mQJCbxj*%{V z0*TlRkz?{u=ufTd0%mWhc&|iM#lViH=JQ3PnBIYWJt3ijHo*)~dHi$V9?n ztq1IhL7P8pY6m01?n8yxw!~}ADWO&k2mW?la zZuO%;P|dV4e#6{@=91ZOes)By`SsTAY429?X^f1sN$`J&a5}dtrZgO= zp^}von%%C(fS6EN{cUw6yb8mnwRB8z+2zNcEo zKvucVOGc$Y>6ms}>5_lHN1aRj(Pmzp-hgC&Qm*`?jUwXiPtFUcl+`iICh~ASlvSI%bdn@=N4oG4(fB2=^N(RIQgd6>i8(*~`fja+}BaV|yK;B<&l)>VdW z=6beu(M|rEw{;ub=dYyPtXVSC8Tb#VV=l6#Vh?#K2^wN zPS`2L@iiulSt;R-3&?J_)}GjEu+^#K)bUMGKpBMeUL#4cSRuvjaqC(dhdU<#0?-EUm(86ktz>Y!%Mn za=X)dU?nK4?=mfWtlG3!1k3R101uKm8@TuS*2AvM+wo=d3BCG4r?*J|BNO|9V{Z7A zpbaCqHj{sOy!oSVPt=vo72K?HkpWAwqBI8cZVVW{p_1~1%7df%&SqU(T)4J}__9%?x-?8{ zl2VCKTbpp(F3^K^G`$>y8+;-=jXtfnH!LQ&XP+}Cz^b*woE{O?TI9=IlzD0`AZJ|(#wuU-FYKk&H zqkSU%9knT6)|LtWYykso6zmtHLrWmygAwXt0WhHkuyBALbJ-d7e2FxKxUDe@u5NQBh>g zrdG2yY*7}2@FN_?kJw?W)!s*S#vWUxZ&wl`zE;`KJ5fdTB6I#PPG6vDvcJsyPXqZ& zS3&VQTD5Jy(_ivHb_|le|M$9|?odks0zU&k00ICG03E*%Rn?6<(#shD0Nuxv5Ef1b J6B+;j005A&uf6~P delta 5490 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 diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.5-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.5-compact.zip index 070019e18a0aa740f85a52b3b967ba556e510d6a..357554c09b7ecd8eb677f0f235c36a6942571751 100644 GIT binary patch delta 6571 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 sG!lCNP)h* diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.6-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.6-compact.zip index e99b78ab695cc1131e5e031f33121870fd62fb7d..c5f05ef201e34fdae0b384f2908c34cb0b9f0442 100644 GIT binary patch delta 6549 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 H00000NhhtK delta 5487 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 diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.7-compact.zip index 42062d7081651686b0c4f6a654f65f4d15647ddf..51828bce7f7ce019e01f805587051bafd85e344e 100644 GIT binary patch delta 6533 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 delta 5452 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 C{dmd% diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.8-compact.zip index d11a080ffb719edead27bc85b1d5fe869c9d071e..eb6ba091b480c87d51aeeb3e939fb661f1f54cac 100644 GIT binary patch delta 6755 zcmV-p8l2_xE!H+0P)h>@KL7#%4ges(4^`!zK%bx*006(s001hJuof+mNWOmyewYO! zLepOErKYkd>7?1Il=bJOc5wFEtpA(Lc#^Sf)NUSi173cQipiLSNM)|MMZ)Lx(BtFw^f+l9HFi1^NOWGlh-)SDn_%J-A3j$JoV5#j^LEPWL zx4O!Rg;zBQ9IjUJdQ8LS&2oSC%BT7h4te6M@5W{SxPAdM`iWKPDn_O{oOj76Zo3ud z`uR2;YVDCBo%3vBmmHfa36s{R5dy`C5+GQXIXElq3|hT}&>cgEc>esZ#@(kYAWd3= z+TVqR-c$mTeMmm4Tw}Q8`O5>0l~P8zjvPd%7$ARP$u~ONc~r0CSNMMuX_sQ9YXxL8 zh2mKX{q%%(`^B`89qBPQ6E#t;z-56Dq^0h1`HiPH&sSMO8>Z{B&$4Qad}SgG=tGM< zCD)Xo?qa_QY3P+Y^-W06uxhX)q_J$zIMynqJk@;3%o7U7O6Rq(jOkL);l%qPDBwLI z%o;*YVFJKrZ=`5Pb&h|)OASfeVJ>?nx4zBpp3j-^%I}9wBIQw2qiBxp!O~`K-J*n) z;=&!B4adb6;~gFbdl}@+s^4Z?r_KyLdg&H0Ou#0|J_yas=LZ6D`8Im$Uw_i1mXk(G zl&24(Ck5EZe%xf9*ag#>Kr*t!qQoI%yi9G<9dB^zjt;f=)bM|C_#*J*WtBH`gn2)6 zKfs8_p-MYYOSo$1w+g!jSLU6Cp*Tpw7jKz+71=Jvu?@#$q&Kk-x%iN~_JyUWfeEjw zMDvyxd2ER8Uaf+lht}8{n{T;&W~-h0>cEbm`w%W=Aa|7>_fu!jvEYh2g(Dlhf%tjh zp-sL2H5rRa_K<(g!QWhIvxtUsV$V3;9zaW}254^y8>^t+rNbtottzNdkGOGtb~hl# zGVr$i)q;y*h?=sYPPT6%w(CjPHVW@}G47PUC4L3t2yn|W4n{P(u%g6d^k+hrYxZBx|rV8+M*?HhUZy+QPLJh z;zg3=^${0bbR+5EcQgL{2$0|d%lRlG(z0g|Uqc{2U>^%JaIb!Qn=*sgT3oNCWZ2dJ zY}^6F`?;bRTOEeXwV1N@otXz0fYmE_P_(;2n1IgvjRRaY0Wad$O|qJSDe>CUbpldk zO!$pGn@N9}hQR$*{;NPx;Hxo%_pE=}3cB0Xd@}reS1;?-z2+^vPe9@p0^5#wK$&;J zkiffQgXn@6bQ_9A`=((WcV+fk#r%=rOEPM-)1|UeYb6Cy|3)ft+TcUj`;DtB^!J(- zOHj6Ldgmi*75M~3J~10j>!!!&yIQLWxQwh2`?r5bV2czV|C2{K$1+&4?#{XO?KI2} z;#;^e@Fbkht5^Nl=aI@ToK)Fg`;)9aq~m2B#-jioP@npu$>+t_r;aAM_;G9RrvK! z(p`V!$z$>7R1a<|*7)2=QNnfyw#sBIx3o`3T@vJ!U!JPcQs3(x!DsqNmb%0A+?KlY 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 F008OgHFE#} delta 5616 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 K289*?0001qt^{EK diff --git a/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.9-compact.zip b/tests/ast-parsing/compile/custom_error-0.8.4.sol-0.8.9-compact.zip index 1b450a6e3f601e7735fbe61c5ecb07cb4d02a2a3..17e75201852bd073a1beed505d96dd2903106cfb 100644 GIT binary patch delta 6752 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 S005PwlLi}328|W~0002jvdtI( diff --git a/tests/ast-parsing/custom_error-0.8.4.sol b/tests/ast-parsing/custom_error-0.8.4.sol index ea185de89..4e1e388fb 100644 --- a/tests/ast-parsing/custom_error-0.8.4.sol +++ b/tests/ast-parsing/custom_error-0.8.4.sol @@ -52,4 +52,21 @@ contract B is A{ } } +contract ContractArgCustomError { + error E(ContractArgCustomError a); + + function f() payable external { + g(); + } + + function g() private { + bool something = h(); + if (something) { + revert E(this); + } + } + + function h() private returns (bool something) { + } +} diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.10-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.10-compact.json new file mode 100644 index 000000000..9020c8d52 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.10-compact.json @@ -0,0 +1,23 @@ +{ + "I": {}, + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.11-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.11-compact.json new file mode 100644 index 000000000..9020c8d52 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.11-compact.json @@ -0,0 +1,23 @@ +{ + "I": {}, + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.12-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.12-compact.json new file mode 100644 index 000000000..9020c8d52 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.12-compact.json @@ -0,0 +1,23 @@ +{ + "I": {}, + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.13-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.13-compact.json new file mode 100644 index 000000000..9020c8d52 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.13-compact.json @@ -0,0 +1,23 @@ +{ + "I": {}, + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.14-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.14-compact.json new file mode 100644 index 000000000..9020c8d52 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.14-compact.json @@ -0,0 +1,23 @@ +{ + "I": {}, + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.15-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.15-compact.json new file mode 100644 index 000000000..9020c8d52 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.15-compact.json @@ -0,0 +1,23 @@ +{ + "I": {}, + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err4()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json index 0a9029979..9020c8d52 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.4-compact.json @@ -14,5 +14,10 @@ "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json index 0a9029979..9020c8d52 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.5-compact.json @@ -14,5 +14,10 @@ "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json index 0a9029979..9020c8d52 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.6-compact.json @@ -14,5 +14,10 @@ "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json index 0a9029979..9020c8d52 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.7-compact.json @@ -14,5 +14,10 @@ "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json index 0a9029979..9020c8d52 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.8-compact.json @@ -14,5 +14,10 @@ "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json index 0a9029979..9020c8d52 100644 --- a/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json +++ b/tests/ast-parsing/expected/custom_error-0.8.4.sol-0.8.9-compact.json @@ -14,5 +14,10 @@ "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "ContractArgCustomError": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: IF 2\n\"];\n2->3[label=\"True\"];\n2->4[label=\"False\"];\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" } } \ No newline at end of file diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index 005971374..506ee3d6b 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -323,7 +323,7 @@ ALL_TESTS = [ "custom_error-0.4.0.sol", ALL_VERSIONS, ), - Test("custom_error-0.8.4.sol", make_version(8, 4, 9)), + Test("custom_error-0.8.4.sol", make_version(8, 4, 15)), Test( "top-level-0.4.0.sol", VERSIONS_04 + VERSIONS_05 + VERSIONS_06 + ["0.7.0"], From 93a1610a0cb473681dd6b172e44ec85766693e84 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 17 Aug 2022 14:37:20 +0200 Subject: [PATCH 172/202] Fix CI --- slither/slithir/variables/constant.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/slithir/variables/constant.py b/slither/slithir/variables/constant.py index d5d4d0766..09a5ee34f 100644 --- a/slither/slithir/variables/constant.py +++ b/slither/slithir/variables/constant.py @@ -75,6 +75,6 @@ class Constant(SlithIRVariable): def __repr__(self): return f"{str(self.value)}" - + def __hash__(self) -> int: return self._val.__hash__() From 085b60913a1fb2c3606d45f63c6ea9036638ccd0 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Fri, 19 Aug 2022 17:53:32 +0200 Subject: [PATCH 173/202] Use full_name for solidity signature in case of internal function Hotfix to support recursive type --- slither/core/declarations/function.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/slither/core/declarations/function.py b/slither/core/declarations/function.py index 4c88150d2..fe6c49ae9 100644 --- a/slither/core/declarations/function.py +++ b/slither/core/declarations/function.py @@ -962,10 +962,28 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu :return: the solidity signature """ if self._solidity_signature is None: - parameters = [ - convert_type_for_solidity_signature_to_string(x.type) for x in self.parameters - ] - self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" + # Solidity allows recursive type for structure definition if its not used in public /external + # When this happens we can reach an infinite loop in convert_type_for_solidity_signature_to_string + # A quick workaround is to just return full_name for internal + # contract A{ + # + # struct St{ + # St[] a; + # uint b; + # } + # + # function f(St memory s) internal{ + # + # } + # + # } + if self.visibility in ["public", "external"]: + parameters = [ + convert_type_for_solidity_signature_to_string(x.type) for x in self.parameters + ] + self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" + else: + self._solidity_signature = self.full_name return self._solidity_signature @property From 6dc5856be71951e4bfeb1700b9e403273cdf5317 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Sat, 20 Aug 2022 15:26:47 +0200 Subject: [PATCH 174/202] Use a best effort approach for internal function function-id --- slither/core/declarations/function.py | 31 +++++---------- slither/utils/type.py | 55 ++++++++++++++++++++------- tests/function_ids/rec_struct-0.8.sol | 12 ++++++ tests/test_features.py | 9 +++++ 4 files changed, 71 insertions(+), 36 deletions(-) create mode 100644 tests/function_ids/rec_struct-0.8.sol diff --git a/slither/core/declarations/function.py b/slither/core/declarations/function.py index fe6c49ae9..ea60a986b 100644 --- a/slither/core/declarations/function.py +++ b/slither/core/declarations/function.py @@ -959,31 +959,18 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu """ Return a signature following the Solidity Standard Contract and converted into address + + It might still keep internal types (ex: structure name) for internal functions. + The reason is that internal functions allows recursive structure definition, which + can't be converted following the Solidity stand ard + :return: the solidity signature """ if self._solidity_signature is None: - # Solidity allows recursive type for structure definition if its not used in public /external - # When this happens we can reach an infinite loop in convert_type_for_solidity_signature_to_string - # A quick workaround is to just return full_name for internal - # contract A{ - # - # struct St{ - # St[] a; - # uint b; - # } - # - # function f(St memory s) internal{ - # - # } - # - # } - if self.visibility in ["public", "external"]: - parameters = [ - convert_type_for_solidity_signature_to_string(x.type) for x in self.parameters - ] - self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" - else: - self._solidity_signature = self.full_name + parameters = [ + convert_type_for_solidity_signature_to_string(x.type) for x in self.parameters + ] + self._solidity_signature = self.name + "(" + ",".join(parameters) + ")" return self._solidity_signature @property diff --git a/slither/utils/type.py b/slither/utils/type.py index 1ce5fc158..5c7fcee34 100644 --- a/slither/utils/type.py +++ b/slither/utils/type.py @@ -1,12 +1,14 @@ import math -from typing import List, Union +from typing import List, Union, Set from slither.core.solidity_types import ArrayType, MappingType, ElementaryType, UserDefinedType from slither.core.solidity_types.type import Type from slither.core.variables.variable import Variable -def _convert_type_for_solidity_signature_to_string(types: Union[Type, List[Type]]) -> str: +def _convert_type_for_solidity_signature_to_string( + types: Union[Type, List[Type]], seen: Set[Type] +) -> str: if isinstance(types, Type): # Array might be struct, so we need to go again through the conversion here # We could have this logic in convert_type_for_solidity_signature @@ -15,8 +17,10 @@ def _convert_type_for_solidity_signature_to_string(types: Union[Type, List[Type] # Which is currently not supported. This comes down to (uint, uint)[] not being possible in Solidity # While having an array of a struct of two uint leads to a (uint, uint)[] signature if isinstance(types, ArrayType): - underlying_type = convert_type_for_solidity_signature(types.type) - underlying_type_str = _convert_type_for_solidity_signature_to_string(underlying_type) + underlying_type = convert_type_for_solidity_signature(types.type, seen) + underlying_type_str = _convert_type_for_solidity_signature_to_string( + underlying_type, seen + ) return underlying_type_str + "[]" return str(types) @@ -26,9 +30,9 @@ def _convert_type_for_solidity_signature_to_string(types: Union[Type, List[Type] ret = "(" for underlying_type in types: if first_item: - ret += _convert_type_for_solidity_signature_to_string(underlying_type) + ret += _convert_type_for_solidity_signature_to_string(underlying_type, seen) else: - ret += "," + _convert_type_for_solidity_signature_to_string(underlying_type) + ret += "," + _convert_type_for_solidity_signature_to_string(underlying_type, seen) first_item = False ret += ")" @@ -36,14 +40,33 @@ def _convert_type_for_solidity_signature_to_string(types: Union[Type, List[Type] def convert_type_for_solidity_signature_to_string(t: Type) -> str: - types = convert_type_for_solidity_signature(t) - return _convert_type_for_solidity_signature_to_string(types) + seen: Set[Type] = set() + types = convert_type_for_solidity_signature(t, seen) + return _convert_type_for_solidity_signature_to_string(types, seen) -def convert_type_for_solidity_signature(t: Type) -> Union[Type, List[Type]]: +def convert_type_for_solidity_signature(t: Type, seen: Set[Type]) -> Union[Type, List[Type]]: # pylint: disable=import-outside-toplevel from slither.core.declarations import Contract, Enum, Structure + # Solidity allows recursive type for structure definition if its not used in public /external + # When this happens we can reach an infinite loop. If we detect a loop, we just stop converting the underlying type + # This is ok, because it wont happen for public/external function + # + # contract A{ + # + # struct St{ + # St[] a; + # uint b; + # } + # + # function f(St memory s) internal{} + # + # } + if t in seen: + return t + seen.add(t) + if isinstance(t, UserDefinedType): underlying_type = t.type if isinstance(underlying_type, Contract): @@ -61,21 +84,24 @@ def convert_type_for_solidity_signature(t: Type) -> Union[Type, List[Type]]: if isinstance(underlying_type, Structure): # We can't have recursive types for structure, so recursion is ok here types = [ - convert_type_for_solidity_signature(x.type) for x in underlying_type.elems_ordered + convert_type_for_solidity_signature(x.type, seen) + for x in underlying_type.elems_ordered ] return types return t -def _export_nested_types_from_variable(current_type: Type, ret: List[Type]) -> None: +def _export_nested_types_from_variable( + current_type: Type, ret: List[Type], seen: Set[Type] +) -> None: """ Export the list of nested types (mapping/array) :param variable: :return: list(Type) """ if isinstance(current_type, MappingType): - underlying_type = convert_type_for_solidity_signature(current_type.type_from) + underlying_type = convert_type_for_solidity_signature(current_type.type_from, seen) if isinstance(underlying_type, list): ret.extend(underlying_type) else: @@ -87,7 +113,7 @@ def _export_nested_types_from_variable(current_type: Type, ret: List[Type]) -> N next_type = current_type.type else: return - _export_nested_types_from_variable(next_type, ret) + _export_nested_types_from_variable(next_type, ret, seen) def export_nested_types_from_variable(variable: Variable) -> List[Type]: @@ -97,7 +123,8 @@ def export_nested_types_from_variable(variable: Variable) -> List[Type]: :return: list(Type) """ l: List[Type] = [] - _export_nested_types_from_variable(variable.type, l) + seen: Set[Type] = set() + _export_nested_types_from_variable(variable.type, l, seen) return l diff --git a/tests/function_ids/rec_struct-0.8.sol b/tests/function_ids/rec_struct-0.8.sol new file mode 100644 index 000000000..7440a5a33 --- /dev/null +++ b/tests/function_ids/rec_struct-0.8.sol @@ -0,0 +1,12 @@ +contract A{ + + struct St{ + St[] a; + uint b; + } + + function f(St memory s) internal{ + f(s); + } + +} diff --git a/tests/test_features.py b/tests/test_features.py index 88751e324..c06ee96ce 100644 --- a/tests/test_features.py +++ b/tests/test_features.py @@ -2,6 +2,7 @@ import inspect from crytic_compile import CryticCompile from crytic_compile.platform.solc_standard_json import SolcStandardJson +from solc_select import solc_select from slither import Slither from slither.detectors import all_detectors @@ -41,3 +42,11 @@ def test_collision(): def test_cycle(): slither = Slither("./tests/test_cyclic_import/a.sol") _run_all_detectors(slither) + + +def test_funcion_id_rec_structure(): + solc_select.switch_global_version("0.8.0", always_install=True) + slither = Slither("./tests/function_ids/rec_struct-0.8.sol") + for compilation_unit in slither.compilation_units: + for function in compilation_unit.functions: + assert function.solidity_signature From 0ab3d50fa36625c6520be3b6e8683f6c3749389a Mon Sep 17 00:00:00 2001 From: Boyan-MILANOV Date: Tue, 23 Aug 2022 16:06:14 +0200 Subject: [PATCH 175/202] Add --no-fail-pedantic flag and make failing the default behavior --- slither/__main__.py | 12 ++++++++++++ slither/utils/command_line.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/slither/__main__.py b/slither/__main__.py index b27c8ae75..f1f334be4 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -288,6 +288,12 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s usage += "\t- 0x.. // a contract on mainet\n" usage += f"\t- NETWORK:0x.. // a contract on a different network. Supported networks: {','.join(x[:-1] for x in SUPPORTED_NETWORK)}\n" + class NoFailPedanticAction(argparse.Action): + """Custom argparse action that sets args.fail_pedantic to False if --no-fail-pedantic is used""" + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, "fail_pedantic", False) + parser = argparse.ArgumentParser( description="For usage information, see https://github.com/crytic/slither/wiki/Usage", usage=usage, @@ -402,6 +408,12 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s default=defaults_flag_in_config["fail_pedantic"], ) + group_detector.add_argument( + "--no-fail-pedantic", + help="Don't fail immediately if a finding is detected", + action=NoFailPedanticAction, + ) + group_detector.add_argument( "--fail-low", help="Fail if low or greater impact finding is detected", diff --git a/slither/utils/command_line.py b/slither/utils/command_line.py index d0d77c45f..d264e65ea 100644 --- a/slither/utils/command_line.py +++ b/slither/utils/command_line.py @@ -34,7 +34,7 @@ defaults_flag_in_config = { "exclude_low": False, "exclude_medium": False, "exclude_high": False, - "fail_pedantic": False, + "fail_pedantic": True, "fail_low": False, "fail_medium": False, "fail_high": False, From 40534e1a307c545aa70eef55814b4722f02f3a61 Mon Sep 17 00:00:00 2001 From: Boyan-MILANOV Date: Wed, 24 Aug 2022 09:20:14 +0200 Subject: [PATCH 176/202] Fix --no-fail-pedantic option parsing --- slither/__main__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slither/__main__.py b/slither/__main__.py index f1f334be4..ecd529142 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -411,7 +411,9 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_detector.add_argument( "--no-fail-pedantic", help="Don't fail immediately if a finding is detected", + nargs=0, action=NoFailPedanticAction, + required=False, ) group_detector.add_argument( From 1127eb5c49fada7288f95039a0805efe9c2dbdb5 Mon Sep 17 00:00:00 2001 From: Boyan-MILANOV Date: Wed, 24 Aug 2022 09:20:44 +0200 Subject: [PATCH 177/202] Force --no-fail-pedantic on some CI tests --- scripts/ci_test_cli.sh | 2 +- scripts/ci_test_truffle.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/ci_test_cli.sh b/scripts/ci_test_cli.sh index 56e6ff0a4..757fca076 100755 --- a/scripts/ci_test_cli.sh +++ b/scripts/ci_test_cli.sh @@ -4,7 +4,7 @@ solc-select use 0.7.0 -if ! slither "tests/config/test.sol" --solc-ast; then +if ! slither "tests/config/test.sol" --solc-ast --no-fail-pedantic; then echo "--solc-ast failed" exit 1 fi diff --git a/scripts/ci_test_truffle.sh b/scripts/ci_test_truffle.sh index da1a350c9..0246470f8 100755 --- a/scripts/ci_test_truffle.sh +++ b/scripts/ci_test_truffle.sh @@ -14,9 +14,9 @@ nvm use --lts npm install -g truffle truffle unbox metacoin -if ! slither .; then +if ! slither . --no-fail-pedantic; then echo "Truffle test failed" exit 1 fi -exit 0 \ No newline at end of file +exit 0 From 32599e0d2c39691d8d34c8ec9d2237d582365954 Mon Sep 17 00:00:00 2001 From: Boyan-MILANOV Date: Wed, 24 Aug 2022 09:28:03 +0200 Subject: [PATCH 178/202] Fix cli CI test --- scripts/ci_test_cli.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ci_test_cli.sh b/scripts/ci_test_cli.sh index 757fca076..e35bf3ff5 100755 --- a/scripts/ci_test_cli.sh +++ b/scripts/ci_test_cli.sh @@ -9,12 +9,12 @@ if ! slither "tests/config/test.sol" --solc-ast --no-fail-pedantic; then exit 1 fi -if ! slither "tests/config/test.sol" --solc-disable-warnings; then +if ! slither "tests/config/test.sol" --solc-disable-warnings --no-fail-pedantic; then echo "--solc-disable-warnings failed" exit 1 fi -if ! slither "tests/config/test.sol" --disable-color; then +if ! slither "tests/config/test.sol" --disable-color --no-fail-pedantic; then echo "--disable-color failed" exit 1 fi From 994c4438f6298d386fe300d52ec79b386a7b45c9 Mon Sep 17 00:00:00 2001 From: Boyan-MILANOV Date: Wed, 24 Aug 2022 10:18:01 +0200 Subject: [PATCH 179/202] Remove custom argparse action --- slither/__main__.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/slither/__main__.py b/slither/__main__.py index ecd529142..aab334592 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -288,12 +288,6 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s usage += "\t- 0x.. // a contract on mainet\n" usage += f"\t- NETWORK:0x.. // a contract on a different network. Supported networks: {','.join(x[:-1] for x in SUPPORTED_NETWORK)}\n" - class NoFailPedanticAction(argparse.Action): - """Custom argparse action that sets args.fail_pedantic to False if --no-fail-pedantic is used""" - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, "fail_pedantic", False) - parser = argparse.ArgumentParser( description="For usage information, see https://github.com/crytic/slither/wiki/Usage", usage=usage, @@ -411,8 +405,8 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_detector.add_argument( "--no-fail-pedantic", help="Don't fail immediately if a finding is detected", - nargs=0, - action=NoFailPedanticAction, + dest="fail_pedantic", + action="store_false", required=False, ) From 082dd94e67983a02216aa98d190f63017f0c0cc0 Mon Sep 17 00:00:00 2001 From: Boyan-MILANOV Date: Wed, 24 Aug 2022 11:56:45 +0200 Subject: [PATCH 180/202] Improve help messages --- slither/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slither/__main__.py b/slither/__main__.py index aab334592..4cf148f13 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -397,14 +397,14 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_detector.add_argument( "--fail-pedantic", - help="Fail if any finding is detected", + help="Return the number of findings in the exit code", action="store_true", default=defaults_flag_in_config["fail_pedantic"], ) group_detector.add_argument( "--no-fail-pedantic", - help="Don't fail immediately if a finding is detected", + help="Do not return the number of findings in the exit code. Opposite of --fail-pedantic", dest="fail_pedantic", action="store_false", required=False, From aa4a57d05015a8e5e103e7d5c8d25a76a58216c0 Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Wed, 31 Aug 2022 11:48:13 +0200 Subject: [PATCH 181/202] Add more types --- plugin_example/slither_my_plugin/__init__.py | 9 +- slither/__main__.py | 96 ++++++++++++------- slither/core/declarations/structure.py | 14 +-- slither/core/expressions/tuple_expression.py | 4 +- slither/core/source_mapping/source_mapping.py | 8 +- slither/slither.py | 12 ++- slither/slithir/operations/call.py | 8 +- slither/slithir/tmp_operations/tmp_call.py | 8 +- .../tmp_operations/tmp_new_elementary_type.py | 12 ++- slither/tools/demo/__main__.py | 4 +- slither/tools/erc_conformance/__main__.py | 9 +- slither/tools/erc_conformance/erc/ercs.py | 15 ++- slither/tools/flattening/__main__.py | 4 +- slither/tools/kspec_coverage/__main__.py | 4 +- .../tools/kspec_coverage/kspec_coverage.py | 4 +- slither/tools/mutator/__main__.py | 13 ++- slither/tools/possible_paths/__main__.py | 7 +- .../tools/possible_paths/possible_paths.py | 45 ++++++--- slither/tools/properties/__main__.py | 19 ++-- slither/tools/properties/platforms/truffle.py | 8 +- slither/tools/properties/utils.py | 2 +- slither/tools/similarity/__main__.py | 4 +- slither/tools/similarity/encode.py | 2 +- slither/tools/similarity/info.py | 3 +- slither/tools/similarity/plot.py | 3 +- slither/tools/similarity/train.py | 3 +- slither/tools/slither_format/__main__.py | 4 +- .../tools/slither_format/slither_format.py | 18 ++-- slither/tools/upgradeability/__main__.py | 75 ++++++++++----- .../upgradeability/utils/command_line.py | 20 ++-- slither/utils/command_line.py | 57 +++++++---- slither/utils/output.py | 4 +- slither/utils/output_capture.py | 8 +- 33 files changed, 323 insertions(+), 183 deletions(-) diff --git a/plugin_example/slither_my_plugin/__init__.py b/plugin_example/slither_my_plugin/__init__.py index eabdb147e..9379ac833 100644 --- a/plugin_example/slither_my_plugin/__init__.py +++ b/plugin_example/slither_my_plugin/__init__.py @@ -1,8 +1,13 @@ +from typing import Tuple, List, Type + from slither_my_plugin.detectors.example import Example +from slither.detectors.abstract_detector import AbstractDetector +from slither.printers.abstract_printer import AbstractPrinter + -def make_plugin(): +def make_plugin() -> Tuple[List[Type[AbstractDetector]], List[Type[AbstractPrinter]]]: plugin_detectors = [Example] - plugin_printers = [] + plugin_printers: List[Type[AbstractPrinter]] = [] return plugin_detectors, plugin_printers diff --git a/slither/__main__.py b/slither/__main__.py index 4cf148f13..98320c76a 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -10,11 +10,11 @@ import os import pstats import sys import traceback -from typing import Tuple, Optional, List, Dict +from typing import Tuple, Optional, List, Dict, Type, Union, Any, Sequence from pkg_resources import iter_entry_points, require -from crytic_compile import cryticparser +from crytic_compile import cryticparser, CryticCompile from crytic_compile.platform.standard import generate_standard_export from crytic_compile.platform.etherscan import SUPPORTED_NETWORK from crytic_compile import compile_all, is_supported @@ -55,10 +55,10 @@ logger = logging.getLogger("Slither") def process_single( - target: str, + target: Union[str, CryticCompile], args: argparse.Namespace, - detector_classes: List[AbstractDetector], - printer_classes: List[AbstractPrinter], + detector_classes: List[Type[AbstractDetector]], + printer_classes: List[Type[AbstractPrinter]], ) -> Tuple[Slither, List[Dict], List[Dict], int]: """ The core high-level code for running Slither static analysis. @@ -80,8 +80,8 @@ def process_single( def process_all( target: str, args: argparse.Namespace, - detector_classes: List[AbstractDetector], - printer_classes: List[AbstractPrinter], + detector_classes: List[Type[AbstractDetector]], + printer_classes: List[Type[AbstractPrinter]], ) -> Tuple[List[Slither], List[Dict], List[Dict], int]: compilations = compile_all(target, **vars(args)) slither_instances = [] @@ -109,8 +109,8 @@ def process_all( def _process( slither: Slither, - detector_classes: List[AbstractDetector], - printer_classes: List[AbstractPrinter], + detector_classes: List[Type[AbstractDetector]], + printer_classes: List[Type[AbstractPrinter]], ) -> Tuple[Slither, List[Dict], List[Dict], int]: for detector_cls in detector_classes: slither.register_detector(detector_cls) @@ -137,13 +137,14 @@ def _process( return slither, results_detectors, results_printers, analyzed_contracts_count +# TODO: delete me? def process_from_asts( filenames: List[str], args: argparse.Namespace, - detector_classes: List[AbstractDetector], - printer_classes: List[AbstractPrinter], -): - all_contracts = [] + detector_classes: List[Type[AbstractDetector]], + printer_classes: List[Type[AbstractPrinter]], +) -> Tuple[Slither, List[Dict], List[Dict], int]: + all_contracts: List[str] = [] for filename in filenames: with open(filename, encoding="utf8") as file_open: @@ -162,13 +163,15 @@ def process_from_asts( ################################################################################### -def get_detectors_and_printers(): +def get_detectors_and_printers() -> Tuple[ + List[Type[AbstractDetector]], List[Type[AbstractPrinter]] +]: - detectors = [getattr(all_detectors, name) for name in dir(all_detectors)] - detectors = [d for d in detectors if inspect.isclass(d) and issubclass(d, AbstractDetector)] + detectors_ = [getattr(all_detectors, name) for name in dir(all_detectors)] + detectors = [d for d in detectors_ if inspect.isclass(d) and issubclass(d, AbstractDetector)] - printers = [getattr(all_printers, name) for name in dir(all_printers)] - printers = [p for p in printers if inspect.isclass(p) and issubclass(p, AbstractPrinter)] + printers_ = [getattr(all_printers, name) for name in dir(all_printers)] + printers = [p for p in printers_ if inspect.isclass(p) and issubclass(p, AbstractPrinter)] # Handle plugins! for entry_point in iter_entry_points(group="slither_analyzer.plugin", name=None): @@ -194,8 +197,8 @@ def get_detectors_and_printers(): # pylint: disable=too-many-branches def choose_detectors( - args: argparse.Namespace, all_detector_classes: List[AbstractDetector] -) -> List[AbstractDetector]: + args: argparse.Namespace, all_detector_classes: List[Type[AbstractDetector]] +) -> List[Type[AbstractDetector]]: # If detectors are specified, run only these ones detectors_to_run = [] @@ -245,8 +248,8 @@ def choose_detectors( def choose_printers( - args: argparse.Namespace, all_printer_classes: List[AbstractPrinter] -) -> List[AbstractPrinter]: + args: argparse.Namespace, all_printer_classes: List[Type[AbstractPrinter]] +) -> List[Type[AbstractPrinter]]: printers_to_run = [] # disable default printer @@ -273,13 +276,16 @@ def choose_printers( ################################################################################### -def parse_filter_paths(args): +def parse_filter_paths(args: argparse.Namespace) -> List[str]: if args.filter_paths: return args.filter_paths.split(",") return [] -def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-statements +# pylint: disable=too-many-statements +def parse_args( + detector_classes: List[Type[AbstractDetector]], printer_classes: List[Type[AbstractPrinter]] +) -> argparse.Namespace: usage = "slither target [flag]\n" usage += "\ntarget can be:\n" @@ -622,7 +628,9 @@ class ListDetectors(argparse.Action): # pylint: disable=too-few-public-methods class ListDetectorsJson(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs detectors, _ = get_detectors_and_printers() detector_types_json = output_detectors_json(detectors) print(json.dumps(detector_types_json)) @@ -630,22 +638,38 @@ class ListDetectorsJson(argparse.Action): # pylint: disable=too-few-public-meth class ListPrinters(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs _, printers = get_detectors_and_printers() output_printers(printers) parser.exit() class OutputMarkdown(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, args, values, option_string=None): + def __call__( + self, + parser: Any, + args: Any, + values: Optional[Union[str, Sequence[Any]]], + option_string: Any = None, + ) -> None: detectors, printers = get_detectors_and_printers() + assert isinstance(values, str) output_to_markdown(detectors, printers, values) parser.exit() class OutputWiki(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, args, values, option_string=None): + def __call__( + self, + parser: Any, + args: Any, + values: Optional[Union[str, Sequence[Any]]], + option_string: Any = None, + ) -> None: detectors, _ = get_detectors_and_printers() + assert isinstance(values, str) output_wiki(detectors, values) parser.exit() @@ -678,7 +702,7 @@ class FormatterCryticCompile(logging.Formatter): ################################################################################### -def main(): +def main() -> None: # Codebase with complex domninators can lead to a lot of SSA recursive call sys.setrecursionlimit(1500) @@ -689,8 +713,9 @@ def main(): # pylint: disable=too-many-statements,too-many-branches,too-many-locals def main_impl( - all_detector_classes: List[AbstractDetector], all_printer_classes: List[AbstractPrinter] -): + all_detector_classes: List[Type[AbstractDetector]], + all_printer_classes: List[Type[AbstractPrinter]], +) -> None: """ :param all_detector_classes: A list of all detectors that can be included/excluded. :param all_printer_classes: A list of all printers that can be included. @@ -756,8 +781,8 @@ def main_impl( crytic_compile_error.propagate = False crytic_compile_error.setLevel(logging.INFO) - results_detectors = [] - results_printers = [] + results_detectors: List[Dict] = [] + results_printers: List[Dict] = [] try: filename = args.filename @@ -806,6 +831,7 @@ def main_impl( if "compilations" in args.json_types: compilation_results = [] for slither_instance in slither_instances: + assert slither_instance.crytic_compile compilation_results.append( generate_standard_export(slither_instance.crytic_compile) ) @@ -856,7 +882,7 @@ def main_impl( except Exception: # pylint: disable=broad-except output_error = traceback.format_exc() - logging.error(traceback.print_exc()) + traceback.print_exc() logging.error(f"Error in {args.filename}") # pylint: disable=logging-fstring-interpolation logging.error(output_error) @@ -879,7 +905,7 @@ def main_impl( if outputting_zip: output_to_zip(args.zip, output_error, json_results, args.zip_type) - if args.perf: + if args.perf and cp: cp.disable() stats = pstats.Stats(cp).sort_stats("cumtime") stats.print_stats() diff --git a/slither/core/declarations/structure.py b/slither/core/declarations/structure.py index 39b1948ee..8f6d8c50a 100644 --- a/slither/core/declarations/structure.py +++ b/slither/core/declarations/structure.py @@ -8,10 +8,10 @@ if TYPE_CHECKING: class Structure(SourceMapping): - def __init__(self, compilation_unit: "SlitherCompilationUnit"): + def __init__(self, compilation_unit: "SlitherCompilationUnit") -> None: super().__init__() self._name: Optional[str] = None - self._canonical_name = None + self._canonical_name: Optional[str] = None self._elems: Dict[str, "StructureVariable"] = {} # Name of the elements in the order of declaration self._elems_ordered: List[str] = [] @@ -19,25 +19,27 @@ class Structure(SourceMapping): @property def canonical_name(self) -> str: + assert self._canonical_name return self._canonical_name @canonical_name.setter - def canonical_name(self, name: str): + def canonical_name(self, name: str) -> None: self._canonical_name = name @property def name(self) -> str: + assert self._name return self._name @name.setter - def name(self, new_name: str): + def name(self, new_name: str) -> None: self._name = new_name @property def elems(self) -> Dict[str, "StructureVariable"]: return self._elems - def add_elem_in_order(self, s: str): + def add_elem_in_order(self, s: str) -> None: self._elems_ordered.append(s) @property @@ -47,5 +49,5 @@ class Structure(SourceMapping): ret.append(self._elems[e]) return ret - def __str__(self): + def __str__(self) -> str: return self.name diff --git a/slither/core/expressions/tuple_expression.py b/slither/core/expressions/tuple_expression.py index 7f14601f4..1fd8fc795 100644 --- a/slither/core/expressions/tuple_expression.py +++ b/slither/core/expressions/tuple_expression.py @@ -4,7 +4,7 @@ from slither.core.expressions.expression import Expression class TupleExpression(Expression): - def __init__(self, expressions): + def __init__(self, expressions: List[Expression]) -> None: assert all(isinstance(x, Expression) for x in expressions if x) super().__init__() self._expressions = expressions @@ -13,6 +13,6 @@ class TupleExpression(Expression): def expressions(self) -> List[Expression]: return self._expressions - def __str__(self): + def __str__(self) -> str: expressions_str = [str(e) for e in self.expressions] return "(" + ",".join(expressions_str) + ")" diff --git a/slither/core/source_mapping/source_mapping.py b/slither/core/source_mapping/source_mapping.py index 7ceabd568..ee5211c7c 100644 --- a/slither/core/source_mapping/source_mapping.py +++ b/slither/core/source_mapping/source_mapping.py @@ -162,13 +162,15 @@ def _convert_source_mapping( class SourceMapping(Context, metaclass=ABCMeta): - def __init__(self): + def __init__(self) -> None: super().__init__() # self._source_mapping: Optional[Dict] = None self.source_mapping: Source = Source() self.references: List[Source] = [] - def set_offset(self, offset: Union["Source", str], compilation_unit: "SlitherCompilationUnit"): + def set_offset( + self, offset: Union["Source", str], compilation_unit: "SlitherCompilationUnit" + ) -> None: if isinstance(offset, Source): self.source_mapping.start = offset.start self.source_mapping.length = offset.length @@ -184,6 +186,6 @@ class SourceMapping(Context, metaclass=ABCMeta): def add_reference_from_raw_source( self, offset: str, compilation_unit: "SlitherCompilationUnit" - ): + ) -> None: s = _convert_source_mapping(offset, compilation_unit) self.references.append(s) diff --git a/slither/slither.py b/slither/slither.py index 59bbf8a5f..dcfc0ad7e 100644 --- a/slither/slither.py +++ b/slither/slither.py @@ -1,5 +1,5 @@ import logging -from typing import Union, List, ValuesView +from typing import Union, List, ValuesView, Type, Dict from crytic_compile import CryticCompile, InvalidCompilation @@ -19,7 +19,9 @@ logger_detector = logging.getLogger("Detectors") logger_printer = logging.getLogger("Printers") -def _check_common_things(thing_name, cls, base_cls, instances_list): +def _check_common_things( + thing_name: str, cls: Type, base_cls: Type, instances_list: List[Type[AbstractDetector]] +) -> None: if not issubclass(cls, base_cls) or cls is base_cls: raise Exception( @@ -178,7 +180,7 @@ class Slither(SlitherCore): # pylint: disable=too-many-instance-attributes def detectors_optimization(self): return [d for d in self.detectors if d.IMPACT == DetectorClassification.OPTIMIZATION] - def register_detector(self, detector_class): + def register_detector(self, detector_class: Type[AbstractDetector]) -> None: """ :param detector_class: Class inheriting from `AbstractDetector`. """ @@ -188,7 +190,7 @@ class Slither(SlitherCore): # pylint: disable=too-many-instance-attributes instance = detector_class(compilation_unit, self, logger_detector) self._detectors.append(instance) - def register_printer(self, printer_class): + def register_printer(self, printer_class: Type[AbstractPrinter]) -> None: """ :param printer_class: Class inheriting from `AbstractPrinter`. """ @@ -197,7 +199,7 @@ class Slither(SlitherCore): # pylint: disable=too-many-instance-attributes instance = printer_class(self, logger_printer) self._printers.append(instance) - def run_detectors(self): + def run_detectors(self) -> List[Dict]: """ :return: List of registered detectors results. """ diff --git a/slither/slithir/operations/call.py b/slither/slithir/operations/call.py index cff2767cd..07304fa99 100644 --- a/slither/slithir/operations/call.py +++ b/slither/slithir/operations/call.py @@ -1,8 +1,10 @@ +from typing import Optional, List + from slither.slithir.operations.operation import Operation class Call(Operation): - def __init__(self): + def __init__(self) -> None: super().__init__() self._arguments = [] @@ -14,14 +16,14 @@ class Call(Operation): def arguments(self, v): self._arguments = v - def can_reenter(self, _callstack=None): # pylint: disable=no-self-use + def can_reenter(self, _callstack: Optional[List] = None) -> bool: # pylint: disable=no-self-use """ Must be called after slithIR analysis pass :return: bool """ return False - def can_send_eth(self): # pylint: disable=no-self-use + def can_send_eth(self) -> bool: # pylint: disable=no-self-use """ Must be called after slithIR analysis pass :return: bool diff --git a/slither/slithir/tmp_operations/tmp_call.py b/slither/slithir/tmp_operations/tmp_call.py index e9562b1c1..fb6641139 100644 --- a/slither/slithir/tmp_operations/tmp_call.py +++ b/slither/slithir/tmp_operations/tmp_call.py @@ -63,14 +63,14 @@ class TmpCall(OperationWithLValue): # pylint: disable=too-many-instance-attribu def call_id(self): return self._callid - @property - def read(self): - return [self.called] - @call_id.setter def call_id(self, c): self._callid = c + @property + def read(self): + return [self.called] + @property def called(self): return self._called diff --git a/slither/slithir/tmp_operations/tmp_new_elementary_type.py b/slither/slithir/tmp_operations/tmp_new_elementary_type.py index 357c063a7..d7a4f5e1b 100644 --- a/slither/slithir/tmp_operations/tmp_new_elementary_type.py +++ b/slither/slithir/tmp_operations/tmp_new_elementary_type.py @@ -1,21 +1,23 @@ +from typing import List + from slither.slithir.operations.lvalue import OperationWithLValue from slither.core.solidity_types.elementary_type import ElementaryType class TmpNewElementaryType(OperationWithLValue): - def __init__(self, new_type, lvalue): + def __init__(self, new_type: ElementaryType, lvalue): assert isinstance(new_type, ElementaryType) super().__init__() - self._type = new_type + self._type: ElementaryType = new_type self._lvalue = lvalue @property - def read(self): + def read(self) -> List: return [] @property - def type(self): + def type(self) -> ElementaryType: return self._type - def __str__(self): + def __str__(self) -> str: return f"{self.lvalue} = new {self._type}" diff --git a/slither/tools/demo/__main__.py b/slither/tools/demo/__main__.py index 37d265bb1..5bc2c7c8e 100644 --- a/slither/tools/demo/__main__.py +++ b/slither/tools/demo/__main__.py @@ -9,7 +9,7 @@ logging.getLogger("Slither").setLevel(logging.INFO) logger = logging.getLogger("Slither-demo") -def parse_args(): +def parse_args() -> argparse.Namespace: """ Parse the underlying arguments for the program. :return: Returns the arguments for the program. @@ -26,7 +26,7 @@ def parse_args(): return parser.parse_args() -def main(): +def main() -> None: args = parse_args() # Perform slither analysis on the given filename diff --git a/slither/tools/erc_conformance/__main__.py b/slither/tools/erc_conformance/__main__.py index 45e57b55c..ef594a7c6 100644 --- a/slither/tools/erc_conformance/__main__.py +++ b/slither/tools/erc_conformance/__main__.py @@ -1,6 +1,7 @@ import argparse import logging from collections import defaultdict +from typing import Any, Dict, List from crytic_compile import cryticparser from slither import Slither @@ -26,7 +27,7 @@ logger.propagate = False ADDITIONAL_CHECKS = {"ERC20": check_erc20, "ERC1155": check_erc1155} -def parse_args(): +def parse_args() -> argparse.Namespace: """ Parse the underlying arguments for the program. :return: Returns the arguments for the program. @@ -63,20 +64,20 @@ def parse_args(): return parser.parse_args() -def _log_error(err, args): +def _log_error(err: Any, args: argparse.Namespace) -> None: if args.json: output_to_json(args.json, str(err), {"upgradeability-check": []}) logger.error(err) -def main(): +def main() -> None: args = parse_args() # Perform slither analysis on the given filename slither = Slither(args.project, **vars(args)) - ret = defaultdict(list) + ret: Dict[str, List] = defaultdict(list) if args.erc.upper() in ERCS: diff --git a/slither/tools/erc_conformance/erc/ercs.py b/slither/tools/erc_conformance/erc/ercs.py index ef459eef9..a6b9050ae 100644 --- a/slither/tools/erc_conformance/erc/ercs.py +++ b/slither/tools/erc_conformance/erc/ercs.py @@ -1,7 +1,10 @@ import logging +from typing import Dict, List, Optional, Set +from slither.core.declarations import Contract from slither.slithir.operations import EventCall from slither.utils import output +from slither.utils.erc import ERC, ERC_EVENT from slither.utils.type import ( export_nested_types_from_variable, export_return_type_from_variable, @@ -11,7 +14,7 @@ logger = logging.getLogger("Slither-conformance") # pylint: disable=too-many-locals,too-many-branches,too-many-statements -def _check_signature(erc_function, contract, ret): +def _check_signature(erc_function: ERC, contract: Contract, ret: Dict) -> None: name = erc_function.name parameters = erc_function.parameters return_type = erc_function.return_type @@ -146,7 +149,7 @@ def _check_signature(erc_function, contract, ret): ret["missing_event_emmited"].append(missing_event_emmited.data) -def _check_events(erc_event, contract, ret): +def _check_events(erc_event: ERC_EVENT, contract: Contract, ret: Dict[str, List]) -> None: name = erc_event.name parameters = erc_event.parameters indexes = erc_event.indexes @@ -180,7 +183,13 @@ def _check_events(erc_event, contract, ret): ret["missing_event_index"].append(missing_event_index.data) -def generic_erc_checks(contract, erc_functions, erc_events, ret, explored=None): +def generic_erc_checks( + contract: Contract, + erc_functions: List[ERC], + erc_events: List[ERC_EVENT], + ret: Dict[str, List], + explored: Optional[Set[Contract]] = None, +) -> None: if explored is None: explored = set() diff --git a/slither/tools/flattening/__main__.py b/slither/tools/flattening/__main__.py index 977b84896..bf9856fe8 100644 --- a/slither/tools/flattening/__main__.py +++ b/slither/tools/flattening/__main__.py @@ -18,7 +18,7 @@ logger = logging.getLogger("Slither") logger.setLevel(logging.INFO) -def parse_args(): +def parse_args() -> argparse.Namespace: """ Parse the underlying arguments for the program. :return: Returns the arguments for the program. @@ -106,7 +106,7 @@ def parse_args(): return parser.parse_args() -def main(): +def main() -> None: args = parse_args() slither = Slither(args.filename, **vars(args)) diff --git a/slither/tools/kspec_coverage/__main__.py b/slither/tools/kspec_coverage/__main__.py index b6ce0f81b..19933e0fe 100644 --- a/slither/tools/kspec_coverage/__main__.py +++ b/slither/tools/kspec_coverage/__main__.py @@ -16,7 +16,7 @@ logger.handlers[0].setFormatter(formatter) logger.propagate = False -def parse_args(): +def parse_args() -> argparse.Namespace: """ Parse the underlying arguments for the program. :return: Returns the arguments for the program. @@ -56,7 +56,7 @@ def parse_args(): return parser.parse_args() -def main(): +def main() -> None: # ------------------------------ # Usage: slither-kspec-coverage contract kspec # Example: slither-kspec-coverage contract.sol kspec.md diff --git a/slither/tools/kspec_coverage/kspec_coverage.py b/slither/tools/kspec_coverage/kspec_coverage.py index 569a35cf1..f8c2d8cf2 100755 --- a/slither/tools/kspec_coverage/kspec_coverage.py +++ b/slither/tools/kspec_coverage/kspec_coverage.py @@ -1,8 +1,10 @@ +import argparse + from slither.tools.kspec_coverage.analysis import run_analysis from slither import Slither -def kspec_coverage(args): +def kspec_coverage(args: argparse.Namespace) -> None: contract = args.contract kspec = args.kspec diff --git a/slither/tools/mutator/__main__.py b/slither/tools/mutator/__main__.py index 442b4849d..78b86d681 100644 --- a/slither/tools/mutator/__main__.py +++ b/slither/tools/mutator/__main__.py @@ -2,6 +2,7 @@ import argparse import inspect import logging import sys +from typing import Type, List, Any from crytic_compile import cryticparser @@ -22,7 +23,7 @@ logger.setLevel(logging.INFO) ################################################################################### -def parse_args(): +def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description="Experimental smart contract mutator. Based on https://arxiv.org/abs/2006.11597", usage="slither-mutate target", @@ -48,14 +49,16 @@ def parse_args(): return parser.parse_args() -def _get_mutators(): - detectors = [getattr(all_mutators, name) for name in dir(all_mutators)] - detectors = [c for c in detectors if inspect.isclass(c) and issubclass(c, AbstractMutator)] +def _get_mutators() -> List[Type[AbstractMutator]]: + detectors_ = [getattr(all_mutators, name) for name in dir(all_mutators)] + detectors = [c for c in detectors_ if inspect.isclass(c) and issubclass(c, AbstractMutator)] return detectors class ListMutators(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs checks = _get_mutators() output_mutators(checks) parser.exit() diff --git a/slither/tools/possible_paths/__main__.py b/slither/tools/possible_paths/__main__.py index 29cd05c46..b993d266a 100644 --- a/slither/tools/possible_paths/__main__.py +++ b/slither/tools/possible_paths/__main__.py @@ -5,6 +5,7 @@ from argparse import ArgumentParser, Namespace from crytic_compile import cryticparser from slither import Slither +from slither.core.declarations import FunctionContract from slither.utils.colors import red from slither.tools.possible_paths.possible_paths import ( find_target_paths, @@ -58,7 +59,11 @@ def main() -> None: # Print out all target functions. print("Target functions:") for target in targets: - print(f"- {target.contract_declarer.name}.{target.full_name}") + if isinstance(target, FunctionContract): + print(f"- {target.contract_declarer.name}.{target.full_name}") + else: + pass + # TODO implement me print("\n") # Obtain all paths which reach the target functions. diff --git a/slither/tools/possible_paths/possible_paths.py b/slither/tools/possible_paths/possible_paths.py index 9e52ed6b7..6e836e76a 100644 --- a/slither/tools/possible_paths/possible_paths.py +++ b/slither/tools/possible_paths/possible_paths.py @@ -1,8 +1,15 @@ +from typing import List, Tuple, Union, Optional, Set + +from slither import Slither +from slither.core.declarations import Function, FunctionContract +from slither.core.slither_core import SlitherCore + + class ResolveFunctionException(Exception): pass -def resolve_function(slither, contract_name, function_name): +def resolve_function(slither: SlitherCore, contract_name: str, function_name: str) -> Function: """ Resolves a function instance, given a contract name and function. :param contract_name: The name of the contract the function is declared in. @@ -32,7 +39,9 @@ def resolve_function(slither, contract_name, function_name): return target_function -def resolve_functions(slither, functions): +def resolve_functions( + slither: Slither, functions: List[Union[str, Tuple[str, str]]] +) -> List[Function]: """ Resolves the provided function descriptors. :param functions: A list of tuples (contract_name, function_name) or str (of form "ContractName.FunctionName") @@ -40,7 +49,7 @@ def resolve_functions(slither, functions): :return: Returns a list of resolved functions. """ # Create the resolved list. - resolved = [] + resolved: List[Function] = [] # Verify that the provided argument is a list. if not isinstance(functions, list): @@ -72,24 +81,31 @@ def resolve_functions(slither, functions): return resolved -def all_function_definitions(function): +def all_function_definitions(function: Function) -> List[Function]: """ Obtains a list of representing this function and any base definitions :param function: The function to obtain all definitions at and beneath. :return: Returns a list composed of the provided function definition and any base definitions. """ - return [function] + [ + # TODO implement me + if not isinstance(function, FunctionContract): + return [] + ret: List[Function] = [function] + ret += [ f for c in function.contract.inheritance for f in c.functions_and_modifiers_declared if f.full_name == function.full_name ] + return ret -def __find_target_paths(slither, target_function, current_path=None): +def __find_target_paths( + slither: SlitherCore, target_function: Function, current_path: Optional[List[Function]] = None +) -> Set[Tuple[Function, ...]]: current_path = current_path if current_path else [] # Create our results list - results = set() + results: Set[Tuple[Function, ...]] = set() # Add our current function to the path. current_path = [target_function] + current_path @@ -106,9 +122,12 @@ def __find_target_paths(slither, target_function, current_path=None): continue # Find all function calls in this function (except for low level) - called_functions = [f for (_, f) in function.high_level_calls + function.library_calls] - called_functions += function.internal_calls - called_functions = set(called_functions) + called_functions_list = [ + f for (_, f) in function.high_level_calls if isinstance(f, Function) + ] + called_functions_list += [f for (_, f) in function.library_calls] + called_functions_list += [f for f in function.internal_calls if isinstance(f, Function)] + called_functions = set(called_functions_list) # If any of our target functions are reachable from this function, it's a result. if all_target_functions.intersection(called_functions): @@ -123,14 +142,16 @@ def __find_target_paths(slither, target_function, current_path=None): return results -def find_target_paths(slither, target_functions): +def find_target_paths( + slither: SlitherCore, target_functions: List[Function] +) -> Set[Tuple[Function, ...]]: """ Obtains all functions which can lead to any of the target functions being called. :param target_functions: The functions we are interested in reaching. :return: Returns a list of all functions which can reach any of the target_functions. """ # Create our results list - results = set() + results: Set[Tuple[Function, ...]] = set() # Loop for each target function for target_function in target_functions: diff --git a/slither/tools/properties/__main__.py b/slither/tools/properties/__main__.py index 91c990669..10837bb4b 100644 --- a/slither/tools/properties/__main__.py +++ b/slither/tools/properties/__main__.py @@ -1,6 +1,7 @@ import argparse import logging import sys +from typing import Any from crytic_compile import cryticparser @@ -26,7 +27,7 @@ logger.handlers[0].setFormatter(formatter) logger.propagate = False -def _all_scenarios(): +def _all_scenarios() -> str: txt = "\n" txt += "#################### ERC20 ####################\n" for k, value in ERC20_PROPERTIES.items(): @@ -35,29 +36,33 @@ def _all_scenarios(): return txt -def _all_properties(): +def _all_properties() -> MyPrettyTable: table = MyPrettyTable(["Num", "Description", "Scenario"]) idx = 0 for scenario, value in ERC20_PROPERTIES.items(): for prop in value.properties: - table.add_row([idx, prop.description, scenario]) + table.add_row([str(idx), prop.description, scenario]) idx = idx + 1 return table class ListScenarios(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs logger.info(_all_scenarios()) parser.exit() class ListProperties(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs logger.info(_all_properties()) parser.exit() -def parse_args(): +def parse_args() -> argparse.Namespace: """ Parse the underlying arguments for the program. :return: Returns the arguments for the program. @@ -120,7 +125,7 @@ def parse_args(): return parser.parse_args() -def main(): +def main() -> None: args = parse_args() # Perform slither analysis on the given filename diff --git a/slither/tools/properties/platforms/truffle.py b/slither/tools/properties/platforms/truffle.py index dc83eb273..7d2f3d9b6 100644 --- a/slither/tools/properties/platforms/truffle.py +++ b/slither/tools/properties/platforms/truffle.py @@ -15,7 +15,7 @@ PATTERN_TRUFFLE_MIGRATION = re.compile("^[0-9]*_") logger = logging.getLogger("Slither") -def _extract_caller(p: PropertyCaller): +def _extract_caller(p: PropertyCaller) -> List[str]: if p == PropertyCaller.OWNER: return ["owner"] if p == PropertyCaller.SENDER: @@ -28,7 +28,7 @@ def _extract_caller(p: PropertyCaller): return ["user"] -def _helpers(): +def _helpers() -> str: """ Generate two functions: - catchRevertThrowReturnFalse: check if the call revert/throw or return false @@ -75,7 +75,7 @@ def generate_unit_test( # pylint: disable=too-many-arguments,too-many-branches output_dir: Path, addresses: Addresses, assert_message: str = "", -): +) -> Path: """ Generate unit tests files :param test_contract: @@ -134,7 +134,7 @@ def generate_unit_test( # pylint: disable=too-many-arguments,too-many-branches return output_dir -def generate_migration(test_contract: str, output_dir: Path, owner_address: str): +def generate_migration(test_contract: str, output_dir: Path, owner_address: str) -> None: """ Generate migration file :param test_contract: diff --git a/slither/tools/properties/utils.py b/slither/tools/properties/utils.py index bdc5bdd68..5a0153211 100644 --- a/slither/tools/properties/utils.py +++ b/slither/tools/properties/utils.py @@ -12,7 +12,7 @@ def write_file( content: str, allow_overwrite: bool = True, discard_if_exist: bool = False, -): +) -> None: """ Write the content into output_dir/filename :param output_dir: diff --git a/slither/tools/similarity/__main__.py b/slither/tools/similarity/__main__.py index 21ba88681..86673fccd 100755 --- a/slither/tools/similarity/__main__.py +++ b/slither/tools/similarity/__main__.py @@ -17,7 +17,7 @@ logger = logging.getLogger("Slither-simil") modes = ["info", "test", "train", "plot"] -def parse_args(): +def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description="Code similarity detection tool. For usage, see https://github.com/crytic/slither/wiki/Code-Similarity-detector" ) @@ -78,7 +78,7 @@ def parse_args(): ################################################################################### -def main(): +def main() -> None: args = parse_args() default_log = logging.INFO diff --git a/slither/tools/similarity/encode.py b/slither/tools/similarity/encode.py index c69de91b8..9889644fb 100644 --- a/slither/tools/similarity/encode.py +++ b/slither/tools/similarity/encode.py @@ -74,7 +74,7 @@ def parse_target(target): return None -def load_and_encode(infile, vmodel, ext=None, nsamples=None, **kwargs): +def load_and_encode(infile: str, vmodel, ext=None, nsamples=None, **kwargs): r = {} if infile.endswith(".npz"): r = load_cache(infile, nsamples=nsamples) diff --git a/slither/tools/similarity/info.py b/slither/tools/similarity/info.py index 95aadea6a..c9f9753d1 100644 --- a/slither/tools/similarity/info.py +++ b/slither/tools/similarity/info.py @@ -1,3 +1,4 @@ +import argparse import logging import sys import os.path @@ -10,7 +11,7 @@ logging.basicConfig() logger = logging.getLogger("Slither-simil") -def info(args): +def info(args: argparse.Namespace) -> None: try: diff --git a/slither/tools/similarity/plot.py b/slither/tools/similarity/plot.py index bbdeec2cf..f11e92129 100644 --- a/slither/tools/similarity/plot.py +++ b/slither/tools/similarity/plot.py @@ -1,3 +1,4 @@ +import argparse import logging import random import sys @@ -23,7 +24,7 @@ except ImportError: logger = logging.getLogger("Slither-simil") -def plot(args): # pylint: disable=too-many-locals +def plot(args: argparse.Namespace) -> None: # pylint: disable=too-many-locals if decomposition is None or plt is None: logger.error( diff --git a/slither/tools/similarity/train.py b/slither/tools/similarity/train.py index a0d06c944..ccadf4926 100755 --- a/slither/tools/similarity/train.py +++ b/slither/tools/similarity/train.py @@ -1,3 +1,4 @@ +import argparse import logging import os import sys @@ -10,7 +11,7 @@ from slither.tools.similarity.model import train_unsupervised logger = logging.getLogger("Slither-simil") -def train(args): # pylint: disable=too-many-locals +def train(args: argparse.Namespace) -> None: # pylint: disable=too-many-locals try: last_data_train_filename = "last_data_train.txt" diff --git a/slither/tools/slither_format/__main__.py b/slither/tools/slither_format/__main__.py index a3d63d922..85c0a3917 100644 --- a/slither/tools/slither_format/__main__.py +++ b/slither/tools/slither_format/__main__.py @@ -23,7 +23,7 @@ available_detectors = [ ] -def parse_args(): +def parse_args() -> argparse.Namespace: """ Parse the underlying arguments for the program. :return: Returns the arguments for the program. @@ -90,7 +90,7 @@ def parse_args(): return parser.parse_args() -def main(): +def main() -> None: # ------------------------------ # Usage: python3 -m slither_format filename # Example: python3 -m slither_format contract.sol diff --git a/slither/tools/slither_format/slither_format.py b/slither/tools/slither_format/slither_format.py index 794307100..c165b3fbb 100644 --- a/slither/tools/slither_format/slither_format.py +++ b/slither/tools/slither_format/slither_format.py @@ -1,5 +1,9 @@ import logging from pathlib import Path +from typing import Type, List, Dict + +from slither import Slither +from slither.detectors.abstract_detector import AbstractDetector from slither.detectors.variables.unused_state_variables import UnusedStateVars from slither.detectors.attributes.incorrect_solc import IncorrectSolc from slither.detectors.attributes.constant_pragma import ConstantPragma @@ -13,7 +17,7 @@ from slither.utils.colors import yellow logging.basicConfig(level=logging.INFO) logger = logging.getLogger("Slither.Format") -all_detectors = { +all_detectors: Dict[str, Type[AbstractDetector]] = { "unused-state": UnusedStateVars, "solc-version": IncorrectSolc, "pragma": ConstantPragma, @@ -25,7 +29,7 @@ all_detectors = { } -def slither_format(slither, **kwargs): # pylint: disable=too-many-locals +def slither_format(slither: Slither, **kwargs: Dict) -> None: # pylint: disable=too-many-locals """' Keyword Args: detectors_to_run (str): Comma-separated list of detectors, defaults to all @@ -85,9 +89,11 @@ def slither_format(slither, **kwargs): # pylint: disable=too-many-locals ################################################################################### -def choose_detectors(detectors_to_run, detectors_to_exclude): +def choose_detectors( + detectors_to_run: str, detectors_to_exclude: str +) -> List[Type[AbstractDetector]]: # If detectors are specified, run only these ones - cls_detectors_to_run = [] + cls_detectors_to_run: List[Type[AbstractDetector]] = [] exclude = detectors_to_exclude.split(",") if detectors_to_run == "all": for key, detector in all_detectors.items(): @@ -114,7 +120,7 @@ def choose_detectors(detectors_to_run, detectors_to_exclude): ################################################################################### -def print_patches(number_of_slither_results, patches): +def print_patches(number_of_slither_results: int, patches: Dict) -> None: logger.info("Number of Slither results: " + str(number_of_slither_results)) number_of_patches = 0 for file in patches: @@ -130,7 +136,7 @@ def print_patches(number_of_slither_results, patches): logger.info("Location end: " + str(patch["end"])) -def print_patches_json(number_of_slither_results, patches): +def print_patches_json(number_of_slither_results: int, patches: Dict) -> None: print("{", end="") print('"Number of Slither results":' + '"' + str(number_of_slither_results) + '",') print('"Number of patchlets":' + '"' + str(len(patches)) + '"', ",") diff --git a/slither/tools/upgradeability/__main__.py b/slither/tools/upgradeability/__main__.py index 6cc953015..d772029d0 100644 --- a/slither/tools/upgradeability/__main__.py +++ b/slither/tools/upgradeability/__main__.py @@ -3,10 +3,13 @@ import inspect import json import logging import sys +from typing import List, Any, Type, Dict, Tuple, Union, Sequence, Optional from crytic_compile import cryticparser + from slither import Slither +from slither.core.declarations import Contract from slither.exceptions import SlitherException from slither.utils.colors import red from slither.utils.output import output_to_json @@ -24,7 +27,7 @@ logger: logging.Logger = logging.getLogger("Slither") logger.setLevel(logging.INFO) -def parse_args(): +def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description="Slither Upgradeability Checks. For usage information see https://github.com/crytic/slither/wiki/Upgradeability-Checks.", usage="slither-check-upgradeability contract.sol ContractName", @@ -93,21 +96,27 @@ def parse_args(): ################################################################################### -def _get_checks(): - detectors = [getattr(all_checks, name) for name in dir(all_checks)] - detectors = [c for c in detectors if inspect.isclass(c) and issubclass(c, AbstractCheck)] +def _get_checks() -> List[Type[AbstractCheck]]: + detectors_ = [getattr(all_checks, name) for name in dir(all_checks)] + detectors: List[Type[AbstractCheck]] = [ + c for c in detectors_ if inspect.isclass(c) and issubclass(c, AbstractCheck) + ] return detectors class ListDetectors(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs checks = _get_checks() output_detectors(checks) parser.exit() class ListDetectorsJson(argparse.Action): # pylint: disable=too-few-public-methods - def __call__(self, parser, *args, **kwargs): # pylint: disable=signature-differs + def __call__( + self, parser: Any, *args: Any, **kwargs: Any + ) -> None: # pylint: disable=signature-differs checks = _get_checks() detector_types_json = output_detectors_json(checks) print(json.dumps(detector_types_json)) @@ -116,48 +125,64 @@ class ListDetectorsJson(argparse.Action): # pylint: disable=too-few-public-meth class OutputMarkdown(argparse.Action): # pylint: disable=too-few-public-methods def __call__( - self, parser, args, values, option_string=None - ): # pylint: disable=signature-differs + self, + parser: Any, + args: Any, + values: Optional[Union[str, Sequence[Any]]], + option_string: Any = None, + ) -> None: # pylint: disable=signature-differs checks = _get_checks() + assert isinstance(values, str) output_to_markdown(checks, values) parser.exit() class OutputWiki(argparse.Action): # pylint: disable=too-few-public-methods def __call__( - self, parser, args, values, option_string=None - ): # pylint: disable=signature-differs + self, + parser: Any, + args: Any, + values: Optional[Union[str, Sequence[Any]]], + option_string: Any = None, + ) -> Any: # pylint: disable=signature-differs checks = _get_checks() + assert isinstance(values, str) output_wiki(checks, values) parser.exit() -def _run_checks(detectors): - results = [d.check() for d in detectors] - results = [r for r in results if r] - results = [item for sublist in results for item in sublist] # flatten +def _run_checks(detectors: List[AbstractCheck]) -> List[Dict]: + results_ = [d.check() for d in detectors] + results_ = [r for r in results_ if r] + results = [item for sublist in results_ for item in sublist] # flatten return results -def _checks_on_contract(detectors, contract): - detectors = [ +def _checks_on_contract( + detectors: List[Type[AbstractCheck]], contract: Contract +) -> Tuple[List[Dict], int]: + detectors_ = [ d(logger, contract) for d in detectors if (not d.REQUIRE_PROXY and not d.REQUIRE_CONTRACT_V2) ] - return _run_checks(detectors), len(detectors) + return _run_checks(detectors_), len(detectors) -def _checks_on_contract_update(detectors, contract_v1, contract_v2): - detectors = [ +def _checks_on_contract_update( + detectors: List[Type[AbstractCheck]], contract_v1: Contract, contract_v2: Contract +) -> Tuple[List[Dict], int]: + detectors_ = [ d(logger, contract_v1, contract_v2=contract_v2) for d in detectors if d.REQUIRE_CONTRACT_V2 ] - return _run_checks(detectors), len(detectors) + return _run_checks(detectors_), len(detectors) -def _checks_on_contract_and_proxy(detectors, contract, proxy): - detectors = [d(logger, contract, proxy=proxy) for d in detectors if d.REQUIRE_PROXY] - return _run_checks(detectors), len(detectors) +def _checks_on_contract_and_proxy( + detectors: List[Type[AbstractCheck]], contract: Contract, proxy: Contract +) -> Tuple[List[Dict], int]: + detectors_ = [d(logger, contract, proxy=proxy) for d in detectors if d.REQUIRE_PROXY] + return _run_checks(detectors_), len(detectors) # endregion @@ -168,8 +193,8 @@ def _checks_on_contract_and_proxy(detectors, contract, proxy): ################################################################################### # pylint: disable=too-many-statements,too-many-branches,too-many-locals -def main(): - json_results = { +def main() -> None: + json_results: Dict = { "proxy-present": False, "contract_v2-present": False, "detectors": [], diff --git a/slither/tools/upgradeability/utils/command_line.py b/slither/tools/upgradeability/utils/command_line.py index 6ab3f82f9..88b61ceed 100644 --- a/slither/tools/upgradeability/utils/command_line.py +++ b/slither/tools/upgradeability/utils/command_line.py @@ -1,8 +1,10 @@ -from slither.tools.upgradeability.checks.abstract_checks import classification_txt +from typing import List, Union, Dict, Type + +from slither.tools.upgradeability.checks.abstract_checks import classification_txt, AbstractCheck from slither.utils.myprettytable import MyPrettyTable -def output_wiki(detector_classes, filter_wiki): +def output_wiki(detector_classes: List[Type[AbstractCheck]], filter_wiki: str) -> None: # Sort by impact, confidence, and name detectors_list = sorted( detector_classes, key=lambda element: (element.IMPACT, element.ARGUMENT) @@ -31,7 +33,7 @@ def output_wiki(detector_classes, filter_wiki): print(recommendation) -def output_detectors(detector_classes): +def output_detectors(detector_classes: List[Type[AbstractCheck]]) -> None: detectors_list = [] for detector in detector_classes: argument = detector.ARGUMENT @@ -48,7 +50,7 @@ def output_detectors(detector_classes): for (argument, help_info, impact, proxy, v2) in detectors_list: table.add_row( [ - idx, + str(idx), argument, help_info, classification_txt[impact], @@ -60,8 +62,8 @@ def output_detectors(detector_classes): print(table) -def output_to_markdown(detector_classes, _filter_wiki): - def extract_help(cls): +def output_to_markdown(detector_classes: List[Type[AbstractCheck]], _filter_wiki: str) -> None: + def extract_help(cls: AbstractCheck) -> str: if cls.WIKI == "": return cls.HELP return f"[{cls.HELP}]({cls.WIKI})" @@ -85,7 +87,9 @@ def output_to_markdown(detector_classes, _filter_wiki): idx = idx + 1 -def output_detectors_json(detector_classes): +def output_detectors_json( + detector_classes: List[Type[AbstractCheck]], +) -> List[Dict[str, Union[str, int]]]: detectors_list = [] for detector in detector_classes: argument = detector.ARGUMENT @@ -110,7 +114,7 @@ def output_detectors_json(detector_classes): # Sort by impact, confidence, and name detectors_list = sorted(detectors_list, key=lambda element: (element[2], element[0])) idx = 1 - table = [] + table: List[Dict[str, Union[str, int]]] = [] for ( argument, help_info, diff --git a/slither/utils/command_line.py b/slither/utils/command_line.py index d264e65ea..c2fef5eca 100644 --- a/slither/utils/command_line.py +++ b/slither/utils/command_line.py @@ -1,13 +1,17 @@ +import argparse import json import os import re import logging from collections import defaultdict +from typing import Dict, List, Type, Union + from crytic_compile.cryticparser.defaults import ( DEFAULTS_FLAG_IN_CONFIG as DEFAULTS_FLAG_IN_CONFIG_CRYTIC_COMPILE, ) -from slither.detectors.abstract_detector import classification_txt +from slither.detectors.abstract_detector import classification_txt, AbstractDetector +from slither.printers.abstract_printer import AbstractPrinter from slither.utils.colors import yellow, red from slither.utils.myprettytable import MyPrettyTable @@ -54,7 +58,7 @@ defaults_flag_in_config = { } -def read_config_file(args): +def read_config_file(args: argparse.Namespace) -> None: # No config file was provided as an argument if args.config_file is None: # Check wether the default config file is present @@ -83,8 +87,12 @@ def read_config_file(args): logger.error(yellow("Falling back to the default settings...")) -def output_to_markdown(detector_classes, printer_classes, filter_wiki): - def extract_help(cls): +def output_to_markdown( + detector_classes: List[Type[AbstractDetector]], + printer_classes: List[Type[AbstractPrinter]], + filter_wiki: str, +) -> None: + def extract_help(cls: Union[Type[AbstractDetector], Type[AbstractPrinter]]) -> str: if cls.WIKI == "": return cls.HELP return f"[{cls.HELP}]({cls.WIKI})" @@ -127,7 +135,7 @@ def output_to_markdown(detector_classes, printer_classes, filter_wiki): idx = idx + 1 -def get_level(l): +def get_level(l: str) -> int: tab = l.count("\t") + 1 if l.replace("\t", "").startswith(" -"): tab = tab + 1 @@ -136,7 +144,7 @@ def get_level(l): return tab -def convert_result_to_markdown(txt): +def convert_result_to_markdown(txt: str) -> str: # -1 to remove the last \n lines = txt[0:-1].split("\n") ret = [] @@ -154,16 +162,21 @@ def convert_result_to_markdown(txt): return "".join(ret) -def output_results_to_markdown(all_results, checklistlimit: str): +def output_results_to_markdown(all_results: List[Dict], checklistlimit: str) -> None: checks = defaultdict(list) - info = defaultdict(dict) - for results in all_results: - checks[results["check"]].append(results) - info[results["check"]] = {"impact": results["impact"], "confidence": results["confidence"]} + info: Dict = defaultdict(dict) + for results_ in all_results: + checks[results_["check"]].append(results_) + info[results_["check"]] = { + "impact": results_["impact"], + "confidence": results_["confidence"], + } print("Summary") - for check in checks: - print(f" - [{check}](#{check}) ({len(checks[check])} results) ({info[check]['impact']})") + for check_ in checks: + print( + f" - [{check_}](#{check_}) ({len(checks[check_])} results) ({info[check_]['impact']})" + ) counter = 0 for (check, results) in checks.items(): @@ -185,8 +198,7 @@ def output_results_to_markdown(all_results, checklistlimit: str): print(f"**More results were found, check [{checklistlimit}]({checklistlimit})**") -def output_wiki(detector_classes, filter_wiki): - detectors_list = [] +def output_wiki(detector_classes: List[Type[AbstractDetector]], filter_wiki: str) -> None: # Sort by impact, confidence, and name detectors_list = sorted( @@ -223,7 +235,7 @@ def output_wiki(detector_classes, filter_wiki): print(recommendation) -def output_detectors(detector_classes): +def output_detectors(detector_classes: List[Type[AbstractDetector]]) -> None: detectors_list = [] for detector in detector_classes: argument = detector.ARGUMENT @@ -242,12 +254,15 @@ def output_detectors(detector_classes): ) idx = 1 for (argument, help_info, impact, confidence) in detectors_list: - table.add_row([idx, argument, help_info, classification_txt[impact], confidence]) + table.add_row([str(idx), argument, help_info, classification_txt[impact], confidence]) idx = idx + 1 print(table) -def output_detectors_json(detector_classes): # pylint: disable=too-many-locals +# pylint: disable=too-many-locals +def output_detectors_json( + detector_classes: List[Type[AbstractDetector]], +) -> List[Dict]: detectors_list = [] for detector in detector_classes: argument = detector.ARGUMENT @@ -307,7 +322,7 @@ def output_detectors_json(detector_classes): # pylint: disable=too-many-locals return table -def output_printers(printer_classes): +def output_printers(printer_classes: List[Type[AbstractPrinter]]) -> None: printers_list = [] for printer in printer_classes: argument = printer.ARGUMENT @@ -319,12 +334,12 @@ def output_printers(printer_classes): printers_list = sorted(printers_list, key=lambda element: (element[0])) idx = 1 for (argument, help_info) in printers_list: - table.add_row([idx, argument, help_info]) + table.add_row([str(idx), argument, help_info]) idx = idx + 1 print(table) -def output_printers_json(printer_classes): +def output_printers_json(printer_classes: List[Type[AbstractPrinter]]) -> List[Dict]: printers_list = [] for printer in printer_classes: argument = printer.ARGUMENT diff --git a/slither/utils/output.py b/slither/utils/output.py index 6296e35d3..5db6492db 100644 --- a/slither/utils/output.py +++ b/slither/utils/output.py @@ -4,7 +4,7 @@ import json import logging import zipfile from collections import OrderedDict -from typing import Optional, Dict, List, Union, Any, TYPE_CHECKING +from typing import Optional, Dict, List, Union, Any, TYPE_CHECKING, Type from zipfile import ZipFile from pkg_resources import require @@ -129,7 +129,7 @@ def _output_result_to_sarif( def output_to_sarif( - filename: Optional[str], results: Dict, detectors_classes: List["AbstractDetector"] + filename: Optional[str], results: Dict, detectors_classes: List[Type["AbstractDetector"]] ) -> None: """ diff --git a/slither/utils/output_capture.py b/slither/utils/output_capture.py index 5282afb91..aec170d7f 100644 --- a/slither/utils/output_capture.py +++ b/slither/utils/output_capture.py @@ -28,7 +28,7 @@ class StandardOutputCapture: original_logger_handlers = None @staticmethod - def enable(block_original=True): + def enable(block_original: bool = True) -> None: """ Redirects stdout and stderr to a capturable StringIO. :param block_original: If True, blocks all output to the original stream. If False, duplicates output. @@ -54,7 +54,7 @@ class StandardOutputCapture: root_logger.handlers = [logging.StreamHandler(sys.stderr)] @staticmethod - def disable(): + def disable() -> None: """ Disables redirection of stdout/stderr, if previously enabled. :return: None @@ -78,7 +78,7 @@ class StandardOutputCapture: StandardOutputCapture.original_logger_handlers = None @staticmethod - def get_stdout_output(): + def get_stdout_output() -> str: """ Obtains the output from the currently set stdout :return: Returns stdout output as a string @@ -87,7 +87,7 @@ class StandardOutputCapture: return sys.stdout.read() @staticmethod - def get_stderr_output(): + def get_stderr_output() -> str: """ Obtains the output from the currently set stderr :return: Returns stderr output as a string From f5f4cb11e994d97eaf8264c819c64447c8de110b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Tue, 6 Sep 2022 20:19:13 -0300 Subject: [PATCH 182/202] Dockerfile: add x86_64 libc on non-intel containers This assists in running x86_64 dynamic binaries, such as certain solc 0.8.x releases, in ARM containers. This can be useful when working on machines with certain emulation configuration, such as M1 Macs with Docker Desktop. --- Dockerfile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Dockerfile b/Dockerfile index 2f3251592..71bb9f57f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,14 @@ RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get install -y --no-install-recommends python3-pip \ && rm -rf /var/lib/apt/lists/* +# improve compatibility with amd64 solc in non-amd64 environments (e.g. Docker Desktop on M1 Mac) +ENV QEMU_LD_PREFIX=/usr/x86_64-linux-gnu +RUN if [ ! "$(uname -m)" = "x86_64" ]; then \ + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get install -y --no-install-recommends libc6-amd64-cross \ + && rm -rf /var/lib/apt/lists/*; fi + RUN useradd -m slither USER slither From b563be7af9c2d2bcab9c8b7baa94ad7342dc23a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 10:39:14 -0300 Subject: [PATCH 183/202] Add tests for rational and scientific notation constants --- tests/constant_folding_rational.sol | 7 +++++++ tests/test_constant_folding.py | 30 ++++++++++++++++++++++++++++ tests/test_constant_folding_unary.py | 5 ----- 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 tests/constant_folding_rational.sol create mode 100644 tests/test_constant_folding.py delete mode 100644 tests/test_constant_folding_unary.py diff --git a/tests/constant_folding_rational.sol b/tests/constant_folding_rational.sol new file mode 100644 index 000000000..36c44fb35 --- /dev/null +++ b/tests/constant_folding_rational.sol @@ -0,0 +1,7 @@ +contract C { + uint256 constant a = 2.5 + 7 + 0.5; + int128 b = 6 / 3.0; + int64 constant c = 5 * 0.5 + 0.5; + int256 d = 1e3 + 5E2; + uint256 e = 2 ** 255; +} \ No newline at end of file diff --git a/tests/test_constant_folding.py b/tests/test_constant_folding.py new file mode 100644 index 000000000..8a7f882af --- /dev/null +++ b/tests/test_constant_folding.py @@ -0,0 +1,30 @@ +from slither import Slither +from slither.visitors.expression.constants_folding import ConstantFolding + + +def test_constant_folding_unary(): + Slither("./tests/constant_folding_unary.sol") + +def test_constant_folding_rational(): + s = Slither("./tests/constant_folding_rational.sol") + contract = s.get_contract_from_name("C")[0] + + variable_a = contract.get_state_variable_from_name("a") + assert str(variable_a.type) == "uint256" + assert str(ConstantFolding(variable_a.expression, "uint256").result()) == "10" + + variable_b = contract.get_state_variable_from_name("b") + assert str(variable_b.type) == "int128" + assert str(ConstantFolding(variable_b.expression, "int128").result()) == "2" + + variable_c = contract.get_state_variable_from_name("c") + assert str(variable_c.type) == "int64" + assert str(ConstantFolding(variable_c.expression, "int64").result()) == "3" + + variable_d = contract.get_state_variable_from_name("d") + assert str(variable_d.type) == "int256" + assert str(ConstantFolding(variable_d.expression, "int256").result()) == "1500" + + variable_e = contract.get_state_variable_from_name("e") + assert str(variable_e.type) == "uint256" + assert str(ConstantFolding(variable_e.expression, "uint256").result()) == "57896044618658097711785492504343953926634992332820282019728792003956564819968" \ No newline at end of file diff --git a/tests/test_constant_folding_unary.py b/tests/test_constant_folding_unary.py deleted file mode 100644 index fa51d0934..000000000 --- a/tests/test_constant_folding_unary.py +++ /dev/null @@ -1,5 +0,0 @@ -from slither import Slither - - -def test_constant_folding_unary(): - Slither("./tests/constant_folding_unary.sol") From 01baf01860c3f9df5582f065dd9f85d46bbb6eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 10:41:59 -0300 Subject: [PATCH 184/202] Configure decimal precision to a value able to represent 2**256 The default decimal precision is able to handle up to 28 significant digits, which is not enough to represent large numbers. This raises the precision to 80 digits, which should fit 2**256. --- slither/utils/__init__.py | 3 +++ slither/utils/arithmetic.py | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/slither/utils/__init__.py b/slither/utils/__init__.py index e69de29bb..86427ca2e 100644 --- a/slither/utils/__init__.py +++ b/slither/utils/__init__.py @@ -0,0 +1,3 @@ +from slither.utils.arithmetic import configure_decimal_precision + +configure_decimal_precision() \ No newline at end of file diff --git a/slither/utils/arithmetic.py b/slither/utils/arithmetic.py index 06e8956dd..83c5be544 100644 --- a/slither/utils/arithmetic.py +++ b/slither/utils/arithmetic.py @@ -1,7 +1,13 @@ -from decimal import Decimal +from decimal import Decimal, getcontext from slither.exceptions import SlitherException +def configure_decimal_precision(): + # Configure decimal precision high enough for 2 ** 256 + # Otherwise, large constant arithmetic may get truncated + if getcontext().prec < 80: + getcontext().prec = 80 + # pylint: disable=too-many-branches def convert_subdenomination( value: str, sub: str From 98611e3ae744d117a2287055b667fa53697a0654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 10:50:16 -0300 Subject: [PATCH 185/202] Fix parsing of constants Fixes: #1376 --- slither/core/expressions/literal.py | 4 ++-- slither/core/solidity_types/array_type.py | 2 +- slither/visitors/expression/constants_folding.py | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/slither/core/expressions/literal.py b/slither/core/expressions/literal.py index 3303a9aa8..d8bb59077 100644 --- a/slither/core/expressions/literal.py +++ b/slither/core/expressions/literal.py @@ -2,6 +2,7 @@ from typing import Optional, Union, TYPE_CHECKING from slither.core.expressions.expression import Expression from slither.utils.arithmetic import convert_subdenomination +from slither.utils.integer_conversion import convert_string_to_int if TYPE_CHECKING: from slither.core.solidity_types.type import Type @@ -29,8 +30,7 @@ class Literal(Expression): def __str__(self): if self.subdenomination: return str(convert_subdenomination(self._value, self.subdenomination)) - # be sure to handle any character - return str(self._value) + return str(convert_string_to_int(self._value)) def __eq__(self, other): if not isinstance(other, Literal): diff --git a/slither/core/solidity_types/array_type.py b/slither/core/solidity_types/array_type.py index 97d735c89..59a15dcc6 100644 --- a/slither/core/solidity_types/array_type.py +++ b/slither/core/solidity_types/array_type.py @@ -53,7 +53,7 @@ class ArrayType(Type): def storage_size(self) -> Tuple[int, bool]: if self._length_value: elem_size, _ = self._type.storage_size - return elem_size * int(self._length_value.value), True + return elem_size * int(str(self._length_value)), True return 32, True def __str__(self): diff --git a/slither/visitors/expression/constants_folding.py b/slither/visitors/expression/constants_folding.py index 61c98d65f..27ff9b592 100644 --- a/slither/visitors/expression/constants_folding.py +++ b/slither/visitors/expression/constants_folding.py @@ -1,3 +1,4 @@ +from decimal import Decimal, InvalidOperation from slither.core.expressions import BinaryOperationType, Literal, UnaryOperationType from slither.utils.integer_conversion import convert_string_to_int from slither.visitors.expression.expression import ExpressionVisitor @@ -77,9 +78,9 @@ class ConstantFolding(ExpressionVisitor): raise NotConstant def _post_literal(self, expression): - if expression.value.isdigit(): - set_val(expression, int(expression.value)) - else: + try: + set_val(expression, Decimal(expression.value)) + except InvalidOperation: raise NotConstant def _post_assignement_operation(self, expression): From 036f7d62f418ce55fd845df1ef8fbf472314a6ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 10:56:34 -0300 Subject: [PATCH 186/202] Replace Decimal with Fraction Fractions are arbitrary-precision and will not cause truncated values. --- slither/slithir/variables/constant.py | 4 ++-- slither/utils/__init__.py | 3 --- slither/utils/arithmetic.py | 12 +++--------- slither/utils/integer_conversion.py | 10 +++++----- slither/visitors/expression/constants_folding.py | 6 +++--- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/slither/slithir/variables/constant.py b/slither/slithir/variables/constant.py index 09a5ee34f..52cabf701 100644 --- a/slither/slithir/variables/constant.py +++ b/slither/slithir/variables/constant.py @@ -1,4 +1,4 @@ -from decimal import Decimal +from fractions import Fraction from functools import total_ordering from slither.core.solidity_types.elementary_type import ElementaryType, Int, Uint @@ -33,7 +33,7 @@ class Constant(SlithIRVariable): else: if val.isdigit(): self._type = ElementaryType("uint256") - self._val = int(Decimal(val)) + self._val = int(Fraction(val)) else: self._type = ElementaryType("string") self._val = val diff --git a/slither/utils/__init__.py b/slither/utils/__init__.py index 86427ca2e..e69de29bb 100644 --- a/slither/utils/__init__.py +++ b/slither/utils/__init__.py @@ -1,3 +0,0 @@ -from slither.utils.arithmetic import configure_decimal_precision - -configure_decimal_precision() \ No newline at end of file diff --git a/slither/utils/arithmetic.py b/slither/utils/arithmetic.py index 83c5be544..69684d103 100644 --- a/slither/utils/arithmetic.py +++ b/slither/utils/arithmetic.py @@ -1,13 +1,7 @@ -from decimal import Decimal, getcontext +from fractions import Fraction from slither.exceptions import SlitherException -def configure_decimal_precision(): - # Configure decimal precision high enough for 2 ** 256 - # Otherwise, large constant arithmetic may get truncated - if getcontext().prec < 80: - getcontext().prec = 80 - # pylint: disable=too-many-branches def convert_subdenomination( value: str, sub: str @@ -15,9 +9,9 @@ def convert_subdenomination( # to allow 0.1 ether conversion if value[0:2] == "0x": - decimal_value = Decimal(int(value, 16)) + decimal_value = Fraction(int(value, 16)) else: - decimal_value = Decimal(value) + decimal_value = Fraction(value) if sub == "wei": return int(decimal_value) if sub == "gwei": diff --git a/slither/utils/integer_conversion.py b/slither/utils/integer_conversion.py index 8481e8641..a410a956b 100644 --- a/slither/utils/integer_conversion.py +++ b/slither/utils/integer_conversion.py @@ -1,4 +1,4 @@ -from decimal import Decimal +from fractions import Fraction from typing import Union from slither.exceptions import SlitherError @@ -12,17 +12,17 @@ def convert_string_to_int(val: Union[str, int]) -> int: if "e" in val or "E" in val: base, expo = val.split("e") if "e" in val else val.split("E") - base, expo = Decimal(base), int(expo) + base, expo = Fraction(base), int(expo) # The resulting number must be < 2**256-1, otherwise solc # Would not be able to compile it # 10**77 is the largest exponent that fits # See https://github.com/ethereum/solidity/blob/9e61f92bd4d19b430cb8cb26f1c7cf79f1dff380/libsolidity/ast/Types.cpp#L1281-L1290 if expo > 77: - if base != Decimal(0): + if base != Fraction(0): raise SlitherError( f"{base}e{expo} is too large to fit in any Solidity integer size" ) return 0 - return int(Decimal(base) * Decimal(10**expo)) + return int(Fraction(base) * Fraction(10**expo)) - return int(Decimal(val)) + return int(Fraction(val)) diff --git a/slither/visitors/expression/constants_folding.py b/slither/visitors/expression/constants_folding.py index 27ff9b592..2da1d7304 100644 --- a/slither/visitors/expression/constants_folding.py +++ b/slither/visitors/expression/constants_folding.py @@ -1,4 +1,4 @@ -from decimal import Decimal, InvalidOperation +from fractions import Fraction from slither.core.expressions import BinaryOperationType, Literal, UnaryOperationType from slither.utils.integer_conversion import convert_string_to_int from slither.visitors.expression.expression import ExpressionVisitor @@ -79,8 +79,8 @@ class ConstantFolding(ExpressionVisitor): def _post_literal(self, expression): try: - set_val(expression, Decimal(expression.value)) - except InvalidOperation: + set_val(expression, Fraction(expression.value)) + except ValueError: raise NotConstant def _post_assignement_operation(self, expression): From ce801942abf9dc84da9a19a88dbed8bb4f93a87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 11:47:04 -0300 Subject: [PATCH 187/202] Unify parsing of integers with convert_string_to_int/fraction --- slither/slithir/variables/constant.py | 3 +- slither/utils/arithmetic.py | 29 +++++++++---------- slither/utils/integer_conversion.py | 16 ++++++---- .../visitors/expression/constants_folding.py | 9 +++--- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/slither/slithir/variables/constant.py b/slither/slithir/variables/constant.py index 52cabf701..5da2d9cc0 100644 --- a/slither/slithir/variables/constant.py +++ b/slither/slithir/variables/constant.py @@ -1,4 +1,3 @@ -from fractions import Fraction from functools import total_ordering from slither.core.solidity_types.elementary_type import ElementaryType, Int, Uint @@ -33,7 +32,7 @@ class Constant(SlithIRVariable): else: if val.isdigit(): self._type = ElementaryType("uint256") - self._val = int(Fraction(val)) + self._val = convert_string_to_int(val) else: self._type = ElementaryType("string") self._val = val diff --git a/slither/utils/arithmetic.py b/slither/utils/arithmetic.py index 69684d103..d14958541 100644 --- a/slither/utils/arithmetic.py +++ b/slither/utils/arithmetic.py @@ -1,38 +1,35 @@ from fractions import Fraction from slither.exceptions import SlitherException +from slither.utils.integer_conversion import convert_string_to_int # pylint: disable=too-many-branches def convert_subdenomination( value: str, sub: str ) -> int: # pylint: disable=too-many-return-statements - # to allow 0.1 ether conversion - if value[0:2] == "0x": - decimal_value = Fraction(int(value, 16)) - else: - decimal_value = Fraction(value) + decimal_value = convert_string_to_int(value) if sub == "wei": - return int(decimal_value) + return decimal_value if sub == "gwei": - return int(decimal_value * int(1e9)) + return decimal_value * 1e9 if sub == "szabo": - return int(decimal_value * int(1e12)) + return decimal_value * 1e12 if sub == "finney": - return int(decimal_value * int(1e15)) + return decimal_value * 1e15 if sub == "ether": - return int(decimal_value * int(1e18)) + return decimal_value * 1e18 if sub == "seconds": - return int(decimal_value) + return decimal_value if sub == "minutes": - return int(decimal_value * 60) + return decimal_value * 60 if sub == "hours": - return int(decimal_value * 60 * 60) + return decimal_value * 60 * 60 if sub == "days": - return int(decimal_value * 60 * 60 * 24) + return decimal_value * 60 * 60 * 24 if sub == "weeks": - return int(decimal_value * 60 * 60 * 24 * 7) + return decimal_value * 60 * 60 * 24 * 7 if sub == "years": - return int(decimal_value * 60 * 60 * 24 * 7 * 365) + return decimal_value * 60 * 60 * 24 * 7 * 365 raise SlitherException(f"Subdemonination conversion impossible {decimal_value} {sub}") diff --git a/slither/utils/integer_conversion.py b/slither/utils/integer_conversion.py index a410a956b..b7e2e98ff 100644 --- a/slither/utils/integer_conversion.py +++ b/slither/utils/integer_conversion.py @@ -4,11 +4,14 @@ from typing import Union from slither.exceptions import SlitherError -def convert_string_to_int(val: Union[str, int]) -> int: +def convert_string_to_fraction(val: Union[str, int]) -> Fraction: if isinstance(val, int): - return val + return Fraction(val) if val.startswith(("0x", "0X")): - return int(val, 16) + return Fraction(int(val, 16)) + + # Fractions do not support underscore separators (on Python <3.11) + val = val.replace('_', '') if "e" in val or "E" in val: base, expo = val.split("e") if "e" in val else val.split("E") @@ -23,6 +26,9 @@ def convert_string_to_int(val: Union[str, int]) -> int: f"{base}e{expo} is too large to fit in any Solidity integer size" ) return 0 - return int(Fraction(base) * Fraction(10**expo)) + return Fraction(base) * Fraction(10**expo) - return int(Fraction(val)) + return Fraction(val) + +def convert_string_to_int(val: Union[str, int]) -> int: + return int(convert_string_to_fraction(val)) diff --git a/slither/visitors/expression/constants_folding.py b/slither/visitors/expression/constants_folding.py index 2da1d7304..34ab34ffd 100644 --- a/slither/visitors/expression/constants_folding.py +++ b/slither/visitors/expression/constants_folding.py @@ -1,6 +1,5 @@ -from fractions import Fraction from slither.core.expressions import BinaryOperationType, Literal, UnaryOperationType -from slither.utils.integer_conversion import convert_string_to_int +from slither.utils.integer_conversion import convert_string_to_fraction, convert_string_to_int from slither.visitors.expression.expression import ExpressionVisitor @@ -73,13 +72,13 @@ class ConstantFolding(ExpressionVisitor): cf = ConstantFolding(expr, self._type) expr = cf.result() assert isinstance(expr, Literal) - set_val(expression, int(expr.value)) + set_val(expression, -convert_string_to_fraction(expr.value)) else: raise NotConstant def _post_literal(self, expression): try: - set_val(expression, Fraction(expression.value)) + set_val(expression, convert_string_to_fraction(expression.value)) except ValueError: raise NotConstant @@ -116,7 +115,7 @@ class ConstantFolding(ExpressionVisitor): cf = ConstantFolding(expression.expressions[0], self._type) expr = cf.result() assert isinstance(expr, Literal) - set_val(expression, int(expr.value)) + set_val(expression, convert_string_to_fraction(expr.value)) return raise NotConstant From 2879514f23ad058abb0bd3c42259507eb06ba4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 11:48:31 -0300 Subject: [PATCH 188/202] Add tests for large and negative constants --- tests/constant_folding_rational.sol | 2 ++ tests/test_constant_folding.py | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/constant_folding_rational.sol b/tests/constant_folding_rational.sol index 36c44fb35..193133824 100644 --- a/tests/constant_folding_rational.sol +++ b/tests/constant_folding_rational.sol @@ -4,4 +4,6 @@ contract C { int64 constant c = 5 * 0.5 + 0.5; int256 d = 1e3 + 5E2; uint256 e = 2 ** 255; + uint256 f = 115792089237316195423570985008687907853269984665640564039457584_007_913_129_639_935; + int64 constant g = -7.0; } \ No newline at end of file diff --git a/tests/test_constant_folding.py b/tests/test_constant_folding.py index 8a7f882af..2106c5fa6 100644 --- a/tests/test_constant_folding.py +++ b/tests/test_constant_folding.py @@ -27,4 +27,12 @@ def test_constant_folding_rational(): variable_e = contract.get_state_variable_from_name("e") assert str(variable_e.type) == "uint256" - assert str(ConstantFolding(variable_e.expression, "uint256").result()) == "57896044618658097711785492504343953926634992332820282019728792003956564819968" \ No newline at end of file + assert str(ConstantFolding(variable_e.expression, "uint256").result()) == "57896044618658097711785492504343953926634992332820282019728792003956564819968" + + variable_f = contract.get_state_variable_from_name("f") + assert str(variable_f.type) == "uint256" + assert str(ConstantFolding(variable_f.expression, "uint256").result()) == "115792089237316195423570985008687907853269984665640564039457584007913129639935" + + variable_g = contract.get_state_variable_from_name("g") + assert str(variable_g.type) == "int64" + assert str(ConstantFolding(variable_g.expression, "int64").result()) == "-7" From 237bb535918b524ae20b14b0b1f31aebd5e6b09f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 12:08:45 -0300 Subject: [PATCH 189/202] Fix non-numeric literals --- slither/core/expressions/literal.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/slither/core/expressions/literal.py b/slither/core/expressions/literal.py index d8bb59077..26081c72c 100644 --- a/slither/core/expressions/literal.py +++ b/slither/core/expressions/literal.py @@ -1,6 +1,7 @@ from typing import Optional, Union, TYPE_CHECKING from slither.core.expressions.expression import Expression +from slither.core.solidity_types.elementary_type import Byte, Fixed, Int, Ufixed, Uint from slither.utils.arithmetic import convert_subdenomination from slither.utils.integer_conversion import convert_string_to_int @@ -30,7 +31,11 @@ class Literal(Expression): def __str__(self): if self.subdenomination: return str(convert_subdenomination(self._value, self.subdenomination)) - return str(convert_string_to_int(self._value)) + elif self.type in Int + Uint + Fixed + Ufixed + ["address"]: + return str(convert_string_to_int(self._value)) + + # be sure to handle any character + return str(self._value) def __eq__(self, other): if not isinstance(other, Literal): From e7e411ba0edaa342ad2dbc6618ed96ad6e78c309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 12:50:52 -0300 Subject: [PATCH 190/202] Fix detector output Floats were being used by mistake, so the output ended up being in scientific notation. --- slither/core/expressions/literal.py | 2 +- slither/utils/arithmetic.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/slither/core/expressions/literal.py b/slither/core/expressions/literal.py index 26081c72c..289cb8958 100644 --- a/slither/core/expressions/literal.py +++ b/slither/core/expressions/literal.py @@ -1,7 +1,7 @@ from typing import Optional, Union, TYPE_CHECKING from slither.core.expressions.expression import Expression -from slither.core.solidity_types.elementary_type import Byte, Fixed, Int, Ufixed, Uint +from slither.core.solidity_types.elementary_type import Fixed, Int, Ufixed, Uint from slither.utils.arithmetic import convert_subdenomination from slither.utils.integer_conversion import convert_string_to_int diff --git a/slither/utils/arithmetic.py b/slither/utils/arithmetic.py index d14958541..cc88a5898 100644 --- a/slither/utils/arithmetic.py +++ b/slither/utils/arithmetic.py @@ -12,13 +12,13 @@ def convert_subdenomination( if sub == "wei": return decimal_value if sub == "gwei": - return decimal_value * 1e9 + return decimal_value * int(1e9) if sub == "szabo": - return decimal_value * 1e12 + return decimal_value * int(1e12) if sub == "finney": - return decimal_value * 1e15 + return decimal_value * int(1e15) if sub == "ether": - return decimal_value * 1e18 + return decimal_value * int(1e18) if sub == "seconds": return decimal_value if sub == "minutes": From 3112f157cad5cd5964468766f430105be1714b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 12:57:49 -0300 Subject: [PATCH 191/202] Fix test reference in CI --- .github/workflows/features.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/features.yml b/.github/workflows/features.yml index 7414e9ebe..49db14793 100644 --- a/.github/workflows/features.yml +++ b/.github/workflows/features.yml @@ -45,7 +45,7 @@ jobs: - name: Test with pytest run: | pytest tests/test_features.py - pytest tests/test_constant_folding_unary.py + pytest tests/test_constant_folding.py pytest tests/slithir/test_ternary_expressions.py pytest tests/test_functions_ids.py pytest tests/test_function.py From d47dd66579279c37a1012742f4720daef7028ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Sun, 18 Sep 2022 16:32:20 -0300 Subject: [PATCH 192/202] Fix linting errors --- slither/core/expressions/literal.py | 3 ++- slither/utils/arithmetic.py | 2 -- slither/utils/integer_conversion.py | 3 ++- slither/visitors/expression/constants_folding.py | 4 ++-- tests/test_constant_folding.py | 11 +++++++++-- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/slither/core/expressions/literal.py b/slither/core/expressions/literal.py index 289cb8958..87090b93f 100644 --- a/slither/core/expressions/literal.py +++ b/slither/core/expressions/literal.py @@ -31,7 +31,8 @@ class Literal(Expression): def __str__(self): if self.subdenomination: return str(convert_subdenomination(self._value, self.subdenomination)) - elif self.type in Int + Uint + Fixed + Ufixed + ["address"]: + + if self.type in Int + Uint + Fixed + Ufixed + ["address"]: return str(convert_string_to_int(self._value)) # be sure to handle any character diff --git a/slither/utils/arithmetic.py b/slither/utils/arithmetic.py index cc88a5898..de0ff69e9 100644 --- a/slither/utils/arithmetic.py +++ b/slither/utils/arithmetic.py @@ -1,5 +1,3 @@ -from fractions import Fraction - from slither.exceptions import SlitherException from slither.utils.integer_conversion import convert_string_to_int diff --git a/slither/utils/integer_conversion.py b/slither/utils/integer_conversion.py index b7e2e98ff..e4dff333c 100644 --- a/slither/utils/integer_conversion.py +++ b/slither/utils/integer_conversion.py @@ -11,7 +11,7 @@ def convert_string_to_fraction(val: Union[str, int]) -> Fraction: return Fraction(int(val, 16)) # Fractions do not support underscore separators (on Python <3.11) - val = val.replace('_', '') + val = val.replace("_", "") if "e" in val or "E" in val: base, expo = val.split("e") if "e" in val else val.split("E") @@ -30,5 +30,6 @@ def convert_string_to_fraction(val: Union[str, int]) -> Fraction: return Fraction(val) + def convert_string_to_int(val: Union[str, int]) -> int: return int(convert_string_to_fraction(val)) diff --git a/slither/visitors/expression/constants_folding.py b/slither/visitors/expression/constants_folding.py index 34ab34ffd..b324ed842 100644 --- a/slither/visitors/expression/constants_folding.py +++ b/slither/visitors/expression/constants_folding.py @@ -79,8 +79,8 @@ class ConstantFolding(ExpressionVisitor): def _post_literal(self, expression): try: set_val(expression, convert_string_to_fraction(expression.value)) - except ValueError: - raise NotConstant + except ValueError as e: + raise NotConstant from e def _post_assignement_operation(self, expression): raise NotConstant diff --git a/tests/test_constant_folding.py b/tests/test_constant_folding.py index 2106c5fa6..efc3119a8 100644 --- a/tests/test_constant_folding.py +++ b/tests/test_constant_folding.py @@ -5,6 +5,7 @@ from slither.visitors.expression.constants_folding import ConstantFolding def test_constant_folding_unary(): Slither("./tests/constant_folding_unary.sol") + def test_constant_folding_rational(): s = Slither("./tests/constant_folding_rational.sol") contract = s.get_contract_from_name("C")[0] @@ -27,11 +28,17 @@ def test_constant_folding_rational(): variable_e = contract.get_state_variable_from_name("e") assert str(variable_e.type) == "uint256" - assert str(ConstantFolding(variable_e.expression, "uint256").result()) == "57896044618658097711785492504343953926634992332820282019728792003956564819968" + assert ( + str(ConstantFolding(variable_e.expression, "uint256").result()) + == "57896044618658097711785492504343953926634992332820282019728792003956564819968" + ) variable_f = contract.get_state_variable_from_name("f") assert str(variable_f.type) == "uint256" - assert str(ConstantFolding(variable_f.expression, "uint256").result()) == "115792089237316195423570985008687907853269984665640564039457584007913129639935" + assert ( + str(ConstantFolding(variable_f.expression, "uint256").result()) + == "115792089237316195423570985008687907853269984665640564039457584007913129639935" + ) variable_g = contract.get_state_variable_from_name("g") assert str(variable_g.type) == "int64" From c09aa50c18803bcc9d7199f1dfb7e5a7687a985f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= Date: Mon, 19 Sep 2022 15:49:08 -0300 Subject: [PATCH 193/202] Fix early truncation If we cast to int too early, we may lose precision (e.g. "0.1 ether") --- slither/utils/arithmetic.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/slither/utils/arithmetic.py b/slither/utils/arithmetic.py index de0ff69e9..18ffaec51 100644 --- a/slither/utils/arithmetic.py +++ b/slither/utils/arithmetic.py @@ -1,33 +1,33 @@ from slither.exceptions import SlitherException -from slither.utils.integer_conversion import convert_string_to_int +from slither.utils.integer_conversion import convert_string_to_fraction # pylint: disable=too-many-branches def convert_subdenomination( value: str, sub: str ) -> int: # pylint: disable=too-many-return-statements - decimal_value = convert_string_to_int(value) + decimal_value = convert_string_to_fraction(value) if sub == "wei": - return decimal_value + return int(decimal_value) if sub == "gwei": - return decimal_value * int(1e9) + return int(decimal_value * int(1e9)) if sub == "szabo": - return decimal_value * int(1e12) + return int(decimal_value * int(1e12)) if sub == "finney": - return decimal_value * int(1e15) + return int(decimal_value * int(1e15)) if sub == "ether": - return decimal_value * int(1e18) + return int(decimal_value * int(1e18)) if sub == "seconds": - return decimal_value + return int(decimal_value) if sub == "minutes": - return decimal_value * 60 + return int(decimal_value * 60) if sub == "hours": - return decimal_value * 60 * 60 + return int(decimal_value * 60 * 60) if sub == "days": - return decimal_value * 60 * 60 * 24 + return int(decimal_value * 60 * 60 * 24) if sub == "weeks": - return decimal_value * 60 * 60 * 24 * 7 + return int(decimal_value * 60 * 60 * 24 * 7) if sub == "years": - return decimal_value * 60 * 60 * 24 * 7 * 365 + return int(decimal_value * 60 * 60 * 24 * 7 * 365) raise SlitherException(f"Subdemonination conversion impossible {decimal_value} {sub}") From f6de01afb1583cc238131f9d6d36b9cfedda5869 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Mon, 26 Sep 2022 15:02:30 +0200 Subject: [PATCH 194/202] Update tests/test_path_filtering/slither.config.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Emilio López <2642849+elopez@users.noreply.github.com> --- tests/test_path_filtering/slither.config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_path_filtering/slither.config.json b/tests/test_path_filtering/slither.config.json index 27d607bde..95aac92b0 100644 --- a/tests/test_path_filtering/slither.config.json +++ b/tests/test_path_filtering/slither.config.json @@ -2,6 +2,6 @@ "detectors_to_run": "all", "exclude_informational": true, "exclude_low": true, - "ignore_return_value": true, + "fail_pedantic": false, "filter_paths": "libs|src/ReentrancyMock.sol" } From f78798292227be3fe8d1c5c1ed2b79a9ed5ac9af Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Mon, 26 Sep 2022 15:02:46 +0200 Subject: [PATCH 195/202] Update scripts/ci_test_path_filtering.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Emilio López <2642849+elopez@users.noreply.github.com> --- scripts/ci_test_path_filtering.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci_test_path_filtering.sh b/scripts/ci_test_path_filtering.sh index 0ad13e8c2..92f87b2a1 100644 --- a/scripts/ci_test_path_filtering.sh +++ b/scripts/ci_test_path_filtering.sh @@ -2,7 +2,7 @@ ### Test path filtering across POSIX and Windows -slither "tests/test_path_filtering/test_path_filtering.sol" --config "tests/test_path_filtering/slither.config.json" --json "output.json" > "output.txt" 2>&1 +slither "tests/test_path_filtering/test_path_filtering.sol" --config "tests/test_path_filtering/slither.config.json" > "output.txt" 2>&1 if ! grep -q "0 result(s) found" "output.txt" then From b1ed6b3ad8d472ce872a85485fd06e0037dd63da Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Mon, 26 Sep 2022 16:21:47 +0200 Subject: [PATCH 196/202] use solc 0.8.0 for path filtering test Signed-off-by: Pascal Marco Caversaccio --- scripts/ci_test_path_filtering.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ci_test_path_filtering.sh b/scripts/ci_test_path_filtering.sh index 92f87b2a1..fb2a18842 100644 --- a/scripts/ci_test_path_filtering.sh +++ b/scripts/ci_test_path_filtering.sh @@ -2,6 +2,7 @@ ### Test path filtering across POSIX and Windows +solc-select use 0.8.0 slither "tests/test_path_filtering/test_path_filtering.sol" --config "tests/test_path_filtering/slither.config.json" > "output.txt" 2>&1 if ! grep -q "0 result(s) found" "output.txt" From 4d3e5f6cc7060debcea1081a5e946e25a1094449 Mon Sep 17 00:00:00 2001 From: bohendo Date: Mon, 26 Sep 2022 17:32:19 -0400 Subject: [PATCH 197/202] update readme & usage message to reference up-to-date flags --- slither/tools/read_storage/README.md | 10 +++++----- slither/tools/read_storage/__main__.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/slither/tools/read_storage/README.md b/slither/tools/read_storage/README.md index 91491a364..82381c527 100644 --- a/slither/tools/read_storage/README.md +++ b/slither/tools/read_storage/README.md @@ -18,7 +18,7 @@ optional arguments: --struct-var STRUCT_VAR The name of the variable whose value will be returned from a struct. --storage-address STORAGE_ADDRESS The address of the storage contract (if a proxy pattern is used). --contract-name CONTRACT_NAME The name of the logic contract. - --layout Toggle used to write a JSON file with the entire storage layout. + --json FILE Write the entire storage layout in JSON format to the specified FILE --value Toggle used to include values in output. --max-depth MAX_DEPTH Max depth to search in data structure. ``` @@ -28,19 +28,19 @@ optional arguments: Retrieve the storage slots of a local contract: ```shell -slither-read-storage file.sol 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --layout +slither-read-storage file.sol 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --json storage_layout.json ``` Retrieve the storage slots of a contract verified on an Etherscan-like platform: ```shell -slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --layout +slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --json storage_layout.json ``` To retrieve the values as well, pass `--value` and `--rpc-url $RPC_URL`: ```shell -slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --layout --rpc-url $RPC_URL --value +slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --json storage_layout.json --rpc-url $RPC_URL --value ``` To view only the slot of the `slot0` structure variable, pass `--variable-name slot0`: @@ -79,7 +79,7 @@ slither-read-storage 0xa2327a938Febf5FEC13baCFb16Ae10EcBc4cbDCF --variable-name Take Avalanche, for instance: ```shell - slither-read-storage avax:0x0000000000000000000000000000000000000000 --layout --value --rpc-url $AVAX_RPC_URL + slither-read-storage avax:0x0000000000000000000000000000000000000000 --json storage_layout.json --value --rpc-url $AVAX_RPC_URL ``` ## Limitations diff --git a/slither/tools/read_storage/__main__.py b/slither/tools/read_storage/__main__.py index f3cc90efc..c899b9eb7 100644 --- a/slither/tools/read_storage/__main__.py +++ b/slither/tools/read_storage/__main__.py @@ -21,9 +21,9 @@ def parse_args() -> argparse.Namespace: "\nTo retrieve a single variable's value:\n" + "\tslither-read-storage $TARGET address --variable-name $NAME\n" + "To retrieve a contract's storage layout:\n" - + "\tslither-read-storage $TARGET address --contract-name $NAME --layout\n" + + "\tslither-read-storage $TARGET address --contract-name $NAME --json storage_layout.json\n" + "To retrieve a contract's storage layout and values:\n" - + "\tslither-read-storage $TARGET address --contract-name $NAME --layout --value\n" + + "\tslither-read-storage $TARGET address --contract-name $NAME --json storage_layout.json --value\n" + "TARGET can be a contract address or project directory" ), ) From 7261715b0c78ddd426125cda290c28cb3de8cffe Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 27 Sep 2022 11:55:04 +0200 Subject: [PATCH 198/202] Improve support for virtual modifier --- slither/solc_parsing/declarations/modifier.py | 2 +- .../modifier-0.7.0.sol-0.7.0-compact.zip | Bin 0 -> 1639 bytes .../modifier-0.7.0.sol-0.7.0-legacy.zip | Bin 0 -> 1601 bytes .../modifier-0.7.0.sol-0.7.1-compact.zip | Bin 0 -> 1641 bytes .../modifier-0.7.0.sol-0.7.1-legacy.zip | Bin 0 -> 1602 bytes .../modifier-0.7.0.sol-0.7.2-compact.zip | Bin 0 -> 1640 bytes .../modifier-0.7.0.sol-0.7.2-legacy.zip | Bin 0 -> 1602 bytes .../modifier-0.7.0.sol-0.7.3-compact.zip | Bin 0 -> 1642 bytes .../modifier-0.7.0.sol-0.7.3-legacy.zip | Bin 0 -> 1602 bytes .../modifier-0.7.0.sol-0.7.4-compact.zip | Bin 0 -> 1639 bytes .../modifier-0.7.0.sol-0.7.4-legacy.zip | Bin 0 -> 1603 bytes .../modifier-0.7.0.sol-0.7.5-compact.zip | Bin 0 -> 1642 bytes .../modifier-0.7.0.sol-0.7.5-legacy.zip | Bin 0 -> 1603 bytes .../modifier-0.7.0.sol-0.7.6-compact.zip | Bin 0 -> 1642 bytes .../modifier-0.7.0.sol-0.7.6-legacy.zip | Bin 0 -> 1603 bytes .../modifier-0.7.0.sol-0.8.0-compact.zip | Bin 0 -> 1612 bytes .../modifier-0.7.0.sol-0.8.1-compact.zip | Bin 0 -> 1615 bytes .../modifier-0.7.0.sol-0.8.10-compact.zip | Bin 0 -> 1671 bytes .../modifier-0.7.0.sol-0.8.11-compact.zip | Bin 0 -> 1675 bytes .../modifier-0.7.0.sol-0.8.12-compact.zip | Bin 0 -> 1669 bytes .../modifier-0.7.0.sol-0.8.13-compact.zip | Bin 0 -> 1673 bytes .../modifier-0.7.0.sol-0.8.14-compact.zip | Bin 0 -> 1674 bytes .../modifier-0.7.0.sol-0.8.15-compact.zip | Bin 0 -> 1672 bytes .../modifier-0.7.0.sol-0.8.2-compact.zip | Bin 0 -> 1653 bytes .../modifier-0.7.0.sol-0.8.3-compact.zip | Bin 0 -> 1660 bytes .../modifier-0.7.0.sol-0.8.4-compact.zip | Bin 0 -> 1662 bytes .../modifier-0.7.0.sol-0.8.5-compact.zip | Bin 0 -> 1667 bytes .../modifier-0.7.0.sol-0.8.6-compact.zip | Bin 0 -> 1665 bytes .../modifier-0.7.0.sol-0.8.7-compact.zip | Bin 0 -> 1666 bytes .../modifier-0.7.0.sol-0.8.8-compact.zip | Bin 0 -> 1660 bytes .../modifier-0.7.0.sol-0.8.9-compact.zip | Bin 0 -> 1671 bytes .../modifier-all.sol-0.4.0-compact.zip | Bin 1080 -> 1098 bytes .../compile/modifier-all.sol-0.4.0-legacy.zip | Bin 1081 -> 1094 bytes .../modifier-all.sol-0.4.1-compact.zip | Bin 1084 -> 1093 bytes .../compile/modifier-all.sol-0.4.1-legacy.zip | Bin 1083 -> 1092 bytes .../modifier-all.sol-0.4.10-compact.zip | Bin 1121 -> 1116 bytes .../modifier-all.sol-0.4.10-legacy.zip | Bin 1121 -> 1116 bytes .../modifier-all.sol-0.4.11-compact.zip | Bin 1170 -> 1165 bytes .../modifier-all.sol-0.4.11-legacy.zip | Bin 1170 -> 1165 bytes .../modifier-all.sol-0.4.12-compact.zip | Bin 1265 -> 1265 bytes .../modifier-all.sol-0.4.12-legacy.zip | Bin 1265 -> 1265 bytes .../modifier-all.sol-0.4.13-compact.zip | Bin 1297 -> 1296 bytes .../modifier-all.sol-0.4.13-legacy.zip | Bin 1264 -> 1265 bytes .../modifier-all.sol-0.4.14-compact.zip | Bin 1294 -> 1292 bytes .../modifier-all.sol-0.4.14-legacy.zip | Bin 1262 -> 1261 bytes .../modifier-all.sol-0.4.15-compact.zip | Bin 1294 -> 1292 bytes .../modifier-all.sol-0.4.15-legacy.zip | Bin 1262 -> 1262 bytes .../modifier-all.sol-0.4.16-compact.zip | Bin 1296 -> 1293 bytes .../modifier-all.sol-0.4.16-legacy.zip | Bin 1264 -> 1263 bytes .../modifier-all.sol-0.4.17-compact.zip | Bin 1290 -> 1288 bytes .../modifier-all.sol-0.4.17-legacy.zip | Bin 1258 -> 1257 bytes .../modifier-all.sol-0.4.18-compact.zip | Bin 1289 -> 1286 bytes .../modifier-all.sol-0.4.18-legacy.zip | Bin 1256 -> 1254 bytes .../modifier-all.sol-0.4.19-compact.zip | Bin 1293 -> 1289 bytes .../modifier-all.sol-0.4.19-legacy.zip | Bin 1259 -> 1258 bytes .../modifier-all.sol-0.4.2-compact.zip | Bin 1076 -> 1095 bytes .../compile/modifier-all.sol-0.4.2-legacy.zip | Bin 1081 -> 1093 bytes .../modifier-all.sol-0.4.20-compact.zip | Bin 1292 -> 1289 bytes .../modifier-all.sol-0.4.20-legacy.zip | Bin 1259 -> 1258 bytes .../modifier-all.sol-0.4.21-compact.zip | Bin 1298 -> 1296 bytes .../modifier-all.sol-0.4.21-legacy.zip | Bin 1262 -> 1260 bytes .../modifier-all.sol-0.4.22-compact.zip | Bin 1321 -> 1318 bytes .../modifier-all.sol-0.4.22-legacy.zip | Bin 1286 -> 1283 bytes .../modifier-all.sol-0.4.23-compact.zip | Bin 1320 -> 1317 bytes .../modifier-all.sol-0.4.23-legacy.zip | Bin 1285 -> 1282 bytes .../modifier-all.sol-0.4.24-compact.zip | Bin 1321 -> 1318 bytes .../modifier-all.sol-0.4.24-legacy.zip | Bin 1285 -> 1282 bytes .../modifier-all.sol-0.4.25-compact.zip | Bin 1319 -> 1317 bytes .../modifier-all.sol-0.4.25-legacy.zip | Bin 1284 -> 1281 bytes .../modifier-all.sol-0.4.26-compact.zip | Bin 1321 -> 1318 bytes .../modifier-all.sol-0.4.26-legacy.zip | Bin 1286 -> 1284 bytes .../modifier-all.sol-0.4.3-compact.zip | Bin 1078 -> 1092 bytes .../compile/modifier-all.sol-0.4.3-legacy.zip | Bin 1080 -> 1093 bytes .../modifier-all.sol-0.4.4-compact.zip | Bin 1080 -> 1092 bytes .../compile/modifier-all.sol-0.4.4-legacy.zip | Bin 1083 -> 1092 bytes .../modifier-all.sol-0.4.5-compact.zip | Bin 1084 -> 1096 bytes .../compile/modifier-all.sol-0.4.5-legacy.zip | Bin 1079 -> 1097 bytes .../modifier-all.sol-0.4.6-compact.zip | Bin 1083 -> 1095 bytes .../compile/modifier-all.sol-0.4.6-legacy.zip | Bin 1085 -> 1092 bytes .../modifier-all.sol-0.4.7-compact.zip | Bin 1150 -> 1161 bytes .../compile/modifier-all.sol-0.4.7-legacy.zip | Bin 1154 -> 1159 bytes .../modifier-all.sol-0.4.8-compact.zip | Bin 1149 -> 1166 bytes .../compile/modifier-all.sol-0.4.8-legacy.zip | Bin 1151 -> 1164 bytes .../modifier-all.sol-0.4.9-compact.zip | Bin 1118 -> 1119 bytes .../compile/modifier-all.sol-0.4.9-legacy.zip | Bin 1118 -> 1119 bytes .../modifier-all.sol-0.5.0-compact.zip | Bin 1322 -> 1319 bytes .../compile/modifier-all.sol-0.5.0-legacy.zip | Bin 1286 -> 1284 bytes .../modifier-all.sol-0.5.1-compact.zip | Bin 1317 -> 1314 bytes .../compile/modifier-all.sol-0.5.1-legacy.zip | Bin 1281 -> 1279 bytes .../modifier-all.sol-0.5.10-compact.zip | Bin 1331 -> 1329 bytes .../modifier-all.sol-0.5.10-legacy.zip | Bin 1296 -> 1294 bytes .../modifier-all.sol-0.5.11-compact.zip | Bin 1333 -> 1330 bytes .../modifier-all.sol-0.5.11-legacy.zip | Bin 1298 -> 1295 bytes .../modifier-all.sol-0.5.12-compact.zip | Bin 1333 -> 1331 bytes .../modifier-all.sol-0.5.12-legacy.zip | Bin 1299 -> 1296 bytes .../modifier-all.sol-0.5.13-compact.zip | Bin 1334 -> 1332 bytes .../modifier-all.sol-0.5.13-legacy.zip | Bin 1299 -> 1296 bytes .../modifier-all.sol-0.5.14-compact.zip | Bin 1333 -> 1331 bytes .../modifier-all.sol-0.5.14-legacy.zip | Bin 1298 -> 1296 bytes .../modifier-all.sol-0.5.15-compact.zip | Bin 1333 -> 1332 bytes .../modifier-all.sol-0.5.15-legacy.zip | Bin 1299 -> 1297 bytes .../modifier-all.sol-0.5.16-compact.zip | Bin 1331 -> 1328 bytes .../modifier-all.sol-0.5.16-legacy.zip | Bin 1296 -> 1294 bytes .../modifier-all.sol-0.5.17-compact.zip | Bin 1334 -> 1331 bytes .../modifier-all.sol-0.5.17-legacy.zip | Bin 1300 -> 1297 bytes .../modifier-all.sol-0.5.2-compact.zip | Bin 1322 -> 1319 bytes .../compile/modifier-all.sol-0.5.2-legacy.zip | Bin 1287 -> 1284 bytes .../modifier-all.sol-0.5.3-compact.zip | Bin 1319 -> 1317 bytes .../compile/modifier-all.sol-0.5.3-legacy.zip | Bin 1283 -> 1281 bytes .../modifier-all.sol-0.5.4-compact.zip | Bin 1325 -> 1322 bytes .../compile/modifier-all.sol-0.5.4-legacy.zip | Bin 1289 -> 1287 bytes .../modifier-all.sol-0.5.5-compact.zip | Bin 1317 -> 1314 bytes .../compile/modifier-all.sol-0.5.5-legacy.zip | Bin 1282 -> 1279 bytes .../modifier-all.sol-0.5.6-compact.zip | Bin 1319 -> 1316 bytes .../compile/modifier-all.sol-0.5.6-legacy.zip | Bin 1283 -> 1281 bytes .../modifier-all.sol-0.5.7-compact.zip | Bin 1322 -> 1318 bytes .../compile/modifier-all.sol-0.5.7-legacy.zip | Bin 1286 -> 1285 bytes .../modifier-all.sol-0.5.8-compact.zip | Bin 1322 -> 1318 bytes .../compile/modifier-all.sol-0.5.8-legacy.zip | Bin 1285 -> 1283 bytes .../modifier-all.sol-0.5.9-compact.zip | Bin 1333 -> 1330 bytes .../compile/modifier-all.sol-0.5.9-legacy.zip | Bin 1297 -> 1295 bytes .../modifier-all.sol-0.6.0-compact.zip | Bin 1357 -> 1355 bytes .../compile/modifier-all.sol-0.6.0-legacy.zip | Bin 1322 -> 1320 bytes .../modifier-all.sol-0.6.1-compact.zip | Bin 1356 -> 1354 bytes .../compile/modifier-all.sol-0.6.1-legacy.zip | Bin 1322 -> 1320 bytes .../modifier-all.sol-0.6.10-compact.zip | Bin 1356 -> 1353 bytes .../modifier-all.sol-0.6.10-legacy.zip | Bin 1317 -> 1316 bytes .../modifier-all.sol-0.6.11-compact.zip | Bin 1354 -> 1352 bytes .../modifier-all.sol-0.6.11-legacy.zip | Bin 1316 -> 1315 bytes .../modifier-all.sol-0.6.12-compact.zip | Bin 1351 -> 1349 bytes .../modifier-all.sol-0.6.12-legacy.zip | Bin 1314 -> 1313 bytes .../modifier-all.sol-0.6.2-compact.zip | Bin 1356 -> 1353 bytes .../compile/modifier-all.sol-0.6.2-legacy.zip | Bin 1322 -> 1319 bytes .../modifier-all.sol-0.6.3-compact.zip | Bin 1367 -> 1364 bytes .../compile/modifier-all.sol-0.6.3-legacy.zip | Bin 1332 -> 1329 bytes .../modifier-all.sol-0.6.4-compact.zip | Bin 1364 -> 1361 bytes .../compile/modifier-all.sol-0.6.4-legacy.zip | Bin 1329 -> 1326 bytes .../modifier-all.sol-0.6.5-compact.zip | Bin 1364 -> 1361 bytes .../compile/modifier-all.sol-0.6.5-legacy.zip | Bin 1329 -> 1326 bytes .../modifier-all.sol-0.6.6-compact.zip | Bin 1375 -> 1372 bytes .../compile/modifier-all.sol-0.6.6-legacy.zip | Bin 1339 -> 1336 bytes .../modifier-all.sol-0.6.7-compact.zip | Bin 1375 -> 1372 bytes .../compile/modifier-all.sol-0.6.7-legacy.zip | Bin 1339 -> 1335 bytes .../modifier-all.sol-0.6.8-compact.zip | Bin 1379 -> 1376 bytes .../compile/modifier-all.sol-0.6.8-legacy.zip | Bin 1342 -> 1338 bytes .../modifier-all.sol-0.6.9-compact.zip | Bin 1356 -> 1352 bytes .../compile/modifier-all.sol-0.6.9-legacy.zip | Bin 1317 -> 1315 bytes .../modifier-all.sol-0.7.0-compact.zip | Bin 1310 -> 0 bytes .../compile/modifier-all.sol-0.7.0-legacy.zip | Bin 1278 -> 0 bytes .../modifier-all.sol-0.7.1-compact.zip | Bin 1313 -> 0 bytes .../compile/modifier-all.sol-0.7.1-legacy.zip | Bin 1282 -> 0 bytes .../modifier-all.sol-0.7.2-compact.zip | Bin 1314 -> 0 bytes .../compile/modifier-all.sol-0.7.2-legacy.zip | Bin 1282 -> 0 bytes .../modifier-all.sol-0.7.3-compact.zip | Bin 1310 -> 0 bytes .../compile/modifier-all.sol-0.7.3-legacy.zip | Bin 1278 -> 0 bytes .../modifier-all.sol-0.7.4-compact.zip | Bin 1312 -> 0 bytes .../compile/modifier-all.sol-0.7.4-legacy.zip | Bin 1281 -> 0 bytes .../modifier-all.sol-0.7.5-compact.zip | Bin 1311 -> 0 bytes .../compile/modifier-all.sol-0.7.5-legacy.zip | Bin 1280 -> 0 bytes .../modifier-all.sol-0.7.6-compact.zip | Bin 1314 -> 0 bytes .../compile/modifier-all.sol-0.7.6-legacy.zip | Bin 1282 -> 0 bytes .../modifier-all.sol-0.8.0-compact.zip | Bin 1311 -> 0 bytes .../modifier-all.sol-0.8.1-compact.zip | Bin 1313 -> 0 bytes .../modifier-all.sol-0.8.10-compact.zip | Bin 1349 -> 0 bytes .../modifier-all.sol-0.8.11-compact.zip | Bin 1350 -> 0 bytes .../modifier-all.sol-0.8.12-compact.zip | Bin 1350 -> 0 bytes .../modifier-all.sol-0.8.13-compact.zip | Bin 1350 -> 0 bytes .../modifier-all.sol-0.8.14-compact.zip | Bin 1350 -> 0 bytes .../modifier-all.sol-0.8.15-compact.zip | Bin 1349 -> 0 bytes .../modifier-all.sol-0.8.2-compact.zip | Bin 1346 -> 0 bytes .../modifier-all.sol-0.8.3-compact.zip | Bin 1344 -> 0 bytes .../modifier-all.sol-0.8.4-compact.zip | Bin 1353 -> 0 bytes .../modifier-all.sol-0.8.5-compact.zip | Bin 1354 -> 0 bytes .../modifier-all.sol-0.8.6-compact.zip | Bin 1353 -> 0 bytes .../modifier-all.sol-0.8.7-compact.zip | Bin 1351 -> 0 bytes .../modifier-all.sol-0.8.8-compact.zip | Bin 1339 -> 0 bytes .../modifier-all.sol-0.8.9-compact.zip | Bin 1347 -> 0 bytes ...fier_identifier_path.sol-0.8.0-compact.zip | Bin 1507 -> 1504 bytes ...fier_identifier_path.sol-0.8.1-compact.zip | Bin 1506 -> 1503 bytes ...ier_identifier_path.sol-0.8.10-compact.zip | Bin 1547 -> 1547 bytes ...ier_identifier_path.sol-0.8.11-compact.zip | Bin 1546 -> 1545 bytes ...ier_identifier_path.sol-0.8.12-compact.zip | Bin 1544 -> 1545 bytes ...ier_identifier_path.sol-0.8.13-compact.zip | Bin 1543 -> 1543 bytes ...ier_identifier_path.sol-0.8.14-compact.zip | Bin 1546 -> 1545 bytes ...ier_identifier_path.sol-0.8.15-compact.zip | Bin 1547 -> 1545 bytes ...fier_identifier_path.sol-0.8.2-compact.zip | Bin 1535 -> 1532 bytes ...fier_identifier_path.sol-0.8.3-compact.zip | Bin 1537 -> 1536 bytes ...fier_identifier_path.sol-0.8.4-compact.zip | Bin 1540 -> 1539 bytes ...fier_identifier_path.sol-0.8.5-compact.zip | Bin 1540 -> 1538 bytes ...fier_identifier_path.sol-0.8.6-compact.zip | Bin 1540 -> 1537 bytes ...fier_identifier_path.sol-0.8.7-compact.zip | Bin 1542 -> 1539 bytes ...fier_identifier_path.sol-0.8.8-compact.zip | Bin 1533 -> 1532 bytes ...fier_identifier_path.sol-0.8.9-compact.zip | Bin 1545 -> 1543 bytes .../modifier-0.7.0.sol-0.7.0-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.0-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.1-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.1-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.2-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.2-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.3-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.3-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.4-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.4-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.5-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.5-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.6-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.7.6-legacy.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.0-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.1-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.10-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.11-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.12-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.13-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.14-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.15-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.2-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.3-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.4-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.5-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.6-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.7-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.8-compact.json | 12 ++++++++ .../modifier-0.7.0.sol-0.8.9-compact.json | 12 ++++++++ tests/ast-parsing/modifier-0.7.0.sol | 27 ++++++++++++++++++ tests/test_ast_parsing.py | 20 +++++++------ 225 files changed, 400 insertions(+), 9 deletions(-) create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.0-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.0-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.1-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.1-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.2-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.2-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.3-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.3-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.4-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.4-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.5-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.5-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.6-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.6-legacy.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.0-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.1-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.2-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.3-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.4-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.5-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.6-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.7-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.9-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.0-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.0-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.1-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.1-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.2-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.2-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.3-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.3-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.4-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.4-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.5-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.5-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.6-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.7.6-legacy.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.0-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.1-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.10-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.11-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.12-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.13-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.14-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.15-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.2-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.3-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.4-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.5-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.6-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.7-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.8-compact.zip delete mode 100644 tests/ast-parsing/compile/modifier-all.sol-0.8.9-compact.zip create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.0-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.0-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-legacy.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.0-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.1-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.2-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.3-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.4-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.5-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.6-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.7-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.9-compact.json create mode 100644 tests/ast-parsing/modifier-0.7.0.sol diff --git a/slither/solc_parsing/declarations/modifier.py b/slither/solc_parsing/declarations/modifier.py index 3fdc22d4e..a3f07da7f 100644 --- a/slither/solc_parsing/declarations/modifier.py +++ b/slither/solc_parsing/declarations/modifier.py @@ -62,7 +62,7 @@ class ModifierSolc(FunctionSolc): self._content_was_analyzed = True if self.is_compact_ast: - body = self._functionNotParsed["body"] + body = self._functionNotParsed.get("body", None) if body and body[self.get_key()] == "Block": self._function.is_implemented = True diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.0-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.0-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..eab87a486fd03f9c9184f25333a769c391873ac1 GIT binary patch literal 1639 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.1-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.1-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3d960b6b494858192ebbe241e3180effd9827b54 GIT binary patch literal 1641 zcma*oYdq5n0|)RwGBie>aN1nLEIJy?nK(kG3#L${wmP|NXNb+*3C(07my*lS(@CNW zF|BDhbE`!Pk-5y}v>cbph9+XMr}MmjKA-3Jd+~eod;j&uDs6KH6affu?3{z2r-s8~ zi!uPT?E(M<000pbLg??I#HfAN$OA}gWHcrG0x=(W2i>8p(wkZSW z0e}Voj+vPxo9{N%iow1{2aQ{Na;RCGVMgvrsFTr1G*1^L{dDI&FsD5HbqJz(I0dcB z#cYX@>84ivo{gnTn`ue-fQ_zTj8Z%z%kY~c%RxK7@HO)an>qmNKH{LcQl{GnHjvNh z1cq>=r6-;J3eKs1rFLvQY^%ugZ;;9ddGOIO{6!tqP1Ls!S^QEy>5(jw?2(FFenVr| zD6zDZ55U2%t}{mVFXl8&O1ALk^M6lK-??TBUdsCL=bFOiq6y^pFqQ1hsWsc}45ew9 zOwKLSDnmdkH;)MPtxp!*cxBa3~HxxzkEnJ z72DNhk|;G_%$=z_{wNSde$wG-ro3K8^=8IvU3-}*b;;XiMJD=tdAl9#{HXpHtuhm;qlVQ8KP{@4 zr&Eha*phJgQN}1rMhjN7mMo;@456h3LEy>e#*~n%hWhzZTqt;N=w6p;B3c~<99g@v z+t|$Q^U6`(c6Mo-Tk6H4fA5dk6AYUdrh)?eSRZ4-F0HL|$xZaIKA62@{$h7=bOx!V z{~a%~@VVF*eX7PXQ&`}_xl|+Rg3~+ju5xh=236pYe9C)c&u!lDvO51cXj+f_#ju=C z$o1SY?VhYf!;C)s6c%Nw8|>xse)KP5k?m|rZ@N&|U5dHTq{&h~ z7^PMP7DPU?W}GlRiu9i}svD130o)`)Ht}2YeW2(My3f z(`~eTD;7@Y7X1RvPP*$8D;$niy`~Yxo4wC@F`K6So#10(GTwnFq(0LX?woLJ+%1mj z2*^aJy;`@mBzZy$LB)+@OyBkF&h*+VCXqOR8X=2)8^-K+?adfyz{X$RpDY`WUL)B~ zb$?pVb#Ur}D5~&lZo970)F>RQoP1tG?Z7XPxaF@e8Y*R1ajx~8rx)2=^_4Ql6o1L; zkmw>2=XFyfAm}Z_ZGYi8XZ=XJ;jVi>)ioqO*&HbcnJ*_{mo~g#k>*dEuJMiqCgF2>*?bb<~i5(ACz;P1;&>5cD zuF;JP2i+^4Pp+W`E&3|0jyY?VFYIgljv)>zznhnqJy8v(kDI=i_spr_ld3(M&bH~r z3Uc#Bd75kPXF~U6vY#%=rg9b!8F-xFP)os(6FZvDbAKDtcZC=({kcvdT zgmJhT_?0?WE=UGFn7 z9HOBxAkvG+?{-t30tn?M_r07fW116i)U)6l_sp#=^~7;iq~vCT>*h=Fc5keLqO;Qf h2H=MQ{|!yypZWhd@Wv{G{&_3>sPB)J{{RI5{sW(c4VVA` literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.1-legacy.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.1-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..c19cda4795b13962c74dd412b11649869a2585d8 GIT binary patch literal 1602 zcma)-eLT|%0LFi#o#kcRI`jT^hP>QN-sXlO)_JMOwRxGhGuoV&SYFDh8JUifmvoAj zBqSzTM~u3>=Fr%TU6d=!5i#?&(7F5nKA(G@Kc0V{|DMn1`}lgx?!y8y02DYv#GIT6 z9bYQ}1Awz802l)R5SKurL{p-YzCj`FktifJAvP>3?Q}xYnXrhYNHQfQ3K>I9h~K{t z41@px4FH^Sb5B`sTPIeI4nM{ymG{I`jJk9$UOu7etS6vy;8v^ix8DHo!Q*Q@sEm7t zEu__LcM+LoXxZ~Zx}3g~c`i6y+8602n`(SXchji}14}I#{3ZKQB3G;51EVat0UuV- z`TSlrg3MkmJApk}M1-s*K9kmURbC-HT>U)CK}<{r|EShhDgZ|ts^~^AOFqe)Wq)SL zjZBMex)=<`v7wM#eEv^H=(^GmK4~jUe|>;Ha5KKoz+(ejgs>^cP)yAIFpfIGuuppC z;i78JTlvLJ+JjyIZ0<=;I%RUJJ76k@$g85a%=x$mq#d$6vcHW-pcn_l36fiDZe(cv zYF8cg8v$v8lcz_I>4j*eXO1fm9^q;yR;%239@)!3|5gW7q#Uv2z)n%S{gYV^z2L{{ zEHB8l@Sg8lZj$K_zbAnGyHj7m;Ydgw&vueKxo#>ub-d8~=9An=k3JX2e(W#WC?hhR zr1(i~vfW$5@%NgMG3i*YXkX&Y(UFw`n!848uPEOgOe=V+AgpCB45)d`WrsFA<=yGX z9nm*(BArxGMnTcB-x>?LpXQ~{f%J%0>UL!}5cJYB`p7-AJPsUdmNItfqd%eK(rr63)S&S>a5@BWVbQ0ad9;)CKbu_4pm>?l)-hAmqrGLFu z7G&G{`27h!*$M>pJB4&$Oxp53vHQogsdvHXf{t|y2neSk;XTTy=A)3`iO5y?H{0t2 z-@fQj5-YhoI6(&N-DJpwXTznB-(@=IupwxIU&=OkjqZ0YwA#r=cTVl0v%-`9rD9J* zkH(jh9g4wL&)%AsJW_WbwGYC*{l4NiX$9eF!_!w{8=BiLoGRfu1RS=neFyEVfR_-J zWJ}8!SqAyV{dn_X&A9zO<}YcIuKPt73{0DLF$AA??rQNxVAwRezAxA^y5X5aO65lw z5z;M0>-ft23Eplf9y_}-ze8V^9te%KD_>Bbxi_SfnqAZ;zak%|mmU_5JRFPf6u(D) zb?vX$tscc&vCW&(Lgnk%mmFi5zS7#Q^L=clo~Y2mDe>2%mz}jmbK8ttHE{W{K01O@3}*xYo6yXzC>>!L8)l07E){X|}71VB5KX=b{$NSA(=ZL^8z|ea<8a4jFLL51 z&vFNg#rGEAUQbv^mMu-ZaCBDR0AJ&iCR2^rPs7gUJNef)Ql>Mx8p%m7(H*mk?~A*x zrVyRVEuw_ky871Dfl3RqCCjT-ALTYXujbB7i>W3;fv#gR^AFH@eP;%49^E2J4D{=-lKVKSBAO(M^VJW8wuD=ij tzq~80Q1|r)$zWywo9ugV|5r57Kk@%K@9Pcz;-5BX&)@Im#NJZ?z~9|h>HPoz literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.2-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..065df29b34b6833b65d8b2fc9d39b3b6eead0eaf GIT binary patch literal 1640 zcma)-eLT~N1INF!&3R1ij-2H(jF1_MJj*1_!>!GjO~y{=wlLdd9y1&_BNY8qo;nYA zNy$U;w5;PJNrU;+R@G&6$!BmFGf5{~`gLsRzLRE|FouqN{9V>Xyq@bp3Fo1X^~Qg1%mGW#$q#?*QSwYZ zs?zSU`wo?9WF_q1UQ1S_CsD$-dw=i%b4_x-+j41if^mxnuKwJ@8ik8aIBC7Vt}~>r z|9MF}{HNB9Yj}4{EvcxH)xBN!_}BcPrj5^I4~?HsQO;>w7g=x3=LoL}BX7xLW3U&< zGBK~E9^AMWYHzIGSC}oaS^Tb8D=1=7r!?{`i&)QQ%(qr=1sI)Dm1FN; z`2FAVh?k+28W1_#FAO!Zkfbc@8X&y)F>9epiuZ+(=HaHsFT#{57oi373au(B!U5}+ zkyn<$Ursx~q4R1h=40blCOMeuoCP%54mDI6{7c9QcNOI5;&SHZn>okr zqNkCj@kLv*Q^E^T8serSCMT(8Hpz7?=Xbnf0nN%Rge7GX#MG)^UBzr zbd5SB_7NnCj^(NRu1AZ1!cC5LqMb7^Fd{vPH=5lckaCYP#@7FAn{;OXOMG2*Z}b_$ zUGOUVNJ7xLG190;r6P=5YPb~fZqA!O~7}XIU5ox(1r-e4zNl~*BBlkFiB$tTAN*S(_*C75(;slPEZ54p35nZL{kort^`88^uaIdT$8a|2IN+P( zBkgkuBT*{kn$d=X`?|9ImjHKX z5Syg)F8ikGt(O52%5QS|6)@&G~}XndP&QTr@ME8{$%X-}a6 z(pP4ObktUiwO^`sbBBv9&Z6T^bHxrPX#DBU5=#s-XnGXr5E(rEjYz4m9h_+}upMoL zp<~6boQ#^Fq+#oWg(>0UBS-X->=8Gw#PqyoFyG7YzKiO5qC#_3=RPTnn&&8J`ITfK4W+>^Z`Bab(k@`v&)R8nNKMdtU>5JtBy+@@Tz{T zaCg5!dAF0&@z*!>ok`+e&`CiOWUZ`RD2ZdK<Md1{{A#FtP7GHftw50L3ih#7Kf$bsXsC8+25iCZ-Nd7o1M%3zkLnlO%-yNW z46xT|RI95>f2rs^JaTd(AEhE^xMHm+raEqt%2NAjTw4z;_BWR--R9R8Nd;fc65H<0 zZmnuk7Eq&kRL<4DZjYVa+=@ACQt8`0xM! fivs>19_TOpGaKN1pvr%(L0=m1g}YyT0s#L5fOYi8 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.2-legacy.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.2-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..4f749c9ca9aac77864eb612e8a117a9d6b767c50 GIT binary patch literal 1602 zcma)-X*|;n0LTAxAeQ+O?S%t$kZx%FbH`Ah5N8-9LG23~t9ZuR$}G zB-i-l`riRjeaEnvP@R$|KJyv=)8(nHZ;_{ch$cqoBs!Kr`9d0sfAt+yeRWSzk1-lkjx@SB^ z+<6=MgFX>f{F}8wgwcGo*R_K8%fBXgNVusm##mb>3-$3DC1sAhY~#mTp~~FyA?Hmh zIdk(if04#!5R*K3ZVxEScp<}-zT=7uJKN|KkFT@8Q7b=8>@%0f{XDq}c2KwF3%y|+ z8Tak7#?P_+-sz!7=eAHX2Dm<+NPKyogHS^>g1IF)`{HQ0;!hh*V&;*-**jQ?ZL?QuX@GUik^*w!~HU7PaShxD_u_r z1fAJP)rSp82We&N%Q}xXau&XsB}O$yiTcaVK`k*VOV7Ieytm zS!nn2raBdFU$F0|6D4uc7FS<4O2@Hm>>j0M{X}59O*?jRMX=zGhxx-dxk;o)m+5gd zY;eA+5#hSkLo+AgkLwYU9*bz>C36Ky8~f8izFh_ym47--9KP99(9Pg)VDrE(Ae}Io z9Cv-l9)SUiJ%Z~QpX)P>mAKW^uAn}NJgk<7lu}2HYwkPVy_I&6nH7SNl9qj=QF=SV zW(ljW4j0k&P_fGs?sQalE5d126z@q@y3D}!eGcUfD{qNu*|d6AJKEz7Tak~lKIrM@x>!-X%6K*GE_3JKZiY$DiX3X8-K5* z_X9&Ukjun>b=ZNP^N)%;u<+jEd@4>9Q_iNM4KNOvS=N#kumqCGE2cjitz;J!=j1H+ zz=-EdP3_AY+D;zB!E44OU0}WX!M7q`Qsoaem*7OieXMx>0Zj~xvA*+-_>$ru*d!e} zPbkc5WzR{qO1{#4yeZD+6hv>Dmnz47(M{l|yfiq%ufX}68*8iU{(Mi@<@RdF;2}Hf zvQM3ulD)e8;)rUl37$GUw_{Y*$we4j5YuaQ7s+aSeP(c_I61LhT}?N-?w5N|Kng^f;;*R%ZYbrbecrsZ>MSMOg@vvMqm&g`%n4H=ZNs9lk(smhi!BP*RjkQM z;$zLU$l?*E1i`i}qSc~@uA1K-!6Z}t4f7vG)&0R92|^W}m7 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.3-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..24b6863ae4fa37f585f96f515c78903b15b97b03 GIT binary patch literal 1642 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.4-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.4-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..bcd70d56af11fe41b30127487d5f44c4cbc44714 GIT binary patch literal 1639 zcma)-X*|;n0LTB#+DfQLjyaR_X&IrKJ2x?BcrcBaCdb+)w?2;49Ghb$XDKb(N>NJ4 zinK+!x=fE~k69|$tj8$!=z0HqKF{y>;``?J`uFwq1j*O~(ttd01Z^Go_JfW5BQOB4 zU;tnM06+phIyNR2OEfk`9732PNceaRHuV&qn1qQWM&V+Uv51o-eBxFaFc1y^*#KZm zCZ90>X->F0I{3g^uC^~RR-dJnPw`i?(|%8Sth|5uOZ^le0KfbGMqb)E>j1RfabpgV zr)$#JzqXjMo|7IHvBr*a1f>`hXo+p_TK|@EVW9HtJ;I1O$HiJfRINNHt0@sEMdI3) ztNb0_uWl5Pqt4`cpYcd)1NuAPMY>FnCuX6}6S__U*4pHo-LQ7g==MY3OHa+^VikO< zd&6&Jt*g|qb?!LN@Q_Ltu-hYL4T3B4QpwQnJ+WL|Hg%9q+TBHeAqPhY9Hw;m~TBNcEp$0 z&qjU|=S;duS-#pD(3zxBa+0py2n1hxsa7I~m1B5m=6%m91)KQk^37#Rho_7uMBxs1 zC*WqEFz$#1n~PM^J0QQBK(z;|4w00*tpT z?W>m5nV6Swgsb~rw)d-~R+*6{(ipd?HLKAUHV?n#=15Cq$p`gG&RQ9Lds^}-@sv_~6B@R<{;fnoz%SMs zv-YR+67=h9A!$2kW3$h50v7naRYH9

`*a_s<$(po{3VngkBDo0BbXYHLEZfy0y zKd)8Mp8kSMpQr&1HJa2QD`kfl@rFe+e;J*S6ya*Or@@PIJ|Fd;()RZ@_7M(@q`?hk zlBXiQay+saNHF^PlYFidqfJ!E3WXr*0=14(MZ zigtZX*@LI^zi3@SWzjRrbg4JXIe*kRyj4uTMAAPS;(f(piNg{rP3jbvTrSn?rc|lk z69TO!Ue0eC%BuJV3btPN(r8P^MXf^&jpe6GIn6J7)*q`%GVY_1+p$@vOYRfvx(p`> zsDwBjcDC7T5pJe1$hZqnabv%b5 z=f6k=xznP!z<5bV9qd^7wL60Sdvr~eCYe4Qxroc{-ip$P_fg}(8=%4;J@9CqXcdh9 z>*CZgyU_Wd)2WN0xZOvUfpY@*%xGw{Yn!ilUcGK2e}O#U1Ljy_{#>Myt;VIBW7O+# z=X4HU3pu>4dxaW6^H)QH^~M7dk*wap&L9DK#AfgQLFuLU;j%S~9^3;hOmbYrIHhji zk&TSL$>{9R5AFXG=qX3y&>=>IaC$AhKienjt}G& z{RY}2j8ZDKP<c6V7 zCEyv=>BF4jh?%xJ)R3Rq7UPsdhkzD88OW0dmUnZH#gw|-J)WsHm1lggzNNszh++X| zni%;a*{XBZh0ogEkk#Q`JT$Y(p)38oayx&>Hq)X!2<-TxTW+w^>B52^RCSqppdJRX ze3qM6gYEb%>gFRf-7jq;2R=;iqP7$eP}>T2p~3`gZte$}Zp=JK#S-#D!r7w9vzku2 zzr3z@voG6dFc~AxYJm)O4Y#U|nsg?Bs01{&qD*oNdd0Cg0PAW#5ze=2id0{X36hkj zJaWIanvQ<~g(;+@N!)~xPnWmlM|^!4U=-XbKdvE@5}r7_hQi?8D~Hm*bI1wA%bdh1gs)303fvh z015y=9F-Is6?^2kxh32dZV5j@B_BR=@=xmVgu{g6#F*H`Bk-dqs1yYmFc1y^GyrhQ z&W^TTvyLz44%|m5)7g~R9i4hvc{nYk{>X{P8deL_WuE{(cvv*FS=ue#M*g9zL;%k; zwqW;)=Tg^CryPn9cN1MfNzfdpOz9Dk5+IBA#G%n~uRM?74E5 zT{mLWtZeow-r{2`%I0!*=~e3rrrOzvQTiL}Tu6BcWSQ(Q928aB9}rkn$!@+7Q4=+b z%yAM0_cGC*1Q@a`!ZGVMjWoGk*GFHRyI2Q6w(#6=56r)>B!Oiytx$wQgh5u}TOz?Z zWtwuyZ5FzbrpTzb(Elrh{lvlKxb(Y#IrR{Atd3tna69U9(*2_d8W#$W_Qcypr!CM; zUU!Ux)f#%fikIS_fGKgHt|oont|HW{-0Kw1N}=zjy=|D3Lis+pQHf~E1JAI(d!2^b z*7DJS<>q>NH)(%EMK3E+I(&lh?R}6!cXCJt7;VAHO}iMrl9*!P+DPxlns;4^Tl-{# zpHvMnzQafI3eTr0(5Oac)2PVL5lM=>AYNA) z+>%LL>6HD;FDmuWcQBJo?`M-doYodA-P%+LlK4UVaN-D@UGbuA2$X&d5vs?%2}rFPvH-B&u)(SJx zaXgN!>D1PJgvYB`9XDz}b$_0nK3#KS2%>D$k6!mMd&SOvnG@+1 zl%sTvS7bvVq=%9GNRV~2TvjsmE~&b68~1!w05 znhv_LoX^c~R4&bS>AJ<$AKN}}rjcaHhb@U}SF^+@;;qtTp&h~Budf|5-WKV#;Sm#Kj!sYZAoBX5-T4 z{F)%3kJJzPLC@lZ7~x=f=m6tuC9c}3tt7l_^7QH+LzT|<%{r1;#{m(c!*+1|r{Py$ z+t4ky8O3--D@e1y8q$BcIAbwWJo?T6m8jcjm4fi=h?}r06 zCpa$S>(S=g)gxr7#bL`5|LZOD#aFB~JLOn4Oy3zT@a2{rK5AP>bAOB$Lmm26q!;x3 zoKeI0ZBYECV^LfEmS~?*>gT&{^-eb0pUwOGN=sTzgi+m${(Sw65H)iKsk4#C2TZVN lDQRcWf2;kM-Tw_u>NozM=&@+9?C-VIuLk}i@7GlTz&}p?>xuvX literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.5-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1e5f938ad036e7e3426fdfa27b604179bf3dcc5a GIT binary patch literal 1642 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.6-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.6-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c69f3f42673d943d1099b6a57623d6b10b0570c9 GIT binary patch literal 1642 zcma)-c|6k%0LFi2bG&kH70IZOa^J_8sS&1wqJx@+m}|_i*PJPamgCK}XuwymlZpIWZmEOa;r8Z-E8K#Fv)}Aas(Y4C}y;RipGh z#=TEPe9HH<1Ydtqf4~9Bc-<_x(4h{Y5`T?da;Y);h5CRqLUE10ZCFlYb73nkgefTX zI+#SrUkbhJ1q6e~WiIb8TpTo`J=L1I3ydD$cj6WZ-RYFZh+xqk#6`$^d+NEuc z+$4tz_}9CvVFr_4YfIY7TgwJNzv{}Nr&zE>uG_n@%ZNs{SSqy+)-IkJ-@^klkn6M! zDsHvSRXKLKXhF1BwoKar34;k8P>d5tWv46Js5NYsu2OdY!c6%$)vz)Mo{TEjPvt1J z*4fn`yzw%=n!DvXIb=d$`vHk2MeZ1j(`g`GnG(xe!mdFO?DSh3^PV-f??Tg4=Vul3 z)x{6%{1zR1bIfZz{=wGm^Lg7o$xt_K-?XSs=>Dsy;WKA{zW&K|g>Kn|`bl&eB~;8# zOgc2OZe64D3NyP@ML;{@leGj=BtaqF{^s3;C&Sfx7b=>vb7tPiWwku$UmR0|6Gpc3 zUu&WtS$fW#*T`zAn3{M)dq(FQlx36^#J^ufd0T?UddMUJue9w(iA$54>abAzn|SZp zD#%>tn1pYNg?5Nd>dhyWEAZQWvvDb!Rfky~Ju}&>!=;p_OADgNP~RNzMkYVc@R)bs z?WivT$6zT_BW-CM(%4a%%=Ac{beQvf-q5VQ*aS&3{PuOaFHkabVwO^}yYFO!w>wsb z@bm!heBxnJh$Lxm63O!8Tpf*~xg!@p#Msdx&P(NX$}rior_NVdc&2X~wrx)c?HvjR zeDvsRN41I`91ff(Qx$V10r#j`E&Kl9f!WpBp-yWDd!IS(&*y z$Hvs_?NxSU;?6bn-VX9{Pe317iN?XMgBvv9 zTr4|7wz{y~3LxIQnhr&U?_?Q~rCTB1c8Q;=b&H$m2|e|Z!54)C@d}ono#uajbhXb5 z@^P(*i@kc#4Vf&YZH}y9aVJ-do9^=r2e}2nn>o^j!gD>U3&weFcaI$Mn(}A7@K}|5 z|LO^K47ZPaN{ih+$(g;8r?lj)z-&cTgnIJqz^i{aV|Q+<(+WLCTB+;KnB-;*5y*Ty z$D*Hqn4c{vafym;!G?3$UD;_I%PuK_o6U+jfhxRwbknbFq_BVzN0AQ5Us0x@t&)cpak4GBh2&40>?$6S}YC_7zpN)`XO7{o*a$T5@Mj>X~ULf$^;uiy4Wzjq3~c z(fszP2?>R@O7lcaL2d4qL8Z5+(T|W&Ja|=6iK^GF!8H8t5t&G=^-^z+OsDUHJ+RqX zXUs6wck;OyiM06O96gi4n-`i{&deKPwC!*xyZCUk;H&SyO*M+|ll3JKQ5b~TnIc26 zW9IJWX{^PpbARQXUSIA*my|s3Y`6XqQzI+DrrV(WhY$=dIEIk`IZFOF0e(W@w^Aj3 V#sA~MF$_fN*IVMJPy8ys*S{)!0YCr% literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.6-legacy.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.7.6-legacy.zip new file mode 100644 index 0000000000000000000000000000000000000000..db8047403a9eeec08a214b884338708db41666f4 GIT binary patch literal 1603 zcma)-X*|;n0LTB1cI;k@;T&c%W_C8x2oViG(&HM ziD9j(?cEWrtiyNQ_Io7Zh^M3cnFKPk&l-fe=w5L*06GMt<(A2Q74B z97B_haN7Y(=F)tgh^0%4)}W~N#oAr;?Q{I`IRh!|X7JA^*8cA&k8mWD_>cD;yuZA9 z1?dFKN}hHueXcH2k@oB+*;*)ZFKQDuqB4(g>2THHrZit~iVk&M23VNGV~U_CoKA~h zUUmRSSF6;ZDAN7js=XaNR4~P6j1@bjdJJOy)l4YK~#T(rL{o zS_};mUnb$d$e5g~m0FvmNQztfB;5|J9AC?Knd`E+6yB%o>Os-6oo?4k9bw0BzuZSv zOqb3vsVrbHbEsbUooSrKA^4#bl3MGV7QZv?37?q>?Y^A_8vXirw5O~ro;4>utXsbf zlhRoxWfdE~6YVmH-gxkRA-!4@<5&Iz6Gq&wD*f9w{HY})=4Zz`rY^04cg4QSjD(O- zmrpl0^EFDcywNnTx1OxnlL=;sVfyDdK=0>XSVcxC?a&ZBIJ42YI7E(M>;rqeZW@dYV| z6hYkB6SgFwn#M+gn1$J;^~H=XR`V~D#(Ac7k>kQi67AUh2rg!W-02}A?zLouc7WZj zU=2{O_2M#=n5wqBny8@}3&a^z?+5j=X%0ij%4I(UJ67^Fzx%ix7be%yP&c;s+NKfc z?sVl%u+H{cMu=M5*p2V85u^*$*OK)*CBW6=#0G=B zHxN8$tEht*$JybEwy{0lVeNN0x@EH-%HOsJ1exM$7;D)teBb0N$d(m%Lz|#P1NQ_k zeTrrSvbR8VGv5+fb1Ns&KVWt;Z&9snS(_v&~zTl-j`Ayw75|d zeRE4C1=)D&N@um|iwA8@9|C5#gVe^Hv?byvR!Pe#|rpo9r9L58a`xI5Al z>G~I|8hQP0gZr}PtH;KwN7pk&$8oJmONk2Xj`&bv{Bo%Jv9e)bO>5sz=L=5UnhTR2 zevLiXe?ZBA(Hpoav=YzfsMfWn9#v8oK;$?Sw#jNOp_+q#6sKgv_*{B|^&BVU1oY}* zEu>ozvFVJ!jsT1tB{Q*GIpycBQEKK#Q+(=-!F>!9w4f;J+{cnO$XbiCL`K-1zY*3y zRlWDhV+LZlmZb799jlO?=xkqb*-OE*lbkPn!KM?HFeHWgQ8ibhZ7-N>Z1Pg3WsP{a zYteA5`xcoWZF3DQxxLMj qOY>MX7q=ks~)=&@+fzCUZO-*x!S$=_E20RI4^wC>>m literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.0-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.0-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..9d472762d8b78b2987ae62d9e8b16a8f8436546e GIT binary patch literal 1612 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 H$iM4vJlYq} literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c56bc86aad5e9c5175bb653436e01ee04ec99693 GIT binary patch literal 1673 zcma)-dotaY#H+de#=(;s? zy`#+QYPPm064DK=hez^`jB&g7|9j5;e*gHK?>XQ9KX@0gv^@X<6ajBP8&A{@Aoo@V z0E*!Npa%c|IW{!nVni6l7-eE*f-*^njV6Xs<6)&&5X9^lb zYF=S%wBPI9_gppuY?##b8^qtfqTg^1aSMt#)HgJEqhU?U z)(d?gN~!lJHk&~n7cEUy4~h&5_p|bh2&uNuYWVd&d_X<9-5gSfj#}bX)@cA|EZNudsx5Rf!8$0Te2Qg60?7pAt+__RGb4cibYNvc;DX$jZ-;#3wo}lXr zqivt*;Uuv8bfmn>Gf))cKqN;kLO*jDt!mF;9R$~p)++RO$iQ8z=-CrWkIu*Ss~{l875*6M?)MAW;foxlnhBWA?6Rg$LSgz% z$KYt46wk+}sz;v4jWu{B`VNX?#M*R2RvHeOQV?vC0l~=M?+ho9~?|>#sZdHgI8ZV&-g+k^J#b_%k63F(P&N!yEx~E!%xY zM+~p@W=VuBB6<#WHDKmb6{kF4g%$@&%)6z=+>jTRSZHZKP;2-i3Ncjx%T9GEXvb@X z(u{5aNm)Jl)HdOJl{v4%@fPcueQj1d0YkF0@pLH)lInHNMh`Q4mpIfih;D7?XDJ6c z;Im|>|7!frasXBaluu;NV+Pk9=doL#H|W$S^R{KSbzlGN)8cpp}`Q(&+{ zv`m2x*_sr=?%mBf;ISUMI+@fKgorFc1qjN_4JDQw1QOkWRIY_R;pdK@HiWLy!iAi} z56(C&Ji>G}m(9xw)V}#rEVkA>KyI6mCpc2PhO3+bq7|KRF1GV<(}Vr zJ3V>GDoqwK{6=i-!?wGb)FPM7b%v;zklc`K^Z+^Sz$xUR`NraS^A;*S{2LVm zcVcYctwX<;B_NxwvR!h=?RZeK4QXMl7xFStWjRpsxpE8d{fh=|g5LxUjqAu`9ehW6 ztk#JQ_V$~uH=y?|vG*3_Z$Lkfr&6Q7{*KbWb<1q{Dp|3=S^rXr>GNrNmWPF|QD0u1 z>#^<;g%|J}l%mhZmQ=nt;KVBf6j`~F!Td?!HtmqlORo=ef-Vp$yFB5EPQ+190;QW_ zL2_A?Ye;TAr6X7@KAUqw=px@(7uBNL3y~BMrKxM4LXS)O2W;g%R`E5Tl=UOmzpP}f zxnrrWl_%{!c>A7q40eLt@C}shZdXfBBg83R7xHRr$_5bosPs&uIbYR2z0W2+IMhXhG H|E|9QgLnj{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d833db7923213a8de78fc9b5f9094af2547ad93b GIT binary patch literal 1674 zcma)-dpOez1IK^6$o+CQm)wR`lFQs?yp5w&+GErr_0HUKTMKP$%stjz)}q9yBe&dN z4oVn@Ivq(YL@o=Rm>5!WT#tjjo%8?uJn#4W$LIMz&-eci0S|#X0$@N1AbMjxDazy7 zQ&Ir%KobBA0RRZ622nyN!I5SbC|i^TicSsl3yz^tBN={IA_K2dqJvS_=+x`7P$|F% z0FnW~AtQrqy=xs&Iy}&VReaceopR(kA~n-p>qotDdZ)VO+EU3hAeI{27*PVBPPCEX zJMDi#-8^L8-M8~CelI1Ch9MzD z@$$JQVuK4Mn78f(P3k4}6mdI@;ejXHj0>}??Ctzaq@{;;ciW*gGrk;6$KGSe=o?F? zpyh1eyZ3BDKPQB(ieszg(M3zft9ZF#Pf=WC0!giWP5FcZiUPlQXJ)bk(5a}4Q~c@n z@f^EqS6;g%%CzjEx;lHm=q+cH^a<-st>z3$OD1V*=7~E>GPP0jH7@qtYVs?Y6|JZ1 zUQ6+2_M)tc*nIG%Kb$78EYWR-l-CL$7E_|JDE*-k%WhbbD_n!lqylu3Bj-SS703>(jYBGa1zJFZ-?;F{)Zy*wY-Q)tp3Y zP9H%oYwR@lZmw+VCOnX|Zh&Lhushvd6dm^z^vIjx{xlGbOg{aGxPpYqKAP^+C+UkG z?LGO19dO^k_>;&eNJcM5JAjenFD|^mLuz`P?k$B4d|q&OnSPPK+5@8h;I0}md%eX@!^-p4 zW5!<`q=$&pD>4^CFTHb&x~q|u^|4mdT~s70-92K+iXo&muy&bG0=CMTL2h!sl=8q4oJzLi zxXel?C+M)fs!DuqRD;tYr2_koS7c?bviFOD(d{lYQQc?i zUTjrQ+i>y*4SK3Q2tsl@T9cU-K<7vn4@DxsbRJ|*M4V;S{z!x0P+c8DxVer0`eItB zn=yC%#n84Ig3vwY;IYR=LoZ~VraV; zGL5fMGzUR0xkeRZ*7vbYHQvBlO;lA{^t5fsF;-u!kbOgrtX(%@rK|$O3_0yU)^d0p z{YN{+6g>~3WsKEd#HDW+5d@c3OsU}$q~pYF31?7aGtcu7t201VHQ`l@!Y6sHZ@$qf z^UwVa!Z7PSTWCStES+Z*s^kJw%SiOzYA>$w!7dDaUT!PU8k}r%)?Gi0U+ea`oTqv= z-~Of?t?z{Q@n(CLT;{>DO=@64nh^2yxL4V4EA%-JPn6Yz%HJ?mb@C6n;~V$v>DEsx z5Nt~#8rS-}mdnDzaAS%TGx%$|q<>H$iGT-z9U=eQ5Z@*7Pm)1@Fds KFMg-~KkL6}egvTa literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..466a99699dae0a1cf35c33165f2fb8f9442cf38f GIT binary patch literal 1672 zcma)-X*Ao30>%F!64cUKn|6ZI#-5;4Oa+mlPh%co&{si)iKPfd#1?H;J5s!2s5QjS zi)~0lRntdDEorq>XeomRty(HEwvm{2zQ1$cy&rz(o^!wd@GjC|dq4_M0xtX7c;z9K zGp1w!pcn=K2mk;gqkakt4kN{wnjx)_X2{s6h%2Oo=%|>uE5w+f(6D$C@@i}pSq>}% z_yNET0IyLm+LN)5HOxgT%sF6LX5x==B`HVR zIoU3(WDR*s57j@s|2bKFGl>weKM;hKrXuKCyS8mMD%5;lQF_O<(UXHtHp*Ki8Y4&G zhs)~3&4Q`zGr^D=r40YqL zuY3=#N%zmmI~V>bC1P_qvEj(K;&OM4Hbje{<5;d&EN}x=sFAQ{Y#FKblN%BNSFp#__u7mL$0%+IJIKw;fphr z$7`CGZcCVaC!ugQkiT3N9@-YH!7^CXC&yHtdJy$Ko@JFZ725PGs?4M`B%*)l`gb+o zJt&IyGaGLlH?`P>gG7;=h}JsD@N`Y)kJFJ&7g~_BZkI(`QhY=s-PsOz_TJ#Tl$_55n37OLbv%4_ zyVgOfzvLf5*y86W*cfd}ki)9ke|-f)r`H9G8cg&UJMd7~uh*d^OMWxhBUqebmtGX; zrm~5mb|^AGgG)C=QBp~-UR&wNL+c|*BRv?gX|MNs9@tu29}PG3UD0`&ZB8t>WX zV=o$fTL}Cfz0>$y;~a(dzABE&k^Bkw;-ed{J41TK&D_CW*xfa^)Vikuxt1p4C2w!J zNAF^@AI}TcVI0Shg!N`O9Rh+ix2F)7$GoXT_DY1(R1b1m^4z_O_#z&*n*td$W z(;xm;iR>+ZF3~csmkKUchKT8A~j({R6EU0IkvjP z-9Hj7nnFKi1pYdiH6iQsW`c*5&Qp{daA&MJQo`g7O>haFZ~w)|?jM>=?!V`nAn1&m zmSW${DlyG?>6Sb_Im1Qx;%(B1rqI)Q(kIo`)=Nl+(Jii4lrtcng>O4Pcom1@p z#<&pN3prj1l32{$m}E$+{r0Cq)um$P+#omaYCk2w1VNcD}Y(b?sv z9+p0(+-IL)1^m2i$hx-Y4_zs$ZrE$|v00I-8U>dtsUD|tW_cO4`GSj|4#uQd{y(qk zuuOM4?&=dxA>XUcvUb~G!2VGmN)_vOPv}dU-TYpYo;}fomEG1EXi9(_yK>)HPdaZn zo;;x2uE*$nwb2X#E(;B`ZTxgwHUgZQ-%THrdC9!`N8~jQc5u~wR=+iiM0G6qNh^iu zhnNWqGL!2N$#gSzo6VlE9lc>LW_ zc(;vhkR6lk+iDfu@J}i{YkhD=G5{~ZyMUzZrT@1dz9{1F+yH&W|7Q!liwxxJ8}y}~ JU#Ru>`U~6+4E_KB literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.2-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..59e68af7ae0146e24ed29642605607257141024a GIT binary patch literal 1653 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 C8X`{s literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.6-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.6-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e0358444c074c932afbaae1d564c03dd861aac65 GIT binary patch literal 1665 zcma)-X*Ao30>%GCh}zdNwv1gF(UwY7i`qJBZ5hTkNNUN{nh~srm;q*GvD7i@7@o;bI-Zof1WNN5gR}lkOr;>TK#CbxyT#? z13;!K0O$h%5FL9B9gYsen4E&aVW(i&*r?#J>2- zZ^E*4Ob6Z^?4h~?y$h{Y@=2uM%d*?!->VHeTFG$9%5Nn!1Z<_y z$Y-Amdd~>lZwlg_GUdqdmP=_c+(|o0I@-_@Nd!FxV3zxyp%H`h5Aq{#K#16(&d9A4}+4uvO-OD zbO-)0KT`KzVq6(E(aG_LX1!defeZkUg}NabpKABsoaqPc|;89h=de^n9#v z&vomZ5v1Ly%=afn;7ga8pn{`-`}gu%9W5!dWp(XA54UqdR<7<@$C^kMQV&WgYPO@z zPqRFwb<*s%w(-(}CCT(r0-!~G$_a>de}xPN11$6f*dXrP9dA|8|=L)5Ds zAAGBWc3V9Z-G_ZTztvzmlJS@jM(cYG`T)rWxYJ(D@k>_Qfq`oM8z|0H$^-hj7 zqne9sznI{;s^BOd5qOs`1=7sBHDUUlLu2kNiw;yn4wK>RPU+u}D@3-`Zb%bu+uPc-o zZ!lU(EL}hC`a+&g=c`eoDOJay$#En9&a`~p-wY{%3MwQgi4uZHrPHO#=ES1DsUyXk zg}Ub~w~dpmlKU-ub-m4qG)S%DPLD7TZaUj!itws@K{;0<5TGMcFM6I|L) z9P-VOVvYl{HX^4}w_>s?%N|`7Y@ilC;%q;V4b1aU&EUS}H%iiZ6%Ks<<1dxbHAM5_ zAtHVyj(eJ408wSK+n@rrY`Z(01RIl?Tu4-F=+e?axbaiMRZ`AfTe`jUS(v z-K#{n*(aC(*(1K$<5)sRVIc|ONLjgJl(1Ag%sVOBLQot^l~BYaKntT2@%7@1O$FT( zR;5m}_nnV#DQH#|YZc4AQma{oF2Aph=y7?bS9K^v>%Ln!m(pNsF4w&NwAQ#1xEg;V z%W;dEc8{@i2lq;6yJrHLy+>#_Ij_@?OcYzMhSvR8P_!iI$V)j}FV3VJ8;f3cE@GJv zTzFyg7ZUbHk#J~%I<|F@e>;|nD(S=9x=p@{3VGkP7Wdq`U%V`8CoX)qzuKV_Bbggy zVm-Z*#833ts5qaT`O2eogO|r*889n%KppaEs(n?`!33QJAq}|>BXK|!?Re9vhNHyv zVGsBg)t@}ECeEE%?9KBhgji))tu3_F$w)gc&F&`d8D`gKsO-hun%DRSg1l5{^`EGB z+8?Loa+}gSmaFb~IrrqcBP6l8+iPd&t%l!i^v3J(E+4g}oh0Jw`Ve;Env!YQ&0x{B zyN-+VtIl-rlQMPRQWU6|)2INd=j+O=s(_-Xv zk;Rzpu(t6EtKq>EWBfjvScT)1Eunj$Q>_d&RX-}xTC zao?((Y5UdBBF0a!THER6=^`X-1Nz@$`09p#lOgmE{y$B4x`0Lhc?*55_g8-N@A@0! C{~RI! literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.7-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f9d8875462c938fd9a0c397dcc7aa7c3364be03c GIT binary patch literal 1666 zcma)-X*8P&1BKs6W1CW<)EYHPS42pSZ3smaMNaKiYhvFbQ(LK0Be6so)n+V}&<=bm%_KQ0d7BNl)NAPr!ynYzgks0~~Q z0AwfwfHnXCQ8B?`xG*eU2d-U_YegXKP(6Ad=-SGIBXo({bz!w10 z0l=I{3^CXx~Z6V!^WVG0H!ykHtS%&|h1u`~ZA{jBaqHMJ}Zx#Tixy zE4rDQdc6ZX!j%2n$v*x&eL+^>1Z@&*%lw%sG@*F#!JU@45tV)$(_`zuD-8djcKAs? zAe6qA&oT%fP&5p2+Me<}w14xh;pDhdmIT%-!B!yfw#Oaowl9fqOq>@G{v_kbirJaZq!6ubq zK8M{_X-z$|)t^LWjCgU0E9)jhR5{U=riE@agHeT*>H8A$6O4SVOjzZ-&4yATJ}uq> zkOfxRIJ17)8)KaI2ltdK&L=1Vr0yQVe~_%pofG+GP3T&H^vyREQx-ZBZhANtVt+f1 zD4mpfWp_c_X|oP`=+xO|D`EX=cjwRk;m+qeSXPpu4Z<~mKhm6wf?w7 zqq-^Ce{rKD5jFK<5K+l4OyZ$dqpx7C8kf{!-BcX4@}1Y?278MV#(Dx0F-F~LYD}(0 zRM>c_>n<{O@nKg}{5LTu{8pAbGl^DHj4u-d%eE#f6b%y8yPR*S-Xv|ZX>e9-!J|v6 z`|+he84o)I^jieq_t2J%*}`$umzE_&_6TC0b=Xr8d?(^(O3je=sNOu8QORIzoUv+q zq9@3`e-8e%BKpz`obAe--{X6)GeYYR#)@Of8eBhBuaqdCzjagFTfP)LJhc+;iuXmU zQ_}jdvXA)CUwM1e3JckN@$&e;gWg3_*_<9ZtEYqfqMN7(*?67js)TW5ghuUY$)?EZ zf$lYL`DxW{DXilW`_`PEBDw=jn`VyK+fw101=J%x&KI0EL9_cxDM=BOTQ%e`4Fjlq z;)Kj!GYhMj3EaMjRorxdn3+3CrYRgHhAKf83(zp!{vr@v_-^_3pgEPNw_O`V;FJCMvEpRSS>n0`2-kkoU z*=dY=6c*K(A~_`7%dL6&zLcyqS6f}D;AkOW9?#;2(^YWGm>lJGWQL~>nHhwkY)m69Pv^>;HUp9)L_ZneY z?RvC4ruJQjS8_&&YRF>YZeg6Uyi;eRCL#0QQsBJ~%e%bm-IfKJM(y5|wXLDJ;9Tu_mdCB@7bc>_aKB{3&!qBNRHilP0A2! zgG!4Uo9|#utUGxvr)Km)XCd(EBAPyH)HRiIK=HT}ce>eeGC~2m=`7^r0MgZb=tuFO zeJB4&#dg2943}L8)nU>67mzwJ4gZKE+IN#E89rlYKFbeYEjaM^6?X&oh#$^OxwlCP zIzmp4{(R2e`C$c>!%SlxPY$*@t++7{FUI_MV)eS|#~F0`ryum+KzQl{g+TF;pftG*l+kD?JKUpZd^2-jekf zx^3kXf9$kmKRaA|M^JQe0Et+D|F;>w%i+JIgZ{<;=Lr`Fi0Hp>(Dz>bPR0M$KZI5e AqW}N^ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..ddcc81093f4290ace4ce64e9b76a3b376e538c85 GIT binary patch literal 1660 zcma)-eK^wz0LOnbTk|&OUF6-Yk`2Sk>rHuC#9ZesY8k_1jFH#nWqCdFUMhEPl$Ugc ztUAt|GR(_r%*&-BM_qZD?D8&G_y0Z5eZPNvp6~N~|Nju&z>*Gt1ONw42ikaVQ3_~$ z2mnOx2LK}g0I1O+lu!ye*2ENrMVX@L(UC-QA}u;Lju;dh98S4NMn%x0qogDuz*zuD z2LQX=+%U`zCWbY_e`q6D#f_pMy0o(jztgbSnV@&7nu$OBJOjLgjDHfsB~CCbVUHa@ zFQJ$QXzsw)O3H3Va=`hmzFECKhF!CbVnX>~<>d!40?mFW8~ML)sPbjB_TH%k zg|o$lT^LGSkn#49{!hca zo2_CFvzHV|%r%aSfRHXonc=ts7mLO8z?AG#itG+%f`1ii{2hmw7_Zx;M`@)|Jx{1ndrFLHTEXPa0`hxn#BW#k628*XN zM^Ha}j&J(|EZ*|Y+>JTrTzx=b{0Gn_M$v*{yK35Rby|wXo-cM>-gKlON|@?GgM8t( z0JdOnEm@ISdaAPq&QuT6M?U5>49vLJc-Hx+MohjtLxbUWEb5Pg2|K9dI&&c$Pv$Az z%ce865YPh;tr4IAkl}UL_q4_SJXe18qRp*Io$7i-nvTUGF6{Q_WKY}XPUz|bq9ZM?n_vqeP z)g^d&m~>iwoU;w-^|nlM&)@BsX>v4;x(tHoOf)64F+XCe?88s-d05hReogB8aiM=PnwVVE|hd_m*6CY=o8FPG(QmNW`-I9Z1W-T|KW6^(^ z7x@IEDm?FFV%_on1725KL|M)l~4MPHQ%a#I4bO)A#E$}Jla{UT2^+o z!bd|*M(u5aNRPr^{?#E;d;ZNlqOIp{+Fh@s#ZvvGsf$LbE*0pFTfy8t3D>M5QP4K3`^%Io{2 z)HdlOCM9u?CJt$eRLLMGLhS~ZC>fO(kv`l1_E&`bET>rMLoweYJfUN8R@#6T`Gj3? u*XZLbgWbS=V+1#lgai1$o$y5q|0W&u75~o=1UCru>l^f?-+!Uvzv~~zkoEfj literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.9-compact.zip b/tests/ast-parsing/compile/modifier-0.7.0.sol-0.8.9-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..ebd1e7f232b2f2e644f42cf318e08cb7fa390be1 GIT binary patch literal 1671 zcma)-dpOgJ1IE7_bItg6Zy zS@pns90CBP`T$@70KjSLDRLZ{M7Og?xFGBiDbyq)DJ_{wKSMl8k4+%|NJ1p0P$|mt z5Fio&E&zZ#ixuy+Uo#3wgEi2Ndj` z^^H=C=k6lnk||Q~T()v<=VHe3XxXz^Pr0)e`Cm!g>)kZZmh_kAKBkQr^!d1{i+|q# zLKVI@t8+4;alL@=ut)F*^UjTEK#lF|r2=1$smh0L@QU4}!_wQxb6(lkB7ANsL@1+z zm(}!|00GRp!-M75gWl+bek<`F^ubnzTFhWk@4a8UCpRIL`7=)Bg`@7~io^T(KaI_Q zAiXaeMCX{2vz$kV>bje}Z2lX*BDS@2vbCqs2C`(clYzX6itCSubW}tk4~yYljwOle zD1XCL$_=d5It(;jaldPC_TuVbHU()l;BB5;mk7{1@azr{m5YW*1OI~?JF`eP&a)xj zsT5%-macw%W0hAMrk$SPa+D94ri2(4d6BGD25JQxwXdA=Sr&yfQMP*hg7-C3)Lz@#l&{#~-4Zluo!?mT9lmEjbRW23B9@{g z>AQto80{WCq#YNq&;rX)nNAsMv<;BnUlHRCBh4Awf;gk=vu~@>uMgo3gaH85n}>7Z{^M~(pZ`dO}kfUWd0P(5a}tTf?T3J z*jsfglh3Wff-2w5sRoH38ym|1o&{r*OO0wC{Vv?KwM?lT+JskR`=+->J{^(~v%||3 za@MeMhK^V4qxb1D=U*Xp7<+$K<|gQK;vLq#W+MM2a5KYDOkUiMu!Lsdt;jTaBiR{N zzooi5JKV9kHBMpv(Hfw+-fp0d_C?s$E=ZL+)_gQyZ$6t#3izcf5}HT1p^Ts|_2?_S z!`~9zo^3AOALMelCb-Ie$0dwa~Sp>mAsq%A6Vf6=IG0`Hyc485$>o$kZc5i^~uZWx7ku{rR#0XmA>BJd^A|LPE&CD&#>)rZ57K zOb_JL*iRCEOVa@H9fPSjr%L*uxR_V0CN1(`+G!e@VF{|!=jX4m@4Q{4kZ&}wGVd45 zHk0k0Hi_ z+8A&o15m!})QQzT)Yph^ulbbs^1G5Z9|sDkTTvf)hdQu{fggc`Ac<;io0g*4qSmB* zs_{b8Dg0zz_@%5UZ`EG{tfZW*?{$Nt6-9EP(PTZ3qT80#=7PZH&o@KL7#%4gd;VJ5_b7cz~b-005?u7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3Lu*272BQg)r^|#@7lwJExX1Ps4UYXg&F0<(ict_;ONcm zSSgcS_!szdte}5-Y8sFg`@qGVDOY@B``xL z)e-*e{+co(O-hQ=I!d>YdR`hB+0x zV}U*jvn{Y0(g%!|xnXKfz<_xK-bJL2XI`Elj20!h84`LFF&r9Kqgu3$CFYEoxl3Y#KQS4$`^f5+jWQK08M zsef-j2a1IziK)~AZQ*&IcaWs8IU}H|Ib}auuyH)l`I8oHH(7&VIfOR*tQZE-#=wL^kAQ`FUZ@P z+5aJ736X6ZlA6RMwR&L#-be+P)(!L~JxCrZysMm?E_=2TDt`0`MAh?pQkFBX8obYx z0&Il)p~%c;k*H6c_DW+_tjkrmGvKebAxpXkHGzLNdYtsEn0%*BUvJ2!lZ(GNF|Jdd z*C8{e;2pX2ck&;5N$2mcir^2JbGo)}bM$6sk*r?7zd$4(is2b&kI^S(NhbkK*l+`U z3hfs1Q^2i%K`CpAbtF13C$00NA% zJYIScy}Z-s&iQEFtH?O+*g5^Kb-4h?FSiU1IfL%3AX0lQ52nSuKvps3Eu>E7 zpby5nA&cRRYV#e^9c0{Iu}NYGH!=v-)^vXX7L~7rtvBf_F(wYO$Q&%tgy;sXEx0077@$$tO< delta 957 zcmV;u148`D2)GCvP)h>@KL7#%4ge{0a8!h58V!yE000CI001PD4Fo5VLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=I6Ez@H7&Vg4C**{s)}1_T$1V6RGu^VtQ8h z>Dpk3-k(ZGRpe_^eumLCr|y3Yuc&hqk^Y?-^6p~Drhhy@JaYU2BS`r0)PKO1-mq>$ z5MZ=jvk=$qXN}p9xsoAJJW9LUKa6X*(*60nb?HSHU0`KfUkvv^Wi)km{ZGh1sS@LFW$ZnUY5+dldMlXttrsozZlEpGK7}k!*27wbB{l@S>JrCPJi_HwAvX5~IUL zaw&f;9GQ^eMHM*umA)#rcl~M3oB!yLuGAi19MbxnXNPu(_r-I1;?1KzZt%!Q79V$y z!OZl3IN?2_Q7O_Kc#(fq?C(_;W7$~EY8K$qC7G%Zw_#~$9%@7bBZ7vF;8NgwW|U$U z8D)CXf0VsJ#(@S)^Z)+jh)jJSmP==;%l|F-o~%QfdnkPj6a50tg0=_nKCK?4qUx8I zCVU6K8>|6G5^O#9a6ke>x575^`yw>%%A_061#Y-@3#v@pt&xAhSEPac-9%AB0}07N zj@%Ud@Nl?Ivf%1G5i_aQSTbCye2J(Oca25qk9DrkSDp*FpH%)#8Ed)Uap5uz@@!@$ z=XN@3ZSkjR4v5C&kw4!MAXu}@6Zx>77ybJzMACcKD_*x-K${Uuy8*n#f1ikRzIm04 z57ob^PmyD>Ed75G;aRI-L`=HtU3CT_o=dLCAI-%3cd<*2V-6wC2SGUZyIq#^g}x_k z^2VA6wLr2_!|7l)Amulm7j5xRa$+_9n1w07jQR?AEBW*T=`n#GcRGD6kYP!WV~e*! zu?mWuqH;759G>>vS*UEnB<)86h)g>0XEc>PtOOvLCBlE1gdmN4H<;X#0tp)s&`{SE znO^opH~}3Yf?u%`Ij-MglZSADyW;$ca1pi?`iGoVm)pQNgc%k};!A&g_cb3XOgL~d z!-ye3oIOVT@KL7#%4gd;VJ5^5Xa(A2q005>A001PD`~xSELL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lu*272BQg)r^|#@7lwJExX1Ps4UYXg&F0< z(ict_;ONcmSSgcS_!szdte}5-Y8sFg`@qG zVDOY@B``xL)e-*e{+co)126to&fA*uNKRTf75EXio1sdEhTS9ezu!vsQEdI~+q>0G z4yf_w)v*AA^$NWh&5|Qv7%kHI_rL&eXB$Gd`Q!mWI@+nnJE!zN29|&M$p6ur75Wut zZcMncCJ69#6SBf|_fhUIrDF~XIF*mky;MnXtY2-A?I<9vTrj(b%W;6P6^A;nvm4ub zi53~4crub)@*el770C4088yf8vLes+f;rMli#_uU&TE1;x$V{0V`9A*4wW|8_C?{O z{^nWWHqq`st%xLh6*zxk!+M$Vp|Uo2zN*d)e=qf%{Bh$MJb@N-d*}pXK3s+GkN32+ zH^oPDK<>n@(F`Y9tgZHH2IoG+Ui|P1i~f^|sBu)UJ1o6zaU0g69F9%@q|17uT(Z*@ z@!XVG)yGH0IW#;m^#6_wV`jRW%M37NC(YErW_X>sSr%TlSPXw@a(Ou8>*V02zz_{H z^;#JqFPU5iWvUsJ5PW}CH|O`lc$8kuQRZ0zbpb_XkT-hq|H$9!Nh61#nzUR1W+u2X zHhU^eynW@g9WdvDJyXuC8-AuW9gqU?+)u(+fai^kuZ!^I9~?0bCH~I&9A&`#q8cp- z2?v)>Q)K;wz?gsLvG(k4ND3HC%yJ^=CZFupmTRmef(?F} zZ`#9QeCmHn=;g$7#qRAX?cH|pz-U9#t005>c-Io9W delta 950 zcmV;n14;bG2)PIsP)h>@KL7#%4ge{0a8yN!UzU#p000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=I6Ez@H7&Vg4C**{s)}1_T$1V6RGu^VtQ8h>Dpk3-k(ZG zRpe_^eumLCr|y3Yuc&hqk^Y?-^6p~Drhhy@JaYU2BS`r0)PKO1-mq>$5MZ=jvk=$q zXN}p9xn-Iv$w{mC`~fP?4i4+h3^zmW0NWx$MFGBlpqZT*EvUY@WVE$FheZL$fC~NU z&EPI4tR%?@R`KrYefF8FY5_FT>CB<6Jc-ePzZmMk<$QnJxj)`l;DE&{q>zc__5j5j zp;=HVGznYH>WiEoK;Knnf?hBV7}e8D#RL5S6jYU_EMrOG2WnV=bq-uU@!*_F4!@hI zx}$}#8CeXLB+RuGdO_kk(+B!T>#8}Y$;mWF*k~nNO)Ylp^9?*5_tUxwBy_Zt3Nx>zC1!qT`5z=t99 z%xz!O?Xt0OWn}_T7@V~z*CH1dNGDeLCK#aptsH;bKj(2VCQ!Z=k`TctTt~$JvPvjc z)-OzLkV;&JF^t_gn40cdS1Hd$wM*N&;4W_pcdl?7Adry&CBpGc>qV$s7uaV0!s?nNgbeu6G0&Sq%x^z| z*je`;OnE}o5ORy>6>xI!e2UtSO!9zJ_KmY)_=Pp`q9|%TAuD5tl^jw>XY6l@-7TA5 z*)QxH_h!NI{yI}?=KiOsl}^a$p$X>>nVx@P7uZ9-^$4+NiSbwWe;V9KM(Jn5joe$d zbho-blm~-#plA1V3@LA^Ee6SDeB%QI?yz0`xs)bvxS7a%r_MuVS*|hW_my*h6w~I| z=QuzREz_x-so)%tMVfJe3FO YR7HtjmX8Af00fiw14#za0{{R30Dkw)SO5S3 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.1-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.1-compact.zip index 69a7a8fe4455ba4b6f5b6219ea72e05dd427d7f3..38729e07678f7cf3842bf81f29343939f5cb3e5a 100644 GIT binary patch delta 970 zcmV;*12z1-2*n5+P)h>@KL7#%4gd>WJ5|fMsw0~N005>A001PD{{ttHLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lyn{1n8tZ&G0fqmqSNxCuM+fK+L^ay!!m2 z&89U<(PQ1V2|D*d&Wb~+EscNrtVZ8N3*`mu54t%q?|7e=HMC8^5_z90*N)}V=?Q$n zjnp~d;c6%u98)&)Vw#uOhBfEIj27_NkdcW2Ts8R#(4r5$kwBO${*Xg-#_Ank@hHLY zovnXX5zS3;rdKjW)zJ`UUoA8NpQXLtK55I=<#Y^vI9q}7@Q^oeoKb&vD>qtpP|`vt z7oKF!*LHx3+#se2SjzVUb4BTkbrV<+#S5EUv{9ebeKeR5>3@(IH$0Z0i@Um7XPm%j z86|m8-Dq*v_jaPR;)MA&)6i9z%+~yfJ|@2nUgE{5l7n_%o z+LbHk#BU9}#fajyMeeKxwMB#(wHhV{vq{^C z=?|TzcreVZ`xR7sLywykuj}ZnX+EHgiWHn?d5DDaHvmLx#PIk^%Jd*Rfd7Dg_zY(8 zx_rE%#cWeZj|FzVuLl+QlE;dIj4 zeEN~)s@*|;EFh7I=|?r;1q8)5bS?KN04@(d-gy#Tkx_eO-qx264bjV%hRa{}X)M4U z2hKNLES<{COV`$|CRPj|D5PICam&NC z62x95tzOf>9Q(>EA~FFEazk3U^I^#xFJ1VVUs$z`H{$1sRW98p9$C`(_#o2HGUP-5 s=1P1eP)ip90zU&k00ICG01I3@Rm-`mBbx&N0H%}e14#zm0{{R302lwx$^ZZW delta 953 zcmV;q14jJC2)qavP)h>@KL7#%4ge{0a8&EQByN%e000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=Ih2N(jG!aE_R(^oyF3+vAm}yxxtJPx%XIK8cVvo=dHYk zw5qi%#sgrkO{{;Y_uf38kO?*|c6D|a$W@*K zg8?g1i;Y=wGtoQI``u{yPjK#T{7CfLUs4Pa6aq*U4jTs>(rUSm@|eJ-Cy=RqGEwuN z8&+X9cpC?F=)cjg$@IO-5tM!pC&_>P96tDdJ1y08)_#BXN2}Pc@ZX^=-@?%+W*0V| zf}}c|$RFr6OQCbSi^rg^ldQjrOS)#%cXO+w#f0Qt({K^Qlf{TYnW`RMiWXT0aDt*^ zfWv-|#BgeTeW1ynxlTgV!ygAqhedsBL=Wk6R*j8w6!Xy;E)y@rF zf|k4r1(<(UKRgr;QYTxIMx3{%^uh_CO?N?-<0GM}%6_&Kqv?paQ!+WiG}|)-Vhj=> zXgQ@!kx*b<9ueXb4L{Mbqk@r}&}ctgyHNCeP^`iISY2T~@g3-V1`lAa2!Y@(Ou}QS zR|}{&9iemdzcYe}(8~6j?-h`EoU$STN-4HlKh}T789|;eiFzI9tS}JEhQMmKWP#)G zeu$q9Pe4^K2OlSUIlTT*QHfEE8gZTy)6jg2h59%}y;>}&nWs3PFUj(dyG8}FLP~H} z37S?b_K*Btya5+t{`N4vU22c8@NP02xFjaRiX?@06eahVH?=?d01SbMLvQ^BnosyT z)DeI3;P}nWS=b!SaymcZgBV1dc-zb(%(AlMsr}v?K3WDZlPR-0SOyGd#fkv3O*2t0=+TmjyO00s#e^GBO928u13v%)01gfS bDRXdC>%Jszk^=w$1e5jyNe0vd00000pHan8 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.1-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.1-legacy.zip index 26988bdc62bf7537702adc1529546dfac39a3855..46a1a7d69db5f804960cea642fcd84ba44024dff 100644 GIT binary patch delta 969 zcmV;)12+7-2*d~*P)h>@KL7#%4gd>WJ5>Tk1NE8%005>A001PD{sSkGLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lyn{1n8tZ&G0fqmqSNxCuM+fK+L^ay!!m2 z&89U<(PQ1V2|D*d&Wb~+EscNrtVZ8N3*`mu54t%q?|7e=HMC8^5_z90*N)}V=?Q$n zjnp~d;c6%u98)&)Vw#uN;}G_Uim8KOM4qAB0T3C!kt9&nl>>ol1ygE4I0}ChjubnZ zV7V1+G4YJbG~9B~gUX8H2HgxQ)~$3q*!Q~_ML$_-<)t?Rz*E!hVRe6t8^vM6-)fuR zQ2%*kXDEJ%%z}=s7t$HP#+ShRQigxmTk+Bk zHd)h=oTp?$LbO*x>NbD$x00pn{xc<25Akc34K;%o@|ipJnom+SG5vMrN95 z0#7SHKv~v%QQ^Wu`*-^i;-f%EcR|A(z~6{RrsFu4sx^4Of3CDZ1oow?@+wOSP@U z4)Py_mO!0=fn+N7&V&D6Qw={ii>b_@B8b@3*)x(nXiK}e79P(ldE&7U&2E;@3vYX! z&ASeNlKlc7EOiVlWKmZ3k~xrH7RbyU?E7k5eXzr8!{9m#gOjq|5jC>V!Vn3hj?1ZW zCj_<&Yv(}{iok#6@fA1Q-76Pr^gcPsKC=6dl(Qa~0-s7p2azE*s9%_Ft>VBeE!{h< zYiB{-B3(w2$uCvT6}X{&B~_E^vi+UVzC8wVS3j=0+%I<1LXM39x#t304bb5m6pV_O z>67O=10#DhIG_dcFfuyyk9cTB|F%s~JlHQd=fB*ex^REAWl%fL-64%)XgomB4STm! zHzTLJ{KH0P_M})AHTvtLTU}Lf{cc$usiaR3IW7YFNI)4kE8tcK==2b8j*1~9+zHon zZi57YP=z5^QxTDmihigGI=E=H78d9xf}O@KL7#%4ge{0a8&L(N_vq4000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=Ih2N(jG!aE_R(^oyF3+vAm}yxxtJPx%XIK8cVvo=dHYk zw5qi%#sgrkO{{;Y_uf38kO?*|c6D|a$W@*K zg8?g1i@3Frm?Vgy$bE`M6=`#9V(&*m16W$`D=*CHcY9C+6sd~c%L>fIq_J9s*LM|4 z_KGf{0jS=;Z{#a$u>LCjLkD35R68RN3Q@Wt9!yi=(S3hAILnc*5ww#9Jx(o15+k1x z!5ZFF;Hzlc_29_?qlOVG+quj70IB6J2c0Cg#jniUhc2);?HDB5B`T;k#o)n5{Ku5* zeh4RjdiCY;@KLk>eQ-WLE;u+{quJ04Jh@RnkE*?=7br%}m3O_K6C?MTXMM9i?7>m< z7-;C_d8mILEriBol>mnpqJFeEKC5ZeD5X9YWchY+5D=QfoeOwUk$B8%+HFTw`LF4h zuYJ|bDzZR*T`52_04xY(AbB^!)lE)cjC~Dus3e6avBwkPb&pUk&W&T1zUn?<)SEd**?lXF|Gw1*|W5DI^nb>=Y%Oqk+eI?WX?7jNLNVo*a;;2vK>2VtYrs@9Ar^1<=E_;CRt z;8RgQ{r@EjOqhuX+!9O?H^3hzJG;q7d56AtxtKz%Y5&_R-V{(v0Rle*KL7#%4gd`) ab8uAdI!bzx0{{R7ll22h2Gauo00011$iV6V diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.10-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.10-compact.zip index c816e1db572b0cd11d4a5e090ac4116e294ef1e4..16f0e36945917e4770934097773e5ebbcf8f081d 100644 GIT binary patch delta 985 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 E0OS+s4gdfE delta 1047 zcmV+y1nB#X36cpLP)h>@KL7#%4ge~1a8zrndjseL002P`001PDPy{EDLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IO&`62kS*-R?7bOp)aZ@3)+Y@hP-i%_xny zenm_f0(0l3@mJ_KP=Y#-BYS@oOip`c*aK>SL8@2b?C^DG7zdzDv~qR&%rwr(!T&LY z4t$b9DyvTxvOEh- z`6@z8x@J0{PF$zJGmQtoi{R;i*fssU-+_diQE=M&yy>sc6*whsW+W^HlGzl6N;|`n zcllVyQU1hNp@{Sqmn&u$?0Sc|E(lEcG_FdF=i8L5nw<{sD1SHYoOS9bWaO6=bG?RP z_^kU13SBO+3ejhlG--e0Egilzy^I)6xt(g&dyLZ-WkfT^A&thj@%ha|SI~WdGXu!pyt07S7|?%GBC6ni*W8BAeGez+ z8Nybb1^Vx3Q@G45;A?Y^E9xm>Xt{s3RetYm#KM>d$Lmv3^VC5cFUb%FSFxN4p*Lab zQ!IlNLx-#ooS{M{wc#8*z+ zf(Up?ZGszC3O9p}S8yv6FyXY}m)%eBjBz*V0~LpZiJC>xKN-rkqEK6xc0olSdXUaG z@VIF$YpP4eP`6*LrP|a_9u+rePh5X7R2QD+N18J`eF0STyw%?& zkYkNZ0zO~ZC5-+AanwFAo@eI6_k$5jyoQX_4yA?a+xegDOn-Og*J-PV#wY(r{VJwJjV{)s;1w)=dR4eaQ5e_UKc& z=>fm@kL~E@h=?FhUIEA6kSzvi!xfV%ZT}xQ2mnw^0Rle*KL7#%4ge~1a8zrndjseL R002RgJ_JbyDg*!k0094Z^UMGM diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.11-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.11-legacy.zip index eb7c8fe70872273de8141f46a6ff0fdf9062970f..9eb504d5352bda077a812a42c82f9477eecf95b5 100644 GIT binary patch delta 1034 zcmV+l1oiup35^LCP)h>@KL7#%4geEeJ5~7|VmRXi002pm7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3LwwZBkl@}`>u|rRIE|*vS*ttSwX%?hY)>X!%zu5N+gJW-0OtckAYE57_#mJ%Km{^8j`Q~r?!)r?-1 zD#(*%ZC`&9u1iCFa3E86-^a6)zb(P0o55qoCFRFQ2#hCL`KDj<9%0d#?h^la{Ajz>Wc=3NLGU14+qZEiVTmLH%3QX1C9H?$F zdcv#~Dxq!AIRT-vrH9p<8wq6CQ_aJc8U~u;jpjzNNA3We!-?=xDg)@u9L`L!b^!5> zG{HNNZh57|VD+p{8t-ll&f6w@#3}#rsSoM%Wdm#g2sH^CBR~59K8o+PXK5GF)q@9S zK=FUd_5{@iN417upv8DZ82SnZlu>1`3rcg!aIVfI}sSZMvp`vZcuX(bznH zDugrargJ}RWMin*xqk+qd?*E~aQ@fr66k-R6ypCtxaxrA&dWOowux)R%F5b>w`eil3u9uCd zT(UYOmesxrd26UPIJF%G?8ZV{JGZ==9*|K4MzA8`^Wd>I-L_mdn8!SnjKvSzLoQ#J z3|^-3p!O@4l9Z!ZN$4p|M3vl)`qP5(c@?_4(^FaRCg`fBRM+-OL!S5)pk`GJ6w4mn zPFdQN&czx2?xq%h|D>ryvrtO`0zU&k00ICG025q0RrwuaIO78V07;WW1W5)Z1ONa4 E0OS+s4gdfE delta 1047 zcmV+y1nB#X36cpLP)h>@KL7#%4ge~1a8zrndjseL002P`001PDPy{EDLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IO&`62kS*-R?7bOp)aZ@3)+Y@hP-i%_xny zenm_f0(0l3@mJ_KP=Y#-BYS@oOip`c*aK>SL8@2b?C^DG7zdzDv~qR&%rwr(!T&LY z4t$b9DyvTxvOEh- z`6@z8x@J0{PF$zJGmQtoi{R;i*fssU-+_diQE=M&yy>sc6*whsW+W^HlGzl6N;|`n zcllVyQU1hNp@{Sqmn&u$?0Sc|E(lEcG_FdF=i8L5nw<{sD1SHYoOS9bWaO6=bG?RP z_^kU13SBO+3ejhlG--e0Egilzy^I)6xt(g&dyLZ-WkfT^A&thj@%ha|SI~WdGXu!pyt07S7|?%GBC6ni*W8BAeGez+ z8Nybb1^Vx3Q@G45;A?Y^E9xm>Xt{s3RetYm#KM>d$Lmv3^VC5cFUb%FSFxN4p*Lab zQ!IlNLx-#ooS{M{wc#8*z+ zf(Up?ZGszC3O9p}S8yv6FyXY}m)%eBjBz*V0~LpZiJC>xKN-rkqEK6xc0olSdXUaG z@VIF$YpP4eP`6*LrP|a_9u+rePh5X7R2QD+N18J`eF0STyw%?& zkYkNZ0zO~ZC5-+AanwFAo@eI6_k$5jyoQX_4yA?a+xegDOn-Og*J-PV#wY(r{VJwJjV{)s;1w)=dR4eaQ5e_UKc& z=>fm@kL~E@h=?FhUIEA6kSzvi!xfV%ZT}xQ2mnw^0Rle*KL7#%4ge~1a8zrndjseL R002RgJ_JbyDg*!k0094Z^UMGM diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.12-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.12-compact.zip index 18b5c0023ed087193598bbd0d7b77d0977a61d74..bda6fe0e3af835c344649cd7b7774a091db58442 100644 GIT binary patch delta 1128 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.12-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.12-legacy.zip index 18b5c0023ed087193598bbd0d7b77d0977a61d74..bda6fe0e3af835c344649cd7b7774a091db58442 100644 GIT binary patch delta 1128 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.13-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.13-compact.zip index 05e511d7919704eaeee8cea5046e0bbc8b75aee9..d0d183716886dc75964045088455ca95e5ec08b4 100644 GIT binary patch delta 1194 zcmV;b1XcTy3XlpHP)h>@KL7#%4geKgJ5?p{9LQz_003K&7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3LwzQQE-T5JUwVWR5E7$ge;Qxf{m2|reqOdz57|0cMU6v zOh9pXNlnt4k_CTOJ9&bf>LowL{SS0Rh}tM!=h=WR6V^?ifgDA((a|+6Z$N!S&q>M* zu9Bi!uyd3Xyk19MfH~m{G8vN*8f()5*)0NES;YNYhp=u2jW~bq?dp&P&44l7c}ri1=2W3A(ZC5E(J_SjB ztLx<18Tu4UrI8VRhXq%^`vgg(h1a8XY~1TA|4-`f)qJQTssC0<#YIVr`YPAq6q8O) ziuQ?PqS${*-;yVjRTV~&rYJ*fDn)@^cbGv`LTPLxQx!QKgmA_0lv#5hYI0RLDVhnb z+%|QDdK!Np!&kNx zd>xHuc6#*)NPJQV@z_@j>~zgm`O>aq;xny273Pxcqz7WJfCxx3i~wrtzxO*|G)ryj z&IX+fm~aTq09plIWH0t9NThAOYq>#qOIUJ}snUouhU?IWD(O7*X3E?t@w0xkceH;f zh(UjKG(Q{2=V>WGIRUhK6zU9hNa~g9E?M&jQGJq^r)P X6_7rn-bs?SR}i7?`A&bY?WnJ*v-{$6iIc%_i#kqIL1d^^6b;C9VIO)DXZQOLbkB>^KxvV1Ia%&t9{Z;O3U zioBc+*6++)8Dv~L0(}<^%Ks!8sz`tAVLGKU1fs|y%GPmRl!CKjw7g9{mZLCfY%BX1%pbP|hKDuf|IJR`pE(|IU)cBv4BM0zU&k z00ICG02N$2RVDBo$Yulp09z3N03-ka00000000000Du7i0001OZ)9m^X=Rh%1T6-r I1ONa40QhAtj{pDw delta 1167 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 A;{X5v diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.14-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.14-compact.zip index db0a0f3fd72bc2533622907311716bc05c162cfa..ff506a00777298b6faaf8f6e03fd4ce8abbae81e 100644 GIT binary patch delta 1170 zcmV;D1a13{3XBRHP)h>@KL7#%4geKgJ5@F^rAJ}}003hV001PD(F7-vLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw!(5yXFr|J=^3B3)c{zjk9zS)PDYRtn^L+ShqajK~?=iUld3MGQ7VB4O@be zwa-?BRNc^G0eKTph&T|2*!c3xNp9_y%GI<&ArZ`_eyVB)>s;#f+8f}&H`($DsXSz_ zgz)g(IrGsc>Sq4fApU<$$y@`b#Rq8+D~7Z0C4#ewG?xPX`Pg5H;zHZ!#GXFe>jG9E zS}34lQ`XH!giQB(jK7Kj187o3|HAs*jMo88>Vq$w^R5#;}voLDWrMyKY@u@=1IHw{ByJ-q43P;lL}TrK13?{T>5Yc-kz zuNk8;G1hHrG=5Lm0)r9D@mStV0u-!8;NE@P3Ss3fo+k2b_K}M&9)pk=ecq-cyPl<% z(Kxt^l{H5>5jyfx`1LR1FDJ-3^0TcYII1h{g<-$I?yrA`J@hCjOvh9)rFi?*AE7EL zKJRswgYj?g5sSRVX-1=oyw8eun0B}OHV-G{b{If?e4d+_zazJ@9YHKP2s47ul1|(c zbW$NC>?MQT8@)kw6soqODPE(>nb!5foPs z$m&&me|@z^&zf$vdNJ%U6xcGfoQ*&lz1KWQq%&NK{cy6d zi3lTg>KS@a0-2px@n$6$be;ueMHCYaKdG+gu`FLPLa$|@4BoHwofwNKJbAd4`6#^L zYO)e7WABC13<rEM`8p30ArKC1W5*@1ONa40PBAzx&QzG delta 1172 zcmV;F1Z(?@3XTdJP)h>@KL7#%4ge~1a8x^C3Or;4003JN001PD&jcrtLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IPNgP^cHe zQod5isPvGl_Fu7b9TOUw0L_2W4+ZzK3j}lYyyoPDRDP#K#9qtss15;mDzzpH)^>#m zTt}XpQDy8B$+yac2L~KQVU&VTSF~227FiqF6i}lPP1>jz^4K}I60>t3d?PU6nKZn* z!43O2L@R&#wgG?`=vs%fv=^rJ?D=dk9GA3uWFou8kpLhy&^o{xNPvHr(3ydc=42M( zg5NB&ZEVkp%Z5tL^`amm)14?#l)$(jgkx&$g3t;evu9AWd^I@!Vp2U~VkvB0V_POF zDCzEfuUb1A_wZehR)t`E9ewg1@=MNw&_m(masB5k!2YJrQ6-QxTaDunN-y4rkqDq& zrA2{}B-=Q8?W5A74ugMYXo_kTg@5ry7eTfULKZmCsKL+dD6sdHr#3fstrU$k7?Dt)=L z2{OSRk*RTSFzFEEr@Y%WmIs*hdo)i4j2VOW6akcO8LQ+r7_WaSu^OdZqYk};V%>nw zZ^D6)ZqIn7tR zwcvpb_iA($z7i*2j*okE{42l|ZsoD_>?CE+1X9FTn7g@P3xj7z)r+vtE{YZ@u9I0@ zTI$kiUY>dSvsESK@j-?}&8&SFo{8%;qEfIT7`ASNLd<`RV*d$d5PPS zwd!N4q{1c_e6k(`d2@LW)|*S^>%v~gK{#W8F^NCkc(ijwNi%6zKhPocq+iAUj9Jb< zb575;;GZB+lcCmuZOf9|%xJ2M0!mt}76SXRl=|@Ax%XhUHbOx_MUR)QU_m)QPpYaV zfG@NNm042M230-3j;k5*Gq)NuchEzQ&CrcZ4L>4*wB7d`A+jwqdgJAYu zP}MNk3`5ED>Kehw!z+`8cn5 z#!=f8x|nYtL?}@v@`go=D%MO;GmS&z)VT*m=pJDm0tP_=xyTlG3K4fz z1_>k1f-?Jd{023As=OmjGtrW4p!~pjEjShH)14cGee5)B`^dgz*CDKKD-Hj;?ceZF mO928u13v%)01f~ub8u8UVG2BC1ONbAlf48<2Bri6000226)C0w diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.14-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.14-legacy.zip index d42f602b7dc537bff43b2fa5b0298331e829afd5..61a37cac32dd47f2c13fabc045c031ea4d462897 100644 GIT binary patch delta 1139 zcmV-(1dRLc3GE3RP)h>@KL7#%4geNhJ5})>K#4;H003tZ001PDu>>cPLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw!(5yYO8-(cA(V)L}eqY`|jX*M!_jxODI)I3R>5)LK$I0^BXfy z*?*OJ(p_=BI@N0be)q4ei`p@Lw;=ohOB~$v6GLS&!54BBU^d|DDfF$lXX$L7d~-j# z>DEHFbQgH=zu}{3DM2-SV?F*J3TXLK;PQpODd=m}mF{W)KE=Clmj{bb9E5Uf+;H(ZLJ>{w(HGq-@5(Dn6{us*L^PM-f zv6!c{lL!L<_LF}=o~2)l!xv9)#wwOl&cEB{AauS?w>>)%QZYEtiH$S_q>mkL=qcTq z3lAw-$&!z@JMF{qcHneg1iDS)DN3!y0_05DjE1d%EY>gtCoRZ#*6#7b2NuQNn1Nu; zI((tXFqjEcRCkP|?+?6w$Wa>|p7UDc_7FY;f|;qzKK_5g6Uy$TEYZ;O_1bikLPYBs z12@tRCw^eRJDxvqSXZDDst%mOCd)9 z<^epz@?Io;t1sae)tM=1Q4hW53Za)p9P9r1vg4|DBd$f~HdN?ZR)o}SPK@Z6|Iy&# z7A)BCHz|MVWiomRNB4z|&|0cEqsbNymRt0FN#G*x6gO%#Pb~-Ez}@>y5(WeHm{eQ~ zZUD^?;2y;3zQvq0YdI5(1c0UD9^PmkzDeVC2ZUhMel}=O!wDu-hFVY-6n=KWfpC6h z*D%LqCH4z=8R_cWYc~9!9#yz~^&>ZrgYR0e4;?^{2XS6Yvj9uxv-8`G0>q}Knd*!8 zz+kk2K|fnl1G$9BjsMUoNwiQ)0Rle*KL7#%4geNhJ5})>K#4;H003u`p9Dz;g#-Wq F0075x6iNU9 delta 1140 zcmV-)1dIFa3GN9SP)h>@KL7#%4gf22a8&q;aEC+$003VR001PDummTOLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IPNgP^p9S zX@9WSI^C73Q=WeWw!f{^KjnoxPdF0;zDIv^;MdTYVId%Qe_2k*LB>iT^_ycEjqN{S4s5WE z1|vAs`bR*C;kmUd2Z4WGe&&x@g9+6Tx2sQ;cz#KBCJg3C_>Gvo1|r5Ors3iYn4 zi0*ARe7t>i1It@!g5RvtdKg>y#N&kqoz=|M083Nz5CWoNpH~!Pp|cVR_9>}0>tosO z-NnUD%j;y_111xghjJJ!XmkY<10ZvN zpQnM5B@OT^5C4BrCGC@iavf%At|qtU-oP!`n)hz=-(Y~DJ9q;%+X{D=Z5FiV1;vLU z{^Qd|wjKDJlkb(r!K4mG=+a?xOg?M2(p^xXVmY^hTS6pLnh)65M4&gWS?y^YcOQMy z(6EvQzD>h(QuTBlsK#%JmYoG^+OG9V13~bWIk>I={_1~q&i_PPZ+AQfNyZ5L)Fbw- zUpiO_B2nx3L|%OB?=Vu|KWDpE8B<$F?^3Pp;W)_HZ~(9~0N!0uT)A3D;FnL7X|9lc zh5|Mo8Y94bVwLc>zZTlAIc%#ca^&fn*7xaO5mhiXGb9Wp19nvEDt(^fu6OE7O)jB)t=e|0`qV94`>(tGa(F-S|T5*1RH1LU%gLit8)iuF9 zui;f{Srww}wQOoyBZ(tH&9Fs5>f0pNWIvgnqPRg@kCKXjzYQ?3=_6u8M0^1SXc6|Y z7lCkaWCS#8?8jdlx7z=KxnO`$O928u13v%)01f~vb8uAnig1TS1ONbElb!@g28ILx G00027RxBL= diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.15-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.15-compact.zip index 0483a7aab88d630298ccfdfc17dd38964d6c4f22..062329dc3d1b323d96f0477a745bd0f19702c758 100644 GIT binary patch delta 1170 zcmV;D1a13{3XBRHP)h>@KL7#%4geNhJ5>Y-@qS_i003hV001PD(F7-vLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw$KRh&S*^;SitZ0wqe(O7sL8;uxk8V3mf zFRpu0f~!R1Z*Cir9&9NZ6C!_TBfSIg2-L?iaRTQXPt}L~!*A;6oIa!&RYfjr6AntY zZhRk$#?2NFi>Kpl{L{qeeu18L1A$LQ@IKo)4Wcs>fddg&vo6VLUok5Wz3oij^=E+` zMh6x)5U{v2`GXT>A5ojo-Y#N4a#{M}@G^W3bqajO`D4{%Jc~SQOTE z4#Ra{Fp(WKsrp~R>TqP_v4xGyw+l4fsc}!&V6rUvDi5$=J-JKg92qWDYflH4oq{6@ z0QoV)SioK=@v^l0~sa0LGZsJzo#dY>u;YISM#=W~R)tECb2r5jr!M%2K>3viKVROI%+)gnGVlg#d=Kk? z(?JT>tg1QE7iEKBpL_CEBw#jmkRT1^(xTWFS$YZz#o56lKyyuh5cS!Gnzi{K7O`9` zi2>oc-wf-@guq*VoRIn5mfeMkNl@hpNBu^9(|LE$XST3D`(%G^7M^vb>)ij@-f?_2 z0SWapV$nQ?ZW08rCUvuOUS+p70+y!XG6@6_#QyrENA8F1T+^9gCnJ)hJ!gjZvh5eQ zl)i-OQlVP-OE1p)gFacUf@zav(V&;EJi0sbtVMAn7SagEvL&4paamHpEamin;lxx? zR3VM`kM!!b80CL4IBVyFss!3T3)^D+B9EIb>$=qQ@3dnUh{4n*ojz30oE6xYRidig zMaa-Sx(rLh@5?=*p+R?#q1PApW|lTW%H8Lfwdusy+%$=E%L9O z@_sP0Ihqesn=_C*0jDsyHINVObWT;6`&GPk&HQZ#E_Q$OnKiuTL(rjX2eXbf%Wl#| zahrpFx^xd|L{(;D&@qSnB@EhA^KFX;b8Vj;h^?cIO7j@P22e1YJD(Ng!lM8o%zLxc zwGexpjVDzr3_!J>SmF3w^mQWl_@e(cdr(0Qj|-Q)wNj((8Z|pI)Y7mQXyy}aKF!FE zo5`bZ`T>6sZHjJAmc19j#S}NsW6%9Kw<5H{2Z9PQ5Qy^nduAG1tQ*SvR7DQfj?iGw zn+n-iOd)gL5-pLv>IdBFCVZ4YrA2*d3WPQR<;&$+~5}|!SS-$b2Mo;)- z5zHe|S*bfk<5q!Klzx0m`72E9^gs=7+g)a6JCr1r0pN)%mTc$9UIH;=NCk&+@0!EM|AX!TAW%yI k0zU&k00ICG02W+3RRjp}eqsaw0ArKC1W5*@1ONa40Bu$%KmY&$ delta 1172 zcmV;F1Z(?@3XTdJP)h>@KL7#%4gf22a8wxJ1>R%?003JN001PD&jcrtLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IPbP0}>~Fbo}oco>V(s3yEMxbB+qGWMl=a zx&y&W0CDW{1rahWN+CR=s9Jx(J%|-HNWRns4g!5-DThtbn1Matbd49ac(C(_$(wKk7&RZ%a{-W23 zX6GU~SajxJ1tmlMJNlvr3vk$RHUF3^rjhOzE(59K6IY>5;X|O_kP*YSip7WRe6h<| z6NlA*9lc`|+1cFL#48I|#&RLwc9ahDx>KGPOyn#$i_+nwD4~+ax5iTx5l+yi#*dr_ z#}-?>SU$=MqO&OyNt}NmoK#iH^kfryQHFld6ZJLSSi*n|x-*Zj>a_S0Y_^>Q=-@=d>o|l;=#fVmUYOZLkE9$PL~*Y1rRiLaLI^A z*rEU`*4lb0L2~)W4f|RBG-wH3Th$bB!JyFX&>Ecak9P~%$pXmF`xIV|--u^V;=yR` zIsxf&c0ShWIH?4BVvM<1HYY@T~kW4 z4HXW4*%ES4wD*7en?{`$1LD`Wk?rs$a8D2OXS3X!*iUOb+`K(IV^KnBum~Wf1*1)A z6XIhlHFv;T;ugOEUfG~u73X|xBH{V6M`p(-)Qrf=x~H|i;DJg5teuh7u@kN>7E6Z? z^D1DYO#5S=F+umF3U*g~=_4)4OT6>#zA+bDoc=rLC?!&l~C{GUkDD zv&n0G8>xTW(0S4b-hp*3;(O%S&b8SOB1t>y`rU(i!#iPnAJGiZxnQItvuxUusK9uE zRY(#}Ggt0hH>R&W{i5@KL7#%4geNhJ5>P>{qaNu003tZ001PDu>>cPLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw$KRh&S*^;SitZ0wqe(O7sL8;uxk8V5&- zg1Cft`p}|vSB6Qfm!Jt_Wl(>l5g`D*WvP%#mdD9;nAa-y&04SrV$2hjvz5yT`C4z0 zzuX!^F;R{xtV(A>Cu(OXg*0A$f=%t1ZL*R?Hi9xKEAPrf$WbH2)Hb#ST1pQ!n-sLl z7Uy$wzPl@SYn~0Jmr1R|jpNRGhLe97%BvAQ)_JBS zIAul03$ZZ=XY;;si~C8Diy?^b@5hhXu{wFa2Q!)kKm;j}7(4aUoccFACmaE>cm17F zM=>g>FuUpjJ$#yq`>mDI())m%_)5OLA}nPeUN}*E&($QlJ}^H0{7K=+N0OUOf^om0 zJ-v7)ly7yaCE3j)fA2 zzWQxNVj8POdc=RFa?7R|@;| zs3d6f%!ZZM8_R#>uk|=j7zmi}QX%Gv{MJBv za6Cc)5vt7OrX2M-XT{!VaA4vyTzBQ%kw*YFv_cl@?YbRLIml3aTOTcEMR&+7I^moD zT_Qv)+4`u_Q$PjVpaGi9)8>pS3XMX}ORw)`f7Fa0iSoor%F}q*=#T!59#KCAO-0zT zA`_A@ZDfDx+!G=88U>XOe%{Gg&nvl2rW0}dU#D$)m5d><;!;v`2RTnYnM`Q}7{0D0 z_{1E-YX8Z7VQ+}+vcQ%Yj4q>#)KIouz>)sh_hy$Ong?4JK_pB!JV)szN_N>`oQERr znC=Po){$+X9GU>MSLQ3flZzH6lWf0tk{GEjjgUdo2uKBj%G*9`zIs1tjZEg2R2%?MO928u13v%)01f~aTsu_(5B>2(1ONbMlb-}n*o6~% delta 1133 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 delta 1174 zcmV;H1Zn$?3XlpLP)h>@KL7#%4gf22a8zmENyBCY003JN001PD&;%!uLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IPohMc>C7L|5~5lndBx0K!3&M)TNAF>|ER znR+OITYH6IQk&SyNN~MB41<5uk%QW5)u~7saRlBg3gaAX{*nvUYDDKNm;j{dVQS99 zwLM^16Z|6$Gcs)Vi!}HatW;dP^@4UFTMhXCbhdxPwxb@EOf7ZbQ^9>|}? z$+||=v>qt;A+^j#X}f=^rU5T!*BGQj;@1ci`q{v~Z-d=@3r(_?{_dj1J;YS%EgY-* zQ`Dp)l?4E1!;C|u=d|yM2`4VtBmK{p@|O6F ztz>Qxr31HutgCtGU?A1_yK7a6Ke{LD9+8n9=C&#BcC~R3mVl1A zIFktS#@v*;*&Bbd6t8PBuq`rAijNuQw^#inY`;1S-FsTAq~*561qgyLZkL3tqee0L z1o1zQc9U;b>tnbKH(pyM)1yKZeFuO)9ae(PdUkrWjGvB&z#qv;-i+6koXWj`PD?JM>kd z(53I?8OeWIiTdA|(zi0q!z0hKWM(pFch*|KtdC#Db_B(qeap@oe~>vi3PKa;o9|si z$V)90C$SSSK8eGPrRg7nfoADqIX{A%Nd-Jw=0eGpbH{9htD4U!mnr^Ea6i@YHW2}7 zKk!1OwQE&ttN&=-o+z#|K%NFuTq1~71rdmf+|OfM8BGX8a~-sWETxbC@wWw8QXCV} z`|;pbX~)_ozBKq1OV diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.16-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.16-legacy.zip index 07ae0f8beea4d40be536851ab67ca2812b0bcbd9..97c4f577c58e6c273846ecb2c96e300fd5bdccd4 100644 GIT binary patch delta 1133 zcmV-z1d{vk3GWFPP)h>@KL7#%4geTjJ5{3-w1q_k003u^7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3Lw%rkLhQBRc&luxH$Yx8-D}ueDj530D}%!B#SCuS=^yb z-%yc>tsz+N!c>3vcw9fgs?3jrjuBzin%vn-6wMZ~ zmOEYrQh$FNIHKul>RfG1E3Ovb-cK80ogo%9Zu$uDNr8%N;=YUtG;3Y@2TAQh5oKY=~*r)_s`x zVC%T;?0iiqKuLdsTj@VZU=}1pTo4)gF(~FkY}|h?6InAM1A{9m^6?|h|8lKW2jsn{ zkO3|4^0ojl{2X7}=?4|sYigUvoOc?=bX#dk<&dZrgE+ zEx@{fF{4OXWq9IH(!=!Er5h?G_}d7nQ)bg^QKa4bTKtQP@DUT|sh^Grx(OM!_$eI~ zS>J!HfAm|)z9y9Y={Uhal>@4LV*DW5p_S_qAV|n7d@ofyqqajZiPjCCVuP=Xqbn|> zWLc8cj08VDdf+MHdW6BqwPHu=`$(Hi(+QATUa#gQ2KsPRWx=zx;@NtypMbEk;_ayw zkOII~;w|b%f_#lL0hv)z$CHmGbU$qqr-6TX_Jh6&Ccgl

Ph<4B;l?e-w266(sD zgf=wWQ*;g^5aVT60pA(-L@lyL8=-ApI;X_h=PcQFH0RWdAqcFkV;E3d0J~tn6HJQD zY4Kp%EOS=U71RoLPEyxFK&tI5^HC?-=c0&OfO|uQTbUmCzV||5+?0UsHpN?;QS*Om zvZO+gBPvnnTL3m94}yQEX4NtY$Klc>M8tU+`P;)Hum4)VI?nN>Xc@C1M~cjdMQo;k zH(DLXp(y7matsFid6v#S zfOlJ-AT}|<{sS}nP)h*Nd|`m00000Y9to+ delta 1134 zcmV-!1d;pi3GfLQP)h>@KL7#%4gf22a8&wdp(I8G003W+7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IPohMc>C7L|5~5lndBx0K!3&M)TNAF?8^dlq|Kk&P{eB zb#0&SUAlBWoMC@)m%=PAJ7Pb;vay`$tKc|Yp2w~j?SSmo04aA(YFT0ao%hQkg9X^< zv42Nisbe+LLLe&D%Y8m&F(L;FMf*F)@P(A8p_M<~Tn&>ZD36oEQoNKN1!}n@p_0Lc zh%#?tq|!3jtXKazk^@;F6?_Pb>l#h4={#WyRO)p7eO-T5h^GP7i&jSwMyFS@#~qP& z0&e*0UUVqf0!)VaaIk=fD@Fl!3k~Acv><2T5qqBKrVha^vDjD5F%wmRy^q$(`F|e< zr{*U37G{00prqWliEsrou_g)hap_%r_O@I7Zd9`)1C`km71#6|6HL`zGe3`G3Z(p6 z^bZOPt+0R0QwXGxg$ww(+q1w0bHZEja}jyA_`Mx-G5hYSI*sg|C2CdbDcGZ8Sanc! zXC8YleDJd0#7aC7-CS+;X^gP-nsSfZ*=NCg0d{298t{-~IZ<~Ljfcrq;cE4@4B1LqWVV?Jt&LOh) zB=J1RXe@iwuRJM+fr&sn)dL739NaeUmLD`?QMZ!JdFxchA>ArePqOrmje@R;AxAED z1m_&oDc*g$tkwRAP26${n(y|@47a2ItiZD*obFy3D98R`X;VT1MO(U&+l=%Q_-#~g zWr2S`a4A(&Ghknq1n99Zju7;WuX8&TSNT%hUX%-%We_+G&nmZ33@6r28-DipaE8X* z=8Q8JN|e7Zj?@K>N?8gP+q3&Ag(5_$^ThnYg`?R@eB-S2DaPBcyx(w95BuKCxHPMA z?}DWe6=WNq-q9O)48q!tN}}Y=!Ur)_K?Z-|AW8U4!`Q$jUimqQo5(ZE3SxleNfWKB zQ+>x&q_=1Gs4(F93vcPJf-&?P-h2^Ljse<`-{u+K-w?NTz?i z-^gmbDG^K%dQxsLCZ~`tl4EFxGUX6Wc>%Wcq$)qXu+(Xvb*kC2C@-VGo5c-c2H#Va zP`zCL)^;Ahn(*MzJf7;s_mWXtQYPbn7|Z)o_R^;44!1HEzol&UtaK$}Q$*LbXr=O$ zPPbDrB2T{c)EORYLI8ZcvX>?s|8qkb5CT+7{XLx^-aCT;YflO3X@!#M(^2NZKb2>X zk(_Z%XL?Wo|L#l;4Nyw~0zU&k00ICG04sBFRQhM3Bt`@P0AG`!1W5*n1ONa4071wh A`2YX_ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.17-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.17-compact.zip index 66e5c9957309b0e8e3c41903e82998f844ae5ded..2106dc2cbf6ee9a7b4f7d0398202cea871b15b42 100644 GIT binary patch delta 1166 zcmV;91abR{3Wy3DP)h>@KL7#%4geWkJ5_~f2|Hc{003JN001PD%>*ZrLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw(0kjZC%Rc&luxH$Yx8-D}ueDj530D{r6 zg;Q*Q*-U&|J$=X55PDe@9uj{fy!cSS!?5y6L&b~cVhq~zgLNS>X|SjDs0FVa{VG}f z`Af>6-rLlD>&a`xkVp7bDa_hC`t}$RuWU)-@9R1Y;hn%LIxoyPs>mK2;zT*E+tm9H z;DIUGyraxRt74G@Rea68G0a`iAH0VHhVS$R)~!4P_{N+0mIBG7BkX@vptBxWaO8)( zVldpouuVDxIpTalAqIETkt9i>3k5cd-5E&6>==mDH7@+#s@f08dpDv}Uk)cuYa+6tDl||Qi^NO-{NK6(lpl5Lm@)Mi~m28 z7a}NRYyV6PE-oEXFO}$dYt6XE3^w*FAdMQ*)S?`t!xy$yqT9Vr%>P1k9A~Omh87Pv zx;!{?Q6?TVFzU(M1#pc=Huq>x&S;Igxpm{&9c zMp7sTJ`I1CAUrT?=3|sEYVw>6Mme+kD`v|a&+D6qcXmzlJ@zDh;L~jk&>2{mA>P{@ zsBx|JlR;0yP{mTc>iEH&-(%?!6m9{K>@BrX9WbRP|J0Q|DoFVnv(lZ?s$jXnudj?& z2jt1>AI=vc+j*6kU)5A)tR{VP2@RGmx2{7iZUI|buA_+pc~}lT^`u%@MK;>N4Rvz1 z-6_R`WpDf?oX1h;w1Ehb*mxISCg8*T$H3SKL_Qji6(_$u0Kx965B~A-Tu@5^0zU&k g00ICG02y36RfT8?J6;3;09%v01W5*<1ONa40GTr~OaK4? delta 1160 zcmV;31b6$03W^FBP)h>@KL7#%4gf22a8#a{Z<$~O002{w7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IP#m{|ERnR+OITYH6I zQk&SyNN~MB41<5uk%QW5)u~7saRlBg3gaAX{*nvUYDDKNm;j{dVQS99wLM^16 zZ|6$Gcs)Vi!}HatW;AE~pwis6H?ZKEIv zaj*;{#H)IfB>#89f`IECbns6@^ndj=z7%<8dGCLCA7&XVj~H}ZyR4U|*PrhItK}8? z2;3LCPX)wCmqB0USp5k9}t5jz$6Y-8s(Id`zu}9j>6Zl$a zob`Vf64V4vbI^aGcN`VeIplqD^?sl)IEqRY)b{aHk~zpJes=77EJjC@?`f~+5!Jli zvzYS_8`}=2{?Q1-Zc?#^#uNQ+%FsUO#?;SXWY^PT2|yz_c>zn~i5yrO&ke(rFK)$n z^fCz-Sm>Y*+?2dUKP1UN8q$lMJ~sxMp>lsDERg{{NWK*gwdG`E@9My-frlivX*Mkx ztC;4&{(Z|XX(n*tAv@%L)G8tXq;MM>(uko+`qg45r<$CWO-|K#g4Tf5q(5s=b3jdt zGlzYvW*a3lF%TnbTetuC9K#~(imyZ}`MJ zogQGtLbS4wkM~F#=Pcg$sAA1Y2&YGeR+b-HK0KxZ6(U+vZ({86Js+zQy5g-<&59dn&mqy)v=BfJrYr@vKCARIZ)|-{+p?+IFHT-(kA# za&7Cdo3sb4p?|o^VG(MQZ*mG`|9w06N2iPCIJ0NRK`!KI@TCSBjYeva zeG>8^lW}~f;JQ38Q#$2~7b~u0{R2>!Yn#zVb+iSGL~;pO928u13v%)01f~v ab8u9im~WY21ONb2leq**2BHK200009B`YWZ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.17-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.17-legacy.zip index 44bda80fa3ea346b1281c8d17462324e2f45e35d..c7c6c92cbb60c954826eef71167cbca4b5f87faa 100644 GIT binary patch delta 1135 zcmV-#1d#jc3F!$NP)h>@KL7#%4geWkJ5?{JYe+u?003VR001PDtpq2LLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw(0kjZC%Rc&luxH$Yx8-D}ueDj530D}%! zB#SCuS=^yb-%yc>tsz+N!c>3vcw9fgs?3jrjuBzi zn%vn-6wB@Q+W>ybCxL(FSnOtkchzMV*c=w$-cK80og%z$Q)pVhp*mR%?Z1{dI)m{r2Gy+EUJJml_n#Z8$SDozQh5oK zY=~*r)_s`xVC%T;?0iiqKuLdsTj@VZU=}1pTo4)gF(~FkY}|h?6InAM1A{9m^6+=- z_6e4)`L}Nhz=QRsRif;*=t{>fO0I~r9DpTvyd`2h(BlauDLV35p?Czh8Z!1|^NxTN zMV{@&LV5>qip&L5=KMkHWg-I>C~KIco)`#ohRPq!F;p#2_8Vw?**n##z_6zY*Ew5> z1ptHARm1sswg!LM2hi-}X~z~Uk~MG4A^hbtPH~b+!~fck0ve7A@=$+MAK8R zDYT94G(if4yz_Tp;{zBS8V$$1a!i?CBi}m6;WMR&eSPe?v zj=5Z@Rmw791@GBu5v8T~wO>Or!HC15T|}+*Hhsvfw3`J>vRf%L8blxpk+ME6_WHym zwcnQ&j6)y!&*7yeL}i!}vInHRwq0^WV~@>y9NWiKSU^J-gQEFGn&&U_wr>O@g@8v0 z8~^J!&8mMe!YCh%`=uChqq4{@(dFKT9fHMEPeXM4G*+5S_v2pQOQpzO0Rle*KL7#%4geWkJ5?{JYe+u?003W;n*>P)fdl{m007@KL7#%4gf22a8#P65W+wN0037J001PDtOO^KLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IP#m{ZD36oEQoNKN z1!}n@p_0Lch%#?tq|!3jtXKazk^@;F6?_Pb>l#h4={#WyRO)p7eO-T5h^GP7i&jSw zMyFS@#~qP&0&e*0UUVqf0!)VaaIk=fD@Fl!3k~Acv><2T5qqBKrVha^vDjD5F%wmR zy^q$(`F|e0N+jwdcgijpn$N&l}Tb8>n2W9Lm=_P;F(WAVRx&Pn~Ma!!u zYy7Z!yX%KS&U|v>wWH!UBM6JjRXx?O7!_1+WwHIO6}?p+SV8pqAV(Kqk0xTM$dH4i zMFk;i1<{@>xi>fJxjAP7c0Sa@?8||hmp?;Do#(-?mPe6Oo*5n7v1bM^s4By64h{)u zqvIkemRT7t3T}VlZ@Ec<>pi&k$Y=_$KQn$YR0$;TB1xA`$vQCo!=1{yND%Iv7rM$^ zzEN5#S#o8dh4cVxviC^m_e~bpanepb$Z&UqrEsX}s({-wP_Whuq=*i8$>_w=JUV@7 z>0ngOxRzkU7fezcRIi%^zsBw^9C^ds(pw909~<55pqF_$K1YK zU-J-EUr>K(J@PxBSnQXxnI)EZw9xH3&GDs)uy2GAli?d&3pg(!qb9@4cRqfP;moE8 z&Vto#*`kLGHDQ|3ilf*La=O@gf#CDI(yCF5vSNUm4|HpfE6Aa42|^S4VYZ2Hp|Ujj zw8$ukbFDkU06M*KAe#sE2!2ZR%AB-f;nEWw2VhQ ziht@}-EJ|4D@ViqK2F6@O928u13v%)01f~vb8u9erVzqF1ONb6lbQrc27&|t0002~ CHWMBI diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.18-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.18-compact.zip index 025fafec49b896457e82682584b641bdd359133f..8dcf47e250399619c0cba35929abfed0f490ab06 100644 GIT binary patch delta 1164 zcmV;71atd|3Wf?BP)h>@KL7#%4geWkJ5_gB8OU4&003JN001PD%mgQqLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw)R=tPxeuQwWq4aGcmkpSa9U_&@~5Dm5O zDzBk}E>k{9sIT%y2iAV#cQt>=bYo)`<*M=AHP(boI|7F~iVhK+#s~ri_?ry(^S${W zo&wABbK%DKm&~Pm)%HlJ%h+chd{(`aYRBLQ_hCm&N?Z1zSZTxrxr3@2Oh4{RcQb*d z!8dldW!yL;wvkl{YNBvFHT-(Te>QUvqt`nXp`jRw#O@BmlIk-ds!4yKGP8sr{yW7O zA(y6B?%2yPe`AUo)$88Z!m%ynRQA|kR3ILC;IsdOgS$00$^;9OJIIn# z+!tW>`G6sm&^zkNkot=H`|vn^F{z{|XXyeZ#x*U$Z#>DuHyjKB4-%Rtfvh#Fe=38J zR@i!!jRp35(FXj-6o`Ko4h>{H6C(QK)NedbyaAG<+zBqY`y1MCgV9R@+}*){oM2EN z0MXL&#*O5;)Sbr~Z;~?Hp%9izf7~~=Xc|F&8m9!v5#~rHicM3aviSNh#ab9YY3XS{ zBdY{PnPikM)e1(eKgr(qKhQPe!e7FAT*QBDBSCM|?E)$Yp=f`wS&c-I@6N%hS-RiB zOW!#WLd4x)Pv)J@7AXnc$>|hQsebESwZRQI96BEbo)H7(0F8hVzDtJnyOGp>wyYR2 zp?fx;X8WCk6=3?PK^Jf1!X$>VCu)`^fsIXker8Yz1&vanJL3qD`=_kJsnf92o7SLA z%N&hNK-6yLU44I{#`pt5z8Y-(=+FPOS@hbcc_4N$G_a&DcX9QTYk;+{1x)!bw7vrs ztn*|FP;RSsW(^ts#jfmQLa8!ju13t?L#=!{|%7t ze8Y;*5UOaWP|!d5W3ZPaV;XWn=avQC29J3 zdC+-mMhupWyJe@W^w|48qz2GT91yge(`Y`t4>4##iJ z|DJ^?9i3Y{FsooP>?}GADRd;DDCU;BaQhuV#a&rI)m2+ril~<(9}7)2j1O+%?x93L zgmyLQt*22nDpIf7#ph65G}gOmnx6i+z>)pl;3gqEH_KLbf7t)>`-?eHO928u13v%) e01f~dTsu{FSQ*G%1ONbAlez>+2A%`}0001OL^1FH delta 1159 zcmV;21bF*~3W*9AP)h>@KL7#%4gf22a8ywRNPb@g002{w7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IP?CLWV6GI(N#cj+Igua7*#o(~mU2Rl?DhO}H;e<7hdr z3lwF~cN1Z8A#8ig0z z^a!w;@H7gdyNrO~C+UX`7wHz3sXxCkb*}iMiJ#fkSp0ut_u^U)1pP)s0}CL-xcxg%ZxukW#SI5=4E*l)d=9Y5?%j&sr>TgRIce5R6|2K$gfJiKEn}WG;>HP zqviQ=SUZ1Hl6zsqtoXJHUL+9s;sDe?b6GNi&}BDbQJ^aHJbt@dyUO`s%ZoNqPQCGc zRKGRAf9|iB<&=B*cVv_g50@l zXa z*Vei86l=?k)=i7(+!u#yuUIG5UJ~gRVQAD9*Mz{J{=W>wBSj@;$l^$+NY7<*%Eo$# z?O=aEHgZsWt+ejQ5cK-K3_@u! zOUO6m#8hQzw7faBeg78A@@F3lNv!ezp1EF81oLolbA4k%up`ZK9h*-weV%mbNl+)c8f~SXQGsM{sIi4 zFdzb(nG@U*s8JBSgOSB9SbA+5(KzQGCc<{ls1?Z%xcfApSKMkFFG;X+`?gv4VeRCJ zaEa7&5st3M>Dojw)ti{VXVqbKpACCrdU^^nvnCxT+=#;uO~<;fm?>iIdWhq&DH(qN zZ}?>D%;5)ivQlGx-+`u3Cg6mI97@$7=zh!v_-?>IUqdV1AcJ zk87I8?(FC~9GL0$tmv>-LYyt`mTp|E79Hv66*G4274xR%b*eP9?>EJByFP3Vf}h@UD$~KFqX(uye*crd)E7`o0Rle*KL7#%4gf22 Za8ywRNPb@g002{yw**NBp#%T`003weHCzAy diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.18-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.18-legacy.zip index 2900f1013ca4792a1b233dc056c836a098ff1963..8c756b719aa39c0e09e7584f13bcb2625d3b4f61 100644 GIT binary patch delta 1124 zcmV-q1e^Ql3FZkGP)h>@KL7#%4geWkJ5_-m@u55f003W+7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3Lw)R=tPxeuQwWq4aGcmkpSa9U_&@~5Do6}^|!l^;U%(m zE&v3iuy#Wp(Pn>&WXtEeu7^6C5`LrReVPXb;wB*{7H$aqwde}#*xb)UAkSx)K}^Zq zIkSLnff|}Mu4M&kJdg9cD)ZCW5fR#s@^6gaj#>q7CeKiuF-`4ToEMvt^DU(b>om3q zC|3yf@dRq@YF7EpdDb`Z)b48^Npl}HiU)qltwL!(+y4k>ENg#`KWHiA8 zDT~!Xo&L{~`f%CjI#{2CJshD?NaHTuYHj?I)u+GywH=@NW%nzm2#B&ab+#m24!Gev zz_@^4voa=P$_=W!5rFzc$%n&YHfY?G8$&!>2U|ZQdBf12?nJe0wXRKDE(ARP0t=I6 z8*U)>wbjNzNs3G_t%T`IUp$!OlwM zn6CvYXUxG52rkGK2I{VU;Vm6|2tkO@k*k6J5z)WGRai>pXaNwkHm zmUK8!EBZ~Q(5V=yg$6tWYcMF&p#~OXRoe$!-XIPg&)QYb_J+AHnlxp{6Y^p^j!@%a zw>E#DIaMO^QrA89BYiv&yqHBFXfnLol_B^lK81ThV9)Vab#fHNhsU5!$u=N7$t)AQ zS&EUxSJN%O=itL5Q0A)*T6TNH7S#73MpBrmP8;~{Oij$63M=Yo5|+2teF0PUCZ(y@ zO)*p;>^zG&e!EjrbKb#x*sY$0ZeOt;vZsH)ewOYsk>gUw`^J@Wh%MGD_YNh#sCAFk zr#<~@BmVI^|4-nc-A5L5vabWfTQ8B4g$GEw<*H@@=2K-QFyzfp(a6n+83+3fy7Ey9 z{EDJ9ych3PA0GvH2w>>_@p{1c(Zkw`Tm9qiz?J95N{Z|Qzm@*rhbP^>TN`RUl_!7L zQ)TMoOQrr(VK3aEEy)~29_8C@y5 zbgd93mm!CZqY~KjnU8$-gII_(Qa|A%{|oINy8)rH1bn9i6mm>ch@~>JxQ=2)52%mX zQM*O3h&^hzWR47ZtVG@h3DDF%*`hf}8biJng)~n((~%dojLI*d3}s!`M>}9 q*ZPf6O928u13v%)01f~dTsu{P9`T_(1ONbElbHlb27Uwp0002wRv=RV delta 1126 zcmV-s1eyEh3FrwIP)h>@KL7#%4gf22a8xals2V;50038!7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IP?CLWV6GI(N#cj+Igua7*#o(~mU2Rm2H@+{nq#lI}T4 zUu_m&G$;c2T2X)MgLIX6{f<_&I9S$51d4Axho#~RQdADJBJCMaRc*!?|I^~2@X3H zTriHI!La<4CQFD^9R7H3-G>|<;AY$R{^*Ydk8={0MNxml42OjKqcddGfNEF%39_xK zEU`rtEcZwHPwiz|zMVy>hqiCX08$-@XV@QYWq&0AFdL9@_AS==7GTXiguYmn_)&eC ztQnC%dSw7VasRY4adN7`;7LzfKpHw zs?^{}`tANl_q^N{10SL1U-A!c{eTT>9XYKyk>vzOcrh-3Hm$&Es`lyijL`$H}T9s+nkj^ zv-QKiW0aQgNqUWtJw;YHZ4+Xmbi?BAriT)rG-IH}t@-H@<1W=V-q)I^miUpXSU>eu zW;lCv-?ZPyUiNjiy;B|JvPHN*_4rWOydOZuJs8j8LYV#JDF&&c=i+tv>JEf9Kazhj zY@7rVpJAlYD8R)2Sq+F&=>;K5J!*}1(YT)yT8~rg1lFo!#jkNhNaSD6^E+7|H(ZV_ z!sD#D+}J*c?z&}fQy88nLH@XfJU;`sL`33Vci=81_;I;7oxr5Ec#xzAH#7nc=hls( zT*qHVzpLQAA67LR`5jnYaj{a-tadvID{6^O0vTs|?tq)IXx-z4WNUB=^*}@_SdE&h s|K7VBv`|X{0zU&k00ICG04sBFR4tOI8a@O709TWj1W5*f1ONa40O1NC%>V!Z diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.19-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.19-compact.zip index b141c15d681df01641b7ee4e953f8a6f4e6f19e4..b90f8c07e6759cd13c7d27f1a34ff4b4c5582f40 100644 GIT binary patch delta 1167 zcmV;A1aSL}3W*9EP)h>@KL7#%4geZlJ5{MtG@f4s003JN001PD&;%!uLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3Lw*q<@A+huQwWq4aGcmkpSa9U_&@~5Dm5O zDzBk}E>k{9sIT%y2iAV#cQt>=bYo)`<*M=AHP(boI|7F~iVhK+#s~ri_?ry(^S${W zo&wABbK%DKm&~Pm)%HlJ%h+chd{(`aYRBLQ_hCm&N?Z1zSZTxrxr3@2Oh4{RcQb*d z!8dldW!yL;wvkl{YNBvFHT-(Te>QUvqt`nXp`jRw#O@BmlIk-ds!4yKGP8sr{yW7O zA(y6B?%2yPe`AUo)$88Z!m%ynRQA|kR3ILC;IsdOgS$00$^;9O6U1~y?Wy>vrdLU^ ziEz-&)Lot}v9f#XdwzQ8x)m8~*r0dDwjWs)?$2x#6}Ek+dNnbQ4@ti5{vJ>MkI{V_ zU{d9#)O8sWx2w{>`=oz>cXH4zY7$U1e955_1MuH4}$e9`At^$Sk+@ zQcpf;;-1~QeG7*{PMuDWkgbAW_I2#yt^rvTPN;}T-3vRnUOg)3Tm ztULB6zDsdgVQOYxb#+yOS*BL4lqSf4xLVA_VA0YprZ++Rt&4vTa6Cw8k`EFX3YAz9 z(rN_ojAcF~Zq)xb>Iv)WoEjA6o$iz|cj)o4!2f)l#}D;XBr-aid3CQ-mvq9Bk+iL& z-|stM*z3Von0hL}brAsXU8F0`r#ZZ#plQ#Lpx&eZI|@Yqdu&+@#y6N|7rU?WP zi~9IEtXdQu_;G)Gf}NU#U7Sw+!8={vKvY>pT#b_(>D9PTv0R)c&%e+>51#@7^%ScY zmSR{K))Dh!8}DTM!(ZoQ4cn>xNZ3!K-8XXApM<)p@gZm4UU*uofe(w;zVoZNyAx0) zJ9nBWv`a7ow+##$f~P!9bmkib>bN(aLVZ&nOUFkV-S~gFvcGx6QMpAls;<;UKS^s4 zxy?b)WkE;Im5or2#^;uAy*`@CJj%X8mBfG844i2I)QpcOBQa{QLdD5K_Hl+HyT#zk zA64*+kgfdlJ#5m-6n3Wjhd5@svVN7 z+h@p>BZ7Z(k5I^S0c4G2KOcRhHSu&Xf*)9s?5Pj)w!?c$W>u1s@zmjHU9cop zp*QiUq6iEETF(kOxq7U)NRnZZM!lCKfIW=$Y+YQ4@A0;BWqr0<3|=u_#V@Y#P_XC@ zEaF%ZG{9yi{nsTR0V=D4-bE`2&v&fY{Jdu&L^9PDEjO?9n$=1PP&fWMX=YGM0Rle* hKL7#%4geZlJ5{MtG@f4s003K)z641Ip#%T`004PvEU*9o delta 1171 zcmV;E1Z?|>3XKXIP)h>@KL7#%4gf22a8wc=>FHwx002`F001PD%mgQqLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=IQ3ahK4N~I(N#cj+Igua7*#o(~mU2Rl?Dh zO}H;e<7hdr3lwF~cN z1Z8A#8ig0z^a!w;@H7gdyNrO~C+UX`7wHz3sXxCkb*}iMiJ#fkSp0ut_u^U)1pP)s z0}CL-xcxVp8p8hJ7uxDo5U15iIS33uhxM7WI6f+Mm56Q{p-OkhW8fkYlg& zjWm#w5`cwgow^?@s_XST$b0m950)`2d*7^MJ{ z{vd&_WID_$G;JKClw89g;+=}oI&6?qX z`fX~|LyGQNOzRo&>3DC}G$JC4-YN9B`$&I?8YtnY*2e7rNE|eIx!Y>2 z-Xvbk(zM#&tYAPSu($8pJog+*ZW0_ydq-hSXtyUNKMMhk8|-LzGd#VgXD^tg#B<6n zr|Xc`-9v`lpg2{dnF;{;(y&~JmEMrc4w0uD2;&ro{$_G?hH6J+P|_$Z($Dw+qr4hs zP5><>Kc;_xCUm2!FW;VIS<~rP0P$(a07*31^t3&H+2eRkrspNGfsoCD^VpU43nTYY zTxSf7;tPUca6m#f{i?js?w;6$A+^o0YA;s57z=}J33CsLT`m}rC2=zf@j9M0 zNbFnm%imDPGPfKZpJHg7>OFr3mhk=f+Xh|^<^CXwGAD_NVbeZ6J}A*c+y9~%Sh7${ l0Rle*KL7#%4gf22a8wc=>FHwx002{yx&%oEr33%~004=}GT;CJ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.19-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.19-legacy.zip index 7f575de73ac83b3cf6c6ce437e7f904d872f9267..8c8fbab7d54267ac7675639bdd9078083d4a765a 100644 GIT binary patch delta 1136 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.2-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.2-compact.zip index 8bc67d8777d977587c9e7efe3608f3697261dde8..61e61685770e360097a07b9a05f9af0266aaf96e 100644 GIT binary patch delta 964 zcmV;#13Ub*2*(H)P)h>@KL7#%4gd^XJ5^oP3w50X005?u7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L$H}>INDhdOS^YJDt5O74f~W7w@W>GTV^)Q6Y+>266y@ zX1N(`+TWhLfq#D)u?=X+jzL;>pMFo?JlMFJs>8(CQukF4RT1DOA1fl*|Eswgo8)Eb zOEAk(oGi}+$woGwBEz=dvVl`q*lHm0DuV+zC)9Jji<%VkMes#h=0p>Mfu@WYD>Aox ztlWUO>dVU=Q9d`awdgK7cuRkp9KxkIRtU67y+~MxI;c5F zh}Z_Am3+}W7j?r#VhHtc_5mFSM;?bWA$+^sNbc@FIq;ro?KyiJa3RX{tw;%Pj}kxK znoX=r&USkyxrA|ZbbF~>QQDuG7OsD*%ES`ECrM==R91yFD}iTqUYH>=miBx(9ADbO ziQ3Gy@CtwZJpvwzZ|-yMr zGL6Ed#k6KFwU$q1)zNyyG^$A5!{rk!Bux3|S~yIvZHbT}egpLcU#&-X;SJZ7r7~S~Hg-$Z@H6CVTLl7^GZ1LmXEzc`BIm3XsQMvLa%fp-8Qs6u}Su-9GFGP?MhPoDA-DAN#$(FE@Ob-33B z<7zJzoraw7iI6l*FM^EI!Dk$bs*X}7x%kLT$%i>&HXjEFMmKcD8@|tj)4|sp1FP^J zZ(@$15GwPxa{31{;9eQS6668io4!AW^F;j;2A$`7$UTwAOTkndx!zgOr~lF?Tq7A! mO928u13v%)01f~QTsu`=)eCi<0{{S~ljQ?R2Hyh!0000DAI_@) delta 945 zcmV;i15W(M2($@KL7#%4ge{0a8zxga1V+D000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=I^WscPD*N*)$BybAI#w4NY}J#3vBA{i)3t1)uw$E9ND; zd+S11HsXs+>O_CInxhO$z+6O!>!J0veZ#eJR`rDcilxl<;Vo*=IU941EY}ho5)L}+ z<<-hR!nPGm_|ugyvw)9iVRlL;^jGJHBBPE9-fnAH2;ju3p11l*8>@M7(kz|A6C(Ae z)>+8zHNW{MX)_w&N_oXSLi2x;4OgYEt|j%y>AauHEUSMV;+3gSP7pM<#Dn8NJjVoe zm!L#$70enZbqltaVOt41O}A&Ja2rew=cZLd%T;T}Wtsy0r3so>phr0bH!R;cm@9Js z^xx9PX1BcA$k!y}UrsX>;G+wST_OfV3mvCEx;v;p^Z|d@`1V<;lp!m6t795`(RYx` zg8L&a>uZ0Io8mJ}21qLozi{s6EUEkg#a6xQ}X@JH^83M;;6SVMn#F8&~%f~1O zi5Slip2A_huR^B>$u$z-<&3^m$1m05Z`uO@-SVnd6*t0xImyOc7OQgUnm?e1yn$`- zr0m*rk21>c$f;T?z^gHFmc^&)qi!NBh@CGrGje~|e+Ab)Dxa+*T2V3XxL9Y^kV2=( zR0EL2)?!;tuq|B#)N-6nUh4Rkt{9vUDF-_b7uB2qREXa?JJomf?0#pQH_hG<8U1NjrE!phE^JH0C40UW4~<5 z?NWb+%R@wn-l4I2zy)OZXKusaaS}q;3%J4tUU54elEofv#yJ>69MXzJ!OKPDu^zlu z&Ey<@eZXm96ym(b)BLPxvC<#agv6hadH@NgJ{p|5q)hL?#$|Sq%u^<@RUZO$3bsHB zG(f$d0po!8J+a-M>r5x?!8A#6xZ;Khi0yy;XLBH_zrz_aqbGF{kf24};qF>ZEmI(^ zv{MR4=y>lsgbIkYrmM2$uW#q<^EQ5v_m=@8-M6QVO928u13v%)01f~tb8u8`qHqQe TiUR-u1e5p!Ne0XV00000qxs0k diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.2-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.2-legacy.zip index 7c3aed134479197c576a4702a0690976525a30ae..d5d0691db0b93285c952f074bdc2a69068c5cffc 100644 GIT binary patch delta 970 zcmV;*12z1)2*n5+P)h>@KL7#%4gd^XJ5>~BpE;WY005>A001PD`~xSELL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3L$H}>INDhdOS^YJDt5O74f~W7w@W>GTV^) zQ6Y+>266y@X1N(`+TWhLfq#D)u?=X+jzL;>pMFo?JlMFJs>8(CQukF4RT1DOA1fl* z|Eswgo8)EbOEAk(oGi}+qWnlWv(TN&3*99y58_$Io+yg z$mS|(D#8A>HRZCv*_;RDPr1Q|pkf*o%YPtilgaBLW^(kk_C#C$iqd~?{!^0KExoSB zii1K3Odn{W0t|38&QHOW!=SeHC73+)XOnohP=f=^hKa9?Dia= zbn8gOBnA!ots12ezrUI` zhCoyGOn91K5z@b(pm2ZVYjM8x5mRyg<268PR=q&jO) zP-qdjcA$E)4WR+NchLbXsMNAj|2~9SHDFEn>?nVjUkQZOdYdxwnE93D zQDhox`V$%qA@cxo-S2m%#l>2$^|h?sm$AA>zgFHUA$L*a$3t0k9@1u26vdT!C%;%5zXV zUymo^T8Sm!7nOg5t>B4aHHYLf8J=uYU!7(<)4qEi*c#`k+upHa%Z?Effm%rwzE2*E z)O*2#6uX{LNyDA^=sgO%$=aK6#ddvw>=PCB%idK`LEwf-zR>9_6yiPgms3|Nsi&l4 zPAmZG^Ik`M4?=YaNb@dLZU%q1WgoWJF+MJNX0N1}ugJtL zG(`mb9g%fdX{r+K=XOj6bp^V=I>6f5!0E8@KL7#%4ge{0a8#hF0&tH5000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=I^WscPD*N*)$BybAI#w4NY}J#3vBA{i)3t1)uw$E9ND; zd+S11HsXs+>O_CInxhO$z+6O!>!J0veZ#eJR`rDcilxl<;Vo*=IU941EY}ho5)L}+ z<<-hR!r=lKcBT=Ysx%@D_c6g%SbFWZl4Ax)*L^_rpol*R` zrq3yc2oABX<^h1)^pK%$S{N{)LCO;&m8x$PY;N0Xj0d zIe)~~X@0zz5j|^dY?*Z9n79U$Vl%cMG(7&Thk)C;>#u59T$Z@ZUx2D zbYS^x(FD_aw+?{HlS4H|v*A#3_}7FajEs7vXS3^`hijL^OB$K5oxD!4RRMvsy@Mv> z!DtNQ?pH-Zg_4m@GHOR-+~VVeO~{3Wc(2&PPSSsqOw@@M02ZLF`X5?Mk3jJ4k!3}d z8az{Q*N1{x9az|Bg35G#b-5k%FC*vnwM;xrYLNF>SYeH!qcZBpVSSNeACI2viW{|* zq}I_z%^g1L8Jp7Mzr+*zCSe2;Cs-ph54S%n!00^MCa{291r`7cB9bJdvaE?;tKFn=L)v9a~@Gurv2A!+uv^m;QV5I z^~hnNxow%efED4f~ztkp6x9J7cTPwVhskiV*)69g zfdDowTEF68qz`lK$4$a1yf0iVXL+O YRG_H>aE}8300fiv14#za0{{R30LXF2djJ3c diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.20-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.20-compact.zip index 9ad17df8c37eb60f7b985cd85e63a84b05d5d1ee..7dbfd796bb6822b278ab84ce459b3864b3021dd9 100644 GIT binary patch delta 1167 zcmV;A1aSL|3W*9EP)h>@KL7#%4gefnJ5?<(D8*j{003JN001PD&jcrtLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3L!T#s_-*3cfE2Q(XCMhHnI}vF-aM+Xou+$ zkK^P8;)Y%O=!emSw+9zv9DslOHJx*6VSIP@(Uy_#ZsUgfekLGjqKG25`3+o4377VC zBazDUlO-_DO+UBVj3F1IgLgIyA=|<(GL}O7_xN!%vVI($`H43YB*Z;%2yt7JZqOpb ztCMxH3iH5XND-+WL&W96nZfXRlcTuG&GgAppIM%po>apkmDOmnH=uv>U8EFEoUt+S zDN}W981W7g?kJRMX{Kx>E;_g0hKN?|NiIX;h!irTW~zqr@l|gd>?y%7dSk45QLxJG z$Hv6C`a+!@!%c$~E2Y%TvEf>NLQd-rQ^U&?LLOzdxdolLH+I%`vouR;yH}F0yOYV$Kz`K^pQ%wCAUw}33 zm5Z(ZF_q)2{%Bn8m1oD)O(_XwfF~JAx@;q2W=I{ZIoc1#S9E{WAtBL~zPf85u^1sZ zulUgOIcKjezDD2T$qjr1?58T0J;Ya1WXj{#9(Mx%mAntWfIYz#Oa@F&flO9Bp@q?>^h!*I(KA&5@Ot)Z;UNdau~Lp=1t6gLqoZdBeSsiz+y z>u6=QJ%IA5`hI_LwOrrqzo{wf>b_21;y=~9=+OV3VrSnZldKe|XL!u)Gh-Xi5&Y>V zuh{Xmxpot{$A3_Zf~@{ln$(+ukVHFW-w*@kqvuAXE9l$Ks5D*jSfSlSBErJI6-IOo znt?`MpjgFA>P30rXF}bIL0@K&8$D8CohaKvv@n|p4j+GPvCE=saqg+2hCB}_d>s{2 zR**iuN`Ey1MX3M7W%L(^$0n05;9ne)j*OKRHN@aW!d%~kH2-(9dh*AnK2R>uxyyI{M zPZ@MM#*=@c9Ti724FBh}H5+WLB88@4DxZAN$l8A-dllnck1tOSdQS`J_HL}>TA`+t z={M8Yx7>nH!?}sE?Ay``-GE*EBWs;XsV4-g>EH)E?)jA16+kgAeU3oS>j~}E3BRl1 z%~%4O{n}CPY-9$AN4Qw`vdqGEUlOQGeC(=+0h3%oQ)wOUeWx@p71QD1gpsm_vb4r@ zzw_!*0PW7C8vpsp1jkTI0Rle* hKL7#%4gefnJ5?<(D8*j{003K)y#z@Hp#%T`005R7Go=6k delta 1170 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.21-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.21-legacy.zip index 739750ff4526ab92f3831565d15876f0dc86a2fb..bbe5db5a427f089c9941064de5081e2cffa5beb5 100644 GIT binary patch delta 1138 zcmV-&1daRd3G4|QP)h>@KL7#%4gefnJ5{gtk(@#V006rY001PDu>>cPLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3L!VGup0y8hE;GqR5E7$ge;Qxf{m2|resgc z4pZn=@%pybtdK%{$^cVS$uobuIn0n5pK+KoD}5OSLfWI!juNnIzNULxCVWmcZL@{D z{gH+ItnkMcD=FY2%%qonOpg^k{9@I~Kl3Me$lnsWjk1nu=DV!S@ohP*rp@J^_1&p8 zHU6+Ms-UrGaiGEDMrOa&?=~4je~LN!X!Nt?Ar>z_scVDVV&_&eA3aSS12!NTH-9Vbj^v03yJ_y=zr?_@gr+NX8oEI%97_B|%px5RUfv zsmW{S(aftqgj@zWxJPV-k3-qNGT=MNg4VS3qE?g4pI^KHZP(a2!i=+K#&TJ%%k42A zWua~Hz9fmktUQ0MF)luh3)6@ln0%Im&;97=_7>70l_a=4s3E((Khe3IlxU^5QoLaj zU5pw6kut$r%y|J_XYC!z74cG+dGiU-t3!EaL~GO0O%Xu|cJi6!86?FP^A5-yqL$2M zR1L5>ItZ7sP7jZ6Iy^W;GrD)i$*Ht3G4?f&$d;IYE?9rv5U~;db)O8Y>#QKs0yZz# zX7!$dc`rO>M;9ddWs74dT6?{xJBr&29(bZ5ZP`>^J8*PBl|vkkPJ-M?GR$^Q^%!cn${ zB!B>2`qY1X=L2w*^S&Fg;NKcBX(3M69t1g>T$iGlV6AOVO4-5`f(g*Ym0*KP3A=YagGN7omTA^VHp|*5?$FS;M zYOS=1W$Gd|>bG-+|DbRuUrAuoI(Tu0K1c)1W5*j1ONa4 E08?2U`~Uy| delta 1140 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 I1ONa40IUT%ApigX diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.22-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.22-legacy.zip index c2be37ba954d6e767823f2d0ee14eabb5f24ead1..ecf80602fea5afb638abd70c933fe2d305d0d4e3 100644 GIT binary patch delta 1153 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.23-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.23-legacy.zip index fe5195a0842e13df1e4bbc51d973aacae19c386f..ba205032096518978be74dd3b17654533b41e067 100644 GIT binary patch delta 1152 zcmV-`1b_R53W5q3P)h>@KL7#%4gerrJ5_*G3w~Gx007^S7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L!YAxXwvGqyuY@TrFVMLD=d1IOs0VfG=&)QpS$60e)}y z!<@PncGiHoX*7Sq9_@aWJWYkOkOwS-8{$M%Z}soIU^V^#?VlrtC> ztGaz*^PLn0h+z+{%(?2|+kR!(h;nHsM$2ico>^`h3><&o%}$eR@}2Lx`nI)+?5%#{ z!x>E~;|+VS2T)QTeaSM|7Sr%-FlVZJlH`f#py)oHj&f3Dx)$qu_WTv}e?)CMny}07 ztbTp9gGjy2Z~UFOri8-SX{5x=;)jdoT-YhB0fz8$_L!B$Sh8Po;=(F@_b1F^ZOit+ z2(Ei^olJi?wV!$qzSCW_%F{`dUNk~~`1pNl8Kv$m;Dza{d|J)rlOk1>i5c`(mXMbTR%1h><;gHYeuDAyz|wz7RD(;63aGF!$?*-Vm2-sCRechk z@*mb~7a|ke)vi1&=SxdVJe8Z|{K|kZrWxBSTx=7nEq9#N#Vq?!~hC)42Et%N3oN6$|cRWpR_ z--!T{7QY}4b`X6o%LbF|0C|=1(>zc?E6}tGr0xK*LQ)CGmfO z>zza@vc#Wm?G-Q3N$i<=-yT@U-nR*LFx5&Tg{rZo-8oUN1jbQ|31J30Yc7q!c09 zn=Y*fT^xxh2D&BB-w~2NPr&9iq8wGsHMa}xQQe3g%6x_$sBOWrpq3*mB#=0o>y^DO928u13v%)01f~kTsu{OR11Ds S1ONcvlePp&2ATu_0002&=P_{r delta 1155 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 I1ONa407}wHHUIzs diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.24-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.24-legacy.zip index 25d4442ea4477bf062dd3624e4e1a2e9d58bd207..873ee11fe678e0a52d1809d2276665504ece9bd4 100644 GIT binary patch delta 1152 zcmV-`1b_R53W5q3P)h>@KL7#%4gextJ5^|_wUSr_007^S7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L!Zm_>~OB+(eV(=hY(FP^4Grh8CSR(+eCOph#K1l&vI2 zd}s(xv_UL8#vOkQFucZOS$fqvFfHR+xE?C@bzro~MNR%7-ga-jGy zs@FsF_pFl*xe0@uyoIp?p!7;XKQPa)w)o7pN^Tr3ui1b2ZgWP|DVULjR2R_fzi%4B zMxmKVd&(0AV|09~SYq1we-YU3>{dkp`%VUgJmSCO1{=Hg#Mlxo@ry^Bi}C%bmIW-%l)xTAzZh>MNkq{E+>G8VOU=7cfS#G?q7-G zRgy6d3ZuQ1@nX4<2(F)O7Fwqa6J&|3Z#Z}&&#`AMP+eg%<9AC%_Rn{5-q!@U&W^*q zeYtC~&K!bK($DCs1&jj`SpYP04D6t`O1;uNtq6Z2p@&ECT-h4&RJ~pj)ahY()nL9C zNrdYC3}YYYbb`yr5~M8*;CWE(Uf$`Z4xj^a12Fb-3C^+WdmQiJjXdw-C97`ydE1&d z^zdMmuNu%Z9?I~g=*xLPGOVm^%)y{DkM<0)1+Z)G`%#~LmkRM*)>Z6FZo9*tjO24& zYkz;+&r-nr($OcX4|#X(Fue^v``V%W7*Y6l(Jb43%mE=Tj`=l-ah_44<6D(P7NPNf znoHOF?~0`8R&7_b%@9a|=AQ}M%A3WpX|O|8 zf^NXeeOOB?rxn>V`@C)q6C%#u`j)Ruqe_1fZM;NAS0>y}EmvKBe(%~zyOY@p1ikMY zWU$LLxp`r&^JqpV%vOka;}|VAfCLiO*6zQ)@Z#+SRPg;<$-MeR9g)hG;TGv(vOWQP zvZ{I&olS)9!0#+Oi)f(Ske#&pPgTMN`9;>W^=9inv=rgu!IQZ2Mv<)L{!)02PP zM5j)T!4Spuy-uq-Fwh$dFS)Me#1++VmKn0j9&j)lIG}r7UFgerQ|g3IJkT3+B3h9^ zc$^)FMrNpx{!UfVT(wPQ1fPXV#{zp|=UCAx{#_v^-$6Atj@KL7#%4gf53a8yGJVgy?R007sK7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IzEovPy^`hgNxSlNeQw{>5dveMfh!lS;rOOenX_1tIvO(Ji~8ATbV;SzNXOIil+bdQ`Bnm-I%aXId&q7Q`V~}rJSqEUy|DQb-Z z+F1L+#G_TDkN?#K^C0UBtU;5*@D-hDrjbS zeD&a>II-_a%KxnbnWO?fS0}Cu>FjLv2rMcvx4$tRRFP z=t+S*Sh;4AujXN>s$nFp%_vyNhfui$Zi`- zK&Pjlod_5q=`-bu*eaq|p+c}3 z`VW6^j(hcpbPr~4DumxA#ZAZNnBFpZ+JHLRE65X1DM zj{=3>FWkpo%&ilMSGxId+>h|}wiLT=9O{1(kPC__tUXTLYq6+=5rI4m7*jFWNfb=D zsEVX@I$brN^fD0hxF1_c?V(x#jAD{M6gD2dH0=A7lR4&iJm4rUe4#%iPn*Hz%s3;Ihq6bg#zQk^Nb*BF~=Ym};AE`$nxsi@S!97A}V)ua?@!t)Na^*xipE%SK0 zbtW@UEZhuj!w?e~J?c&f|1Z(~i6>Z1DRLhmj2)yE6C{X8>;id!2zLuQa=hP$$`Xt? z^y&Wn4N)~w4UC|zDL3{EvFvdXg#_HGh@*W~`U(5AltEBS0Rle*KL7#%4gf53a8yGJ VVgy?R007sMvjj;7odf^?0018aFirpf diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.25-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.25-compact.zip index f66a17d9a64c697466cd03601e34a45e24211c2e..c1b054e2eef8bd44b05853d03efb9514675895b0 100644 GIT binary patch delta 1194 zcmV;b1XcT|3Z)7cP)h>@KL7#%4gextJ5~5>3ygaN007&O7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L!a}ff;=b$FF z&gJMry>s(f2ZtT>b-{vfJMJ{Da1FDy@~O8-W`2pmDPVubKegG@DOnB{xzHUkKK2%a z-H{2uBw@NQr)cd>)NY37>^IV+_mH4XHIr$z-7MG{1#UDWFHtsEQ1$nI`@-STH=?np|;I4aW`y!vq zU2oo$4m5uN!ALu^l~m*tD{;OLt@ejXlqI5iWOt7^mEj2(+0fGU0>Nl>o6(U$39?o$-lTn>$b=Wat$w>uLIl6gmpS#033; zf?R!%Qz8q|kqfB-%hE_Gl~om?{DB-iC>jWHyMlj>Xa;0)Y+g{x&wk#1mIKDa{uQ4` zxdyIO_;@UwG>Wfa>vssaws{t>EFK`W3NUWDkIsFSvJuuQ1|E zNuz%ykCZd_i&fTG-mFu7NSr?%gVA`aDXe8gW3<*6xnaD${0G7CVdnz0kVHoe2rufe zg!D7NU#9!S5J9*hIRpLu6mnw2pJAX9R5o;!g%Es4?$zQCbj$!v42&b~rHG+?TekXZ zzrA9Jq0VqVa7Cya9fDpd(z5-VgT5$IHno4OM!Z44&lxLsuV-*@hQD&(%j?*Tx_?!X zL}oPhgT4!Gt?f{nm+o$~AQF7rd7@2FOe_P-MM1RXatMw-TJn~s_v{fH77>%w z`oBW6e(IXpKli;P&O-6ZD0_2{)WKsDk+OfG&l96m_p2ONC&^&ykuC*~S@qzoUcY}% z#Md;U`2;!0vwpeh#dR;5I32>Bc>G5j|LI!5B3$*io00c;1aU^orm;Pke;#TljHkDj$(jooe-=$I2cLzz#Ou>CA(&sO<_l{i0RH>L@l;7bZFN5~&4o z$>mvILB`s89bk5nNp4d%_H{E^t-61nBJEj~8sM*A6xKAPfp}z6?g==R)WJV8xJ?>2 zwN**dmpy2rh#xCWozyF9s}U9jgTwemF=)a{KNE^YQ#YUn3<}yP%)ZfYXCXp71TGG^ z1gSeIE_qBmD*s>r0sv4;0Rle*KL7#%4gextJ5~5>3ygaN007$&001Na005KU1VRSA I1ONa407b1dr2qf` delta 1194 zcmV;b1XcT`3a1JeP)h>@KL7#%4gf53a8!YJAtikT007gG7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IzR|V(oVhDH`@8ZVi_y0K!3&M)TNAF>|ERnR+OITYH6I zQk&SyNN~MB41<5uk%QW5)u~7saRlBg3erexo2`bfHv99;oUPe^e;W-Em#DJr(k?1q zY2KKE3U=Q$UdLKW@)&;FrdPfCRUJDet=5?^wdl7#c_NMjq7V&w;D?6sQx6FtUYEEPLMz z3ggQ?@7#ZB-z3rk;+bGD(u(Aa0y}i*%J1Ym%HoaS3QSHFgi}ad z_CPab<5TVon8bFDPb^Y=reqhl=Z=)umbNQ5%%vQY+)r*H&l9>Z%-m$2^7#1%-U6(+ z@D8C;jctzg)a9ti(m>iNCt-{TCnnJAgHtHzFF$|snNjJH6ZrebTa0B5MdO_jLw=#8 zMB?L9adOeC4_Lzko30j1s<|IPzher_Wm$T+D*WKG%R?7J45EbfYW@2ya+FcE-33IA zLh9i{^2>wphQVzOe)u$bz#@(JpGDN+l?_C1+NV{10NC{bdGR^)eMIw-egKGiHAWM* z0P=s1O8Q;I_D$O%x6>p0Nzp0&b)1VZxVNvOuwIuR4Lz^;J;~-diXa*=<^n`vg$TZP+~#FV!c5VZ}3#mAEKIh?21r}bp-jh`Kvp-jxU)Gn5$dwNB zDD{3LA6JQ-O~P}XC$LZk`0JOZa)&K|zgQlp^X(KV0Nk1o?49z;yup5?sH*Vl=U zBhnT0M6J%HD&X=?{}KJi2Q*#YJm-Jnt+!J*?j1$A%?zw@Vc&W3<0}pk0|LU`-CgAd2>wv+|wq^EwTfm@#R8lZb z6(`2eGKDK>m6yQ(@IRj;P)h*@KL7#%4gextJ5>Nz?!H$9007^S7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L!a}fftsz+N!c>3vcw9fgs?3jrjuBX~IHl?da?6;ZR1ep+-Nd|v4Vbr78jKf!~{hmw6%CEf~ z=qfZMb)4i(x87dJD&WkTB&7Q5fKfqg`tD`mQyvH`SP%ASm{QVGMt=7h(xptZId2E- zyOrPuO3Vp5QpF6?g)}&tCe59-n3f0-osUCCeE3ias!xr|TQ~-USehE;*XfDZl0!T% z``^i$@3w!fai_XE-#w{*hc^Gn(F`RdGEt)oTDA{{cM7J7y|A-q+G6OZw+@A$FWxdEEKYmdu4w`ornNBUG2DzMweWZ5lkhYoIp~G zBYMhqX~PaAZ7kMqKHyFCtP%~2l|pM^iCt~A-FA&EXah%X$^JrVdu=yE4*t8Dy%KK< zx6M99qi7Liu*w8cZ%gDQT9M$$xCfAv>d{9O)`lI%n=J^Lo|PK)H^b0^mEYWk6b#;E z?7x4AN@9EE{z)LF2}8PhZs8qI#D-_nQiuz*Gc=^5@RUP5T;HFaA@>iyVi??$+e}ap zx20ynR;GJ#06J&vPD%E6zF51U%oYHSVys&ik(ZT5!)&|o>xow!fSsL*#SKX_b%6<& z`q!7JJOamQI>Iq6KGC1;OBb3SgN99A^D2Kr z&iT-1aJENtKTjc_)hh#P(v+{i-u)hmF_D86iB(abn`9e#A|%gsqBWxMt2lFVAjF#x z#hL)%cQB`2?7d(Wu+quSGt0?U7izBIYjD--MEFl*Dv~&IDBmNn^#PzM6m~%6?Y^|c zzDEt(l})1lVRQwj0qxT;U8@rH3UXBG0U?at4uAp)4RKW!;=gX9k^@=&Tml2?8 zB_$oW*|;V&_M9*qHxBgR7~N#uj8Ddn{r~l!Xl_tT0Rle*KL7#%4gextJ5>Nz?!H$9 R007^UwFF59nFIg;0042NB-#J~ delta 1154 zcmV-|1bzE~3WN$5P)h>@KL7#%4gf53a8!_e5yDyo007sK7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=IzR|V(oVhDH`@8ZVi_y0K!3&M)TNAF?8^dlq|Kk&P{eB zb#0&SUAlBWoMC@)m%=PAJ7Pb;vay`$tKc|Yp2w~j?SL@0cy^4_6}r;2&|zDmJDqPo z>4mVziANP&3j0&wpl(;F`nZ6F0h@K}>a8w9XX4J)Cde~K; zXzVSz%RGMq6c_4WnX)zpMvb?Z2N0@Qoe=@}K{(t|h+kEbFxUyy3DGAW6g_Xa8MMjw zpxz;MrlY&=E|&k%oNjS!;xRx?a+oc|oI_mArcY_ajt zA7Ar#rYY{*LHJ(HAiySI=fY)96L4ICRTR!UkMbl;O71%+8}~ zAb@|m&CtRz3`VA_2OLFj-&!nO29J`%hM@MPh}=zynWsL;vXyES`Ud5d zMy^N+3!LNOZS0;`^7jQ)w@c6;(vLlDKq!BuTkQT0?WVNDK#nOXYm{Q=B{ z2jUu_FoReH#^@->d~aeE@23@%yroZY4^vd?qrL=OCWL$gX(BLIfs_Iw(?XR1OOnN6 z_0IkvT!(v(yT0tE!?0>$^p8cGZts&&=<0|GGo-!P3>P3d)i);0Pwe186+}73bQFK? z)g71higsdC%(H??u}6h1f5bn|Mz}6Jy1&l0zU&k00ICG04#HGRFHiU U!de6X0N0bU1W5**1ONa40C$%!e*gdg diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.26-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.26-compact.zip index d46b4535b6afbd6abc0bebb6826e049cefb3a1bd..33c4637d4425005978638c7f9bfeba42cccf4a30 100644 GIT binary patch delta 1202 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 I1ONa40E$;e#{d8T diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.26-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.26-legacy.zip index 167c10fb1489ee31c15d95a3d660af75b9fa826f..426d2c8c41984a9c90d3951f736c88fdab188e91 100644 GIT binary patch delta 1154 zcmV-|1bzF43WN$5P)h>@KL7#%4ge!uJ5_@Acnw+v007^S7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L!cSC#fA#E;IRDA}%32$YJ=oNx*bv3?22@&>}SZVBQnM z2VcV3TpX3bWmA85x_V{6d;uo<*)yNW*lWar9C_=|H2@~M)y{hGL;q1Im+)`|@01YZ zBv7O6_j{VN0Ys4fZMlHj9nm4f-bNPte^e(=TsP~Se+OmR$x#Lcq{Ph8k0qGt{vzRr z{i?j6pR&&Alvph-n=WmiRY~QX05DCLvmF9j((GX!DMNo(%hO$3!9Cb01(E5QmWHgz zf$!y%HHG?v5Eit1F`zz*$f$?dOm2|JZgYvk)FSN$4mW_?0w=@SDbbTaF(ph^re zMqDUb$2x!5ep~ejSjVXY&JS==W1vbrVREdEOt@#HFUyBu{TI53Be&6)(9DT3_1@J+ zfQKkleQtqH{s(!&*Y}+=M||7}WWCSzt&u~+Zeb`fh3CTDi!^M4H|Bm|1?^E`iZjiD7<`pI%j4zAQn_*t3=Oc`NX z6%*9yJ7l}*E~2NB&icjjQo&*)+D6f}NnaX)gI;b#0)%YYp7<({KL&>^<%aB1=^S7< zNLQ1px0Nv1f=lAs;J&7iBhjc!2@fqi}INq z`3ry4)!1;oJz0EVk7L^F-X0#YKz~l)2`$h85> z{G7CT1F@mqcfNfdX!iJbQ9W9&N)-ezA=w|~&WE#tXz>U0?+h!YyT|A8jy)P;Q7?ZZ z5x;Ob{aGYKhMpq2ZY8tZZd+CVs@VvQWdCCs4)sQ=Y+pV}v+lo?hx~_7DlY&e%LZs3 zwV^A{o~R#rkhPU&G5-rBqJD%dCt)1em6L>L*(pMdpn3ql32pv8J$;=k&ikU;)8nzv z1Zl20f|LUC&hf0{A`jB1^ysb+$Dvo}*KL3A=_HjHza7JvQmOR5m+k}xm6+hwJz3Y@ zVx=Ttzerlh@j=BB$KTui()8NSFj}XCGhZEy|C+|@nNUjs0zU&k00ICG03%#GRf6_- U4O#>M0N<0h1W5**1ONa409}qMq5uE@ delta 1156 zcmV-~1bh303Wf?7P)h>@KL7#%4gf53a8x2cLXTVo007sK7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=Ize&vms8Eu~P41(-{7dLRDT4M}izCxyL9ySjtMYCtZXe zTC3ZWpO=BHMs0tuO`kzU`t;4GMjw@m?X2s@tg^Z>n^nf>Y-m^~RhBMkFv9I+Zmw~Q z+DBOanl{(v`zj^*as6`BMV-kk(%#z7b{%Z5^b=5CAeS7clqOZ*%2o!knl_712?kxR z75bqd7z@@W>sQ8pO%|ITzyUnAX=DpAV-&n8@sCOvcOTxJnf&EkJbBW0w_A9GhcBc@*c6J*#UH)sD+ zPRAwKoe+K-8PDR$MOO0qm2dyl8zZkY5P{lDN{i(}ecg&mC$XZE+D2&(C>)_aisKVP zY&iGM$ViT#fG<$_^h+`uH&{i=va#NrZD(T9cHh!btYb$N(u)2dtXX@;S{fv9@KfSN zH;R8aX+TNqYAOC7pHuyCv8XM&ffsTSs#l&M*yKI7Uyo~SxbFK7);C$YmyvyV8VMeC ze~rH|ebeJc`Z_6TTw5+*4X}7y*lF)=WJI5p?R0qgR$D{x7-%Ue6cWL#RwyMnYhR{Y zqUU~89Wza&yN(ykP%GWB>?NlyCan4)Ye#?4KDeeC8)%=(AHT#4iq`)#0u2x{>T_$F zxka=+=9>adxq2t)PZ8z7BC)E#)wZlla_F;Ar`-m*0TK~dGD!B?6jlYlZ+VdbsJb(C zQ}}{FG7OfVR8 z;ug<{t!G6qiOgXWR!I>qm|qSj8)jLcXQsbwtPy7%=YW0X1^WNER!#9xO928u13v%)01f~wb8u85 WKSGaO1ONcnleGj%2A%`}0000~w<0J2 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.3-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.3-compact.zip index b19bf3a396c17bb8dee576628a12417fcbd7243d..a1086e50829b35d5ffbe54666be8b171e9c23462 100644 GIT binary patch delta 961 zcmV;y13vt=2*d~%P)h>@KL7#%4gd{YJ5@4wtxB2$005?u7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L()3HU=6XdOS^YJDt5O74f~W7w@W>GTV^)Q6Y+>266y@ zX1N(`+TWhLfq#D)u?=X+jzL;>pMFo?JlMFJs>8(CQukF4RT1DOA1fl*|Eswgo8)Eb zOEAk(oGi}+%At@t-w3b4A^)?rXlEKHiXdS{ZgbhdHe?7W?5|+3fxje%aV2WW_P{cV zV8(i?xO^jv-rtlFKKV(y1rq6cg{GB0t>YG6YH<(jx}JZIZhb|CC~q)JE$t3duETbC z^;}QuOiDV!7S8$i+fFT4!e0%a7Ev8;1{+jL`)T27SUmJcUpmu5VNWDD6weZZniZQZ z?0&8cmLA%=@0^P+6PxjFXGw(uirm}iQ^QKP=Kkf@Nf@pJv>L3~@^I%#u!h698P7;Z zOih`2@PU8)n=)Z112E$ZVVbev%DQ$K!9`U$SvWVJV3dAbPbHNY&$LM5Bc9tNM;)Ej zkfgIX|uA?^Gi|$)nry-MbqrVacazerADLG5@BLD~z>eed2Sm=#o0KO=$T* zFb%UDL!=?9RWd>8=X30x${k{PiDwmpwSf|}E{`@a(NkaK6?=E%wsNS|rnKCEW-_Z$no~ z@?f#|goXvdAaeJ^7yh60`D!OtEV@KL7#%4ge{0a8z*7hCYk~000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=JSWqLoGpYVD(zebAI#w4NY}J#3vBA{i)3t1)uw$E9ND; zd+S11HsXs+>O_CInxhO$z+6O!>!J0veZ#eJR`rDcilxl<;Vo*=IU941EY}ho5)L}+ z<<-hR!!yLV6?uZH50kQS*r}NxzlF+YM3?}qbx0)GJ_V5FisTfEX>*qd66AQ!5>9!E z&hu!~Z#hd3DF_**rnZe6K6(P_BDhtdw>c=-7fVj(LQsE$P*%@QOrG~_4TdwRN1)s% z4tzcHJJo1nUypXe2P32qX~?qh$`ql_>??^WGr-?*h?B`$B^G!ML+noiE>k(oc>nUW z?==>F2<$a9x@wZ}zmXYlB4-&cG8itSYgP+)8SmygTDI=L1G^k5P=o=A-eXpbYa_a& z@L8C0c8hNQ97-ZiUe5IT0!KyO7UKcbSRp z&{GsD=Y##t;>z)yU3M(oj?)4hsTf!>+f7N5Qr7^l>8VzIF-R94o4)`#y7ZPWfWZqX zZSKLhsPrP(uBflgT#{xPV!XM>O$dGD&SC83rch?)Z zerbQi`Jx4pIxy8U^4X;*Jeg(Z%~%&vTv^>VqK|4>8V}Vf+>J>Ibv=_rD!SQBiIsz} z+Y+wFvE?D__~8_*Y~64We#J(#$Z_EoNq3J!y&!d*aK1Br?kfZPuTRvLh`Ou^%g^*p zQ*Ty)d;S~*deRlBgg9HL!!~DpHdrfW!e)Qs$2-K7f|kP1SWw^~8m1@pg-V%a!j{u? zm^<-jFU1oN`Lj|hxU>FdfEHskBPe7gfsJ|$;Xe@0VS;WmFK-!Hsz~WOla@yZ#-WUj zcJrQPm{3ar0zU&k00ICG04Z~DRB#B< VhCYk~000D&^#e%;&I14d008gU#F792 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.3-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.3-legacy.zip index 14e02b8c256c329b739f5941b45ac195c5309eb0..66a2c1e6608f69a3a99bacf89d8100121d99afe0 100644 GIT binary patch delta 962 zcmV;z13mn>2*n5&P)h>@KL7#%4gd{YJ5?k#HVK;p005?u7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L()3HU=6XdOS^YJDt5O74f~W7w@W>GTV^)Q6Y+>266y@ zX1N(`+TWhLfq#D)u?=X+jzL;>pMFo?JlMFJs>8(CQukF4RT1DOA1fl*|Eswgo8)Eb zOEAk(oGi}+S3{cWZAwAFg9>bvM?@7kcKZP*0{dnumR`u%Q`yt-S-s+~6IW@&7PHu8 z1`)ApoV93)pxdcPg@jRG`^V%cihWo@)N~{+x8ibWsB?c_?r}7;q^HJasw1RAdxl~h z)`gkb?>oNdL|nPQzGXC`kEjF@XHpkL{ZE$qICWyMctAE6c5_!*9*Q z)JuI_V_ttTBIuSc@X1WyG%KEO$QA*gCko)s|GQ_QzZN8oqp+?F_)GGq*oPBAz1PSS4Wv-&)cBCWgp6lIiTC2TTRM zzar^`XlDRp6k-3!O)HmRa6mK-C}LGQyPmZp{;A zJq)+|&6BGPv#xrL9GS>Q%%DC{h&Y3em;=8EWtrqE`!nP^;zzir3Jgz-KUG9)qx|E) zg${q{%y^%ofKrGy*J-f%JD%HI*FRbXdX`uB>BX;m$8hMY`Biny%sb8B-?6Sh;$#@j z@gTZyMSF+eCS?iFGs>Ft7MKaM9?JIX6fL8(QsuD&(H(E0g*5xhJ9YpZj8r|wTC^1S zV|Pl?Qg(WyE#CwDiA#arocS#>w6?=ywE}-xf@mP-RU^a;4BeM75)p*AqJ^KvDgf|a zKFD$aFNxwwK9+gjMZMK;B$3Z{;^!3xyLP&&lrbjB{!wnH5*~XBy?A4*mM_J1F&yO?J>Upl>?>n#vRZN4gXMP)ip9 k0zU&k00ICG01aF_RU|bw37Z1|0H%}a14#zm0{{R30Gm+7ga7~l delta 949 zcmV;m14{hG2)GCrP)h>@KL7#%4ge{0a8%xp36qWk000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=JSWqLoGpYVD(zebAI#w4NY}J#3vBA{i)3t1)uw$E9ND; zd+S11HsXs+>O_CInxhO$z+6O!>!J0veZ#eJR`rDcilxl<;Vo*=IU941EY}ho5)L}+ z<<-hR!!yFXzzx&)%;3b_1I_(QsK7*93}EXkTq3t>q7M#!FD1n(ZH80tv>!1}ws{s> zTY0iE5$JA&5nNYFtJXBak|xQD#ehuudsDj51~GYc@(zEB4Fm3d3#eUmo?KZOuoBE`j6f?JqDy~AJl-cye(GKT%BkfklETiZM$c?# zufZm4Uko%p}bqYZCpC>vJRJ`%n`po*_hm*g5MQJ(vlb3 zQHFntz1+lx$v~Tws(ubntN7COgKaY*_K*j;9bxS>n_2AoPYj(->r-V=cgzL=Z)|zB*-QiG=0F2w7em4F28>W?jVoXb}YI@Yz$;yDsvLDuL}osHV5!t z&Yq;S6&E|u%F0EaK^KZhT|_|G6;1NdR-ngcLBX#zOLA$4A{qkT)%1DpjL(hH0pfk9 zITP|@Zxja$Y^N1{Tx}R(x{49hLJb~a#-*Ol#Z2%1wp~Y1O928u13v%)01f~tb8re& X-j4~BjspMy1e5jyNe0jZ00000YRl4s diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.4-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.4-compact.zip index 842c67c65e6831e75b2df822a4e5ba41a804068d..ca622d7f745e9b720384562031ce9c123f5e1fc9 100644 GIT binary patch delta 961 zcmV;y13vt?2*d~%P)h>@KL7#%4gd{YJ5}guKAh1NiqHkm>0fv2zNig;>En?~;ywJ4!u@OVJ9 z>^8dsa|R9)*sgybl4ZbgUlIS!g9Ay9ohAP`Te2Hj3meUT_VMb+KK^J_0$OatfcnAEcGS}6Ir{~U>h_Z&@6xN^`B9C#v7~|c)reP>tQEI ztV;KFFhl7B{{%6`0NiS?ci_-!P@S7mv&C#l(*Svk|4{EAhem6cqKhP?@{*4^-Ch!M zZ6^f8dUwmXd0xa&&#oJF$JCk}j2My4BK&FXOh1sDi^l55Gu@7cR-6iSw4)14q5)fI z1xv^A-DwwMUvVwa829oFpgiEWroV=-<&q{pB9cmjFG zSX@eigS|R?JQuP^_8mw+CmCTKW|V?ED2mJ6n^rH8qzJOIQliS@4MW~7m?MUItsCcg z)k}kz<(?@O^_p`U*mAY$hW!~%M!2aYH5>-0W-otC08J+OM`b7+F2mV$bYPkWZ$*&5 z6(|{3p;mPT5leS5=gMTXcMJAVg`Egq;LJApc29t8e*uW^A*my?>=6?WNg=z?k0HSE zwBk{9D`Lzm8lzikhj!z~TaSRCNlE%8vOPR#$V9(1&pD&dbIa@N3h#fLY#c%6HKQ2* zXfS_6(!(w(u5(7%+U7+*ll?o&1J2DU{Ix5A3z~1^qL(8v+S2w$$e^rIs)DigJ;_Ow>xbKNK%J2gUYb=%K$NKftJ3lqprLAhRc)?n;rZ~`eGSjsp0SILUi09@tV z@nN!l{S0+b_SNA&3S_H2pFfv}o%-BG=Bj^t<2kR%O{sz#$-o5^7Io5~z^zcvcQrud zT6snuSB8EJGuEX7n2IE{RQfCGfy;dxvZ?IZ19F*bMi+L>|B!NY)!FjV7J_q;|L z5lNLla=!yE8!5Uk%xTVsbx!fKcFQnd^ge(@KL7#%4ge{0a8#7CAcBqq000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKdZ}WUORuv5}M=kHswDAS?JD8e4{8VZMqm$RN1$UUXt3cU- zEXtO-hN&*T#hHJ@qR3stejvlTaH9(`NXl>M>`OWIZvQ>@lrQ2Qyb7iYzP|MLc%60yGz}`z73&6{oB4N@K%cqjFaG>79FDgM}oS@s}$e#H9u78 zk9Rk_z&F{V5q#&SgVX+Q&MR4ZFlzN_d4#~}&j?_wm0ExBh+1`7nN(5IwDaLqMOgs@ zsh8n93AQ$c#>LLsf`06Zn6!v;p#xrd8%}!93~fliSDnONB^aFB&qYBQDQ_KlO|W~! zQq-zr=}9MSqGIi(F0!*EPvW#JWj;NTm#0c2ResImS$RcEM0r zcY(C%+q_ThxiVvc9baR$H~Fhz`9*~S6CnHV!M4P(Ifidt?POh#Mh~1JvMm>y%JIUY zNDk?j5%fK~JhyQyZt8>OK6Xb{>nAyyEuOicTHSvUX2Hin8^p^%G}pxr{o*%p1e)-E zbB$VtFzdFRg|RA;t`>Hu28vvuzvXrq#!io?JbMfL4c5S^2aZZAZO)@V2mUK`*zgpp zK|dfC#CF^s=NUn!JI3R1($gxGGwmNj1Y7@NZTK7}BI#IbwCX=B!~qlV%PBlUTZ_!ng)mE18omhj^oT2tp?n z(xD@>L}H&5oU0BisGr3ms+O928u13v%)01f~tb8re& Xl(Ha#jspMy1e5gxNe0jZ000001ggSB diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.4-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.4-legacy.zip index 560ee388bf5839288f6853079e38597cef5e8eee..380b08cfcaa5282926e2a47555fd52714c34a8fd 100644 GIT binary patch delta 969 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.5-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.5-legacy.zip index 6c909e4f2deaa5ae75b9ed0408f39bff53d7eff5..0c3808e7fbf16032c5b3c4efbd96a55bbd0e3cb7 100644 GIT binary patch delta 966 zcmV;%13CP+2+0T+P)h>@KL7#%4gd~ZJ5|5}f90P8005?u7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df3L>Zn%x|vL6vEYx2q0$!hi@82Yfk0pZwEpW*LBOodG>n( zLN0_u7IonSg7$w8)nu+JOWe8DO|^4QXmyrC1?um%oQ|Lg?qm1-h{1{N5Ut;FHv zHvi{x6syrvm`(P>T9Xb&Mz#DMhVHJcoHGJ~(g|Vd!t%OpE_IRlc}`RPDoxEU+wF@c zw!A}xbi9AXIHW`fjK|ZyUtu;dI(eB01Ns@U=qij03wy+?%MLK`Zh;sD*@p;Lgtq5Y zpu8u48Rk=ZRbJMq0(?t)vFtdo%kG;s==y~6h8t_{-RY+=3j$FQPU+ipPK_-RggVx^ zNt^W44_V-l&zvuOUl@NF2v&-A%^(u}Cw9r#70A%nzUIgA zIN=?E8iHeoOH_y49=5Po5Z_SPCL{lHJ`O-?B_>*B)cS~^bWy!s#i*5hZ3*8D+=dc$ zL^bd5_8%2EOdz;sI3YOqKa_&MBQ%8h1LywBg3jStc$OwTSx?HCTX~Mh!KK;ic2{!D zron%_!~(lEA6E?_pzo{mi>BNTqLBq5bN%9gCb!kZ?$p$S_U^}oNZDIDy{c`@;;(@V z0^kf(PFpL<30*oxU)%g4V3y{NA=4>od^{cqBbTK!tf9MR0VVX8v!@@D@Xtp;9ogK6 z>L#bx4!BEV%z=*mM-;e;UtpOSWSA3qlShA8#(KbGdp2OZ$?)m`*!mu`&H2MOuiKO1 z?OgHGNj-dm927lc8MX_fv5o5aNG7J8f=G|#z0JUj9;9S|AY@f+@@FYYn#POBVA035 z&kv*IN$V)bHppfHbrfkHYmTr>T&MyJ>cxeC^E@2oTN2S{2eHu7N36mqBD`h)F_s%c o08mQ-0zU&k00ICG01jL`Rlov&<(~rp0H%}Z14#zq0{{R307+!hmH+?% delta 956 zcmV;t14I1D2)76uP)h>@KL7#%4ge~1a8%qh=UI&d000CI001PD3 zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=KHugOFG|sTq`3SW21fZ8YhswCef5GM z-y0`v+awmki>TI4Y)y>`1uTE^%oDMW_0d)=ruS@2QS%>#VGnF#TKS)~g$}q4g*$;n zW3OR@o;VpX+r@6{erENtjccU@xqvdo`>W-HQ4-$8T@4u2hd2%KN^5%g?ySVOnf!VT zYq)N(S2R|UmDS;CC#t}!qQZK3B>Tz`oQ=lRh~h7_gTQsx^=IB6yOMtsPd)ZJsa}_( z-0dPqhmAl*Cl-9u4c&+ev{828hypmN-mqq4;5@_uO4>l_Z+C~tg%~RWe2G$%W$wC) z8Kv)eyfgW#tB~23|GB?^CGE;fj-*v6IKs2H&Y#`OKjV2--Z~?+n|_4M40;#tib-;e zOCA?<^48Rl)+`07rxAZFSGU;%JD`eAV6%9mZ7_tm+dQ)M#?gb+2%-}ZxsC(8{6!EV zp-r)DI~B*vQcPCv$TRy_-BpfWPhS7+#T=9-4qZUw1L5tNvQGOqK|R2<7N8hba{q!} z|9~;}dG6`b3~IlPn5rK8ZO0)iK>je>bwWfI6c;CgyJ?I@11^7i63g=n)3L;!`J!l> zn+FLvOXSP}pY32%7!$0k+HsiW<;m9zAs614X!v)-UJeU=97t2Z<=K>-ywK6O+8Jtd zs|>O}Y*?2R4drf0lnmAC#$as26oH58yq&ixk0TxUnvR!r4#w-=2 zl7HTDjssRS^BlUUXp>87J@x&RIpy-7z-kxBS(GsfO6jH7b6RZ>sV37=IunU=yJh8# zC_*0P$&6JgrZK~z-}r5M(AKZxcg+2gtw@_iW=uNaa+!Za>xlP$5+~I!D;GwwX4R%x z8dg}Y96ngVn&$CW_8{=&nr}e&E1`)mb(BVdp_l5a_ld=HF%b#K#Z>a0)e$g=Qxg|e zJR6`MmB?p1m5CdvdY07Yo4=AB5|$_CA`x9E*0O1~q-iHrnf~{YekM>$0Rle*KL7#% e4ge~1a8wE0H0N230{{R7lllWm2G0Wk0001s>C1}% diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.6-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.6-compact.zip index f4407df8510f52b19edd7dd547b0c4b2c803476c..ca3a1023fb390463b200409e055504e37a004c2a 100644 GIT binary patch delta 972 zcmV;-12g=)2*(H;P)h>@KL7#%4ge2aJ5@`^ZgZUj005>A001PD{sSkGLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3L_4KrvoI39+**+ZI!T|7qGSKdzFdNZ;$*`Y;1W>`@wt+WFpSK!Sl62-(~N7dI-(L0NC=z)NmD^{)yQ4@&(o~E zj4^g`un{WIsnMBMLJy5CUmhmT?7I=J#+r^`(s)5 zpLn#C@R{L+<01LKyTmpmPJbriMyQHby zRAvOZn7MH(HiblPqQg~o{#P787Yk;0P5SHp;3Ic{XebeaD@|S+RkrEg68Wa1gfgVF z-=m~T|ELQur84wQ)Uwv7>t8}IF#Lo{d+gx@YM!Z{koyw?BhO!x|JT+A?Xs#FDU2h} z|5Uz!q->-+DYk#5AS`Qt1wyv5gPgYE&$O|iq2;xi4WhXg(M&|xW-QY`7hs@=(Ba>oduFwghOAlc9!K9!S>J$@Vi uL;ovYqyQOEO928u13v%)01f~TTsu`u$8K|-0{{S~lk5XY2Hyh!0002*%h#U( delta 952 zcmV;p14sPF2)hUuP)h>@KL7#%4ge~1a8y-_{+^Ko000D$7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=Kr7$JN%txK}KTGEEOW>>ToZ3VUU0jFIaWBziFS#<&$DQ z)Dwc@YS+Uhp~`<9>|Twa&BU11#!@RsTPMCf**m)X)USfCdw;maYI{~g!H5{3>)0fp zPZdvjs3Jx`RnlGaZ|KoM%!)VYI7dfkRmD`+RHq!$c8a;L*4%NZ_$U8oZ0Xwq0p-y( z5xGZ54HhcBKUxPJfMLK!z z0j+I2;+Dt30gsH7$%}L+NYJB@&$+4~LPB19=-c;Tgg z7UWs1Z+czx`M<-0uv0CXtNxBu9X36~CW(IJV8|^8uEve)iKN^?SWzDgKU2`go3(t8 z{%GnuWK^Z92zWW<3B||T8BRN6zLkB*U9B~9qeg%0*Ot3k390}?wl`VzAES$>bbH}S zMsyhdheC%d94ogjnrqy_K_-1kT{UKc^rmS7alr5S?-m7kvrX9pGQ%3zFau8{2QEgt zqk6Fz!)NAN^1P~oe4v_9;R?HC^<@j=sF1g3qScz%<0x>nrgb9nyhGOrKQ64353cr6 z7jl1??*V+mqtP+7nh-l{&WzOoV<94`K_R&;Tj-~!#bCgQvy*xwU&1bGM!i7`uNK<8 z|3xnvVv*-?gn$q&@rAR=uvc1q=icsDS3tz#OMEZh1T_bZKA)$$bjQrlYo`& zUjC=%@>kaWp1buqF`*ul(?@i+X?at*CS@Tk7;&T6;7|Lgl2TAh0Rle*KL7#%4gd`* ab8u8uivFIF0{{R7llTKk2Gauo0001XsMX>C diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.6-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.6-legacy.zip index 8164be9690fa0ee2d8a1c7d55bfe22df7077ffcc..886617fd8571197ec651d3dccdb98f02bc158529 100644 GIT binary patch delta 968 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 JAp`&b007fK@6iAN delta 1028 zcmV+f1pE7m3H}HhP)h>@KL7#%4ge~1a8yjBDAm*h006cQ001PDOav#9LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKb=L3DlJN%txK}KTGEEOW>>ToZ3VUU0jFIaWB zziFS#<&$DQ)Dwc@YS+Uhp~`<9>|Twa&BU11#!@RsTPMCf**m)X)USfCdw;maYI{~g z!H5{3>)0fpPZdvjr_OBOaW2JEP+HuqUfw@;oe+Vp2~VcFlU&x!`=RtX0&i17l(+t7dfA#%IH4%E^# zg?(ark7MFomQ&c==5PEt;m&CWI?=J@H|LVw8k3ehR*W@W;^@xkzJC?f&pwL;i91w& z%R!G`rEKjxYq}f!iKoJ10bs&gJ8OQ2EXO2B%v125Jagto~@t-q!{&q$WcT z>N1r>hrjg0z|7O?h(r^TxXPF4q%u5@Y_fGp$!%qKydAE1G9B_o6@2VNMNt2rgtyqQ zDV-Z>vY%9!GgJZlIwIKmiQOGwkY4?C-+B&%B;B`!RG6UqJzam(cEN#>fFr25`JX89 zbiN-PjKq~VZY_{<`z6@3^=^GnS&VQwogDHWwXgf9CAF=ljzcr#!#!$xAj}kKVPbo0 z-i8Ah+bh+KL}%`e><+Ii%<=^N@$IhT?-XZCv`Ck0(Y%w@DRMuqF*>hk!`whP}|-WA+L}h-yr6TW!1~^zv5gF z4QWDRqIWW+QYh}lc_ns!8bgSBi=DWX*j7vlH871}_P~EFMG2HUz^WhVsc){`NYRhJ zfACdT1XfaP5V5>NkcwLdHphnW69z96xWdWI)wd6?(x?~8!-?`fNH!7rD23_PR$5oMie0jekWH*2=rfoetks{ciTE#9u6^#lji zZ$j?=UYb$5hdr{ncJMVgH=AH`>%gmc@Qr6BK5VhEJ?^P^xOBB_YBD&j82agBMfi6q yRxEj&!r%Ucf+SE&0Rle*KL7#%4ge~1a8yjBDAm*h006cQlRE@R1{MSW0002l3-yrz diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.7-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.7-legacy.zip index ed1708f04202c72c429d3b0e4d0bf37382736e42..f5374b523cbfb7017d80cd06232ca630d692b8d5 100644 GIT binary patch delta 1030 zcmV+h1o``d35N+7P)h>@KL7#%4ge5bJ5?tOnWo(X003AIkr+;YAJ=oe7BTbcpx^-K z1=jV{4gy4dH3+yu{_QSp{rx!wdRzcnNN4<<{AYIeL_nHT&h-GPFlNx} zo2)mH&!3cZn~Y8l&m2Jvg&Lq$a{8>mdmF&j$0FBU+5i>K<744`+~9GT`ww(P7j zGwxY8h!!rE^gM`3hyMR!7v6R?Z23PtD_Cl*uGS7fNRn^Al*{O7au`k8c8>^9?whrK z8~hq4YGY~t#m{j!j_8~q{9&TZlOR-BdEK4HUYUeUcG@NFry#3^s>=@myHfb}%$K*b zsV7zh-cyu+&j1+j-ezwQNJnEV%_oVEbEq`oV_p`qI&OU-{H}jLe#N|{o<}DKaRO*U zwjCcfQkWW)QK(Ixsb4CiHV1U%LvBbDlrKYNr42-{LXMi0f@DaFIW|S;oMXhhm+w!K z8EX#uPfOU04JlREVHsw8Tj}Hk$%6qF`r~L@99ma@-)QMH#-mrbb4T0fJ@d{-Avo8# zC;;Sx6=(X#^xbN=l)|maV>6j4vQhIYrqP%MkQhWP3AxJJp$7eLaFH1)=X|>Rqimmg zzP8sSE?#quF9dr^RitPd1L~jsrh<%9nOk!qfcKHGP9Vnrlpth0RzGbWc~B!C%5}ML zh%;$_lCopm?*u4IdfgZRL)6g>D>fLPSh`r+y5?`+*H?SzWp-n=$NY^{{qNamXza*V z7aB*YZ;$*)2bkp4d!$fi51eJ+32>NjKwsr-8xF-D)Bgcj#LP~9*h^(*M8aEE2sN4| zKX%RMIH|s@+q{WAW*R5*_<%Ye&u8P~CYnk&=>Nu@^(!jd(K`~f+~7(<@MPjz$^JVKSx zR-V%uiOrB79&4(>upDwqkm;!l1S`$@KL7#%4ge~1a8y9K-0s)|006cQkr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6pv}aX)y7gQM_VVpJ=r_D`_!+3uX}&E#cF$2L&1m`pzGKq zpHCG}d8hfNd4*Z`!Q%mF6`z%=^ypfhesZI?yN*Ruv@0)PTKd7~PsHGWu{zoXe7~Od zf?+=ma>*OpI3jJI*eEPP2jzYFuh5)&KPQy??o9aBCKPyoSbMaN*mK*N6@0GbaJ`bm zjs5dVq;v*yW0Wz0Gb1gtD(9zZ^Al!rtpa>dCaEO9@|c7M##AOaRmm+T2Xqj%4+LB- z8;%bNtMW!f+8k6;w2&ZRg}c{R6J56P{G>`R34p>yRh->s{tH$N0iyNZT_qZPJ(<2x z)0JKX_B7Cc-XPYy;AT<;hUlym{{S`UGpeiZ$fiC=dt zN6Z8gCJ4umeW3-AcWb)x&DR62gQfOGjl>=fWIl3#Mz1FtV{2GYvzdSkncbm=3H#ij zYZhlaU^0c&+)lEPLZC8*Bh76~LTxY403|O2E0HpgAp4NW#0`-5w%vhF94P2}W~0Om zK4KssP4+-mpo!Knc+%8+^Uc8Bu1y}A#8Ch<0Uc?9*1^W6fa_vrwPyY(VI$HI8*XnS zuK;F$^5Im#W{Nt}_HzAVK}m3x@ShV78GO(yq-EV|zm2vrwL#i|H_Qto#bIt?JybW0X!&D0P%4 zih;;q@9h`dj-6RZwP}NmG(w`wjwN@4Gq`hqh2~a{Kc0By84>{|@7fMt1AS)T$G!T< zokXMxkkumS2$ezT+M$zpnU^k{IXS)+Itzk(ad#4%*ljEV6XXoVwkD#c8`5-*WUIk- z7E_^_d!Gwm8Td>GG)Tv^1s$2vT#FZx`d(M(3j!nF012*?4!AdwB)pyXL6ButwK(Wi z?467{U~bomZX2!ZX*M-2(tBeTOwF;STd|Q3dM_@#A<}?D!`TzG1E>j*{|n?YEPWT4 v*6;t-^~YdPO928u13v%)01f~ub8u8Zx!ms90{{TF4wE?qNCp}N00000t3l)) diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.8-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.8-compact.zip index 46807909d51a541f850566c0364c5f1a6d34fed9..ad369947e94fb9a0b2991e953f931161f14c0e59 100644 GIT binary patch delta 1044 zcmV+v1nc|#2#yIGP)h>@KL7#%4ge5bJ5^L!XanQ}003AI001PDKm;d|LL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3M1D)bh|9P25tl*ZP$hYFA*t_Shw2N^!!_h zv#2FkNemLowG)p_ewLXeAII36ho65OT1vwh0`Cbf zhvg!V@>VZx7#YTer9yN00@w#KJQI|NBU*hL|4Q@WPgeq6@bI{5^ZJ^rizo@C9Pjlc z1G}+_jYZDY2)Qa1-0CqB$E5i5_ambC2<9Sz*0?8@>5*LaDv`BrF|hVMxNeS%MxoroX_Y>E3YzQG}ErB$C!ysaa;f z8p#53<(lM_hna%+WEry$iZf+zkw#U4#=EE2XNN@+zhJ*{nFX3@J0r7^9SI?`Bvo)5 zjG30w4f9YR@j+AJ!t)=Q$PK(qQ>}^Q_k&Bo11vkktNJsdkSl-RiRD!#J=gg!=N}ns zd4W3_VoKhr;8Vu~jsJF)J4d3_#`vubOA_^yT&M&1?G@@!k6_olugEjri$>@%X@?(F znxeVe{o6&NC1iHJ*E$Ep>1yjb$%%oMW$aKAc5`y9H;xN>oBe9m;yn2aMdrLtL7&mf9#5fF)= z1xGAP3-rLrc{&l=`!56~su14U9bA)5t`yfibHvLh_&|U3`@DJ0cMegrRee=a;lA|( zSvhv09254K$UJedf7`&X=r$^(5AnkSskR7!c62`06$tv}2UY~O9S`^fdg4<2u>$+- ztY}52BOvRf1tFef6<@4qQXHIRNvrF?`A;Q4I7O@_84!$3_Y+R=^i0<|Kc+xTOK@*3c$mnK#C zkIY~m5<%=?yTepZ_5xSNakZK}_y4OMh)_^V0Rle*KL7#%4ge5bJ5^L!XanQ}003AI OlP?5F1||dm0001?Dec1m delta 1027 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.9-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.9-compact.zip index b735fe419068b56385f9745bfc403810a03374b4..2646618afcad95ada97e2f5a7a56fa341887cb19 100644 GIT binary patch delta 996 zcmV@KL7#%4ge8cJ5`#1RUx$l001!#001PDAp|FpLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3M4spWVkwemiIGTY&1RWai+-g2xrk|?UmzOT9U9o7|a2Z83S2pH3#;rq`6VPE`{Ilx7udZ=DkWh8h?AQc2AoH%abd5RkTt zE>c1nSOszq@R!09OB^RN$aDN4ofm zW73VgZs&4s6xf%4S$luT{?*VGkh_f>7E7$9H_Yeo*`KTIPu{+r#d&5ZZgT~97b?lT zhff7-*#h&xU`n7@*3PSNN&$hm6}Nw7rJSe+tyGe~Ur?cp zg7%h`j~Lf5EvL)*zm^*QygN6Z2#z_;EF7@b;3`JbAg&>7DVu$U>1ZQjQGLRZAtQ}b z;0eQ5MH}_cQj@FUX@y00pRzjzE~5vWnT=q=3uKJWz8zEh0Yi>(_n@?dp5e zsVW1Asr=vkyrh3nBb4mcy-wy;h9v^HiGVqh&=adK>@HsEIesCF^E{l{<~1~)k?+^V2psGa4b3Q7ym(a5OkabcDB5HE^gf<@9&VM~nA z)odWJ(9$sjteemQ*2ryQAP)DjBwl8==GMRb#IQn8O928u13v%)01f~VTsu{ofK?&2 S0{{RqlMe(*2KNI10002!#oE09 delta 987 zcmV<110?+42;K-6P)h>@KL7#%4ge~1a8%>68hx|_001eG7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=L-Yg=GUC>MC7Mm+gdPFf%ySaOXsY;ma)re^LP$Vyp?1;(fqy~Z=`i>uV>;CqAgDHne z2~!Pm#(r(b=G_JWO*c=8CQ!j7l~p(|T_en=c=$Db2gZNtE7E8Wo<46&10JB-h^m}r zXXSDA%ew;h)wOl}m!D8mRnSus_0Vi{5U-T7=UoOxf2xF=cCSfh11psOL9sz-+%btY zop)08fz4V(YC7tO7C7#1$RM6P`w3R)mdJ1nb5r#UGdLgQktEL|J##N7t+i6X&-)bZ zNrXlhc)Ndj$5r0S3U#4>w=u)#{L|9I`hzR|JCNaIc!Ws^Gw1G+kEJM+iTAQ z`Z-1QLC$*kxu26Ovk^-rA`>)y&uPvrrY^ef$qE&sx}q#d9&0$cwR<1iU$*G(16Y6m zv6QGal=_`h?v+L@<1@vyqa`?6Zj#UR3^Ffp7rTE*x--FGc^&c>%Cp^ARY=liei?Xo z#K(VKunRhm0ihiPW=5L8g$ERW`XWEA)|g}c2`ZFA`8HmzjrDl&K`Jac7g=AyLIq)tc4x`8|eXyGU^GTMrL6@cB+r&p(wC&OvyS^u8ydgnC>ti zYH4s6OzkJYx(u{y69tuf|Nmm~Hvmve0Rle*KL7#%4ge~1a8%>68hx|_001eI5ClmE J_5%O_008s&(VqYS diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.4.9-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.4.9-legacy.zip index b735fe419068b56385f9745bfc403810a03374b4..2646618afcad95ada97e2f5a7a56fa341887cb19 100644 GIT binary patch delta 996 zcmV@KL7#%4ge8cJ5`#1RUx$l001!#001PDAp|FpLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df3M4spWVkwemiIGTY&1RWai+-g2xrk|?UmzOT9U9o7|a2Z83S2pH3#;rq`6VPE`{Ilx7udZ=DkWh8h?AQc2AoH%abd5RkTt zE>c1nSOszq@R!09OB^RN$aDN4ofm zW73VgZs&4s6xf%4S$luT{?*VGkh_f>7E7$9H_Yeo*`KTIPu{+r#d&5ZZgT~97b?lT zhff7-*#h&xU`n7@*3PSNN&$hm6}Nw7rJSe+tyGe~Ur?cp zg7%h`j~Lf5EvL)*zm^*QygN6Z2#z_;EF7@b;3`JbAg&>7DVu$U>1ZQjQGLRZAtQ}b z;0eQ5MH}_cQj@FUX@y00pRzjzE~5vWnT=q=3uKJWz8zEh0Yi>(_n@?dp5e zsVW1Asr=vkyrh3nBb4mcy-wy;h9v^HiGVqh&=adK>@HsEIesCF^E{l{<~1~)k?+^V2psGa4b3Q7ym(a5OkabcDB5HE^gf<@9&VM~nA z)odWJ(9$sjteemQ*2ryQAP)DjBwl8==GMRb#IQn8O928u13v%)01f~VTsu{ofK?&2 S0{{RqlMe(*2KNI10002!#oE09 delta 987 zcmV<110?+42;K-6P)h>@KL7#%4ge~1a8%>68hx|_001eG7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKb=L-Yg=GUC>MC7Mm+gdPFf%ySaOXsY;ma)re^LP$Vyp?1;(fqy~Z=`i>uV>;CqAgDHne z2~!Pm#(r(b=G_JWO*c=8CQ!j7l~p(|T_en=c=$Db2gZNtE7E8Wo<46&10JB-h^m}r zXXSDA%ew;h)wOl}m!D8mRnSus_0Vi{5U-T7=UoOxf2xF=cCSfh11psOL9sz-+%btY zop)08fz4V(YC7tO7C7#1$RM6P`w3R)mdJ1nb5r#UGdLgQktEL|J##N7t+i6X&-)bZ zNrXlhc)Ndj$5r0S3U#4>w=u)#{L|9I`hzR|JCNaIc!Ws^Gw1G+kEJM+iTAQ z`Z-1QLC$*kxu26Ovk^-rA`>)y&uPvrrY^ef$qE&sx}q#d9&0$cwR<1iU$*G(16Y6m zv6QGal=_`h?v+L@<1@vyqa`?6Zj#UR3^Ffp7rTE*x--FGc^&c>%Cp^ARY=liei?Xo z#K(VKunRhm0ihiPW=5L8g$ERW`XWEA)|g}c2`ZFA`8HmzjrDl&K`Jac7g=AyLIq)tc4x`8|eXyGU^GTMrL6@cB+r&p(wC&OvyS^u8ydgnC>ti zYH4s6OzkJYx(u{y69tuf|Nmm~Hvmve0Rle*KL7#%4ge~1a8%>68hx|_001eI5ClmE J_5%O_008s&(VqYS diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.0-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.0-compact.zip index 75023f81ac53180c5291f8fdcb82fd00d4c412f3..e4ba62b565924b1070d28599190f69149bf07f1c 100644 GIT binary patch delta 1202 zcmV;j1Wo&@3a1JiP)h>@KL7#%4ge%vJ5}#-+yad;E{{AGW)Y!Y)f13=mwA}X7(#t+|H$K=;Il6!5b0O@r-aWW&R zo))ce?FH?G#zYF$Pi-!#XLUncVBV{59(dAU68B;H&ecx75!n!(&Svvebv|!v$L?*e z7pq2`h@hoOHxZi{5wr;zcG$1kwk|}WSm)2!YW9EY5Wl;Rk#hs<;m?0r4xYpE0e$6L z$^o19hpTa!9_PhPfU+Py^Qi_NMRS}WPa4V^E{YDCMmkXrluqTf9jpR0KkaO$q_)t zY0NYC&OKV4kLwYyABlh5frfyKBv>GQTe2}DS@j3DP{u1X3))nB>&LthM-Yd1$sIAd zUke_xybd?5Bb`ave$bI`Fah;a)TE7SW9%=fEs)xEA@)dlpKD75U0eS^GCBenx_5Zq z{w{;&FOVBEIxEJD9>|-P;AhWAfS;u{1`I4zEW@vod=_-3iG4hd1fA-M{ggIYM*_Lh zT#8$3g5*{ax&MEEFVjdQA^U2(@0rN5zj%OFZ@4>fBC7)~WUX?^jFIBfsooTXd62*o z8PEG7MaMV;;+Z(je|HdM=Wm4!Ky!x(7RxU<$jiUJ)^_Z`T)_P5b&>p|uX8pg>vD+d zhR-)uA#ZIFv#U&sOA@u-v3B1KUlTd!(&7;^7_^Qie+7RT21R4_dJAqHBf93-`(HFn zXdsvDC)PCi^J|EO6Vfv2<`Er$`z>y^^gwbPM3#SsiDqR<=CkkOA_(&x0mB$t--NFH z6YZkG;+!`nHu!~Gx)N|H?PxP~fwDg0z7vDG#x5sgSc1)hG(OXHRoY2af3BQd7z-@= z!Uk1YRO^33SGz#lze6Tq&e72)d0?r0Gg?TTqwSyU>U=~HG5L5^f3p&`riG;-@_NVG zb0D!{0ZX6f`a5de7iA!18tr z5I@VEfK3%`Um#3s3VnKQYx{oxxDny@~ delta 1194 zcmV;b1XcT|3aSbhP)h>@KL7#%4gf53a8%H*3POMc007dF7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|Gw1@H7&Vg4C**{s)}1_T$1V6RGmPArGK0PH}-o?5+%X z>L6N!hN1j5p_G4K@s+B4$yJxfZ!tUYXAkvecSS%`P_~IKR;y)tLptQHwBa_NNv4#X zhRUH5GRGTwg}{Ph+Qi+jFkot;aZRJ@mnCJVZ{P0ME}FJ?%J+KIZOC;nUvpFXQxkbQ zB)PTHAGriQrqX-6*|pG+3ccgpy>)F+9^pQ;mXhK1Ap)CNO9b_UkO{1vl0?H#rO_51 ziQj^EE#~r(pkyo3v?n}F$F!8!hTRdR>h4>*O+fQH;D6WC7i>z}-#u^YYy7yeU935RNX+tC(R%hn+qa1ZJQ;Q6IEVzY9&S~%&`at*) z_p3Lbv?Fow;3cCd+dySrXyykDf!a++?hEeDBg`&8Th%^gOH=2rm(z9?14{f4%WWgB zS4c(dT{d_K0Mb2D1!{tE^8vD?g87_Fu&pc{#UwU(@fl2wzd0MSOJH94491k;y{ZRp4w5Wo1| zd_nM!k^#pYg2piL6tSHv7&9E@w&!^0Wy=5tTd9%ChY0)BpN{R$W}dVjyNReh)6jo( z)7*vDiuO3%jRw4$; zAU9D-tc7UQ#xi>STY8Gi4H3^&PLF{HhntveJ1)1;t>C6pD`!lnhm!lOOmx)v4tS8Z zNs*$Abj?e6WZ&4+yUCohLAv%jKFNQnY?L`t9Ghh%*b|kmM`KuzrvBd$ufr{^D|z(n{ppHHCo4EhIY zG*X}V@KL7#%4ge%vJ5_%qm=Ib7007>R7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`Cqf72BQg)r^|#@7lwJExX1Ps4UXp(FuZ`r$*m=$t4N` z@x((g2BTt-K(K#!8Ux}~>21cl1E_m{w60$${{axB7~>vRv|j$V=(2bf{O%+1R2(pr zrQ63$;_e_^HN>-VO>N-_9cs1i;FHHLsaqSo-%7U3)%X}uvuc0bf=NVcC3Ny@^5M(Xt32ts z{Pj-l^H5)FHxZ<+Ytj`xrm*k~t@D{LrrHlrMu^*VTEN7X4HildDb%@SsR4z#+aHt< zcFCJ7!lFcTU@QzBW8nOeGPxJ8yu10qD<_r!(%A6)HA&nZfr6CutC8Dzw3N_s)hrr8 z9TNc9IC+1uiv83g(aHZ{p`ASANU*5P;H$S&w6Hv^hw&+p#lmLV+U{V8)nl`153xej zTxF+sdd4wm*R3*}?e&T;Xo#1*&bhL|JU4Ep(YRw}A|&G2H$*>Y%rB8ibizXL4xm$% zO%PMqJ@|H)z7kzih&Q;{4QT_8G7u(>j}LO594UX#8??w9^))6ZHD%$jl49PiY03zQ zz9Oo$E+@!vwu3_F^zhN@uTk^Xl1V9GjpB1j*64`iVTcj!u2b%zM*C#Ft5s*pOVko+ zuuxyVz4$G6H$;{J!^jbD`m|z8or4e#t%M2S>&;u$D%rIZ%y;t!4zCvETfMDp4(ZN-s4k}-cti5Z7fttI8D@Hb zJd}v?QPN(r_5N%KL8fYGRe~;gkx{IanyJ@Kltv}*Z0kMQ{F4l2sr-AUiS5kKj06^9 zuOI;zG-q5jS{2o`qo7aib$rhh0%wieXMBH`>^CB~@e{ajWA>^<8Pa#%BZgY)iJmC5 z43rn&GzTEV8YZRhMaBTD8iRzIuX!2b2gJdV#?BtcOETAkpZv&R4t?5< zlFgJHsSu)=LvC%A?O$Vq>A-1U#GLKfWEmeW&G`O)0iR1@$kIFWe#;_w8OmjsBrbp7 z!qnia8R7vYRNddV4B;lhCRC2p)>(k@Q#_#BS(gttvSd<;N&3??utv$B*pKFh6Qwe* z_Tk#NpoJs@m&Ay-_EbOKz>?}mnsRE#UPm33^IA#3JIMCQR{U!+_?ny>)2i(6h$H;% zRr-g}T?C2&BE^jH*E6%9fY@KL7#%4gf53a8xSI*0Nj#007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|Gw1@H7&Vg4C**{s)}1_T$1V6RGmPAsX%ULbbhFF5uU7 zh##RS665jy1hRidLy%SkH>vwEK}CO1B&r0lX3?=v4|bj$$~E6UqB*3#yY$+9H&f*S z?+>|eMw^8plyOo{F_zkc57V+l6L9m#ygu2m^;bSO0O6!HPZLdVK#3?fJV#q#z&d`b zP_Yf=7MpNwB}ck{oDT8OLs+)L4@T4jGqij|7<@4x6wrV01yLj`$R>b9$14@nwTQ|S z4uVm^NkoQ4#{tR6wzq3gxmaUsA%t{QP`;AbN8t31+A{Tr$L|pSq##3zI(}nuLX)G) zePmoz{P?ehC!q=XN4ZcVpl6?Zob)zDO?KsF20~Zj-SXd`r!j0X^aQ1**6Xd!*sIk^ z7}SAse*FwlL;83VS5DT*a%6WCGFUzm^lOyW|UXd_$nxywD@I^u2K(7`hgJI2+9FUa*_^ zy1Ri$_~oK}d8>X?q@^{{1n&b-mIceWZ!yaNiT;1#^{B}4LJi9w!-w__5?bu1Slt19 z9!!{1F!=@Q8B<#vbHoPp5KACx7N_Bo%Ll?5cM+lr+Wmd*?~J=rq#2Kw|j6f~Q$ zs&jvXhH1Y(1FIVv{I#O$qdacR0T*dJN(SvUGtBmc^E*naixtEwqp5t_L^kd(5r_C}+&a>V>*%+(UaLGN|$H zF~Q2AHsXBvs0aKCM-Uaz`B9{oB~0At#>Rg}{9GXSB)Mc!YvK%6a`#N=6!D$8OS%@` z@z+$_Wqh3V2Xo;3pf}s_7+OHN6URIoNj)l~lFky+S7lWoZ0MeSTYxw#rNGz@JdFea zoNQplr?jwshkh}^xyP8yn%6lxIn$Xh%<*%iL6e4$PxHI18P%$J!Mo{#!`(Ac2q1qi zslm=hJU<jFb-n)k-B1s7 z$?alajx?Xsn&(^k`q(=8UK-RZ1vyzvGW?6dD!-%a9b+J!wrHndJ(xcm2;&ChjC?oj zgDs)HEhNpb^n9TRKK(4D?kj5E@5F{9n9!^jzMKE3jx^IyO928u13v%)01f~wb8u8D W&DOG91ONcmleGj%2A%`}0002(@KL7#%4ge-xJ5{N(;Wc;!007#N7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`GXZ1n8tZ&G0fqmqSNxCuM+fK+L@x8R~E5nYkncI#mGB zWW7}dFI3hJg86@C-y63*HYUcW&EUSwJwI;>#k+*Uv@q*`AD2MR$lsw7nue~~2MtWX zf2gtOYm&v=idW2@<>SMRsYhkQeX%l{*pzz<@ zv2n5zaP&AvIQ0jl(t+77O=VCQB_I~Ef95}>FL=GZEl%S6nI=%D=~qe0p5q=e8Ni(d zS=c3emc@TLRQz*4y9MdwhroY!5&6ZC`Hmj@bH8|;iSCAUf#sJ|9bx=q_0S1JAh$rJ z+bpIPO;rv4NczGy{7ZZ&&bV>G?tz7Sk)LEP(E&`>TD-L;Mhze`)i8A2bdR5nNIAp{ z)mvSwsfr5GkgQKwwzmFZpf7N>W}BH92v}vF*`j}6oj-pe@84mR*=>MNPqTQc=7W25 zSUbA|2VB5oX)QdZnfVo<$bqF1Zic^i3N=qJsNd35{G zxblvPgvjVKE?Q$^^3G8IOTQLl2T6ZS7V_C(zE0G^FejJVaIt^&#&nvY*Yqz39qFnY zdUl)0(@_za0)DK$OSYa`moVa*dmb}&_IarQjU(BBhm3)%nFDybV@6n}A7r=ILfpIZ zn-=$?)SUnLf|9UMO928u13v%)01f~qTsu{%v*9&(1ONcq5dZ)r00000005KV1V0A4 I1ONa40H7*AhyVZp delta 1194 zcmV;b1XcT@3Z)7cP)h>@KL7#%4gf53a8%qC3q*Sa007dF7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|rjm(jG!aE_R(^oyF3+vAm}yxxtBGh@xey_J-yEIoa-{ z?z#Rk?VEp69}IsYbU585L!WY|w@4gN@v~&L?Q|fWK*Bu%DwL(c%?<8!D=Oop)+2J` z`EE6y7(&a2@^r#Xzi4>l0Uu+&#(!{CB1ORZsA}c!%u#Ips_>5-6ieo{@3Rb?i`$Qc z>?FHTL#q|qh+d1XzJiEc@~3@YpA?4!ommu)Drn^+w=>C8w zJ&Gq&!E(9>RU;6jXu$Pur^GTP^qh^9zzV5OmIwH*ky|AWt989MEZ45ZtOrw-pK!#0 z-=iB+%f^6f2-+kXeWuMDOeEeh%ECCJx)gy`@~(!ae3CkY17D?tK_hIT9a*c1(ul$V zOb1p};yHhks_UK+_Ik4xedP8G=}Ghya|$*`sS!Vu-X!~2z7w+J%*+~+{P#Z7?`zHwA#}tA@#*t}O4R-EJtrgp9n5qZzdXd5 znQ?O_`hV7%-IkrlRJ+-{j%Hn7fxL67-!}I)LRx>8>YWy9sNV=b=j-I32~d`|Aw^58 z*W8mdC2RJ6{I~N<^+Qq5irILDxB&1!A^adL)X(Uv6@$)*5*A%=^ZF$gI@_5xG+cn~ z1q2dJSq(YOfXyVKLB`6YzDPP7ZcTrt&JUNl9@KBR=Ay|4W$;lcr3)&J9=MQQNpH@R zD^P!MpC|yK*W_6$tGBrZ4zJnth>qp(b>e93zg_+H5XMQ^PTr*HlpP|Zhw7;);yos5 zc854MnzSw}kMqMBn)WgA)>bi7Q2xN!w$e=@MfrF837r71zdc*B5xO+JuZT)tva4xF zJE*8!iZBIbmcEERQ4^|aEVO6JtKLxGgu#CV>O4}n`>TIOm)&i?WwfT~SLa<|FBuBF z?Et==`zeNev2xxJER<)}q^5)s{TpUzq*`Fn0Q@ciY#nMlvs@Z&VZ?Jjr8JpBj^mqzt%Dk;XvFo_869&PhPTB)*wV<^jN#bZ~!T zcahl0#fZngkkMLm_f>>Z+eI6#bx z?rI&aIboHK5_WFNP~Qb%6B{iW2Qt?SoR%7g=xs?!K z%v%ZMoj0e+od5K6m@QCC0Rle*KL7#%4gf53a8%qC3q*Sa007bv001Na005KP1VRSA I1ONa40FVqr^#A|> diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.1-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.1-legacy.zip index 5b2633e0e06694d5bf2c6975de0bed089d987068..af5d001c3fce565fad428f88b724b280c5022aa3 100644 GIT binary patch delta 1149 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 OljH<3m;e delta 1202 zcmV;j1Wo&~3bP6qP)h>@KL7#%4gf84a8wp3Pi%<<008%q7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|ZA1qnQ)K?wn=J2Z^JHe0AVgmapV;9@}m6f#zMxD+s^@ zTdw}Y^Q3S?aN~cvF49WsNxZCj#zL6Q5jQgp?XZ>L2J_i@6xu$IryP2hV;;yHJ#gWqvnSMg+T~Bl0tt4Yz^0BLIJ%S!eP?WhMCEn zn6^(y*L`rG4!8cVXU>X*+>a}+Q2mt<9~ZcWy*$ZZnBrqZVjuB2FdKt2ppKrNwcAuV z&9jR9@f*USg=cpn6%YqS0H%|gyBR3wu;XlW48yKcrKodJT)c~zA{O`|-z~YJT!Jnr z`jVm*055+*F^NFg{JH6t--^8~@vDB2c*tw?EY~0@M;&Udy9PkQ;C;iQwywbb7P(#9 z6=lhBQnzx**g5Zpf)A!Lnn@J&f$WLFQ@i0N zRx{z@TRIdIbPd4X7vp|~2HUtWTY)O?GQz;rA!C1OQ_TzPum~vPQdC05cBHBsB}aPx z5=E^LjI_S8X^s)&V#&>@;N3gElIr?9nH~+D6MQ+D#?(KW2R&pQC)ntNQJ%UzHIV^N zVH8T+VI>U)4B1bt?ZU1_)iwSDC?PXtjPN}fwIok--EvuYj@(8v>IkK=2sF_$SxAGv z21tJ>D7V;XCWLV+#6*L50`}^2qK!c5nf|GOb+lxK)G?r^Q^I|UxGX}B%67RVjDHF* zo8<|aR`6I`mA+&#{S)enNbK`V@M1KAZ01by%r;-Hf+))3IkpyY}wLVC(4aXtAHJYDW9*lXS1I@#TSh(~|6 zprF8am|LqG!s0`gMFg&401)E|Dd>OFDs^|&YLY)4P7DzJZT@WMOnp^09SCh$TOVI* z7u}8ZK^M~C13}-xEroJGo_}-5+eU<^wQR2qtK}H26u$6clX;sHhiCK1j#C~@&Rq;S z0yLeEsCSq=w|6U<2&tEH6VMPR;Mae%K9h^&zlo#Tw24$2Ucxo)KWUwAVOM5{wJrTh z`H&G}2#^e?v47FpmZ1d1dPqC2)=P{VKasov2c9x?k3!u6M1|0M9Qj+6QLTtTsxNtt z?K)x*jvAD;6#7El04g`}O6nl=G0@`w`tGZ!P)h*G7AOZ#Y>5N_ Q0QZyP1W5+V1ONa40KbApsQ>@~ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.10-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.10-legacy.zip index ee2390a8631ed59e6d46a5202a80ee6c340ee46a..0841d565834f264c3014768164592d1e31a46168 100644 GIT binary patch delta 1195 zcmV;c1XTNw3XTdGP)h>@KL7#%4gfD)J5?b?6B1+u0009Lkr+;YAJ=oe7BTbcpx^-K z1=jV{4gy4dH3+yu{_QSdE7NbHu(usYsfSpzC* zFdYTU`iO7e>o9bCW4iN#UTLdoK!+I|=s7f3Sp z$=0cH0O+-FD3JKoG+|Wua~o!%?V9hW_!ouz6=M%I#R@rp+{oXej2W;4dv}d+xs^m1 zJNQp!I5%2fHr*2*6><6{O-lS3EV7H(nMYNfknN+|($J@onX(eNE2=fxPAT#j+O!s9 z)H~TQo?Sn7fgx5y&lY|>dt*{N<~5Ksah`zhE0y0-)X3~ZNbnlFqhE+u%TvR$Xq;6k z6V&jZVaPduw$cN0fuGhBE}E;}P5Y5NZu9!DfYJK^WCEBwSy9?`BS|Pvo$F+&DmMH$ zfyf)bG_f3}+hN)f%yDlXc1$?o0{2e-gEl=x2QoLMpDq;D%* z{MfXAJcYybG`~M@Lj+T?#riWn!98=!GF_yH8qmyK!OZDVBFN3i#3;$)_IoP}5usPC z{GdQQ&pi2rhr(sv9dl&?1Kt2l~VIQC8q0CEqGf&20U_877RKh zc=4feN-U0XDLZFk*XP_VOys}Dr=7UtpD@dQ^DCBs*-fuopinowiE%G#oA+$We>@-Qq zL8AnZ^j4GkrFoarg=mOB+0^+y8$^SDK04u(till83bL>YdS+O`BN*~n6!wlSD^y9O99Tcp?gHSd(_MyC31xF#$i_f1KF_vP)h*J0}=oLBme*a0000000000fB^si003=oWNBt;WpXW(-vlcL JrUU>0004}FGQt1= delta 1175 zcmV;I1Zew?3XlpLP)h>@KL7#%4gf84a8&5lytifq008?D001PD(F7-vLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKe`|ZA1qnQ)K?wn=J2Z^JHe0AVgmapV;9^CJq z7?(S|Wq5$|q!BBYUn06gZ>@h%alh7Q(&hy`HV61}#BmVxI|wsq%?(A!gbz$pJQF}M zp$!Ri4)%)$-(;F%-OFy%k)Ec6W--5^?q2pbv$P{Ah@Fd-O4*gd>Cb$lFLN1-ML=y& z*nedT5AR;hn1Yp_x&yWeI@1OeN;tBQ1wwRdL`KweEu_1ni@)uL%2I!~x%}bj!-o~a z=;x%07mhOpDUE#)(;`XGWb(YpnkV!f`O}NAS6N85{*Q^CnIA(a%(_|=t~Zxkg?qDH z?uV5?c~SYjcQjfHo&;(uiF(*w!0AVfoe1qf2zxgk&tSG~vex_R^z1SgQ4N}0e@0Td zXz0q*;M2fLw1&jxvS5EWiq>is5hitdSx^l*9XP#`cEB_n7jF>7`oZ&I|4z>mIe4!4 zkQp`o(!l^=@k{r57fv}(*htsT5!~QFUY5X2TeB#eiF831{tr{U)_A?8ECDRr}A~f8z9J;gC)g0R3Sx;J+&8uWRu$R)P+u+&~d~=k-^{M=-$B_fz*%5x7N~34}b7KzZgu+1oAv z(ucuNpj7KM=g@mU~paPZqktiAC>eAw;FqhYcjw_&y`E$5gtb=7w_%&GG8%CMW=Pmf1kb|_gINt%&SPO2_& z!moI85x$d6poVF3QXTq5ieKe-jRRIL7LGrqge&2JY6`vAg8n> zz{(6LsI@@+%(Tqvq4rL3J*S>k+?a`LsUp2g6ghPh2;=NDg18`-2!Ixn9kruJEyHc6 z4Cn5o(*X7t_|HmXmneZaZlubK6BcUTO7qJBNPz>Q28E!$!uodNNSw>%>zLWL` z3uBlLJzam0OZT#)LpG}&mX-1PkhZZsE%E68lt>D((*FB#zlGN|4|F4}b^Us39Ev7i zHXur?*DJ>iKP0*;0yA}>+3Vgvu@V#}In?r~LQneB8h?c^ybn=et8Z3f?|N}z9~sD< z5Z9UR4c;Wi-$#q9i#my-Bf11BnVNCdO@uipCbVQ0X2_iZ{~dZ?#B8Z)N$DJ&B~iHU zp0#k&-I;(uJ*)zI>ZbTT9}brL?MJE;;`~a3l>m7SD@gjqi)#_C2|M`Ey ps!&S-0zU&k00ICG04;NHROr^cw`K$Y0Q(V>zywGJs0082003f%He~<+ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.11-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.11-compact.zip index 97cb59479384802d67e3ede9de823379f2315c1a..d032f2b7a41fb70690aad8da29fb355d2a16c7c0 100644 GIT binary patch delta 1201 zcmV;i1Wx<43bG0pP)h>@KL7#%4gfG*J5@woyW5Ba0094y7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`Ef=Bkl@}`>u|rRIE|*vS*ttSwX%!3&FsAGhDj8Mk}G8 zg(ghnIC_R)XXbyQ;jX5^tc|#A+))48)|aO0{R4i^qXz~|4&mswZAn$#tiey;DPltl zN!Io;(+ab0ROO%L_yvo2)EP5Xvr2w^2pT+}jd5`)uBd$;@^xZY#qndKu0IxHA#{+Z zSo=cFC;~d~L(7^gB^qG4iY_VeHXPeAw7%d`5TJFyzf6BMG)#j?MA_8>FXNFtahz3r z+8U8?=R>$XwyU=#7IbDBfFC?@HCSX%se1p?IMNd|;!CkQYrT!r$!j&z{WU0b|o^6_ikHcpwyMeP$2o;mDPVz0Y;=dP3v!Tzr2yk@|@!HzGqeW}el;Yeu20~z5BqVxpbnx1`I_6Nk-X$+QX z9-kbc5GDLdZwJSZ`L8A#gMi4s2N+{qC4)MDXhActn?nV6fqdsye?Kl5jpAE7-hF?j z5_sVwo~E6DHl!1s4;KQ;Nwap7P4x=gs`HNU)GJV`coq1X_JxmlK_wG327@c4WB6i7 z6Ty)}BVi5kzTJ=UOcfsUw z2b)@6pn}Ea3E2;Rys6}?=wIvL3#EU3DKdy*0*ZsCvP|M<+TOW`Rr2$I5mY2&u3{`~ z)y~#Ox%8oVD~3w$@3b`GvZrqBzR6B9De~Ww%N!-7*~&|P#IO|S+GLzBH>1MdVOeGR z=%MJv5eYt2)GGl50e?n~U$B+vuJ8B!>)n-5O928u13v%)01f~!Tsu`nUAqR`hy(xt P|C8nfNe0RU00000wr5BF delta 1204 zcmV;l1WWs}3bhIsP)h>@KL7#%4gf84a8&7W5?qS}008%q7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|ZPK62kS*-R?7bOp)aZ@3)+Y@hP+bF7O}bprc2s@v$Rz z{>R`K{>T(TP56J_NP8!VdT-JpLm!{Mx~LXbjx1z-Pu7C*R`Iu8Yt7~=YLx(sNeS(_ zgcE?6E`5a)VA3V^8zOPF;l$OT-8iWPTpYO-u1-H(e7i|Mil_s`4eS!N$}= zGd?nLYDwOsI)@G_sBizLg|vUo_`}{m(9GW!Zov>))Wi0} z@2)qRi_#;rN=)aMp_t;2DrjtQ2Eu`YNur$gIk5`|2$~mFTE9qkN0?Ts#cbDP4TnIRX<~PUF-JcRw?MMqV)3t zh{yPn#SKTiTlCBha-VLgWSiCltM|WTQoPnb?&p7%;lUEIyCv=-iZA;+`cJeq=@mo; z`7P$1Umw_;m7F(I+?sh{pI^u}NY&ogyDPA`0RH`3j@#4UR4cJ`NU?RnR`f`)JUH4X za~QQqlov zHvKs-RLArIjJ!*r%8zeiP(0@r6+6L)TRDGTy%>b|tcxBtKAvplUto*o;>xfuxwIHK zCFEeiwM1b;1*t`P_}3wlknZgkeYIC<7H!9?NP9Z#MH-N+K3y%Xl_!p^fL4A?d-&|l z9mFp&6yn(_S}3Tf#T?vb9H=04gsJ6yKB33U#M!Yb$_?a=kVi|aRiV&dV|G<67MOqY zHE)z)Rl~R>M}01Yae?W4$rKfh2)nb$22&Qd*OL=tba@bsgdgYn&2N!jCurd)4Uyu! z2PXcBz9F7_Tvr5;=;EPqxeDh&>W`CW*%Zc9%YN}cLVc-yGc(z^iTKD&+Q>bokf6!o z_WCa=sUA^nYCjn$1blj_tIvYpaRq<4nZ$&bhz0;Ks|VSw4K58Q?*~ zL+HZr+y_`{kFEV@KL7#%4gfG*J5_YKRF7o@0009Lkr+;YAJ=oe7BTbcpx^-K z1=jV{4gy4dH3+yu{_QS!&Mt9F~l zdDUIoOHuaHOOIH8%_I8ERIxm${}i^p z6gT!;oay&*Llwy`C-3r1Z_RZG63e+W;Um7nZwPIi{xkz_8KB7y0heC_sK@*|ed06D zW6`8|p8=<5P)?eU$r9!68W(3(lq{kx>Hkl^Z(KzGzRqiCdeqkN$u zU$to?pw~pXa_E5TEal^f)1yRJLO;92DRwwmx-Z9noACXHy7P+V2HnQQzW3bczaEgT zt69k9ktl^k*XIJ)dc*N-q!xIhEd)jUzq?$U(xelnc`-P?&Aa#js4jReLFgAS zqvL72+#%ab%neYTJMUh710YUEK2~*^&zeop-e2!i6bq@BjUq;G*R^tZ@{pL`&MT$R zbcaLmwIg{}paYC%zkn2K?q6%=k+g<$3K=SYd+rrhT7Tu9HFK+^;oVc<>}C9OWF{N-PSOnC)pPKi6=-B)-$p&rp^8vmnmZqu zrazB8ZSiaTKrkoppJnDx;;t?{l=$W(q-!A2j97M&LxG2kdiZza|BlD~gx=TKx9J4>u>7#bfvW`?-sPNWr|E9*p(`*E z&Kh%en*(=qFZS1;eg%IS_1xKc+AU+=eb}9Lh{HvI5ZQntNMRQ+$A{T98nA#{jE5Ak z9M0#cDld911-ZR;SK-0BEO6Vd9rEOVvaEQwzaVw+dMERw1Vlec=#W4$IqSPq$hc24 z)`kxfMs2f>ilK5Uo0MZp*hx1va)th6t(MPNxebL2i)%QvPT!l<|MdUr6;Mk70zU&k z00ICG05DuTRdl&jk7Wb^00R;L03-ka00000000000Du7i0001OZ)9m^X=QSg-~=oN Jrvv~10031^JxBlm delta 1170 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 R0094!=LAUx%me@c006BTNpk=I delta 1205 zcmV;m1WNm~3bqOtP)h>@KL7#%4gf84a8!fc`5=r0008%q7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|Zq&3ZHHExXEj?Xnp3_+7vr=JIOgDjrI~Wke~Ey>x~Ss ze%xW?ze=pK0uFx@+-g%6IFn%?cft`r!MW3<&y?%N{3<9Jy1DM`6AO$z={sEB05zk( zOPZIG#y(d*6Q*UB$@!Zg((I8lugf$A%Bt&_VCf!Ob$Ov^AQ!(@v!C|LXe(;agZ`Gy zRj^owJZ0{;GI!bnf3V=~g17;UQDW-e8}mrF_LTYwxQu@_Ka7Pss>!HVA<#T|UO}=) z8k9jQEV6!CV4)KEE?e!2v%ZHxGW9R^d#%U;vFKtxuhyzr*`8J#@cg>Fdhszkz7I-C z$>yvKw^#;Bk^)btRAp==w_=&9?A-RIc751J5UWQ!?!_)i@^EaK`_0)bY5~M=DzXyH zK14POAK`ycRb%idd0d{E2SpC6qERJczwMRHmiKsZ>+<($c+&G2>?}gF&*RpVeDHV$ z50Rg3$p6vP&V-)5m+&@Y+duS)aE_^B;-gifT{$1UKLdYQ zO`hrV)|vc+)|n-^eVf3;9+`+vpof)UD(^NiwApsVXK2c^WGZmi_EuRu^>M`A2>dv{ zij0*7^iWXo3YiL|armakEUgcuLHI$AkJrzv5K>E)_XdUW^W(Y7JI~Bxb{G_$_HQw+v;?9?@QnU;v4`j{|?4Hf*Sd9%}QZ}dq!@b#Ig3RUd$=}7RmNvEP!6# zYISkxK@z$E;7j-U<&r3niAPS<% zXxmOpg{NBn9pY>JawC2EbX3_+l4#1Xuc#SBv(2;srDf)!v%8CWA|BJ|E_#d0SqRl* z7_Vj#HQLCL-BdsVWMLh!TTIt7Vh7a`NJd&^R^^0Sn<4f&@5?_hJ;S4Sm;E$i diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.13-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.13-legacy.zip index e3bbd21f125f61f2a9862869ba591aad901ef421..9d238eedd8573d7406914b8dab1e476ba1f9cea3 100644 GIT binary patch delta 1195 zcmV;c1XTNz3XlpIP)h>@KL7#%4gfM-J5@>{U~Fat0009Lkr+;YAJ=oe7BTbcpx^-K z1=jV{4gy4dH3+yu{_QSkFp{NTS4CRPa%d zP;e@81l>@Gsw7C7xmxLQ;PDEUQg6em*Dmz7VyDVR6hQxf^U{Ua24PdRAYc{A8R*mC zS@@xAV4 zp|$fpu=c)wbc=Ohj(`rb@)vc^ah^DXCqgznF#V5F3tYo#C3drkeXIF4^<+QrwiH4_ zC^0b%8u7h<5e8|xI^R91ew6E@vYW<*UU>aq;6A>e*V=8fB~c%9Dp8rcH7+ZyhUi4F z#VvQ9MWpo%lt%w|dNzXD&9xo3Bl_h+M!Er^EL`tv177wf$g3BDzte2evZ0b_GB|KpzqTJz$t>&A5o}EmCh1zKIS#AKD=;*Lv_cc>-1ZBJ73Gc_)y@J9{{CNJA&%Gk9-q3qFD}Ps& zax6A~X^4wzpE7NC%~7_rr5@I~ssIgLwpaSw_l(NcqF0TGcqccFsbE);E!Pjm`jK-= z;s(37dCC1V8T2Eh$_l)K#Wwd!_0rLK445G!H~Pkd{`h&x&Ueh(XiZ+pRn)-%f!qe% zRPYiql&h@H4IZtjBX`6b%ELUp_XU!`7pCYKaRU3yx zd6y_@K$)-OyW@ysuPk{l8<^W>b-r<$_GxjR3IZazK~>^oS_{U^H!0cvIf@5cW%i{j z^mm07uzt$BdACDfZorgPE65O<`dEm64TYGnT@WfkfJ`0j_Q(Xcn_{U~Fat0009L001Na0000000000004ji00000ZEs|0W@%-U-~=rO Js0082000PwIa~k$ delta 1195 zcmV;c1XTNw3X=*LP)h>@KL7#%4gf84a8yJEyV_|4008?Dkr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6Qs)rE1H3 z`6&9W^bfFR`H8oGj#d5OByiu3&`B?fP zU2mWb0RNGfb=Pa5dSz+(mg@L3w#?F(IXwg`a*5Gjw`+WVrBk9G(l`9;qi^9aCE1Bu zDgi=u2eeY1=W80G@+Ftg_q(#O2pvN5&5LgZF^lKgJ{qZKT3FjFrR@JlCZEjnAkj4J zanJFe+9=Xmi86{a|AoH#9WPew(Ov{0@#Mf5ysrh%Cko#jhcp}N-%TP{wNUUG9O0Ll z@(bpu$qjFRus&k%YY#+Eybb<_NAV%`2N}Bylo!L|gbj7&@Hkkh^#LO_&p6@D1%_xW zs&F_iABu!$GgOnFsO6G*fRNPkQ0HanfvZobD8{Et?<3(6aD~KM5AopGmwrZqdr4eD zIzdIDqe(obS;x~qgtk`dfB6!!IH>&!fo=0_DJ@KYh)gqn@ZQ8kUjSgFO z{QNbKLZw~F;NpO8=Ys{CJDy^kD<Q!NbI;mGX(F;CWYsbuN~>lu)) zta83q!&?qrxk&(TJ^d9kftvExqUai-$~&w@&7%yM#f$o9Vo5 zs_6Z~r#kSNd7@W$+GeR#`^w#hiv4|g*-+MhNL21IYN$>S?vj`ZsvbwN<{^Pvj=fW2S^7mm2h4qctNfo)YF;|M@c3>rhJp z0zU&k00ICG04;NHR73^4+Gzv;0Q(UD03-ka00000000000Du7i0001OZ)9nc+5|8L Js{{Z5007FdJ|_SG diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.14-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.14-compact.zip index 10bbc7d75e991aa9d789f61bc0c23c409412bf39..ce2f2fee06cc106a1c533226952e4ece032631b7 100644 GIT binary patch delta 1202 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 JsssQ4008MKJe&Xk diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.15-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.15-compact.zip index 263785eb56a60b6c5dc7d2e0b9a8385dff79dd98..1cdc76aa58a927be8131601cbd8ba256bb730f5b 100644 GIT binary patch delta 1203 zcmV;k1Wfz23bYCrP)h>@KL7#%4gfSE0094y7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`EluxtDH?C^f$v-=+M7Pzpo3U1m3#`juGfbQb~Ff`Wu} zv*$wqH#9WbE1rK14*NfPMI!cwgqkG8PV*6ZAjVbuL)xH{z&GB7Co)@!rl$Yz?*_Z^ zP-p}3Q3fC*Z(Xavb&K=x-qc_A3E+yfcPJhc=SO;#Q>LeZo1sQrkyde3*VP29G1fCt zNMo%UYU=uJ9AWu7V=t#G8xp!FzxQBOI8vPX#O>@{ac6(g(iSzAp;-;=b6;M~_O}W} z;<()E$9Zb)O@FNnP$)Vi?-eK|LjkkUxWugU=GOjw@6vRj-G0C0n5`vvW*~DGfWUnl zI3x?Aj7gESI4xTM0+%7FH@fmu&~e$;q`2iMOfF~P`-1_##V$i#J8&8zXMz6;3)v+< zOc2}+R6c*~RG&r@T%V`=bki>}F+^574-9@gntj4S6-|Y2(vcfK23rx`W>%if=}R#Q zaUvPze37F3un!pLDZNCiZ9Vn?|B*{MY`NA8xC9!&HJykI3{wc1@6IcS(*M$c8?BX^ zOQuxX)JufN*zE;i(*pz=h!^pJD3!}bHA?31>WqKu3ko{}LBLDPz${0t+~?J#BfefU z@r4DEcGYANgYb?p@2?(qvuNWkhde~JCkmX(9|>Ro$8jE;km zVWo_9qMwz1<4{rc4Q2o6sOx96a<6qNpgG+8O*H9Aqo&Dj5(A^_A>Ey)M%-3BVOxQE zmr#Ex47WxB=IA^YFnpcmo6Ns16)-)Ui~>=@0{0UncWSY!_2gKC{+?+s7#_z*GU2Mz zwYJ)jY7$=lwrzL^0cSTz6=cz?l_^>P!{eO^-;zRZBZ#j!zqts87jfAFCYvvT?SY zz>cthih5xLzmSxo-{Lu71DqFg;-2G<*Nc&O+*+>tUNv{kb7h0&^*Prlg7J)IMc-`?9y zv(nh1GRj9d^O^`^nezGM>gY+UH`G&5BO|M%CjNg5`;BD`b`yNDLkIWnK;0wx{~d{RwBtnX@6L)g zBGrx8&=k{jLMnHJ$O#;7bldp~xB?omSiG3Sh30BE#)P|=gtE6XKFAqS(XR&|lv^e} zRdAqVspaf+^omd}q_vAL0mcMIsLbm3|22Zo08mQ-0zU&k00ICG05n`XRpbbQRey>E R0094!<^)Lw%me@c008ZbM3evk delta 1204 zcmV;l1WWt03bhIsP)h>@KL7#%4gfB5a8zaqMzV_p008%q7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|Z`NP>0SVKX7)$JW}4g-K(^eg^Sx>P^cHeQod5isPvGl z_Fu7b9TOUw0L_2W4+ZzK3j}lYyyoPDRDP#K#9qtsrkKp4l+7a`i?z!?pdQEWqO7w~ z$TJz#%ruVRa*xXNu}js7Lrph%t0!H93U^)K15rO{%{WX+@f*2uJ<35MHDA};@v!YV z*7)?aA^2~FmD$b*h;#G|%4jI^Ay5vn+Bx^+;OiABb8mkSV1@jQIq23N7fl+LU1lU-Z3N2_9kq~@ai zIceYdLxk|y{6Dt8?36U7o~i`$_R7H3dj|Z$UBOi75(P|J$a;QBL-ZO zL&7l52%~>MNaelsX}YV z4!DV$nwfnhhKJe??UY9G(cAl1I08Q`Z$+NP7tw#)`ilK16dt#Y=al0C42c|%YswT$ z^v%&|tTDFpTy}pQ$XlXSc+X-AN&mhRpegeX(9R}`v*d8vb zlb(Of1Hjg%%h#3fsTR(qfz||ma~%FoZsn_;kVnq^$L^FQnV-Qf zNg7-Oq6#m3KRvmMj{{)XcWnVqU>aw-=+RH2avPa`O;l#E)IhzxULC}zh|2))sGF`b z%hl;I-Ln5fiBxCj$|`xG4NW2JIr==sf^UD9?m;&0V|DlnPCczkCixW#;deSiMy*G~ z%%+)#mf}BpYcgIIZaDVvdX4tpA^L`92)rsNHVYuJBx~k9Puov{22NoWg~x}DOa5H_ zLxGG`OW6=oXhI@wrV31K&Wq+Z^xmv6#I`onJQOnfJg`>H$dh`aVZl{{2dn+{j@f_C zinsqmhudO&zN@%1!l`=KXu=e=K4i~?@r2mrfC1SCLYPJCr@*Zl;c?k5M7WYS=80hm z!V#E{tIlTf6(G%i>ErAB0Nvm z?vYuK-T#`Ln9*aBwkrEjZvh}TV!3mLimU-A&(77?r>l%Ab{5^?FS6wLexlB#X$0}H zG8oTBgHz_V{_{vd>0&t$M|&qPdFd4lP5=62oi$KP0Rle*KL7#%4gfB5a8wCq2}ZJu S1ONc{ljQ_S2F(Nj00016=1yb) diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.15-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.15-legacy.zip index 27f726f89cac89cb3cbb043169a46511c94772de..1bb72e452d40a45e550537f1d06a83e3b52301f8 100644 GIT binary patch delta 1195 zcmV;c1XTNz3XuvJP)h>@KL7#%4gfSM8WCxM%5Xo_upZy6M(JwsaSG z@W0`sXemK8eB{90gQQw10)#%umj1335G`V{y#!^7+jZ7|0beeEz&T&}xF$}4I|3|c zSWxzJR(bc0tO%c=b|vKxnSr*3mC`S!o!;bgN8x=ya(| z|1q?!HO)0_ejAy9ZQ8;rdxiV8dH_UZrn^vt5|xi?7Qz@kO5A58e3>EK{tm-cCwExL z@f(r;BgmY8i|ixIlt=tLPVfozg3+zFye3QR>C&$7a>mjniUT%M1+MddVulnCujDrf z{~D`+)*8aU&*wrpn{WfIU8Hkg-5bISGQC8NGoaWT$FbIAClCL$?X>4i;{fJ>~ z=Ex4p*%I8XWsa71w44rxLnNsoJuu|Z@XDv6ADwi6mn#BJ$~yQ!l{#igxxcP}Po~;r zZ5t2_Jjw7|{a2UOe%r*t3sKe#B@{|AjxKEQfK~4~;+ANBBoe2Ke>(0ds7gy%l$1SR zb28UHhVB`ZkvP-W^o;JwL6wC!O3k_DU1<$h=hn6TGJ4@kUGKCpPgo#Ty01S$ewvx~ zp|CiAsO1*Tpo>v z7DN33sLO)Z2t&8X{SY6d$eUntS69Z`og$Bam`-8~- z31!1Y@6hZF{Td)&&QZ$UY9n4hHrp8L>K>{2{fNgLO^-O{!I)LFGR#K%K}x(ERx zQoO&#-@9aL(7Pe{i* zV6Ugc=gNNX^&uVB-#7t(8-#3*W>ofcYGJq_A7DN{GjQ&N?OkFBE!qF#+XtvnO928u z13v%)01f~&Tsu`+^g+{S1ONa75&!@s00000000000001h0RR910Bvt%X=Z7Y-vllO JsRRH3003gXInMw9 delta 1195 zcmV;c1XTNx3X=*LP)h>@KL7#%4gfB5a8%QsW(#Qq008?Dkr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6-y zwRroAays3Ws#BhS1h&7e)Ia5gJ5M+h1HMOpbKuv|m|-CxcYj$<$U(*yG8NWKBf{TI zB)`nU+D6Mwks4O@9+{$Y$$C3MuOl7J5jzD3gK7n?W;X3+D)jcmyzmq#xw!8KDiip> z4=E^I?c@c(;;@|76SjNK8?2s}%}T7RDu%Rob({MfRJF-}u6b1RQqTPRT?n*m{_zrY zy4)j3qpu+7P{TzP`3@wWLWiUKD^^iiT_>%=eq$-N&qIGLU?DXGeWcZ+q=3Dy>Qbj=Wu2%;iUX&*RsAtc>iGE}lRb ziW}JCZ&K^1oMIu?t~`L?h+Q!x5dZ|176xbH~x*E<{GShM4qqq zzrWqeE4f&Rf0hp&u$dv$?Do#snm4Ys5;=+K#$8RhSl5T)X*axdyL9la{&OlRZ+s`Q z6Sy#cXH!nJTD4n7D2zVea6oZDLRhx4OgdrC!lBKgYwvt7bH^?EehOZ$3cCXo1OlDUuc@Lv& z$(&9JT3hMooXn*bhPwJ}bBs4bF&u9`S&&zM#QduE!+D>G+N^j;ih0NT;nDfXX`q!h z+`Rm2kRKbJj*@i}olP*^r_NBOmG2B|LV{qj!qmDGstvtj#^@XwH#)56D(=)0AF*EW zG6QsuX+q#AP2eC5Q*&vEP&80lM+`DeBl=YWh@*S5MEhvjNQ&a;Nw22I*(tlD?6Et4 zR2!7$bw-3S3dfXerkI5Xx``x_ReNNm*XJlO!Y_*Y;fo6w2d98Td$$aOr`G5s$ATry z^Q#A&X$r$C28V z0zU&k00ICG04{TIRMVYi3uy!Z0Q(UD03-ka00000000000Du7i0001OZ)9nc+XOHM Js{{Z500438M+E=? diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.16-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.16-compact.zip index 9dba82dfea5d7569adfcfc0b46d8f3d873516538..d1b0b62b739395592d3e7dbff746dfcc3d5156d3 100644 GIT binary patch delta 1199 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 JrUU>0004X^9LoRz delta 1175 zcmV;I1Zew?3XlpLP)h>@KL7#%4gfB5a8%eOw%=w1008?D001PD(F7-vLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKe`|a8)Mc>C7L|5~5lndBx0K!3&M)TNAF?8^d zlq|Kk&P{eBb#0&SUAlBWoMC@)m%=PAJ7Pb;vay`$tKc|Yp2w~j?SSmo04aA(YFT0a zo%hQkg9X^ZD36oEQoNKN z1!}n@p_0Lch%#?tq|!3jtXKazk^@;F6?_Pb>l#h4={#WyRO)p7eO-T5h^GP7i%Wa4 z-*%_CX%%W3nTjiYeR~)xBTiw5%B1rB_q!%6hea-(kdOtntKzm88b@C*Gc{$fW#1v; z4_lb^PS5DwOWQwx6jvJzvv-K-;@ z!t610_UovHWcjBa7Bzps+Y!B_B*8OWy9L46EvN-~>|5EMOa%%>=h}a(=_wKgR&A(!1;4wV z(1V%EElJlUyilCC5LpBVwhO!Ban)nbIo_@J2{xU4y{zSAos%a=FjIkhiEg>l2Z5d^ zcyX!w71k_8XP(@Z_OeIRu5?`21|X}@Vhl7 z$UzjL*OwjR>uiq79VUW+BDkIX+XX?rHN89djT#W!j#L?QL0FPm#3NdTBQfDR0PW~L zaC81i#H@eHWE#O9tH~W1Y;FfH$$1GGKToh)yRemJV!=FT3oulo^sb)S`l$7^cB@$2 zWk>)R#)56&{?A-jxGS@C>VS=JgTeNH?cM_6c){SFy4D#Y1tJ9j?%7!d2L6_d#SXDH zY$5pqPtm0HdLvb2gI|zkV5M?3gDBE=8Si9Yh?HdK`s<{GDzZ6BE$L|~h)$9p?`eVT zcXkYa2rEXK&03c+uZuxaZbxrL90Y)Dq$Z>?@`?62&6a&A_*DMoUi%T5;gU8B|J1He pbWlqH0zU&k00ICG04{TIRM;i9-(~~=0Q(V>zywGJs0082007eYCkg-n diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.17-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.17-compact.zip index ef73090bc22fd08d00eebbe2f74a89674ca16a38..ff7a96a213831dd1282ade4972854d3ec04d958d 100644 GIT binary patch delta 1202 zcmV;j1Wo(43bP6qP)h>@KL7#%4gfV=J5?g-#jc420094y7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`EodkjZC%Rc&luxH$Yx8-D}ueDj530D{r6g;Q*Q*-U&| zJ$=X55PDe@9uj{fy!cSS!?5y6L&b~cVhq~zgLNS>X^H!b808;tKa+qP=_3g55r#kE zX7WYkTN@qT@<^Lw)tMAt$%b5-+@3UzFE6OuC9e!njp11v?So3crQ_ccXY%AF4wQSg z-wQJ3S9y0ZX~D3;zgKmPW8#v`6#RQ*|FBjLpfYyiCb@rkJRjpyv6Jv+a~BS~+)GQ= z!?^4!fnosh_-E9A5Roo(@Qx5!N-Bzwok`&WC@n4F-oEhuoR*7y5*ojXGB~pa zHJ0Ud%nyG8-1+dTl%;9oq%t5``JEE7vv{+_0G)ge)Zb(H43avaGE1wBeEsIe(<-R2 z(HdP%dHJi=40t4*uv__Y1IGmjPXp0dz<3MgCu{{ZMrtdh|ej|!aIe7d5FFfBnbtF z2r{Ot8lq#7Q++3A)^bd@;%6782R4>M^qT1I+i(F>>~42r+MJKx6|>5~)>@&$y7*>g<#74qTS-@6eH-a#v{M^W$e%dkd z1yO%uhKF)`%Y*6)R!AI<12ALw)!ADe`oI<6==1_(6ki<7;VaQ&Wwm z=v#T{aX{I=beEbw;Qi2uBsMW0aX=S>fJjhtaRVg>P+nRtn=(_6_#Snni(=HwPWBeH zL~^trm&ECYJrirW)=|_OcXFRsx^?VcJNzYxH)+h$EY$DOdidn3WjImY@1B4B z5HKLNF{Y(`RuyaquzQYU@v5YO`h(5p{))#Yq;3yr@^Kv3eT=ZGkly z2@78Flem4q2P#mFsj%dbh&xF*WR$#`td$_icY^WImp@J-;JnwM_!Ix#rLM(_vC?e$nIJC`)BF~SzUgbmpuN4dvT$}%vJ`+^}I z8uecDtqhj}OL(}~UwL|l35lMNw2W3dne0W_cFC;OJyisbk(&NNC$tmyATKL!xe5m3 z8s6Re+gz{Q5m%d|KFG^EfHz~E@BeD2{+`iPP)h*@KL7#%4gfB5a8%K^GFOZQ008%q7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`|aL<{|ERnR+OITYH6I zQk&SyNN~MB41<5uk%QW5)u~7saRlBg3gaAX{*nvUX`;N5j1AO1V|&lBaCV0@tFvDUXwKkBK(sG{7_D))4`ry z{j()J+%7Ygk#2Q^;1goO8M1bA5EuD-a@ivFxP*T!G*GmH!*=Ch!?Y_}^7$tl!?j!Q zsmG-`Y^1a8N_5Moq)6Wm0?QZ-dOV&jqwoY4#0i--8J3 z60m<}{Nzj7eLG;`k!?WmNywOxWCs^%I&LmZwt|f8OkuNwX()vQd${|?a8!4aCSn?} zwuCBPLTZ_jiZ|cVe>BmnWcOE#yrv;w027*3B}1DK!%3HJt8P{ag;G+VUKbD07p32J zlP8(crj+)^lQ*v<=NE?X6*Vf@uV$SUxk-N@ho|?`)oH~-UWZi|`Y~PRKPQpxE`van zEd1Kty9{r<*dkp-PpR1{Y=Ot3lnYwr`NB2nt7Ux<9K|bTLtM)oy~lCh4c>av-2t-k zf36CTtYi-56^tCR2jkaA!aD_CbNzGr4es^c;d#1vF1plPKo&Acl)bE#{-XvE9)^D* z28=nc5}R>g)M>>M8Kg;h4cyplR7E{$!rf-xe>w)ZokX zsUl^xp5Ri&z>eu6+kZb^mhDGzPw0OXK2UFZ=o_MZ<$e^aPVD)>#2-j6HLtw)qaF}f zS7ty_pJ Tj06Ax_mkuVNe0dY00000KXyY` diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.17-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.17-legacy.zip index 1c741923ac7ae1520c6b671a1d903897866712d3..5ac31105d8e4df4d742187e428dcadbc30ccb3e5 100644 GIT binary patch delta 1195 zcmV;c1XTN!3XuvJP)h>@KL7#%4gfY>J5~AB6q9EJ0009Lkr+;YAJ=oe7BTbcpx^-K z1=jV{4gy4dH3+yu{_QSiWQqD&$J78 zkCRRvFOB3$6}{FLb`m<(AMr3{5NX8ZP?9opa1vx`hha2-=VD73{m;lGZ!__roGT%# zXO8Utu+_cycIsjl1fRJ-K`!Qz#SJtG5d$cmGNm#9{?}zbLV}=_?d{zLr+v?%2w@RB zMxyO_nio1xq<(-3zfPhHLKsY^9uho=5=|k$Y08fRD>Hrk$)qVAqQWZMW>jr%1!9vZZGArhPu(`P`1_*D(TCvG4` zfw@LxobfubOzi`-CY>1AUn!LG7evVwfWTf}RjvVlkI+a)pTnsV)5U2>&+1QuJMw)% zf885!&p2Bj5singx5@6^h@-R~ME}$OJ+;Mv9(X*f{ib=pk7`Vss=Im|AsoL%sIBsX zOgdI~;OeDL&Ae$chavH6aM&1URAXAmp`&xCFGdY`iG6#a;v4=^gDXxdjluU>!dTj#B=_0vx|43fAr3@D6(p81+WX>tpO%wPp*QxEjurL-C!IDj>utI(T*;khWC*klx%FuiPf(^{gw_Gx`Zo3OGovFEW_;ag0 z;j%D$2cF7YB)_JjoFRjRGws$corTevy)IaPH&c%xW5Sb|Aq#XGpAFvLZVAobyzTx> zxsZ@BsMZ@_0VwxJ`R}Z^ear#@>TSbE4D>@=T_c=lNA9rzecTXr*krrXUn=avO{Cm%4Pn)};o zNF=*Y#hyZ0%EwvUD4ghd`6j_wI`{SDy|M25%^d7Xm^xH=zDO928u z13v%)01f~)Tsu|y)fAIw1ONa75&!@s00000000000001h0RR910Bvt%X=Z7Y-~=uP JsRRH3004(hB@qAs delta 1195 zcmV;c1XTNx3X}>MP)h>@KL7#%4gfB5a8z~W9A;_+008?Dkr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj68s#4U7p9T80~=U)&MDYO=?+T{+;*BB7+6k z=dpiBUa4a>(n26A)ysW8WicWL3Pt-n$MA)er=gWU-CPZmCMb`S!cx4H9tCQ-B%zYQ zg@`h5Vx-bC*sNFoIg$feAQgNFi|ZOqu<1Nu3RLQJ{e4}3Rfwkn)r(7evEO#5xM>w? z8kveKeSLcvDkDx|hsvb#{r9^jEQdudosf_PwX5Q`7#c@kFEce|uw~yN;SXDw^-j;| z-Amg)e-u|67$?{TbxX5xu1#US<+ff-&(AEelHPM9($A>SR$1g9hTW_qpTg`hboT40 zg<&oW^LaUcf{?Gr$>LMzTO$kL>~*TNGfA}-rYbj}km^)On+8?1dC1~d?8qR_A5_5- zH-G*s!gomDth?~Kn@+_K_C=Oy&w$y0+OMo>5?R(U># z$nv#23u7ekML!B1Y%CF;2aTh+5b`fHMvvr=N9WpqtLZ5c1y*gSd|cM}JCZUaFiAUSk8t=??dw_b{HPOm0gwklxE|9l0@izoutG3D z6cPe|k2eN{epD0tONwz?JQ#D( z*69gPdL^wUX;8lMben#TfZv{mO1lU#NL?u}a#qnhWtfej@T|adse!=E z#pVNRu7S?GeP+a%ghlxawo>9q`qP1aw}bS5D})Zm$PQO|#twwe0zQG_BxXjY@D2xU zHcudm=RJJ*@;7K-$9(NFh!_Ro5|#RQRe4weSR4)bd)Ii>6nba=*^GZfeIEMpL^UaL zSc-o-xMs7=UWrkZ<(W-{6&E(Cd9BD~7xQ~%VX>{hxGcxf83$)h)>1Xo*^7DP|KPKK z9s|~A${?e2C?dGY8-ja*?SpI1j4H>$(&HEc(t9&tlJv z{haooKtHPcK5?epff=+^d2ml8Oo@FKrarJ=!lwDvSZ;8Tmc;TiBKE-EmBQ_X5Q(q# z*51xxqk5&}GRs4IYi+P~$$M#rPME%bD4EB2Bgwet2J(u*=mS}fEKY4n# zjWk>!gszj5H(+it`Q>6IIxQtnfwi#vyHg6vE*>_w`ii~OG(b(awxB5Z$NyfRl>ksn z0Rle*KL7#%4gfB5a8z~W9A;_+008?D001Na0000000000004ji00000ZEs|g+5|BM JtONi6006JjG`9c% diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.2-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.2-compact.zip index 74816482ed3da0056105d871f453067c878e0548..f7ab71d36d942ba8381b7f2639bb63c94d7906c3 100644 GIT binary patch delta 1202 zcmV;j1Wo&@3a1JiP)h>@KL7#%4ge=yJ5^*bGCq9-007z%001PD?F1*0LL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$DfU`K1b>INDhdOS^YJDt5O74f~W7w@WEcZ!4R z-cK3-FAfOKd9+ho27(h9W$u5bU(@_a#WWU;mjA6tB=XkGC>#2x=cv-(W`$8970t&w z$w8X7R_B6&_CWk;LByY&YK677L<;SWa@vZkR;pU8AtWhr+TkrYV}E>5AM_EDW}`(# z(@!zk9zIbRRA0w5LJ5B|-wp4Y? zxe02vGfNFBnXr0z#vfg>tJ!j8!m^WYU!9(meG|?(TU?7re4}$YRL}lE>E0A19(_jD zenNZBL42^V)?o(KIWH*cDyf7U z3Et%V7IKlmZlRtpSYtD_^K0CDH>gen4j4w@Tbn%(&KO7BmJHX2Te>)a@DlWK>*Dl& z@p~9|!V1arz@5g7m(&6nVtjng#HQq~qqFv`w|UN3l+563rr&>C$9)RTxOgC={Ba9; z`l>N%5=u0O(A{+KULY)@N{p_zJcU=?+p`k5^qCyA>*ZfR%j^oS?;`|VyRo11YBSq< zZxc)Yu1PcwtVASvuizP`R%ry@014Anq95mZEn@BJ0_GOeZ&eb7PkHsW@dK!y-Ut2N zpt6ht;gpd3tURn0d<`>AJE^%)w;kJ<6 z(%gjMfj6UN0WdE@y}0KmyO%_ofBzDUeTY9U{z#|u<3~Q3!?I0bsif>a7^fNHnV%cB z++|X{;lzJg6rogm-22O@c0q7sD9xIBw|4<@Z17krz@`4+XpKajw3)DVL2Ohyu;CQ| ztYO!dS-{#mVU8CqR#6Z+*uQ%3VZIJ02Dy1KM&u4PEO?(EKQ*XnJ?VdlWU}j-AU~RFv57ABEO%>z7I>OvDTV4TweH+?OK#nFpN}ezR4|o zmlvCVVV&vM{v@#MVUqF(coj1L`wu#7P)h*i_@% delta 1194 zcmV;b1XcT|3aSbhP)h>@KL7#%4gf53a8zTgiS~d5007dF7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`}3>_cPD*N*)$BybAI#w4NY}J#3v3M++R&yO>XPUl}ZU0 zX(9wBGN*FCb4-6aR=qA)<5La(#ASF~A-TSeX=MZE2ZT)ehB(Hnf@}&4GGhxnLgA6O zvQm)-K9s*Kz*$_SryDHPDDq>CUrOW<>RiDnQ5x=t8oJP^u6glvO^s~jAbd5a&4Th) zD82U%-_!YZ4Hsv(zt%R6-|u7E#k}JKE||=zGm!cMBb|SA?dbZWAUjr!KnNw&O4x;^ zAjq7s0=O5g%+;zGr$Qt+5|qb-=0R++oYG;{&~fxP2%{@&mUl&K#J_!5o8Ih?3g_D) zf#DtB>F*eaT9dZ1Z-e>;9xH z$!r^02uy!n7ki6AGLoZG-P zG`=neYpLL+tLcsXPR}&k(P8J(-6=6h=pT)A0N_aY5Hxm*ZQ%8H1~ehJLspn9bL7l0*J2Mr5(YTzU5oYDj2*r8)F#SP1|-|EG|fGsB4pUudT_)WooxS9f`P?mplRNw$l_OCWBWd@fF;UuJ*WqN{iEpH;0 zDI*Lyb;phmvZJArjP5}e0*FIOXZtvv6n#7wCKV+vFX*00@(;MifI7&dbIK4r!5b(v z{t+GtC?cV$=ZYJPQcEcw$yrEA3|kYd<}&5R$;jTnN{J56lvTBi2oEZ7%=> znNy!##y9qZ+C41Gd@TcLKuZT%a}~Uj*mYWj8v+DDANBx%GOOw3rMw)D z0MB)gvNSKlhfnSKjJIk2!|l^hO928u13v%)01f~wb8u8+tcmu31ONci5df3g1V;wK I1ONa40Ki#4RsaA1 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.2-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.2-legacy.zip index 05bd06b7c277f12a6f05361eb6052d244f5b850e..edd73a4f2be3c424e8b2fbbb18054a9be5cdcdf6 100644 GIT binary patch delta 1154 zcmV-|1bzF53WN$5P)h>@KL7#%4ge=yJ5~STjJ8??007>R7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`K1b>INDhdOS^YJDt5O74f~W7w@WEcZ;M2O_i}p+e;XC z(RB)Ke08GXtI2;78aPBHKb+`UI3|*}RCRql%Kblm3XxJo$l3VhBGe0ze3?o7-SlNf z!qL*KshWt6kJ-jbhD=R+1z51_Mi)FVeGq$x;lsL!Ie0e@jbYB)Ciqn5-&}*Q446>X z%#{9{X6~CB9_VNE1W3e6gf%nK_)YgbFbUzOBat@{tGIu1?(>6Eg?2jHWy~nq^5;n2 zdG=Si;S|x$DNMDx=ML6FmsD(Pne3-N1_?@)TuM0%|2c0w|I3#5{FHu0ZpJgK!%&~XZPNO@whNaLggL4GJ<+> z%<1GEWk-LJ*h8zRpM0C(T{WY^ol%c{lhOZ-YlwZn zi6RE2%o;;ygP$YJV#mu6csDB$-jMlbh9i0k-+ zF7f@ozq{annN*rBMO3j{eV-Y~eadJ`kyFB6>LFfpHFa}N!sV62;Y$c}lD-@NQ&e*B z`&oZ(r+!MF4xa#0Q@CYkKY!qo03qO@F<9cCfVUL7mpyCg^kfAEMhsSd@Y8GCbH<5T z_;(d~p#4RB%8};M`0^AP`azTxi{`@I<=W`uZf7j7S*t>;Xv&MI^g>e2x0)4WizHjO zhz8%HZoHdZuq%xQ*Rn|b8&G|Up3_p#ul|3En1{^oe)q1}zk77_D~-R@BGvdCk-ah^ zQST>r0J)TDKuuG|>IJ4&L#TyVPrYVi4U4>&w~YidtrDXlKPn7BXNQ2MmpDMn8qw_a zgIv{2=DVneJFKkFl4|Ly)(qG%&s-ljXT|q?TEmyqcWv+lC}Qc9U}Os>!>kqG&+UIc z7tm(L$k=~<&+4;~Ax`w?p6o9<`(fx4I64V#H0q-$pM4#&%LffvVB!$-MyqU<3QHCg z@GR+o=x{$P#V-t7*>(E|afY3;rFX<1U@=py0BkZ(iBS>hHJnZkAZWFkGDqAB%Aj

&CRZB`|NQPE0#Hi<0zU&k00ICG04H2KRsZ3P Uwps)L0N#_h1W5**1ONa405f|z8~^|S delta 1157 zcmV;01bX{~3Wo|8P)h>@KL7#%4gf53a8y&^b7Nfu007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`}3>_cPD*N*)$BybAI#w4NY}J#3v3M+-aHkdSrW;7b#}K zIwjt?1!11K6-9qptw_xcNY*Ihryu;RpA)Gc!5lmxhx~-`?1^lv;5h?ehH3Q<1VAKu zh30ssW^e<1T~qZ1Qry6fu-ry`k9e*hSkO_gU=l)&fKGG9CbREG%ponG?Y>hy5^ zHeAEn_nK`T`gzVxcTvW551*v*wD*x+K2EX|3MyuYhhXml>Px>21W{9g)eiSk1i@*T zXAmXy#!29xa+&2TzXGk~18I}c31ahQJ1m?N??pV_q{vDk^N<6o@9XU0=isOWV^y`Cg_q8Z@ICAOjvTq6kon}cwMNBalx}^~?O0wT?jU+JXue-*bA<)Z$&Lvb z$}{4--}EBMj5#wrwD;flF|#Doru7PLc&6tv6vuxshXU8T#nD2I-?iYdQ0t4@DC)F* z8@@f3Si5xh9fv5TEjT1b@mb7M@RHhY7q3M04Hj7vU8HRM8VoT?mtJ-iLR;`H3V?7! z58F-2y~LgF&Q8ZWHR6AL@Ft462c&d9tjk=hcnwp*0zMPV<*&xo#0`0dd-slw`DPIm zRDFNv2oR3o-bbX7xLa&yV3&_J5x=jGG6tRHH4Xrq^5-ujo#tBM1-sk09Lz&3zFbP` zV+UyxVL>7`x?wWDH)Id$WXh=s<^59jHzxXgp6LRr0N7Sa?*<$c| zX?A@XGak4^?h1m$b`@TLm$`e81Bh)Mcd36i(bS~&m-fKVIeu$gHu(}i5J(oz3j_Sm z*MC7(CnT0S@xBa|!L)ts2#{nGIi@{6M{&jXB|%>hY;DE>l`>GlXv=uscxli@r|&;z zPMAOqy^6cDJ+6AYcu#UV(wewzC#}h%1;gDctfu-~B>Z!&Xji@i&i@c|IsOjlFsgqK z>tHCLJ!(o_u%G##?nn+8ebj%%t|JZ{spDFl^(fe$u4hA*cpN%tCoMLjM7OuTFG{RP z%R%D!J5ae9g{;v|nwol?q1(*C#9fm}P`YQW{ZD!&?1Or#-cG$ZvO`Z+{C$QWoY9ED zw^57@KL7#%4ge@zJ5}Es#`1dv007#N7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`NpgHU=6XdOS^YJDt5O74f~W7w@WEcZ!4R-cK3-FAfOK zd9+ho27(h9W$u5bU(@_a#WWU;mjA6tB=WU*gxU__zx}o5@oAb~Lrsnj)I*`w2r;RXeTu2sY^wGN7z*J}cw0ssirhR@pH@Eia zvIaUkoN;59g|3z+5Z;e?1BF8T020GcW@eqbR~M=xU`;Ag;K3HQZ3BhRu#2fmN#%*hAb1w+{g}@`9DIjVyXm=Dma}i#!|FJb zt)w&~(#|yeb#*=V&rka2pYcPLfFu~s`7u}^+?J)o;I`fDK)phQ<)N`IH67rw3(`0a zj9E4OKFO<~pjS<;r@r_>2w0@0S1d4s2fcrZgA-9~G9xaOj-({ibUSTIB@AF0owaAL zAa@J=x#2@0j>ZirQ%~hq)Zmm@=4*y-RShu|51g^&6m707QFk{5l3T1Cd|JLGmdsC< zB8~yGNv}wC!9usM|8QKYn+9e9yN-puB zr7UccqKCIVaXq^&Cr8MeDIe>{{JI;pvGDw@>@vJB|F^F;sF%a}(bn%)_Gz*A{NVj5 zcjNyE52DX@E`=CIik)CaNIWNl*i3)3K`2-4|A_@{@fpMLh^!$_b2#4mwUfuMx@A>Q zBvm@KL7#%4gf53a8%SOKH+@?007dF7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`}c>@LoGpYVD(zebAI#w4NY}J#3v3M++R&yO>XPUl}ZU0 zX(9wBGN*FCb4-6aR=qA)<5La(#ASF~A-EYRT=w}+O;z;L834HqaCH~>|9({yU=*1;HK|N!mt$fVTtthK@0gQDDfK+EJR;sTkRMw*9MUO+lR5?+ zns;|+4$`k!IleN4{$A~jm;l@WRuO}wV&@l_NoRleNze!rC|KH}KA!%?3|etXcAu>P zG`=neYpLL+tLcsXPR}&k(P8J(-6=6h=pT)A0N_aY5HxmyVshzI)@> zFtvX&0T|)n=Kn0(oTjC(jCU-{NUFWeyu_?mEX_XOf(_oEu#LDgK4sp_?29{R1P?{4 zmDJhi>^?I^dS%YUm+AC6G#+;0;u3bl%}=vgc^Fr9Iv_q*$2-PA9phx$sNTeK0Opc& z3JnyitJMRPlH%4p1Wr4MI0B?hRnnO6ze|4|YD@Y&bD#$tlOW%-w9|6_8YN&AvM2lW z4riwmEnLh!Z&Up6K34v$YOE>s%|UImBQQXGxD~v_Z(a7va1dVZn_z`Ut&AgW;8?Yz zWn8s64=s80l4Y_8mLT7Zs7Cya#vw)edeIdzND!Oo5}OGm7p#y703dd9*M62pg4ur| zypPw2!n`&cE}oFH79~R#2*3=*61=&h(V_wGdvZN+OeO?#;|<|<1PAKSF^=rm4EL&( zqQ}`7h*+@1$LbmAK!yQEFOgE(TGZmLgStxYn9Z4wXmkFB~?y1M6x=_IY zih@?e_NdYbYq*tkk#4(*b4xa9+2w!G|G6xF2`^E@4?*(utnJR?XOU;>c$nzs9#x|b zI#Z{=Lo%{#Y=)g>#H>0!0NM@KL7#%4ge@zJ5|s2p>bCP007>R7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`NpgHU=6XdOS^YJDt5O74f~W7w@WEcZ;M2O_i}p+e;XC z(RB)Ke08GXtI2;78aPBHKb+`UI3|*}RCRql%Kblm3XbKsCh+mcVjM!Ek__ik+DMc4^BHR{1`Q+_(iZrU#76+g`IXGW@{eG+LdmDqugOr&%pvTe~Oftzk zp2ULTK#E~Vn`*f~C>#vY@$u_F;P~t23w%wXpkIH=l=G+ps*14Mn(W*|nrTy&+4W!& zk(^wq>3B-X6!+kxL)>50OJ!!Pyao?hW}2G*Ko?(@L>k36T(~PvYeLQFr%7|sadcSE zPETu;cd^OS6(l=p{3C*ZweBi6*?1FR3Q^x~Q4 zDtUiiB0^~ci^06a8dCo|iP9luBYWn?d1)LF!&a{x&vC^)$N-Dukm~`k2{v{_nNDMH z{UW<6C_b;}6F+g1yyq*P0E9xdc{1bqsCV5Kx)-V-P*G1%Itj2mdb3;RF~b@#<=!;J zz24_h!=kggz2kx49T>%<#<`>Dbjpln9;|nQA*a&YiU@NVNNrFpSA5Hwo-!tjrwai6w z2~4fh>J#|8P;8gYB1`VrzPDYFM$kSdF8}srYj99Y0Rle*KL7#%4ge@zJ5|s2p>bCP R007>Tv;;{8nFIg;000_QHa`FW delta 1153 zcmV-{1b+L03WEw4P)h>@KL7#%4gf53a8!YES4LR`007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`}c>@LoGpYVD(zebAI#w4NY}J#3v3M+-aHkdSrW;7b#}K zIwjt?1!11K6-9qptw_xcNY*Ihryu;RpA)Gc!5lmxhvE6?TRK{q0N(@EoXpc*E_iXO z?qt*6P{{H-5fPgir&2+6IT6;Nwwn-)Efmj*r8!C%-(ENLeJCcyAE^=9nf^7POz)%k&Pa( z>e2bpyoTQqFwx#wVbZiStwM74%R0q7*IT(T?-FQ#^?xJm1<>cl3J%7J$_RI1A5v`ixAfu`6 zCi%dBrM%A+e!?s}D4RrxP=MNviy!0OmT%5Pm8$L-QO7EGl(!EFsFmB5T1DLu#S%4|4ccAaE$nbp9?wuA2iH&fM)`jNL}Ekwa`tUYe>YELBqx4L8S6xW*T-f( z*9B>`!+s8gw0mpPqalET82)D85EgtWDsx?=LU#IErX$do2(J>k%})UtO=z@@HjPT1e}W)F?`eSa5d3~vSQ{LAm!>u!oA-lPjEOTR)etdn^`xd!4zQg($c0$lv9kD@c#-`i`;9( zDr`lW5X*K}sDv(+ejp;|hID86tE6uWms8&V__CU@KL7#%4ge`!J5}%0raXWI007z%001PD@B}B3LL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$DfU`RNhd+)B)6vEYx2q0$!hi@82Yfj~O{)2_r-MCwbnt{2EL$BxVLXYq5&(k^FUZb znD{oTc48-Gv7k)Ep#=q2`wrXb5yg!^?BYOog`u-1UMD)d+uG^4e^nGg4xRuFH$sRf zIXST<_0C9{%7ZAp<$*7NpY<}UO&y}gQ?VWPIy7BTD&t}cqv*ecOs0Q8yDN*%>y+yM z?QM`e160Bqa9qr3NeOyrAM$D0I1yoz!0hQRAUXGsclDb2Q%`e3tmQ!b{}kn;EYcS7 znx5LjEjyLlW3eUNbM^D|F3=;@0rX1Y*`N?oZ16yPuBEHI2frnf)Rhdvqth7~w?5Y7 zf>%vEoc!zI$!FIYTEKsajYo02Wpp77T9u-yf>@j6^d7&r8l3x)8Nmuui?K2EQqM3h zrIxY{1ZP##SC?220KVPHTrh{~5b&)n{|y`09>_Q!)pV6`f(@Z5{aOlZnW^ zFM^lRJ-U0wpPVy@KWGZ&BCu*MF|`tbalj1-iF;xU8weaY_g-$UzsBNUemxQ55#JS3 zK(pU@riqMkRFf7?2`aY&_d@!@rniirN8iaDa4cUS`ux3dD!Xlh?EO_m|Ip`%bSac7MoB7g2Q zwJ*L3Vn4PLKAzE?xE_9!g;yP&N&0Wr_qBC(l!Ha=plT5ai1P`34(&c1TxJg(E{*tZ z)5OSU7^Z&!t41wuHRMRtZNR=1x2LX*ZvuRRYN0jD*08K(=DG(HTuy3zr0TMU>v`X*YQM0i7v$Sz4>y zPM%v_LchN>vfE972|9mdb{y1XX~0C{-OG2dK$CwQ8Cs{N24%o6?(y`G%)2YN!e?HW zsW;X=-W^rG^xAG45vaPk)6GSGw?Q?ZYX`5kL>l~c2}xJ96Sw+q;FadEVL7DY;cK}d zgV_fbI)ncyJ`+dR6q__?nW=f(%cmFpW~^0EO928u13v%)01f~tTsu|o)TTUu1ONcq Q5df3m1V;wK1ONa40IXs_1ONa4 delta 1204 zcmV;l1WWs>3attoP)h>@KL7#%4gf53a8!xAQl*0g007bv001PD?F1*0LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKe`}=vk%R1kCTq`3SW21fZ8Yhso2ET9X8 zw;s8|!ls?bw0DQlEhl8`V}^e{aGyn}u}vJd?@l+AAPrnY(vegOjfbMjB+k zbx~=9gfn|Hfp5znEF}pS|2u6Tu2G1ebgXw3qY_SaFB10``?ybiZ54LG~DQ8>(b51xEqep0?yByX!Mnr%a+`B&jd2J%L9`OYl`wPe{u; z^VPFwgFokMH|m_6@{0Z(k)cPTlM+C?I*kqg z>b;m+0DyiaP?&SMkNbc8WgP911mI`xcEOdPuP1TewjIgvg%TR8#+u!%*AW~Z5$@tbPT!{bdv;KBZ2&#@y$}nXfa92*5cOKkF z*r~zi5ZL8;GHD)rImyx@f=TP)8=d9zW`u}j!6C|Q1@t}Kyf+;)n~^nr@wa*asH0$5 z#$P>nQEYUD2d94;q($v95FFOZs)TcQ<5z&^3@d2F3|<~~ND04gcbk=%9L}^j$5@kF zSs56$kV(z#4QQ_%o(Ek5tk910g#WZ{IpF)htLsA-+x=&J*9G-JPh9N(163~d!AQR5 z(1AjA_@MqS1-xR^kqjE@(gL4b=_!*X1^;pK_g&Jz0$_iwVJk<%ikAL7=5diYKy?B8 z!sJ$gEV7RZt*0QfN1FJovp|6v`t;uSc#n6Yq2Ar%7=QS+X4&ohBluxhr|)QBT!D2( zy{=>bAC^LDSUjgB0e+Z7VY&#oj!Xu^XgNjX|DXYwTe7vg>`J1!1Q(d;2WP8YR(D0J^~KmGXcG*e@X9uM```V=@3Df>m;k zFeC_Q10|vWO$!R=OXu~Uv83dGVa*JW&^n@#H4%UMlR-El=8V=^Dz@`=vWL21eHSF3 z51vJ0aue&T6#AEz;S#pNpNZ&dYT+WQX=CiU3 zuzQfY1Jb%q@IQ@;{{1R6Coo>}w{NBcLjU$u`1nvu0Rle*KL7#%4gf53a8!xAQl*0g S0005fliLJI2E_yb0000g%1-70 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.4-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.4-legacy.zip index 999da3b1189d2ca81e89ac6d601d19e1f301af02..b3155aa1e7b35a90742e8196e555f75bd7619ee2 100644 GIT binary patch delta 1165 zcmV;81akX{3Wo|CP)h>@KL7#%4ge`!J5^4O&Wv3I007<*001PD%mgQqLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$DfU`RNhd+)B)6vEYx2q0$!hi@82Yfj~5Dx>=-_Y5}nQS+?Mr4-^K6dZ>jfnmdN}&QyW7NBw1ft z94SWoOa2%Kp#SZ$HX66SVr(ITM6K$_L<{CG+PaifVfK?AMG!fBvb}${P(u#|+zFFZ zY@3;U8@B*-hp$Pb%DZ74BG!CHAW%noPCV)TzZjieR0=?K(*j$8u{wbb1LfPnrJEGF zow~L3h*jiyqjI4tvbP!-8Y`T#9}oj5t?oGFQXZPZ4*IOc8}}20<|a2dhiuKJMwnH8 zB#-1^9787Ms`FeHCXs)$MVX2y^eny1^~>gmGD^U4R_y)7X!P>0tI(rNd%!0)I_OLF zgZ@H4K(jsMAu(;u%d>M~8btQTK#_-K*)a?*gux2eoKT3%O7;s zwchACMMH$h76&zEVnC^}KjdXrs;3-(6jQ2($eH>u>jBhQ_8*jNuqWHs2dQOMAOSuz zfba~|OXP|mE*l15yd(ttI2DnmmV1giIp_0LLIXw=IIEc;LF@ACGs-wba_G%6b9A6^n*yGDd`@W;U1Bh5u0u}b6fUM|(TEHJ zh!7fHcgmQja9r~{2uN=~HzPuL`8Q8+=yRtLRRD?)l(v69uD1oxPdVdI9rOl6@bw7& zskJ1=ia6e^@!=>v$s7wcSz>hke$mS3bss&mB?=_bYXWGJ#(BxJ-HLNJ6rd)Or-U7ZG zx+)OH$+@i7f6@-Di?To{>xYnS5?ors)krlmx6N7+CfcQC4mqBwcOE4WZjkhM91Ff9 z%l*VHl7K<1&t!VSM%2z{+a@W@KL7#%4gf53a8&1n!k=FR007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`}=vk%R1kCTq`3SW21fZ8Yhso2EUK@XLhDshW$pP7 zEL(D3+JoEE%zl6WhNf9!@{GE2X7e!F%*3!PT;}!ty4wxMMY7Cb^_p+hqn6I1z~Ehr zcMeMD*y`!xv^27`ymrKul1z`Xmv${8ZU>7n{nd7)>x??~Qi3;Uesm&JG}p4loPEov z(tE%9-<&Mu1SL&=b6T0^CrR^Oz6ikk0e#%q*At*z4MBfR)FT}Sl~kE>-h@d4XM8B< z8A46Gm4PlVj(>+~4ydBg?6iVYebe~c&+}NGzMZy7cRi{odDunq4lvJYZjK>s+WK~r zelGVD*!3qVA|Z--#{F)+EQ|xWuD!BLP==FU{t_?8L3t|$RxUmbjVvp^bsC7iVO9m* z7{r<@#N2*)p3h*9nB`%ii8Of9}qJ&?55uHD;x z1_;mX#lsiU!%gG`jh!@)R-}}YrMQRzOv`qf zdT;_?t7}o1O^*leqy0a>cSA{3j=ace&c(8<;{cEJ^47h^uE2j(DXIF!UF8Xdssts{ zkF41*-)!|AlLefB|ugLvKWja{NwI zSipNj3Wa0vAh6g|VFC<+zM)4@#d-k{YG$HkL6gG3w8zjFqu$7>)Q{Tdjd)P#Bp>w< z3?k6XIMP^^53QZqPCs=GgM#{c1?iB%et>@|iWrW|mUS)D!O&x(0AAqc$~aYj-#UG2 z5U9;IP3kxgyO{ZD`=Xo*jNn<4e(49f8YvNhmjB?axxP?K0Rle*KL7#%4gf53 Za8&1n!k=FR007pLxCBWCp#%T`002D|KSTfk diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.5-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.5-compact.zip index 8ed211536131abcb7ed2dba9d7237c995f2fbf10..161c2c949a933bd0c0d32445ed857ea7921b902e 100644 GIT binary patch delta 1194 zcmV;b1XcT`3Ze=ZP)h>@KL7#%4ge}#J5^{fD%W@f007#N7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfiyBDHr>uKAh1NiqHkm>0fv2zNig;wBm~#F(12f6WMyC@e z>Q>40#)h>jxjKI+^T+_^qVPuh_}pk*yPyJ@xfMTwI?jJdSRAvNHI@aaB5ZM8f~6$1 zJYeGaMTrzst@bPYcdrzbJKDEroJZLB$N!Tks?Ny=*SL?WcG40jZt%Q(4!)LmSu4}{ z1NpBue(}@JRV2un_45x;Cw-5j`ZGRyTqf~cBgT?TXtwWa%(B@7J-RVvHIj#nG ze`#w|S@3$W(0D6izT`KzyE_|)e3x-|El)ZCRef0EAhcoXq*X!zZi!PUTl%(qN~C(>%PgLmokY2p13`!KM=gfxCrSy|VP9yicBF|5%Jjqw$dDa6@ zMqh$u+0w7dAeyzxjUa}+n+EHKd!+dtz2+G)3ZXDsy|_!u1{lWcg_(;7%?m(rKQ$Ws z*r$IG;4OfY$s}E&0E!^``kz@AB#>l4WhgcDXO3B+k0x%Px&hq9zpv92D^jeMCUF${|4!QrW75bdm_!UW zBpZBENryM(j|c7EMG9k3XTYbTX8Wr;ZB2jpOvK9Li$pt8WjY_4KS7vEXB{n?NS7;V za7+bqdHe=o%=}Vl9kEjpvX{O=)sDhl$2AAn(qw)oqrIoW1wlMG=L5I-e+%29)q>}w zXpXFwo&Bk`M}0G4PldzUP4TS_QGd^^VY$X~hHO)>3|E0{od$ZTRtgI~*^gOu7*&7B zY;Ln?s?>kiB&Wh+Bg$T3ArUop5JxxQYNEj%Ci{4H2@QyaD{Mx)H6k%ramQrva38->6zq_Y~EFO__0AFX@2{l zlDF@~PC%dj{gJ^?O928u13v%)01f~uTsu{0Fe=x01ONcq5dZ)r00000005KV1V0A4 I1ONa40591!B>(^b delta 1194 zcmV;b1XcT@3Z)7cP)h>@KL7#%4gf84a8#^l0EK%5007dF7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKgg#48_Ruv5}M=kHswDAS?JD8e4{8TcCmIVsYa+k$-fGz@M z^?AD)HcZ&{Sf!0D>-Q97VTT?butKeBY|xZl+?I~*%0 zYwGhQq{#=kb|c+}mdG=qy5k@eE^vr36F>~t^C$Pa;e6$O#NYTe8#^;?A);il+EzL| zirEs;WfW2?c;{#jNpFw}k1b=#?{|M5jtR4hZlm~UU^{;(hy~5Jp8qQe=p0!PmU+B& zs$!!{p$cb@wHE0NnBVVsw{*f7%jY=%D<4?sc@!YzTlYpGcoP79PzViJtR)(x_cTT^ z>n4oTJ-5Y1r;dYrg>b=d1DV;ClULWXUX7G{RLro-2}yN~s#Lk@FAvlzUGNKab4Yq} z9W7=)sQP~!Y~c>=)-nb(#Z`>ch_;SukRtD=M$lJ#6Yg-1I@_tauqD~7gMq_P=+$n! z_3Kax3<6~VhZMk2B4u(Ha$JaNJ%m(FTFG?WflEja!+w{S^7~b_d0)g^0nHuBNAeVq{gCNsstSA$q(4e z@@3xSejP5DS0T92Hv4<3^h^kHDRsme><1JyVe&Dazc7~u6%bGyKpAG^ET_GKks+b~ z7}I`~DB-X0s^Ab0G!6hAwbwhBh+72w7TahG+uczwl``)_9H?0mp5fdZp7umkOGdczB9Gf;Hk|QG6KmokU^h5J^v1YPia}BXZ zZWZ237~JCci8VRK#A(O&0=-419*`if4=p|IgmgH4*X)v@v*DM0KN|HS2_+7DA0B^* zK*mkh$@%ko=R;Q&LJ?j=V2gj==^mb?9M9XLz2P0>Nu1Jg!VkhQ*)RwRps;*UdPi{* zwsK%r76_loP|QWMxyhsd@a4O8z_Gw!h4OMf$X&=B5~6R=+%2L&txh)`D+eC~*j@~( zPI#oCUoL|G>!xenGHIQ&&!SJh>urB?ILO4z53&yaGt^8v@gI_`Zqz~!p>lgLp0_*x zD(U^YzbNhqv!JJDS~s9}`3ajPNj`lXkSM9I+H;(S@zQu*GL3d;HzarlW&olm2PK#Y zYJLS=k%35w=nMYeg5Xd~0Rle*KL7#%4gf84a8#^l0EK%5007bv001Na005KP1VRSA I1ONa40H*UVO#lD@ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.5-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.5-legacy.zip index e59d05a611e0eee4d1439f78d75c4150786081a6..a48e14e83110f228ae9459d78968141684e851ec 100644 GIT binary patch delta 1149 zcmV-@1cLj53jYZgP)h>@KL7#%4ge}#J5@qfn`~7C007>R7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfiyBDHr>uKAh1NiqHkm>0fv2zNig;wBn2ciaSWd}p)qPIx z#!735yl9#X8R~x%bmf>$imvTUD=`pz(%*_y1flFLB$0kv@3=>if`BbLhC*HK8?_yv za_^L!p|Z^9{bQx%r%L&AHukImhH9}D=C25DCAJj1T0O2L#S|P_5=>V;ZD{e?%EK?> zgweSD{_t`Se5vJ_7a3`~%r+EO%(pHiL(7a6a8dcTy@!95K`8GEb#$Y#{r_K<;lj=j zTd4ok7D9kiKPy|~c;}1h(O3jrkXw|G;kY+@+M26 zyF&8E`bXDYrcDEe=`NR6EE zFTGBfzK(w*9_Z=tNjF6}7K`%7-MF#MIgqyYdm$|geP_28B`t@g$rNh+G4a+wGGbJY z)LCjCC|k=e88=^vopHvl2&m zde;3(ixX}gAReiUq@Yk^pYw?n9j z@_#&otC<#;I#sXM7ly|;SgEtHbGztY9qFDN^{TVPLZ81{F%iSp1vaIFqZB4ds#0`f zlGJ~=Cdto_F@|Qwi7iAT`OZ(?$5C2s0CEG>J#eFxV}Alj93M1gnQ*3JJP*3}ufpph z=&k<|mwr4X2KWr}67HVkwg1lJ zp99PwAY7vz6e?FY+tm4+LhWCJf$HeU7KndoHP#ZI{3&$dq4N^EbY8T!w;nrx&Vx(p z+4aKQ_h4~*?EJib!#bCD-MwO5PJ;vEzjyIOCfF+$kjorLDZx~`L-+0L(+{(v2)rAi z0BR?Q_h1yQikX6^(J-fE?8G3SVYT>0*JF{kuCQwg&LBDJZ*eo3Dnb)R0Fn-+lN5i6 z^batJhtWSN)|T!RoEX58=#^albPekrmkg`jfg2P)h*RRjP4 P-jlNgNd}h$00000uXHOl delta 1152 zcmV-`1b_Sg34#h2P)h>@KL7#%4gf84a8##21C3Y&007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKgg#48_Ruv5}M=kHswDAS?JD8e4{8TcCmf!%`%KGaN-H)

lFdkjxg- zx$cL;k>4(7>8lwPSwb%;TSEOyXM`JPSFbUe#3iHpB^!Ueg2N6+m7JnSX)?RdCJ`pC z`>U!&9`I3~$Jm4{>4qEy3!x}ANEOgFq~rooB#k35rqARYBIB?WHeB@~-u7_6#D!kv z-#i!63yTx>fGF$B&v|PPl<+$_1=S7r(W(lF=yCg(1fFMj7EzxzUx`sVsXI%I;lWiB zdf7ci#zTL3D(<1-KOh^l$DDPx#e-wBqvV5}lO?X7=m~T*!-V0M=>>k3XmA=i(Mez7 zg?My$o+J_DdgJLK`L*qaP-oA|~57I(WjqKIj!b zAfSOIEi!rEg$|g-Wv~OJtM*-dA?t^C=AaFGL{ZtJ&IrVriu+3GZ0&N0o*}&S9}vuk zKl9@x{#TrR(AOX=fy>8miu(d*f!aXk-@wKrOAsuytbF@j8?f8f+ri-CaLEny($vk2 zsday6q2ro!SVkJ<{sfiA2Go#}{k7@K#p2z4=5EWGVuZJ2ZIL6SpnIoMlWw5(3T_&$ z_kAIq;uD_1_ zHcIup%xG{Ul*?)!pG^`#fpiFe=B1V>M`VBKeZXiOj(AjsGy~_kr*NCQ3Tmca`^>s) zM~J|^6|ob0dcoDk*=+MRE*E$=dAQ=0{vn<&Z2VFf0E@2BMCXF1R@OyRH$7Thtc>YP z0rEdBagPBj|13KOZwF-<7n1iwNWo;=+K6`s#N17P_H7#hLcs)^(REkxggf{fZ>xXf zF=Ii!kXJ+(O&_xpkPVNG+c2l?aC| z=tlk1bN%DRqi2%>d_3N(%6E_L1cTZq$x}MD=pvhCRb(8bt=gkTvqM~Cv!zzLtujC{ zY-66u)`AXj$?1ldjc?mq)g>UxE6!C5aT&DAd&CbJ+${vfz^!?$i7apESo@Hgt|6uH zZO`6#QP-&;T?U|9yy|5OeD2VYE+Y4>t{ngIZ6Xy=O928u13v%)01f~xb8u9rKm(0f S1ONcmlduFy2ATu_0002zhBjIN diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.6-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.6-compact.zip index 5a58463bfdea8c48da5f8bc37242f02cb8f0dacd..ab38ddb1bee7a90024fa97611c89c534899f3914 100644 GIT binary patch delta 1194 zcmV;b1XcT|3Zx1bP)h>@KL7#%4gf4%J5}%yrTcmW007#N7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`Y;xrvoI39+**+ZI!T|R%?&_ z6!+dP$>4rF?VJ%^6_=M>ODs*Z>G-Ue@<@~79@B&dOuCefD(?zg@e*@j*hXKF(Qt}0 zh@qpImi{Jlb{{UH3qq+;w4})z`;k>g)I5d^nC3B~=j&mq8ta#3m{{~hk4AEA4aB>S zu}Uo{mhOKjDaBjcJ2`*3u-+<3ydzx5au4QH)zDZIBJP;{`15=CR!;fXncWTsPzNwP&jYxG_#K#nuhYqCWn?s6J@kx=^#X(yxc?(i`G_*r>=1QmjvQ{qu!{2X* zPMp9F8E($Sh}rR;v`Kz+-=8*1-PWnfL~@@`!!CaxB_ojrwv~kTErmx{xzvO30euKo zi|S{8t76q%kSwpJZh+Orm|NHW|H^y(J1|O1o^gRwz>FcgD0LZ5)p(lOyCyrH)ae^O*g&*LTi4UY zkCQCLYo&7=Ha7ijYIUoZfg+p_)T}chPHumc3x0DOAT?~NbKwfgpC&<{+$^DjFf4>) zch*h*?tS1^N4bgqFCJ5Qzru=m92Hmii3T#4k_tA^i6iDQn512rM<&S2{0mD6OMt@& zpKq4;AUwEIlT?U5lU}eJok|8R9LTPK6fiQdD=32aBSSJzZjckbxBf0^@ zLRHj;9vs#$ijFw4rD(^-_RP?X@pbMbn=Yn1T_qu&xUjy?b>l{20UiX-#@ykaJv0&3 z|4e`e^k9YeN!_8FR{&XtSee~nxaG&!bguq1*o^=#H-G@=THfcREhr|EitjdQeLN0zU&k00ICG04!WPRqzm{`+5Wb0NN1%03-ka005KV1VIM8 I1ONa40CI6X`2YX_ delta 1194 zcmV;b1XcT_3a1JeP)h>@KL7#%4gf84a8#0~Mtyw*007dF7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`~#p4JN%txK}KTGEEOW>>ToZ3VUT@t&J9?V1;KiRKMe^> zW!pMvfQ}{T(S?6CCV&X7PW^sv3(s`Xq#->4aRGBB z6KK$uMeo0GpgPjCi=~DPo8DuX(oZ@~7OTEZ%INV}6^4JJ%S4&{vDLbl+oUZw|1!Xh z=?YhQsTN3?vb&T9oxEY>`d!c3ZeCY@MNOO6E^|U98XAOP*#w29{j;lNl-~mZ%NU4x z8sk^xCQ&GS|IraDHCqUcx*djrc`9cODoQ4#Y zArlLIaLEg;z&P-R!w(BimaxZ4zu{YwHd$XDa3pabjizZQ=hSmDTnViBombNjA6W~^ z2rw?4RG}>-TC5rux-+E6Ry>C<-U{G)_}8XK;BRBTYHQ^}hs&x@PMI&(fw-9%-2dk2 zs#Je+Y;DX2vi`k^pMuNDn5#q>B|+@5UgrP)eWmvr>0}{F&5|q(tcqeGpBZ?J-aZ$2_QmOT*IjRp7L(;q5%GBTY`fD&3SDyN`Mr*P(dB9V#q zpwJ`2H^B1wV3hKqPg9~oOULPfZ_0bJvRTL+FD-_|1BKLf+W15ZMOKE=v z4WNO6qQAE=o63J$x;tbYPdp2Hu(LHL_K;~htW;bpZL1ToHiRDfx7zS11R5KgrdxW& zau7*1EQn6tup&m&$%P&N^r<)&Q*qpo?OrdGlBY&}eFOji(h&dvBmk4z1VjeE I1ONa40K`}`8UO$Q diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.6-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.6-legacy.zip index 83de17a296369c3e8dd16359a4336ffc5a372181..859da901f201e40d6a0062451588189c861b5f26 100644 GIT binary patch delta 1151 zcmV-_1c3X43V{k2P)h>@KL7#%4gf4%J5@(Be_U4t007>R7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`Y;xrvoI39+**+ZI!T|X?5^t}J8jl|L1Xr(jOsevC$0C#;kAq6H77|IEhUQ4F~|Va5!T^HEnO zRD9Z`&F6itQk>kCeg}HdhKX#Dq=!lBoLUdtMrxm=5q>0{N3siF84FNo$oydv$AuZa06J=!7FffJr+q`*IUq*cr*d z(q6Z|0p`=0Cb$0V+rVS@kAx){Y-^}Na9B&E2AgqSXA;^KtvCc6qW%#=I-}P$PSrA& z0G9ldE)s~ws5{WEidX#Qc(HUB`pw7{*3Hf%jia{Ut<6nP_?blGVeVu=>7Jwy0iA5<^uu`ry8GJK2c4iy~c^ITQ@Qm zb|N3T_eh*!cfN)ptqioseERr%U4&Y7TP&_8qh!U{v{diYZNK>;Kw^g076M|dBY@QA zoxy}4aZU~aoo{NWDj-ah#O(;0LLOnASDpvA0hWKNtK z>{ovbCw!nRXssv0dZH54_zfdc4e1aM;D?9|{tPM}L^_afk~QQhMY@x2UmocY>XnwY zX!f25HLPcE7rAg4I@=a14y~=1(-qAA-@=p3vZSW1YelUbi4vwASulkDZnawfXF%u* zEFkihWKv&x=g2}DW%{;9s^n6__Qz*2?0tU?MCao_!i#ZizU&U6+`hk|BbRNO|I6CZ zj6f;Zj4a{PA^JrkzSOzZ=bIwV(`uW25L3iT?5!PEv2-OK0CqdImo-!A`$9YW^C_VSg6(-S?XQH@UEbCy518KpTvFZ@rc{O{WkaF2<+fL`qzIS zb7`g{LAHK2k)-3Kk7+y(a{WBiqT2juWrW~EzqbFagwse)FtK>gV8N1I2k5i{>79kM zxy&r%p|Ue$F_qnAn_yh5#3Sa4xbjW)6vBAIA)W!7A#Q)2DygD|wzvm4U2vGlw-JwAvAylTv;;{8nFIg;004WRDXahh delta 1153 zcmV-{1b+L03WEw4P)h>@KL7#%4gf84a8x$7@FH0R007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe`~#p4JN%txK}KTGEEOW>>ToZ3VUT@t&KIg9$sQx&easf? z#l~xV8$XHu=4gLhn>hm{?>P(ypKJaz^eAnm&f6E(1ZX`Zm5z$! ziWeeCQdF9-DoT90sOUWhBleYKvetcz4?ba%Q-|vE)MKn415$*mZBF|ji-2^zcuzej z=g7CZtqohOmV`w|m6v^tpGZumW515_pUpF0#0!KJ0-k>$ISOotpBS?oveC9^jzF|6 z#f^6!vB?!V*pcmGyqD7FB>@*K1JzZeX@Y7yDk&MbbUQ~%9V_~AkUafz?!CL7PtIdx(MH-A^#Nz-O5eNJ4I#sFS2&4@@ zRPqe&N?;o*C_j@XKZi|;p-y>*w3%aR{ZBbxWcPp0?vaoDa}4F?bJ9~#-jRdU?jI`S!Z`)JK7}yzYz` zKM;S`&c{pdp$)q4B$6XMUbn~HSuV6qfQ3J_uB303Stwu=6W;mIhG*w8Y&HufY}4u* zhR!y9+NDG6fCq!uSM)LW=gf9yoyd)R#sTs+=<~-0U)%^-z2(%rH>6;}{eH>*;7^3; zzbx81pVf|-seXH_P?(}%>8)nwJ*>@Er>cLSFGc=pO|UHLgLEESDEoSW(3Z4F4JM&B zHa}fNO!JZCY@3u2Bu+z;Q?oB0HL?GQNfvmFh+my z7a+rB^Xd|X`+n(gw+C(#9jB|8R%%f=oOH6H972_XE*1|0{6v@fB}8yBTdS)QppK}8 zQ^4bQ6)bG{G{%}{4&Iujj)0#N(zkoYPi~Z+!~&z+QliRest=FvpWIdFuLqHgRr@cT zakFT3IXgDL0#Ei|87`F#bpY%kJIz+E+f~&8Kz&)qod$UY3Yr!R_4apCyX12#%-}|i zBisttIC2R;F{7+4gZi08#cH|!n_n&7{($@c0V>r1P)h*GHn#90 TSp)z8)|0XXNd}t)00000P5~eW diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.7-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.7-compact.zip index 7614bb79ebb22e2e9b114779c5bcdf4f96681c20..6c6c20763d0e73472887d8d13ff466fd8f46373c 100644 GIT binary patch delta 1202 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 delta 1156 zcmV-~1bh313Wf?7P)h>@KL7#%4gf84a8w|0K#yDm007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe{0Du;JN%txK}KTGEEOW>>ToZ3VUT@t&KIg9$sQx&easf? z#l~xV8$XHu=4gLhn>hm{?>P(ypKJaz^eAnm&f6E(1ZX`Zm5z$! ziWeeCQdF9-DoT90sOUWhBleYKvetcz4?ba%Q-|vE)MKn415$*mZBF|ji-2^zcuzej z=g7CZtqohOmV`w|m6v^tpGZumW515_pUpF0#0!KJ0-k>$ISOotpBS?oveC9^jzF|6 z#f^6!vB?!V*pcmGyqD7FB>@*K1JzZeX@Y7yDk&MbbUQ~%9V_~AkemC-;9FpcbaG@%&>iif4X1#Nz-O5eNJ40NFAq`6nAA3Qs(s#ezRl-D_AF|0uU>S2&4@@ zRPqe&N?;o*C_j@XKZi|;p-y>*w3%aR{ZBbxWcPp0?vaoDa}4F?bJ9~vq7KWK^!|#o zPGkwy>M9+wtfayYY*W8=#t-~$0}?!Sb(2za(TxhX3LTmhw;ZRK2GlR4x9?P4QMf&y z6)df;Q<|W!Eu2)DiquLx;cskPyFkwJS{hMG&K~+he$kp_T5Q+ zKr_Nk-&EKbffZ9ZUG@G~B`QDJsbzagptq^`*J7J!jFitm*6K{SEA^s!+gKU_af!#K zcWj((Ps(9dhKvcPbKVrmc$EGlOw_1QPi`{ zi611(jom%^0#xr=q2F3pyGK4}gbRI^F}tB|S{UK7%=n5XLy0RYz$3m59GXCnvh#m7 z3Lgy#XjdN5VLjD^Hi@e^LQ#>@y|w@Zc?Lsd%u>gZt3d|ww^4-;fxH=AF`c|%I8Qy3 zi$cAmy2A4|eNKU0z|JlgqK}170~%mf|F|sm9UwcGSJdu(B|7{8(_#(!n3|@9a6q}Mj51~f(`=227Ue*o+hA$3bPs9K034Ie#O928u13v%)01f~xb8u83 Wa6pe-1ONcmlePp&2A%`}0000RgBtY! diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.8-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.8-compact.zip index 7cf133ae4a9df4a6beddecd8b9cc7ff46e029ebe..71684668df62d4e4169fc91f48650ef609569713 100644 GIT binary patch delta 1202 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 I1ONa40HrfUGXMYp diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.8-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.8-legacy.zip index 241d8b4454c85a7b2acfd9121fe4fff78b64acf2..81f0cf7bcdc000c4346214abfc49fa474bdfa135 100644 GIT binary patch delta 1153 zcmV-{1b+L43WEw4P)h>@KL7#%4gf7&J5{HL^}$&L007>R7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`f|Mbh|9P25tl*ZP$hYFA*t_Shw1o53M7Zn9tUYH*N1# z{hqFZ7qKYFxMCU@yQy`4}pQ^gBEV|JQYp zI9R!-`BqSK(Rz6-rl~r_aF7ic7hUehqZUR^NvLQ{v*Ql+mSx9h)P@ulaDW(eF*8}( z`8zJPiy)!+>S`KKNG|@Imti*?)job!{bXr2m&AXK% z^m24@8ERrHLFdxw-;D>1`$kc$7yiZs#CTE@B;0z_#Gs))(drRwpnQ-CN-OLwmeAVQ zCq9Y9EvQm$#e$vL9ooRE4?}~G>Sb*7y8`;rUuY65SMdRT8l#evB)ncKgW4P~!cWyw z@+5z1QS6IKcT&~)dZH54_yLaT)`PVz@@6}Vt!24n>1UK?YGAViuVL^|B<~SwQDdnx zjkEZy4w1RJsMYR$nBe_~{0TFzkpjW3*2ORPHQ&xcY~H$m*Q9m2o@6wNZl|aToFQK6 z?#SZGFTfV^t+~UYzESucVh|&2d`-xZIQM^_mpV!xVp@o4nJFBHUMyjkK_{AyP!a?<}eY;l3V{cp0eoONQkRx=RoxxAZ zynTFsgSr>+7R`$*pCkU{W!VxMCQD4Esh5|=anqQ+GQd7jc?=0xHw4N;OHlr^#zcRk z=K4aDl|;`+;FqB-vJr|wXCdJjcfUL+k4w5=X#U&uFtCw_0 z)NZE9gzF5|sH*mPsQJtY_X42zxc0@y7vZTn=@KL7#%4gf84a8#V=n?+j$007pJ7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe{0l|~=GUC>MC7MLl>XKvdFCTL>JlAv;>-G0~QeXl2!R_(z=Dys>@%esP_i<9kf*u9OkjIvDOgaBL{(1s@%43vDeD#ETVb?*s=S4WvH z|G1toBR`VU^@qF>)3#a=e0UyOFhqnHN$LHM%f?8En=pSx#~fGVAQSI9>!2_hofo2q zPw2>1oS7Y*cObQzXv zo5gwFX^xfsI?5O8!Q+3#9bAbMN8wU(HKx74F=~WUyl9A>?E*f2rz*~&|*V`Hx}pLPLI37ubG$L{dAS`RnMwIG?FovnAaF} zUQU%`-)Um{N?qdq_}qHsRIEX}I?O0U$!LGwRrBH`lt;0l^Hm}o5Muog9RCw-lnf}` z>!S{B?ZM&dG-qmS5n*cL+hg_i&3=mX0{YS6OPNOS*wagN;j?Om>tN9KF}X_%KV@X( z0gs$s!)Fx|svjk)^qA^yKrEyF*(3GCpKpE`SD7#6LWth+una*+&Q*y+A${4Zn~#54 z*XCC#{1ElPhEB@+#XyzJnJle?$4YUkD?1j+3MtYqIEh2&ZSG(u?wsy~pXNharg3ul z0vE`9e^#LUC@vlgy_nx;lXa9{YEOUVOp?p}q6fZ}TGX$HLD@!2%N zQz^RawBZc~m)v98*cy>=^3E}IEv{H_PQ~Y7W@AtKPzsAyValOseG@y}P(iCU)#f^S z7~X2EDdy$Y!mpNg3oYZEV&w!^c5ekD02WMQmjC(^nP^Z;0Rle*KL7#%4gf84a8#V= Vn?+j$007pLv;;{8odf^?002%yLIVH* diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.9-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.9-compact.zip index c57077d1d4068621623713d2b1d47e01f522e4c5..1bf4d20c763cb0a6807e777ce9fea1d6da210d0f 100644 GIT binary patch delta 1201 zcmV;i1Wx<43bG0pP)h>@KL7#%4gfA(J5@(07Mq9!0091x7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$DfU`jc5WV}WrSCs4Q`Xncj!oMsC})#qy?%WF27(C3elkU7ZQ|EC>I<~CWawSb;iz-?3=!P zaR0iI?F#7pMLLYsrXXPXJmcjULgFcvGd(*PkJghiv$B7%U2|BJq@-`8bF7w3=>sOG znnczY6S=9mw_AIw&oKPbbhGQ98E}zqO_nDx6Xi&e@!`z4A)x1lkXbB!1}F4D zpix=1n%wqtQBtg?qjv(iWub_v?8bBhAbQ#Pg{X?OzRpu5d`4Tw1{WlvbuHUZDjnR^ zb{NGIw=p(FAjC$Yu6cw>6*4MqV$*9T-HY-d)`NfMM#0c42iTo|@6HkHr;Hy|XzX0T zRPU`@58*?~SZ2o?%nxSvE`q~eb|eDlc~KV)SA;C^4|p@@%!3zi{a-sYN3wJ`;v4Y zuX*De5AB5i(n@#da&$L2&*{!$UTv_NZZ_j_oj65cR zE+R3~^M*KNHeG;K!ao7F9s~$G2bFa0NY{TSWGaaHIzTE-pJZ~=4;hd%S$dqb8?g?B zn_oR8$47eZ2*<~~&hXvY4T=O)a@<4}V-J~FnsZRM)zkE80(fZ2Ogfcc@^cry0Y!Vp zcl!Ol7j#o3Xhaq63FI@1MTKZOZo|`!hlX@eb!rHu|3cfWVOn6MkY=84XUtSLy#D(Xs+!+tLU zBD3fQrtn1~k~=YTOnJIsmB`f|eN=ztWl{2UDW*A~wBAw=0oLd_viX&MOC;edo_ik6 z-n!ZiN_Sm%CE(;Tk7Sq-R}-1I0>k+awfI~nW}i^it*@Ox79)DhKId{3^tsu<*GXT8M$yy0UFCq?y3#?}TVPz9gO928u13v%)01f~yTsu`qC>92rhy(xt P{*&eeNe0RU00000>OVXR delta 1204 zcmV;l1WWs}3bhIsP)h>@KL7#%4gf84a8y;x5(|q2008!p7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKe{0{@(=GUC>MC7M|Tl~2FFqh*Tj29FS+fX$lDa;Bh>$J&Msu6bp@nCr`04V#Qr zzjO-3nUwHr!clu6-3G;Uj?0qK^pdD@)b;v)XN@@2BiZ8 zL@#1TN-lf&ZDOL9{`HP0o(n;g16#gP#C+DVBHYv54`qKf;OwHq6j??8Er3csC6!(? zcV6vp)&Y|KqOZArb*`MASX9mqEU4n^Fz80eC{_Iq2QeeQa6*$RiFf!H>i$On=@#-q zCjmW9f$pz&0P8D|%?`i`V`quIL;(OGf>h$)ZaQxLg3DYsREfMPjie%3IXBJZ$pmMs%v+A_xU49okoS-E)}sx_P$T9`UAkDda3hblS%mX8I9B&f z6WYURggZ$P*#5^NvUT7{&UJhWJA${oT%Bs48b{#_j&Dlz15(~|_;ME`$au4rbT03? zghTU zBi=bH7Bg#OtPWdef#y?~FI4dMQW|h}598X4IbK*F^4@UpZAIXG5R>)qzvxt&<>A<$-0YP<}s_{w#+#>$V5B*)NtB64PRa%heIJsgaaS;HGg*PfY>8OT*~N?X zj@Uo$R~m~iUK?+by0Rle*KL7#%4gf84a8wCZ%MuHV S1ONc`lj8(Q2F(Nj00014Ha$fE diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.5.9-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.5.9-legacy.zip index ea69f7fbf4ae0e212664e17f7a9c95707afd0a8c..a0b755b690c9642650a657776e6f38d495f1faf2 100644 GIT binary patch delta 1195 zcmV;c1XTNx3XcjHP)h>@KL7#%4gfA(J5`||xg=!-0006Kkr+;YAJ=oe7BTbcpx^-K z1=jV{4gy4dH3+yu{_QSRfSqH~CpuejzysJgLn}60Qf)1N2r$y-V3vC5Iv!mY(U~?Rldk!;;cDO7r5`e0;PNF zCI=~olIH5Ar$;_AW1z|eKDKXI+1#L?_92*B%959f28HxulOnOsAuSh5(3wCHlXD)@ zu)>z{*XG%ONmGW&orpsrG7e&#@hx#!D-@hrA>tK1at=_JvN0vUTL0@w*>j?L8sc;U z1sZpn?}U5<8T@Xw6kRM)u=XW;C6?o-^#msgWlu%TZQY}Kv2B^(Ae9|}53M*ZO&93h z0O~t~xI+ZD#Y(w_!%o6gBhgw0kA6J5G}9=a`wmTi{xi?}Jk`&=rJDc-#CWR5S-?Dv zP4V;&DYh()ZNtF;=Tqw76t%#4ilzUiUx$Jf2RDyP;koy!i+N?Wb<yra@flO0~T+`zq;_$$<6?Ths9O_&(e7vwUY`QACp3 zibiWOH%##-;GR!iBuaJoZ8^WjW*rT`!{d^FxERv?&=u#y>tOyDjNU=##5`==sW_&w zOmqtlFJp^7fx%uiM~3_oG&{ZG`<~uJW8v9~O(sIm!~%Ti7%u~(AKQEd;Q^~7U`>u0 z_HMfw&4mMzh%%41gH9V^BR>F(()lTz8QH9&TKbejT=@74FML-9C#!5vv=Xg;4&woT zL$?k|Sf6sFuNUy1mjQK5|4yA>EumM}G$apg&Q$c)5G2Bb@+TT2_YC&nik{@hh zbTMc|q{kxg*bIe<^llPrxZ;{@KL7#%4gf84a8z-^M9pUe008Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj65PWzZS};U}7)j~XtA9k&Mu5flM8ZDhq6yQ`5Y|Gtr+eLR zhm9e7fN2-%Zx{6iOWwD9-;fSfn-HcU%Q<+Wb_PFx40T{eff|o?cfIvDJP-K{m-POM zvrc3Q)#@r8vaF=S4s27ub;b|;Z37ZKb#;?cRd)sF!`+(LU?jWTXQ@1OQa*1o+fKKJ z^N}h_yovze;mH3>I)L#-)SBCet_pu4FBeLq^73uu%&6lVX71>G18LO7OCB<4f~eVu zYB7?3C$76c$8d%h#Ic)i?9Bl4$T~&dj{5eOT}kT-G5rtHD@rE(5H!PKk(XW4nMifZiJYmm!6$MWa0tl;XU87V8 zM29?I)fr(<$2l~HP;MzJb$x=G0Z>j}4@ydZ*-xtjbI_c*+@M*x8m*|nyxs1OepE(n*{sZ3eZpBUZGPrGJ+ zJ_u(dq?|y6opM&l5yun-f9AB%z#kLiVo?UVeofjbE^-gKxd7+v0Z{nrTRJ)b0ubr@ z+)~FI!U~18`Hk`I~RB&K$VwX)NsUtwF|u{ZJJ-qC4(p8gfdNTtaI~25{~Ddwuj!O928u j13v%)01f~xb8u8~!bHty1ONc~5tG3LNCv3{00000-U2e5 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.0-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.0-compact.zip index 2decd51e2f1dcbe1755bba8e79b32b98713e467a..ef09219463df3fbfbbd91b5b6cfd76ef19c0ca49 100644 GIT binary patch delta 1234 zcmV;@1TFi`3d;%`P)h>@KL7#%4gfb?J5@d?V)dZ}006)e001PD5CtcZLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Dfwrt^KA`|FRgW&Czzk&Vd5wzq}xa@#T-6%#g zz;m|J0Pe=6>#-+yad;E{{AGW)Y!Y)f13=mwA}X7(#t+|H$K=;Il6vBTf8l=o9sDt9 zfGrCve5rhNAlfC9(Wh0-MibWG5#=~OU5&bR<2teH54IRMDA!?SMTIM~>0lDE-@4bl z^raR(a-X{#yvoUz`I4}iy1Rpk-I1wag=2}>vhZa#pa9*af^1&X{sezkQbbu8Qn0G< z3i5OuI${(7NU^3s4ZglCGS$_naPuJgrxgclKAyWbEcFp|=7ZY>!1ii^hxcS{t637~ zo-$2JXjIrJ!<&?Hd*%THlUCnMB}BSsyoMN#+VbtARhizyiLpo#s$b{p8v>8!DR2CK z)0H(&sqp&j#fxFIs-%BNoiLh9o}E2mNnyL~KNpLSPXl>pg^13FRbXs2v}GMl{ZeaLOZvG$|0>*naYWQlZ3YSNpr zHQi)pT&}Obc2u7|+=P(&m#46hi3a#4P(9%b#Iygv@GvxHf;@i>*MHczVOrfhb8{>5FGPfV*jL5 zx`Hw}5i$H|@CIe)OFlGpt&T=F+0uBW$u6BNchlLEfa?G{GLs;tJ#{#2ELs3bqf*5! zKNU?k`h}DGsz1mkJTW~ z;hTVqw3PdZqX6KHlQy~8R`tfIo zFU8=sMvq&A^JwY4q6cH37wI6=A;EnZ2G#2gv#By$@wmcQJ80lV)IrBln&yOP=T7`7VQp5`ls zLOaxE#Q2{t><+P*|54*%#_rcTuYb+5nWIPN*{;P>S#iyXqS=F7sFS+-HY9bk*z+-d zojIb5sYnLWUR+%XUh8%)u{6dkBlJ3|i`}Ldnn-^16SL; z-jo2Zu~5r1)>+UJ-sFFR(Ch})-LE+cNjr^&ytgS>N{d<3aZXtU+X`{GZN};^MyAhl z=hx-!=zz}Id_!edTM5ZhJO@(hGd**=qbP{_o6(uUSAeXg2|sk55xDAP=5?y?5!L+8 wng<^{|L`XMv`|X{0zU&k00ICG05@DaRX!+U^`Qg+0Kk*}1W5+t1ONa40BkRAod5s; delta 1236 zcmV;_1S|W?3e5@|P)h>@KL7#%4gfB5a8$-UxR|2^006iW001PD4h1KXLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKi5c9ST@H7&Vg4C**{s)}1_T$1V6RGmPArGK0 zPH}-o?5+%X>L6N!hN1j5p_G4K@s+B4$yJxfZ!tUYXAkvecSS%`P_P1vEW&ITBY-kg zeoO*H+v7bS@!Xr8d}l5eJH>SfVG|tokI{1J=mL6h?zRa5%ZLVa$GWqH5%Twv=o15) z78k>*ycOG;du7V#ac?U>t$J^&8BbNDF|2`c8C;gnxbg4!-m;a2E2Mwmn`%Wx?Vz}C z)Fk#lq(H3au+{*MxhT^1%&D&vn08+O)j0-k+d)!tS=peW*yPo{n)Ku&$r^nQ?K~(f z|7zH-gUp_w%7^yKBDvDct_*B@39vHjML>d;Mv06sG|y+D7CT}#JMd;5l>+J@+@-bh-&GHQO_qXi1|ISzoE)7iw@duOO63)!5{rZj|eXl);C1YN7Cavbdg|x z#DpP0Q6m%*S~8*oQt{0Gv|>y8aJZ>YwDb)r@JVJFOeYgbs~TkqbzgNsoB^{T3=Gm9Y-R}m;p$6TV*`rr*5wIVvfMt_iIK{B@9Cw8w46Tk5e&uT1I4Qo1ONcIll%lp2IT|*0001Tr&S~X diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.0-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.0-legacy.zip index d4ed5b8d1581772acf4b9231438ed6f905add597..8cc3597bbdacd582a13135e4296a0e920535537e 100644 GIT binary patch delta 1202 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 I1ONa40OgWVB>(^b diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.1-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.1-compact.zip index a0b337bc66f457b5d41d12d673393473e8729d9f..0eb1ab76c07d1776a8561024151cb1c548124f56 100644 GIT binary patch delta 1233 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 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.1-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.1-legacy.zip index 50513f8a19e2885d5c99d558c807f8bacb119df3..fe374bfc80a79c1627862cf6e0cd095a18a4f191 100644 GIT binary patch delta 1202 zcmV;j1Wo&@3aAPjP)h>@KL7#%4gfe@J5^f(U_pKa006`i001PD?F1*0LL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$DfwrxxG6jlHo4t~qj8FpQqCL6vDW^8fQpG;O^ zEP5r3&O#1Jx{oVo)FT+7w~2p~g=i^>qaonhf|{lIs^1NxXO9)y`Oh8zQ!plNxgn9F z5M~G1TA451K`VnsC2lq)k$Lgq{(LC37p%guaZ*2=yP>A?MO3@Sq|OU3QGxafjCXCw zv}jVW%f8(c&>M}!GCqw~q5vwveZO+84=3%KV)1J0Jn0>M|D))l&Psoc%rO9*r-*(a z|EmDL&Xus^xKVRwUTG-+M2z&_r?|cwo+j$w2_upyDmx??oX&BkV#)S(2GLiR1NwFD z^{$E);tmind{s>!JH3QFr^X#<3EZ8V=61bAKi0eDpf3(wzkz@$wcp`Wbm9{?2nf!7 zW~%>T%wKcYPUF2*g<^k6o>1*O4jTi8+DL4a%Kx%uE_MYIX)AWb1WUdocg(}TVq69{ z3e*d*jABrK1crROp6q^5QrpW;g%Ry(@Av9>?dc;{hoq0Xm5WJ!JCUD-mvr;wM48;0 zU7GQ+jF4L7$E4ia=fvy$#j-e$TVYW6Z8pWL4d~T4+89bFxO;!^__JBW*w@~PzLY4( z;2_8Z#P7)_yQAfljaA5(mXzkEdCVVCvLM~#jMfe1f({F!sF3F;(+dq0q9@|gjI>3B zXgmI)@M7ot##f?K0pcjvSqI`h6vydu0uSD9hDW?XD-uJ4{8sdG^^NM(-C9s(;AU;u zz7XEMj5Y0V6hnXH)`bTr=nKMboS-`w6{CcV-wYvT;oH)~wTZs!L3kfyrFB`3)YDf# zRzGKq2PW*B`=}#JX&fOeityoZKsOcnsVXQ_DS2ZvT8*q@a?zAgm*P!~W?6(kR7<6H z;dfGbTZWPp%!AH&CysfT{PfkkHEw^e{mZY;ZX7SqfO(4uXwTE0SIR`VN5ci98zN(KB)5Lqs7PhwLa81tSyW9Nglox-?wNs<&$)zq& z1gk>Kr#W>-+SzCgj}iSEJyHqc{p3PcoKN1wHN1b~ta5W=@#H-%ebY;I!5)TXG$}ql zMlE*)?q@!04P5j|8Y0uXi!T50zU&k00ICG061JbRa*jJL4E`P0K^gi Q03?&&1VskG1ONa40Kbz(?*IS* delta 1194 zcmV;b1XcT}3aSbhP)h>@KL7#%4gfB5a8!a006v^7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5ckF?(jG!aE_R(^oyF3+vAm}yxxtBGh^+;wz4RC3L<5*N zocjw?x!;!TOe}x>n0e5AqEZ-&ke-LNH6gD~cs&H(O6;LgNIu$byiBAX>5dc1&}+YY zVhdNNGUg7w|w#CVof~Ha_ z)AvN2{{5f9QRGSJCB!z${Y8Rc&85pO!3fHWbA2`Lr|O}IOV+>5zcqdA%FKm7wr<1P ze-5~H$nF$tivQin-mNkSM(^0V^ln91iK%>5=z)I(0cqrVTvhBnaE)w#l>E=CSw1*s z?2ZVl$V4%W!&bjA<9E&E4IE8{gQx|7yHnF}E#!hmRtI`R5F9bm6$mST2;brIcZ+nQ z)T`2q0LZOH!X+!tvXWZnei8d5kw%ag-e6ykuoSy(RG9=bGb#Aqod+&t})dh=5jSe}y|NzTZ}K z$vp8`ZQ(6>;b~Am=j+i~o5_XrhCr#NIi!yw*n$I_Sx!ZVZjW}jx5(zwwo=U^QeJ<7 zv9>;8^?Td{nqlT;W7Y@H8Wdr2KAmDI0uEt;4jPO@-uP1SP38xpI35)l48htz>bF9Y z+A2pdUuzOWXmF-E2YNKzEN>MsDEKQ<##sGS@!e7a z=+!;Cqm!IVby^OqsSU!dqrB{YHYnzIiv`#4C7 zC@TtJQr4_;bewoW_1e3yJwQLYc^(nG*m9~l#oEYT@5*^BZ&S2)Yp#;-Rdaawib8fN zBn-Yo!~oRKnQEcihe(0`%c2fYO928u13v%)01f~yb8u9GS4Jy<1ONcM5&)Ci1V;wK I1ONa40NxNx!vFvP diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.10-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.10-compact.zip index 12fcd3893476a4905144491fde1f1684640e1536..a3242275a9766ac6c216fea21f1a3c61303c6320 100644 GIT binary patch delta 1232 zcmV;>1TXu{3dsr^P)h>@KL7#%4gf`5J5|el%fz1q007Mr001PD4+STYLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Dfwrv&2@sD3MUkkg|@006pcx1*v{eGWF?3RWx zGc8FO?R3X>Rn>R*iftu8WjlXCcCKka6q^s&lw+T1MY}-29eNR{#_i-ZD4kZOKevOv&iQBBaeX^B>8`ifRzc2N4(o>c(H*EF3#Fo@om;skldh^ptZsCO!&_hL4IxsKnW~=p7JYcnQKbt3M>eDU2fZj%2H+Lek4gF}KfQzLLkA;!n<)OUV>y zQUrePhqCO<(Y#Xl$s?}4f#U_yO|ZuLx!=QSS&%ga*B>Q?*?20HVOir=@w}}lbI?$F zQMqMx9&m1#FD`#0SENjfyuQEM^SY)Z8DS+7{{LIE%lgoTbB}rjPrge|O)qh9VpC^<7DBLGPV{*5S>>qF_e%=n+33 zlkpwTuv~v{5JOm?31cay0vTQswX+Hktigu`!A1|FZ+hwpfDFC{L@|Qvbe$*Hu?c42^|I1HtPgU)oc!{(5y#KP&% zt+*F2&`~QgqJJ|7Fr%%HzjcIy9%+TIEeD@n?bCnz>k#&c1A+e6IDwBY=IHwe4Eg4^cdCi}r|#i+`&Ky_|>^m1^mM!2Uu$ u$NnAocQ(9GO928u13v%)01f~}Tsu|Eeapn31ONcdll=rq2H^w%0002fx>^?i delta 1235 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 I1ONa409*hunE(I) delta 1194 zcmV;b1XcT_3Z)7cP)h>@KL7#%4gfE6a8#K(yE%IV007C67f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5cR%TqnQ)K?wn=J2Z^JHe0AVgmapV;9^CJq7?(S|Wq5$| zq!BBYUn06gZ>@h%alh7Q(&hy`HV61}#BmVxI|wsq%?(c(%O(;?qvIE}UEO8`64fXp z)ll3Hs_y48wt?I@?lz{&`1r6F?exa@-$q3GzV00so7#EL=~{{#2IR0?s&~;`VvP}@ z@X}yWmVBeD+l6uyt%{RD^~^XOdjlArDBe+z z84`!czcT^HHc{$BqbL<=QM(7_>7zHHsnmv;RB(Xt0e9)8QezjaEoW~W$gy_XXJkq1 z5CpVYys=4w1I>JC29a)oY3g&~cj~zo7sMML&31p^REd{*O|ueT4c94ovWm5=_m}yJ z79_$mMQ?4^u2z1RXt)N-B5aDyPOp+RoS%S`QI3K3nc(AkK`6rcDlv8;Me-YMIW)#F zmc`3=5c1EDWRoLHTaWM!h?ndzi@pi~M13R${-;aXiXyk??8DGNRoHoqnr9}21k2{H z*!X|(Lg)5x1VVxcmKzlIdSGWuV|gS7*7bp1 z)>}{Up+I(naJru0IZ3EBbv4GfZnFm|PHBHoNF%RhM^Ap#^#orvgHxgD#$|7Z3MvH? z8iJTnsbi(oupv`?MWzSsH_&9`368-86YsG#=He>mmR{r|El{{j_P1pO4XaTLL|h!Y0u|afp9i zfuJVc*QQp;Vfu#e#2#nv4=^Z!v<#G!r7Xh9pga0sNAW`l z=rM{n66{&I`gSUNyO+DDIYqrR5@N`Imz1zfb+;AJYIA zBC|HcwBVLbFo*K>;f$d^+K_MbAxQ z@oQ2%t4h%vtp8{C-v>}j0Rle*KL7#%4gfE6a8#K(yE%IV007An001Na005KR1VRSA I1ONa40NX@3A^-pY diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.11-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.11-compact.zip index daf0b8f25626caab2e76b09b27040804662e701d..f451b3b4cfc7e23a192665c88afd4339127d41f9 100644 GIT binary patch delta 1231 zcmV;=1Tg!`3djl@P)h>@KL7#%4gf`5J5_=;j{=?q007Mr001PD4FxBWLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Dfwrv(sG}ZA48Et3)am|>o=T4g}SwX%!3&FsA zGhDj8Mk}G8g(ghnIC_R)XXbyQ;jX5^tc|#A+))48)|aO0{R4i^qVd$VG6flivwL68 z&EECH#z*3wDkRA#uU9lY!(|;xpryz6Z`UgOsZMC)fSs0|zt<(NMTh(5%Q$y_VD9mU znsfgV$1vQ({bwE2@~0PlEZ?;K?>KB&;*t732C_2zX=0YLn<$Jq=mD@V_2zXpJ&H8h48+wqJ%J0=vh+%ndB=K0oiVrZT*@PIM5<4pu529&W8KOX#40nI*@##mBk#S!WL_|1b6V$92KtKjufb1Hwe3kpL(=0w{~dTf&C-Zg}Kp3dx$toT_Z1h0}ECUpVs9TxaS^=9>8>-o>32SRvN zH*SF&)IoCR_LzSannhBNWA{g#Z;ZAn?p}T7ARF6SKmIdi$FiHl{dak0>jKbxpkY{+ zzdm*}4JnKb7PGL6_c~w$uI2{1CHHB~<;ayFeyM2Xs0)Pm?2}a=gP-OW?sHW*n?Wm@ z$3q_$@zGh!Y4l@MuhsC0T$zT<$0Ny0lazZGS_R6b?`D4#a@as9y;D7XiB>OvOOc)? zTBbTOCSp_F*p^yK(GQs$DT0zI#jT}9s3zdqG%e7n2y?@{G6bBOB<+8pgU-EGWN9X-n?b$kgk6lErmzUBZ_ZLWB*Xk5+a7YOkY#g z(=(M=_anW&#b~b!sg_WgB&8xHdgf z^yzqxMP*;iuQC@AsZaJ{;Ba=*DQn;lHWo_P)3b!e-D76nGQupLV?zn`<3I`XJ;<9a t|Kc2~0)0?R0Rle*KL7#%4gf`5J5_=;j{=?q007OC`vge_-~<2w007@VRha+) delta 1225 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 I1ONa40L@xMs{jB1 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.12-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.12-compact.zip index 5b146bee61ac2406fcd5c3a7399fe0cb2df7931c..6c3f55506306bacfcf6357419a07430b9a308ec1 100644 GIT binary patch delta 1220 zcmV;#1Uvi33dIT+P)h>@KL7#%4gf}6J5@WxMzos*007OA7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Dfwrv*9`Hcc)JUwVWR5E7$ge;Qxf{m2|reqOdz57|0cMU6v zOh9pXNlnt4k_CTOJ9&bf>LowL{SS0Rh~RSB7`L-4Jh&bu$umS$_R|WMyc9k3DY4;X zL{Y)yl066e@2*e*nq>VmIWw3zv7(}{`da7AP~~h9#9S+EfxaSCyGP9jAgRIy1b!?x z8TU@)isfs&2vzzaaRaL$BXHmhiBE-l8^`Sa;G*rTK|p_P5jhc4LB`W`xda%&1+|!0 z6bTs@7K2PDJh4C4`dNK5R7bKADh4e{De@zDpt$JJoL+ zpN01wQmO$z>Ewg=6=ScxNK4xgFIrFU5TlUEHk5jmQ7*pZ{P294`TjYyb6>iA`zCtz z_2UJqcJC`u!6_Mn0gQmEzK!hb^X-s$DdvwWWY>QS8-O-doQVYzE11vtqQg)nA}}^? z_U&^KBF_RoR1Eb}$|X_r)iueNDDhnhZZ><7C^V=-3Rsj&7Npw?vSC ztU#Ull&5_!Zus&RD&gS2p_!~n9X~q@poJ2(mltf*ifdpQrUZik)+}UgE``EMks*Ec z*A{=(qQ0v8jR&*tYh{?KOq_qE z=1p};T@gYE_F^6u-6)iH44z^_`Z(Tl;IHAGaz=(=8^j9;rlGc0)$$hpCnP1c=FQ#y zn}YrJs4xAamYKm79p!wDtzK5*`QpJ2&RHe|JxE8wO{m-_EU1a2N=2>se^MJI#DbyB ztvR*kN#mGK==zL!t~Yeg238 zV;g?H0zpO928u i13v%)01f~~Tsu`e#74B61ONcdllTNl2HgYz0001!LPC82 delta 1222 zcmV;%1UdV~3daf;P)h>@KL7#%4gfE6a8%csFaMnc007027f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5cS9t+MjLqxXEj?Xnp3_+7vr=JIOgDjrI~Wke~Ey>x~Ss ze%xW?ze=pK0uFx@+-g%6IFn%?cft`r!QGV*YN9vRxjHSGrtvWZtk|wnNl8P8|6^L| zBi!L?fWn&L3E8w7otJgx3Pk>K>ek?C|V${oKTOo6`s=!Cw9!$knxwj=kKR_6cPDGh|ZZ^ZE8CM+C6;W9`Pu^$$5`zq(kzZ<;lRS^qrMPm^kFI4=cJ z{kvigQ!{_u>mbDtflvA40S?vpw^U^X>B4}fkvX9CGK$5&XT`m9GtiU?4lRU zxvSL@F*Q&He9GxYVRW6$5Ayrw&jnhqeK&S9mH(3D)zp$KTB_^UIx>2V>i>!S78Phu z>q@V0$(t6a2mm2j6NptMlZ4@tSP+yB{@WFYsNva>11dOWKr6;vh$adV z7Z}llzF(O~4&f|lmYm_j)PmJ~GT|jO&F0eqxFC>z>K?GIrMU>vJpp6TO|?qXnk1K? zQn!SWgD`M0+bA{@&;J@Z1Q}FKE^oRZx&trTs)8Yys~^{;Xr8}fbktu;EFFKf_wzQZ z?00|LC<1-lLQR7$Mv+a?NotzqfRvm?{~wKNu$-dT`c1s-1kg{E(0&7$o;Xu*#!v3_ z&MRcPUPh+lHg@F*BHcU|L}SvVhfgENxE8U6aXQASM;%Bpm5cu(X$=ZypJf}Y>!rvr z5lB5Xspa_)@ho^j&{oai(Qrh1+SVuSSQvl!k$7=&R#$I1Z{eCMG$0#@)7(agY|&6& zcq6{AIuuakY)oYFJ&JR|0*}1Z9o#7?il*uf2MV(Ncb7&`@hi)&=(wM6k@ne2oZ&CJ zWr|d`DVx~o!WdNd+3xrjud`uhydDt;!A)t-2>4T%&~9Rrat>vK-e!|2ra(8|f^vVX zH2jhV^C9)roNeO;iIWfQdgy35W)w1u8Nh4YuX==jhyg> z^!3gd@kSeq_Gs)b{)E84rSAAmIBUc~*_o}!O{?XkU;j9U`|=-)NtsYkHDRGYx%h`V zl3GN@HUv`fgsz77dXpZO9K;I9+N*z^-Oo_q7EH2dE2;2zhmn_*unmZhnfADC|G5jf zO1`{et$lUKS5}E&=zKX!RQgcD)KbH*sT-^_SNXkB{$4PoQ^Xmo$3#?Gnfj#N?(tbV ze)a?8<+H>!L(Vy?GbAUh!@KL7#%4gf}6J5|jH4byi7007aE7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Dfwrv*9`Hcc)JUwVWR5E7$ge;Qxf{m2|resgc4pZn=@%pyb ztdK%{$^cVS$uobuIn0n5pK+KoD}5OSLfWI!juNnIzNUMaKDpS5(m>>;7>p1H7gxQ#!_@olb4o5Ghr0c$5;e*cMMi6l!2{E2@XvGk=vEkuIDO^d+7DK?S&1Lz8M(IYm>dM`>E720P2^^a~t;{ zK{Yl8Vk%fBS!ZGy?zuVY7JONpP2WCFb}93jfgoWAoByF*MSs<0B47%K<7;bCy6T-- zcu?31TwH(75rk~$;=*o+i;VlZv@y;p%7c@Xv?I3+BM8B)+WM9ipBnzu7*cg&)llVgGRke*& zb7rEqo$^ovI+@0_fbz-y+syhF2qN6JZ z?@Fbya4MYL1LnC@cpV`<{S#eWr=;C6*fT{Ak7ZVXg*Q1BnH1*oLvIQg9tJCy*vUv0ef*SOjgjUkMEqs1ms9Y@vBy^#L>HJ$ebKF+CK9 zpUE_}3Ey?LsT@8`4$s0(2dL-Qo658@UIn0d&sL3nk3UWM&|DRU^%2KnfzN%j38q}y z4Xk^plHNC7>cffvvmT4oU*1DD21NK1Z)SgcaIihAZCLi{bd>h9yq*kyuRkI6znNnQ zBZxZ|<2lCy2Lg zZ)ivh<5=NEG16?uWSiacC*Bhwr;G9XgJMN365Tb)CM z%6c9EMc5ee`|(<-DpQaO10Y6Wui3f%4Q=WYhhfE4+T@A^(H9iqJM!S7&0{|t2V|#J zEM}~=6O3wpV}sfMC5W!1m9hJPd;)(jjifzP&;h~z$>ASVk@OF;5;Dq=`2bK$0Rle*KL7#%4gf}6J5|jH4byi7007Yv001Na00000005KT1U?42 I1ONa40B|TJxBvhE delta 1194 zcmV;b1XcT?3Ze=ZP)h>@KL7#%4gfE6a8%!F@FaKy007C67f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5cS9t+MjLqxXEj?Xnp3_+7vr=JIOgDjrV7yjI&>*YRi22 zDEh7R53pwWiMM}_RsG;3aNmy5Pxn?NjCu-d1C5&Cn{{`N_;|xIHVyX9hyCV!nDtzT zrW~o>8kC6xrPjDSyeSuqd^+6j9*;*BJ?N-U7G`uey|-5DomFrr&G@LSK33fQ{mz$A z%y3P?wOWQq?zh!@{fXI<%iVEz%KF?2%4lR0n)z_p%dCHS53Iogdr&GVL>sIGJOZ%Y zJ(v3i#AFg}kI+D(4zW{$)*s+=ZyXzyUjb3FFJ15kWP|1ajyp zLr$4b_tZhIzhjin{gV9Y=)hU#l^&uxTd?uAI{SYLbiuyXyHBag`m8nvM)Z7I@RVR7 zNBllR@yniJhTGGD+UBO2GaSl*#me1#&|0Xq@H1SwbD!Z{VmA5&_R4pahH zrM6R~%BpIvOfPDCIo`uF5iFtq^gPOs_GS5k>?IEewl(y_FTYnP2|_d!64y5zdb2-R z#aDl{2WYdAElZm1%2{qmG_%Y*D4{eJ3Q-uP`+lHx&KcThgQbq9aNZ}9mzg3_{Tnb6 zm$A_;kg;zNkS+Cz7whdGq@J&*xV`p&#EYp)!GJxzh;vAZFYW@R`_iZimi9D?gxnIZ zb<>1quzaA{F_3F% z9tHNjiFUCzzap`7Rcf&f?>nN_K}0DhYf9K&N#7{7%=@o)h>zh}SKzEb(2mn18f?GA zAmY+peX8)_$jVc)&`yHM_PYU$$jZWCTzi^|fQbf9kp@|=31j4o<*+|09p!MBMcJGH z+)Jk4#&YTlBX0u+Q*oE1VLFvEhL0by{u*Z-=h?-caH56@_7k4Cj+_ht__~h|tfOr4y;0Y13qC zZ&z(LHogDsF#sn}O928u13v%)01f~zb8uAOYVag@1ONcZ5&!@s00000005KR1V0A4 I1ONa40LLy!KmY&$ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.2-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.2-compact.zip index 25b265f547be6a9f2f6242d4fca0754842f0019e..c8505fd5eb91ace11bc0cf0b21a6ffbdc798997f 100644 GIT binary patch delta 1232 zcmV;>1TXu{3dsr^P)h>@KL7#%4gfh^J5_0O4Z)uT006)e001PD4+STYLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Dfwr#RK@tPVSdOS^YJDt5O74f~W7w@WEcZ!4R z-cK3-FAfOKd9+ho27(h9W$u5bU(@_a#WWU;mjA6tB=XkGC>#2x=crHYIvAz%U#z@w zDQJJVqRyucaLs}~5eoww}2r&H3K8LU6!2_cmUnE1D5d`CaHKUodD^Z%e$xqM< z+!&YSIm5U~q6bE11!1Od7!1?_@lY%zU06-uc_HG_fBT(-cY)@}SUi7PN>@~O6j-Q5 zAX(KtHbEd4JNcbz7r#?mg3?w+D&gA$pA{5E_ng~&ugI1r4R5KQm3oIP7bi*pnbO}> zAl2GLOs1)8`DEXKeR!)kS5#LX7}zAh%`)}KwE8f|-s;D*{vUz40F2^%(oPXJYdvwV zsf}Gn>Vo~nC99{U&`f`U1XTS%e4e@jFsSXeh^Fk@VFYT8cEhIl1>7H1{Nd(PyKC{% zqY${{$w?QbCn=%t&&tk{VD!h650d3AD{i=c0H=*P0yiw(rC>3DKJciYelS{Cy!`Pi zz3-Ed(G{dswSnLa*32@eoAy|OcB#?-v#pz4QoLeK`%4QN1GcMTfzz8P=XH%-H2axRs z;`KUhTp{{vt>YTpOu2;j?_uIZUEZ_Pw@^ zK^ya3f%Rn+LPvjm)%0I0LGK?(1iH8+IB-;`kfMOM3;wW^(7Gcw2PGHwq?|AvIJ-53 zg^H~abxR?rRIkF)B@Lag)#Cbu2KCM>p;Sa`rHH=nfG_W3JInK`T2o96aGg!Y-`8p>@ z;HNqv|Ho+1O|YZVC6z^&T&bD2>?Jt%9BrK+{y(bnbvomzD}x!cf{q%G3sD_e4wn1J z!v>|E05N}}Ds2*8t5}_e$~R+%Dw~Gx#W%bxm%|zCLlZdJpRPbW?oskVQF#VW2;n4; zgfyH#VG{=?&#QXIJi-D;#6LwZPgFnHZ!fSA zU?0W+CJ*2@5=u{%M#n)}GJ2Ol0A^Vfv6tMm9X@}Qa_(g0>k}y}N*kLdQK;b%X|e3s u61N@xHK_woO928u13v%)01f~-Tsu{1a}B|t1ONcQll=rq2H^w%0002P0z**% delta 1235 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 I1ONa40ElulqW}N^ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.3-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.3-compact.zip index 29f4032aaeaa6400be116f11cf94ada8370e7e45..d69bb15d132a831b5e565279a5a2e83faa5144a4 100644 GIT binary patch delta 1235 zcmV;^1T6d43e*Z0P)h>@KL7#%4gfn`J5{2v#9*of007L97f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Dfwr&@RDViD}dOS^YJDt5O74f~W7w@WEcZ!4R-cK3-FAfOK zd9+ho27(h9W$u5bU(@_a#WWU;mjA6tB=WU*gxUx2c9kvDQe5N5FUH$`-^nAeYAa}y*SMQ*=**dnm?`)W!YHp?{!?1soU=7l z?I2VrNebNw@k2Nx$|a5+Z!g1*yLFF~eVkz1bA<`kR`GxT1eZm{8FP*luwL{Be+$wl zPzA9C##M*h^s{Ji$6WwZRy{Qev8(lT6 zaftP9Dry?E1o=OuZGh+#G9p%duhxqpT7;jO_|0ho*nkm~y+InOEYf-u@>--whU``$ zsQidz+holS(imW0>p&9$2PJ7c0cc;Hep>lw4fTJ|_tNAWs229!Pcb_+TqgL`!X2ny z9Y0+8*WEI}k)p5DlsH1t!O0(AmnWY`vz*2wkznW$aC4B;%u48I;4;-!hOnVptISJv3 z^jc(=`yDXny4hxqz&LLC6zc5EvqZ8ldSvN0x+R?kSIu}eL)F`DOcd{|+X!sJ$b8Yq z5(>vxESfWl0T&c0c$Tu=3GH;tLpaMh2S(C{2=3vKK54YriU%jqPieeztXOwTrD%Ub zhlNhH4ylLb)uoa-v%=bzN~YGB4_U};Fm%_!Iy3u*4{r=x+pbPfNXS5gT;wP+002B_R+#_* delta 1238 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 OljQ_S2FU~f0001Qhdc`a delta 1203 zcmV;k1Wfy}3bYCrP)h>@KL7#%4gfB5a8z?v+y{yT007957f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5dVkKLoGpYVD(zebAI#w4NY}J#3v3M+-aHkdSrW;7b#}K zIwjt?1!11K6-9qptw_xcNY*Ihryu;RpA)Gc!5lmxhvE6?TRK{q0N(@EoYUT9+~qrd zE5+LNt;CPTs{5o^@NHQwKR$@R=$oB}NE3vUt{W)c@plDGQvh>4FhEaIv(~~KZEYB5`p5jrZcaQ(>3I*&t#F#iImdEMlbG` zgP05@xU{7Q6(CBqd@Y#-w{>0}i25LlYv`)CA+R{mAqF)ql1TDahP>u;Ev7^g`F8uD z1WDege${^kpX$H$d(1-5Vm#n?VTtQgIiA}29r~~I@D}JloGTzCPp9M{XAr?v5&v;D1om6{wxr9tp zB0lxE_m^gI%o!;u4hh7#|KTBY#n*`8n7-WDLi3=j*- zB-SnVBOQnmWRr(zIc_r{AG+7->PEm*bM1fgn80z9Q5^?%6FJ$Bbu=Oc4lVasdR#-jEXklkPXbPIq6$;?wj~+hkKE|DyFn0r=}h zNTid-Hj`9$4joR)O))L?t*n3K^}gDmP~(M8izvWZ#yt}9$x&q+cLRXR6! zr?fXv%}$Rqi)Zqa(-8Mz`JT8Qr|^ILN?xJ-&t88S{8fg#~39Li}PDKBaKQ3kr4)lU+>wZsVLh+g^;%yq!nBDKY=f_yPqc zY1mF8fX%A9BJBaaJQ6anjn-1=HXnk*5&D1FvQSF_0zU&k00ICG04{TIRC5Sc+y{yT R00797;si+s%me@c001b7Oospf diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.4-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.4-compact.zip index d236e34cafd95a9040472b92de21aebd9dc6a33d..9324b26422b02a1ce795690492fa9c68d08218f8 100644 GIT binary patch delta 1232 zcmV;>1TXv43egG|P)h>@KL7#%4gfq{J5?WL8;_?1007L97f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Dfwr+g)Ez=~49+**+ZI!T|<4AOjZ@of;$4uh*T3KCqiv zi{QfEMW@Ni4nwh&KM-+n94iWxYtL4Ag`!@BFewI)hC6>jc1i7>_K-n^)SPCXJNYrS z{vx;LB*Z4wQ5$awEcoCOZzxZPNRp-lL24Va(|$Kv8K(knWQf4k`0$!rA{5HKYY}{% z9SR5^^h!U?4gHGwEGc$I(DjdYt%E`!MnVwJcuvtd3(50Yjo;eK2C6zv*AZg&LJ&p( zKK2;UT$O*|)B*X2fF%0kM6$e_4H`SAWKJxbG?=&<%FPjq8CK*7jf%$V88}@#Md=9{ zXc%GlzkF?PVV=rM^99@J>I#4I<*=Ww9mw1O21*!JYxDMhy>92D zkBCa7;h-F(I3aXGxz(!e?&=w0k z>>A(tQ7672_v`s6pKh9jXHOZJCI_D38pSA2GCcT{T>jp4bEI-)kPx#f98zW`)7c)= zCDDIERm=nKZKP~uQ9te~al8l}!n3R&cFAncbMJ3?FwWrkI8pMF>dR2<|dkbH&1`@Kp=!~LlZ@72afQ)Mb$=O2x1;}@ z1eRR&D@E&gPx*)``B2>S99a9RS4DoxgI%DSeMVvE&H{{~^-l~5`Ykl@Hm56MBKNDs zWwjvzhN$^fxoz5{ayvROc>nkx*YTH->r_F*_T`qSmyx>6d2SmJ8#8)H31Go#$B2Ii z?Fh-o<&fK)EpGY(xe_eDCP5Bjq%q$d3HV>vm!@V^@>$h`f@8#J)TL((EE^Y)`o<~R zQ&1R0$H8aLS=SkfOqPH;MZU8oJk4jG3m&K7kr3`O^9#?={PM>b`0IjvsPqn#{dzYN z#+i=o8vps^!aBL-RVtG9O_0tz1Dk)IpOWGZA~#6`ZveY4S$y*qU@mj6QI}C1&9n$R z{GWfvO8$owkMPevmAQDR{X!zD;gY|z=EgdMS544Yq0w#`NBsl)s8%v>63)?MQnmpe z>SfRL=M!xLD;a3s4gGo+n`AYaM)bMVsdXB*ZLuX*E8}Yp4w;L=5$CqwqJt%E2#lac uj9~w@kjB7JO928u13v%)01f~=Tsu`CWgCyD1ONcclLZAy2I&L<0002nnoa-! delta 1235 zcmV;^1T6c}3e*Z0P)h>@KL7#%4gfB5a8yltS`MlN006|17f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5d&oA>ToZ3VUT@t&J9?V1;KiRKMe^> zW!pMvfQ}{T(S?6CCV&X7PW^sv3(s`Xq#->4aRGBB1`$(r=&Fa)0=I|8vuy2{A+xhZs3rl~Bw(*UH&rvgB4JZCr0cfg# z3?VwQ_6fk1O{mmou=GFil}-mMaTPb2vWUVNqOT1XxU*;jk|Q~bxK(fickQYRdELJL zmc|UKs-Y*WHVkhOy*PD-iMWTNkpGn9{s|p2lZ4gJw=Xz>f^m5BI`X+9-MHiLfS0{Ibu|vdL#V(1Wu_pVK_6)6!rdcDuNy>lWjtiH2n zL$}0OFZQpdAlRRJ-%HmssH-R(9gr*ez^Zr~E_{ExctVHJeLC%`f(Z)Hbn7hCdB=(X zp1w1i{RcAK;;UOqa^JC?8G-yp#U+^;wrVny^}-xnkUaKJWB-G{P41nOVQgC&a{Ds5ZovbBBB$eppp$ZN+vSmB1$ z6s~_t_15{V)g@fLwB%KkD95&l$T}+YQ)5vHVH;q&QnnTg0CKWWAS>yplGnSkC4!`x z=NLC6eB7*;oL_^W@seg|?x2kSXVn>f7_*fCknjN-E^c08gQ}*m>n#6la#T>0<3WC4 zUXPQdefAEw{uoM(tWGuCpz7=Oz3%$UKdgVHgy!tQ-zpUDwjJRr&pY8s=K#JX+f|IN z1+9W!UmdI0?jHgPdqpA_RVlFekB)CCH5?U8@u~_yivf*+py3%>TpLkbJ@fYzjadWA z$F1AQ$7I*m$rCLi$Zo$0L;Q=f+cuF)|1@ulmp3apAG{oq0=@U}>Zzow3FocfY7Bqv z5zm59^3pCFGs>dmkMPX()TkZ6=#V_VLI??f)^kjnF@k_aKBcaP<~05&&X(Dfw^=;S zhZ(P@^oI*K6?%8L0Ai9o*mej7Mf6Te!BhX@l^DDW*Ihs#5+<+~bf<82*xQ_XG4C76 z$y~hExA_;)kcxq_6S;efG0{GT!H$3Y56v`6UGY6Dpy~~YD|y4I=(U8mzxc|)xFw;wP+006MVSeXC- diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.4-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.4-legacy.zip index 28f2a0b1f53cc39726e13fb782bd4c84b07fd842..7e2fab9ca788ce16cd49181b63dfe85c08d8ac77 100644 GIT binary patch delta 1197 zcmV;e1XBC43a$zlP)h>@KL7#%4gfq{J5_yBqE&X?5^t}J8jl|L1Xr(jOsevC$0C#;kAq6H77|IEhUQ4F~|VaC(Y&mo@1 z(@`KOy2oUGgSIIG93Q`8luzOMr<8+5eQ*oi3vLT@*Sb+d%jpbk3Fv!!;osOOPy`_T zO=m|wg085!f&)Tr5(iUxnbC`nfe4IU@)^+;l&kUCj@y50Omc!2yVUKci{tFiU4^oK zve{l*VHN1xkAd+#^tdMoYPoQdwSiHE!Cj&7f%&DGy{`?L^urs4A6BKJY;_%jz6SDZ zuTF+bi5X2Z_4wallsF-6Vr$|Xq+43T)Ah+hjwH@QqlOvMGQNwIw7|Xs89#Usj=Va2 z{5$@agvx*GkAXo&UX5Zt>u-gPDpYM%4nBm=(!X)A!=`2$#OK~eJG#LFj=gARXZA+X58kxc(>9o?k9~K^Mgc9cm|d0SP2)sL0C<12`ast~LGQ|GruhAf1)la$*D-H|{#%#oE1z^7 zZVqb@SPXTK8s!U|Sb;vZ`(x>NH!gd18~cB#hOyrG+G>S?g^~U|?6v81vdW7u>-h3V zQC!Qa7CZr$`cqsPkPnBjf9)%xjvWmwA$J3eIM;pC>7O;3Bqf+)P=q-msTaQrO-h=WVo+ zCLS9r!_1V=eVRu=y(EzAV;N*;! zPD^f*U6+9R34NnU5)nNjZ38YCLePKjGRCmcHV81wL!2u5E=N~o&eEt}W*O(!1Zj|t zX6wdg7O45vT?%>h2|Cyxoqw722Tq?I-dp@>2aNl~Q~5yQi+DXbAlWRy46|RG zE6~Qqj6F_nv2+5~R~J!jr`!MH%p@^TO928u13v%)01f~=Tsu{LQleFa1ONg6(39c> LNe0FQ00000S&u|> delta 1208 zcmV;p1V{U>3b6_sP)h>@KL7#%4gfE6a8xlpHHU`;0077m001PD@dPK4LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKi5d&oA>ToZ3VUT@t&KIg9 z$sQx&easf?#l~xV8$XHu=4gLhn>hm{?>P(ypKJaz^eAnm&f6E(1ZX`>!_2|3v<4r&!hhk$Ob2LzTi1Cp9K#doLE0_l{r@}&`>B^X-aHG&E`K&b$DzU@``FavKqM9BH|NG$A3hYtkZ zEbwPpA5{OdxNUb0pFn?NxJ^i+fr$o#zt;&WrcUA$n|R94?V|bZvUAFeHvOwuesQ(O{kvI}hHB z>uC~1E;US!U`3CRh4QY7&x`5XwNb|-iw;ZtSoT(yM9>DpE+K!3>nx`6C4y}=bm-*2 zgaCQmdmd%5S zaEC4UeT$au{dfML!#y|k0c&ycWP~E2(IbF^ z06DKoHYEq05@LV4;jO?=5h|q%{HQ!<5675Ye`BJvUd9mZ-~V>zxzqh`yema?7Cti5Fve%TY3hXK01FE>e}5IS@4KKzCoZC+QV|9v)EIDCU_~!-HmBUm zY7(ghDhmpB-e49TZ=SEh801G=n4}{&Za~D)SfB!`EaQJ?@-3;t@9y5v1gn{%hPdO2 zlw21=+|z!Hk1gpcr*75qo(qdhf(Z3fv98&71+)>P~$r{gg;x}9j8OaAUYW6^P zK{eU3QXXH%F~2MrZ(Yc3TG28|)YVjU4)gG5=`8>nsf#VxdX*DH1l77S$|E)X5+)7Z z@i(sodd+{cf;F+VQf7GNsf5mV!3-u-k*7A_nfT-Rmz?#Sxit_RJyEruK8n&L=+#zT#SJ&C`51X>mgj&RcTtO=y_j|e%*$Rrt^k^ z)Zd)ye{odrQX+Z;p~(O4-UE_%zp7^PO-dWN>G*q`xj1o?`L_#h8gRG4LOK=WDRK4s zUQ{~6s<`NgX&&{jE_GL(jaKo^FV*0xA8Ynxv;WyRPb5%F0Rle*KL7#%4gfE6a8xlp WHHQU<1ONcYlivhM2FU~f0000R$3$cR diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.5-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.5-compact.zip index ea316dc6b9efcfea809a2bd9707a538b2240c7ca..475877da51e42d4641dd3548159e7b5ab034ccdd 100644 GIT binary patch delta 1232 zcmV;>1TXv43egG|P)h>@KL7#%4gft|J5?smeAlN0007L97f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Dfwr=8e4bvov9+**+ZI!T|0lDE-@4bl^raR(a-X{# zyvoUz`I4}iy1Rpk-I1wag=2}>vhZa#pa9*af@}o|Le78Xu}EuJffKoOq)+4=q^$e2 zHtYR1@@EUm6jcAU1qa?LL>kpV0@0+ZAfO%-eS>t*yEAr*0;e%>(vgR)lB@5tabFGv zh;@YyW>m^CwScpd1k);vcVJI|mGT<>3GfWwLGpk8`i%?k-LIhux~fc%UpGoEsh0(K zD5XFKn38|ij6e{nY@H?G#AG*eNok8i3ifrqA_{+yix1dcVH^{)VE~7M37&Xhq=|Hh z-2DnwlJxKVr5Y#~EG|xPwHLD`%1kD;Fl}?n4xak%4oN>=N0k|Sky3Lek@^oD748eu zp^9G@s;4dYLVOQW?@2M|REPEYs&WR|B+yjs$gqF4MI|P>J3BkX67&x$%r{S+o6>1n z5wtGpnTt>ds#0i}99Ftl1}a2X*GZ(*_8vZFgrec*&#yLh8)+$)J->*U#{z15%!qFZO1FxAUBMF zVXuGe3g&d2T(GQD?VHBd4_zJRm%SPr|6FU*qq_onFW<^y2k^(skzC=^0CQUKab|~gah@xMp{C_656=zO=TnZ%B1JsM?YoXCYt8cBO zGxmGpt5{_TrUNn8be)sre%>4lY^xm(_WOTqJI8A~5=LIGC?c}&ALj`&)bX2cZ4QG% zRroh+b-O208bmW^xNio&ZCbz4qylBX1-GR3rO7LP`GhsQa!Xh8KcNkGwKzV(>?+{2 zNj=ctd#%ln0ab0hquspOg<417r$4xf6{kj9wItfMuSto@*zu>0r_WAJ(K~62-1vX7 zl3IrZ1dG6QwaEj92iXj^u*4frhC&~4lrrxK4EtUM))5@U8* u0*U|c@cFP%O928u13v%)01f~>Tsu`J&V1LW1ONcclLZAy2I&L<0000_15jK5 delta 1235 zcmV;^1T6c}3e*Z0P)h>@KL7#%4gfE6a8y)Pi1w-k006|17f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5eGt_`~00{K}KTGEEOW>>ToZ3VUT@t&J9?V1;KiRKMe^> zW!pMvfQ}{T(S?6CCV&X7PW^sv3(s`Xq#->4aRGBBh{d?wQ4TRmBfPS=9j1M3?P zqP!R&Z9y|itY^;Ie;t84`_tZ2sZ_$P*Oe99iec=8K5>8QFc&dY*=t>*NOHrVxoBJM zJ}+mL0g56Y?9)PE##kCI2 zu0+YGjss`31NdaY`{FKZt55UV^Pfk{3giFON#z6TxW~|{XCFGf+Aq@;KN2)J9LnR_a0raePIdQSO zib_0E{raD*XqQME*z<6k)||8&(BG-jKLaY0=0tXx8|Ow!c%Te5+hAO?TUbs9lR?Qr?E)#7na+r}3dbQr7{tJ+Cu zCp$6yeg%kARUN0$NU#E&PbT9o1~M78kP3zor~v}HbsF2v-SjG*H{lVphppj(_DUsz zgs`!`GXakR*OIg1a6_6QoxBvH0-ar2pRp9W8sHZFxs2H6Qf8kYyE0n~QXmF*3$cHr zfU(rYTQ=($6l~*JQ!)rFN7cU+-D~4c^RKaE+XXSI%ayt@o7IOfcA9P? zbUZ~HfbAm%kSmg;dUA&>b#Ttk%rfa@sAIRSmJ>(s-uA&3pA)t`XaO*ivOGag;aSXe zxFZG}!yt7qC4P<`SM~@!3mKCIR7-#K?Oz|4cYn|YyAvA4%(naIft3tDL}G`nWs>as zr-of9He2S(dR->j1P*O3b5=3^|NbuH++lLiIm(KsKy^uXqU~+z=F96N^#haaA8zgG zXp1RV8u}K>th{&$7Gg+%?ru95C=!%imx0R-Jm}(K5;Kj`JuSefZyd xOk9;wP+001ESS$qHh diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.5-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.5-legacy.zip index cee34d9e5d9bc4ae1f24fbc4ce2f51fe50a873e0..2f7403ebb4e3b04443f20c1ff95657b0e5de2258 100644 GIT binary patch delta 1197 zcmV;e1XBC43a$zlP)h>@KL7#%4gft|J5|krp9X{k007XD7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Dfwr=8e4bvov9+**+ZI!T|X?5^t}J8jl|L1Xr(jOsevC$0C#;kAq6H77|IEhUQ4F~|VaC(Y&mo@1 z(@`KOy2oUGgSIIG93Q`8luzOMr<8+5eQ*oi3vLT@*Sb+d%jpbk3Fv!!;osOOPy`_T zO=m|wg085!f&)Tr5(iUxnbC`nfe4IU@)^+;l&kUCj@y50Omc!2yVUKci{tFhCt>mW z%b)aN`fTQ)gZEUbT2cL01*c37pOVy@dFnXEemFF2L)R}H-hB2Bb_B-DlFj+KVf$I6 z=vZF;{g&47Qn~`0R3XMx&oAl(TXC1$q)}gE+;` z*jLT)cx`_Gh{#rINo|aU>(ljhi>K3FnLP7#bbClX#dwy)B+o=wH`k81R5B5u5kAMl zlzq!>j;@Y3BR;%1h&w1O5>VL75XY?^1qIzawZ{UCTDnLKUSgLn3=q%-oD%3XtO;wI zz3&}P=b){to}lyZkOr@z!#)xn)-fsYU9doJ5f6Wf4R5v%teupuhGm!+yveQoaH8+% z1}iX>?P&{;KsSVUpe8Eq9+nkTdv(Vm&K{5&FbL{_kQ6Is0RwwQnG8V$;bIj;`<7Yp zHceQ5Ikge%+vJB{f>G-Y1%!8OQE$D$${AkntsHMy?vA{2f-cH43wHueC*H|^^5mXa zBr<=AV6d33R(p1%>iPfbI}FUZl`QNcoFrd=mC<@!wU5KKin7oKoB6?GxrM)Ll@1ON z-U;=?N%3Q;q}G($uC%7fvQ{MgJgl%VN@`_J0pstPX$kpzcYIM&hlMVhgxYEPb00`z zy^)$ye(+Uva>m02Fit}l8vEx=tzt8|_g{b4(n^6Q3+8yB8<3jnClGMdeg>LY=H*G( zR)$v)WAlaM@Jw~Icu>&63ZWaiTtf3goRRCU|9RT#zZQ=>uc`s7fwjs@RTgeM@XFt{ zN*f55S(t^&mT*-i`C<(nr^)@{GgKm{0dL~ehC zG7o2foV@TYgHMBw2{*Z|+%LzfazICYrM0HGy**=k?b(UB2^aZxwdAOl;e$CLo&2q2 zxWX%0#hpy>-4fpU43rwrNeLwIhtvd7y44Ri$`Qh@0dBtmXL(0#Q~5XtH!H)!xDv&4T!o!a|$Ua*W_GyfR@$V$7(6;1io6#@$e>vV1i zYXU#|I}-L^ok8ktC<)&h1_62zqxcF;xjn!rpC5rD*tH7l0@{Is6=S`jMjW(C>gSj8 zuQ)Bw@GvBq?)iOVjGCNuVqyQpq)>oRO928u13v%)01f~>Tsu|Gfu9D11ONg6(39c> LNe0FQ00000w3b6_sP)h>@KL7#%4gfE6a8zmI$|r{e0077m001PD@dPK4LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKi5eGt_`~00{K}KTGEEOW>>ToZ3VUT@t&KIg9 z$sQx&easf?#l~xV8$XHu=4gLhn>hm{?>P(ypKJaz^eAnm&f6E(1ZX`>!)u{elMm^Ig=Su*sZ+WLJ5x1X$^wYhU#`~8@`c20FOpU&k zDC$Ew;x@SOm#vc?F}r_OiA`5#8g9e+Sp=nz+gsUE^w>xMXi$j3)!&I7m+;M4@#0Y5 zJ|4_IFN7m7kn)6C9)n(NJa8#76La5Bu!p!n0)BXD zdFq%o8}Tg5NFrA}+^hp+KI~Y7DtQry0WJ2v{DtWHQ6jz-3jcrqN$-uO=sQugm$V{Q z$eR!*thIT!F9U~4k+xMz(Z->?BuStH(%24$bUYtFg(mT5EhO7~w1geqN=nO&hH~B% z#~oMX!D;yI=*^eLTdPQ1k9 zP8ZZstckadjrD(AN$79cII`UEuQ6>$sGo{nRq3y-2R4;kzXZCkcN*pQFK9FlfS9(w6Z!n|+N> z=P_a=5Hto(0agF%xXV_;487R45W_fYE`Uu0*KMaQsyj+OdnGIdRL4|xBg@%-x) zVBT#@KL7#%4gf%0J5~F8v?8(u008BY7f*j5*K@rVG4tx6-~i_Z z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{q9U?!xK}lR zEP1^y2Ex+{gw_d-E?$Df;X#i{H8nbV)iue@$}MuO`8?n585N>F=5Q>ZqI?1MSR~Rf z^Ty*Knt7UqyBdF!Z%HxB{s*;0s*!%!g5>e#JxH3!1Zz0s6 zP=9K!sCbi`HM9w_vfKn`35aUIL_)%k$Xalq8N8!uhj`> zx@x?_N*Hn5ZZf{Hjy~PB7CBG5P9$zHZ>?r^WOp$ySAvLViV!Y9HFN$`Ue3>o9wbif zDWT^-QWAesGOOPXvpaE1R_G`IDWGV~UR&&`bGM#xU#*vKX z7As;@8^WU{?`;|83~T-(Z4S&=Xfzq|9HdTMKm7jP%o82tNs1ua|Q z(jT6}=eMK_BW&p9d0mh&o?TvCS|P}-;5Veg595Q(@AawpuAeQeAtTjW{^{8e6HixdA1;mF)PbpCQk)~b`s z8Lxj=ZfIu`CFD#k6@;r>sW1&FtQYMKF;i@tl}h3JKk!^{T(J0Fjl{BGfqH4e!s~a4#}@7cTRIu51vkWTWbj zj-@r{Ek{29S6zQc?hfezpe13&n&t1&z5ajkyVBLpb^hIHaIv?>9M--v2_gHj`4sGdMlwmu;sBU-$HD8oRw4}z z|4ZoX^EB&Xdn9oT9c!G1^j0iX>?+K)Y$B&#>Ok#7fcpqv;UmQV>fbQ5*HQy<&1Qds zX4iKn-YuihdAR<;i|1@ZkLHEr)OifYo`4<726a6YJ9ZDcA80Q*S7)l5X_oA~{lZ%x z-h$WWM9bhh$?6IR-qqqxbi5>Eu2xm8%5I|nCt-`r)Gxi`&e;%Esf2(0swM~VuZ#Zy;(>V~PPO-RGuUh@m(u=A(a*06 zpxz7cmyurHPD}643?CLRO>I9Of{+1>TbHH5s1<0x7Ox=?sTIVr933BcpA(oafu?8< z_;?*@UaP^Gx}_p>WQq{|IdbL+G~vq**0Oh$349C{zrlA<3f~GFP)h>@KL7#%4gfE6a8&Mux$CtA007+*001PD9|b3oLL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B> zTUxWZHGc;a>KnJMlDq$c9%)`VZPkKjngo?NRuv5}M=kHswDAS?JD8e4{8TcCmIVsY za+k$-fGz@M^?AD)HcZ&{Sf!0D>-P}QX?0L4^*WkmX| z@_S5z7Ocsz>DYQcJ_hHkLeX#jiH_M1*K`m1hL@#+anIPq_r?9YHS&xz39aM|fSe8J zVZlwiG9MnFM-C8FXB9X>H+JlAjzvo&q_WIu;2~}7LX*v?=dOFV5`( z1@ni^)UB?NiSz!~91>^oakHr6MsLlOe(RDt>`Rq}0q<1F#RLCYXB&=qBKnd?>vM+% zON~<>q|7L}S^E(n+2MLt1y4CHjpu2|Zv(lKsW&i_ zh#S5cm5;ov)V{MGFH&h?65-*plW&(%S;joLV2WuYLycevJL((77j$JQ1GU<-<i8Eza z>6>y5KKJONLdCH?@@b2HT9Svsm+4XtnbPTG*LO}ihMXc^YMJ3dC)uSg4xKHJ<~2v)3f-(8%o9iKgs^hBO{perB0%_h`tNNqU$Vj{PhaowE#B7oX+T{0V*|QG?h}I0>f^$ zWJ&+@{<%}nDl!kjHZ!SFrQzUDm*5jgkQ<74l*Y3r6uWnP3cLd z4tWE}yfRH`QugfXMl%zDs8?wQBwQA}+$+MrEyE)$L;` Q0Ns-f1xW_?1ONa408n*bP5=M^ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.6-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.6-legacy.zip index 7e229b641b64c42027dde83afdfc2e41aa30bc15..1c1675d371793b479f74ca03b72b6d75080a4519 100644 GIT binary patch delta 1215 zcmV;w1VH<{3b+azP)h>@KL7#%4gf)1J5_-MwUUkm008L{001PD{sbqHLL`45*K@rV zG4tx6-~i_Z*7ej50z`c^2)IK2?Jk2OFU89G@O%A%dRt)n$74bRcP5D*{Tt3|M4<8{ zq9U?!xK}lREP1^y2Ex+{gw_d-E?$Df;X#i{H8nbV)iue@$}MuO`8?n585N>F=82Wr zhSJa}!v1#LgPAx{d#8O%7p7fW0}R)_`HK zCmq2v8TsdK!I_Mlu{5y}+XW-^Hb|Zt`oO|heKGoDxsRtZG1Soo2VH+d@jZ479lL}7 z7IOk5{9?3Y;*BQpHJ{l-D@g&;cW5?*hBHBhXd=~RsV}{nqd`KO!r>gbdwN#eVwe8K zHuyvwi@kk%E?&y>IhL)gh1Z7c`0_`z&yXd;1U{L$u7)&7KGZ7_7QyoDZGfl>Y^SUd z&ADB7sFG|;x&}&!14n;U07A$Buvv{2G1p*X0AwTC>S3OysP2$Hk@qI{&l#wnRhiyd z9*S~3JM2;H$zvYLicShh(B|$Cd)`G?d~m9=Rj%7IJ{o4Xca%thvHj$mFPJpP$UN^0 zl|^uj7Du=Tof#cz2MRrrmDdM=lEf`jzTX4CsrSdxBY>xQXTyJ~SZuO2{~mApnk$cz zP%W#s1t)YqX(97Kcpe8h)pnQDF80_C(pbw|?e}+l(9^BY+7O@vP7cZ<(Y5A$AYwDN z>cU`=;N`5WKGh6ZX*8C}eU|+8k^aAy!-$f%Jfg|G?^63bq}#TK>^0Uf*aTQ(kY-^_ z*dM_JPB^SMrf`2pv|)Nc&|h#K?+Zw-=3)L0{d7muPIb;7?r9i`ND4qiX~}Nf@*)Ue zd$^he~y?nYW;_U(9{$Q6#EEohH2W$kC`HHd7a~cBs|ceTYfw?5)I6=47I-lZ^6w z?eGwdNGyN!Lpp>22ab@Z6eRqjII|6??^RrCLFir=Xxx*?7JgI)O53SqPG=0o0<@_{qwjeCE&8hg*2dMBxMo&`v&wS3yu-1ELd zA#F1O+(0U?y<>>Ca3DO88#=tZ1T7!(4egEgj%TK@kC1Y-i9C^@tQ-bV74Y|61iLyg zvyF2T86cw8Zz1I|vGtf4Ph6|lcZ2b0;8NdZE4AAaJYT)HKmLF;)=*0U0zU&k00ICG d06`2~J5_-MwUUkm008Ne>;y>$&;$Sg003@@OpE{k delta 1210 zcmV;r1V#I}3cCsyP)h>@KL7#%4gfE6a8zm_1K*JZ007~U7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKjngo?NRuv5}M=kHswDAS?JD8e4{8TcCmf!%`%KGaN-H)

#-l6nw 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 J_yhm|002lYV)g(4 delta 1250 zcmV<81ReX}3gZeFP)h>@KL7#%4gfE6a8%e=F|D}-008ch7f*jDuM4|1vFXEmrMFlE z-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2&4;=QCRi$0dIUcp8Z);B>TUxWZHGc;a z>KnJMlDq$c9%)`VZPkKi5ferR=GUC>MC7M|Tl~2FFqh*Tj29FS+fX$lDa-n7y@Si174BjRG3W(n9<8oIA zMJV20UG;Ig=jn#2&m!hyV?9|e<$fSU^7xP=XPbJt{MID1mHe!-$H9+fgKDt7+4Hp*sNFKh3N)vwb&Cg?b%Z2Oj+*Z-kO8WW znQV)3^(tyC$mfNk#nIFD-%GLPejf+(UU z-k(#jDgm8=yA9}ROd_==qr-^ZdsIbob!C=w4BmgPz0QIsr{ygHTw!&9btpzhv}~$J z+%SKETsoGruC#X@T~l3eQg?x3zEN-6|6yvMROe9LH@25h?wWlH-14tp!)}~^Z&Qag&6t2%9v6z~~rS;_S-X-ppn?M#&&Nu|KrZgdgBWhC1x zi28qHxyan8bt6uJ;@g*$1GyFcaqe4#O?plBHMDwJ{KxQ)NL7Fn7o3?K7jec`Ip3Kq zs3~5<{vxw6)MNHKjEWvET`dENlGHLzgwcD!Y(wAuScJKnphQsEyo{S})s zYpaAfN}N9VWTFASh19#R;#K=`!hysSinS8>q_jiqYBLO>F$wwYLC&w6RJZU5;~($F z22T*b4|@<8WEU}?5MFG~k$DFt30+M6(Y1Ba_=w}}sRdKs1+NT;JayJLo7S?iT27bI z9C$41k7Lt>JeHQ1|Er7TD6~@c8NYuZK8KP)=_bS+ir6srhzvm|`~bv6js^G`3AT=c zwGpkDnuc}eQ(=dC+@<5%UA0|bCD{XX56gxq*sOgx1#P}qTvP9RkL1gcApqOXxtIDZ z<3SM=l*rUiNkA+~qEYgkvxdjUVT=*DCh{N#W{@3Io_-2z2Q-P zs8l~Xu5tKPH!3d?(zH2Rf9c3A|L|;jUrt<8 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.6.8-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.6.8-legacy.zip index 56013943e999e4b3de4fd6bd05ae11b6b05f6fa1..9366754ec920d0773d5da624c8b1218cce0dd06a 100644 GIT binary patch delta 1217 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

7$le)0#p7Ha`NY9#=})T;VA^Cu zy`VHI{@qzq(UJ?4oAqey{Jvv)2Ij4rzJJVc$qklZ^_QYS$@MEaUtN9_KdkhBQTJUw zWFI8tb~ox92*rdgt9ix+H51D$iTs#q7C$1$30F?7xEE50CQrq*sy*!d{*+g@mtNf1 zUV$RSu+A%`IajZFP8WzN!p|PQJU7>B0~7lw*tir5qti&*oy~8~A8}5a(Q~8wpVfI! z#v;<^WcQnVN|SZ-7l2xHyTj2lX|)d8--=~Dv@-Rz7wp8(Tjr-OeA$1hFp~7xY}9#u zaP4;3MF_ar3n>f>1L@pz9AVF2)-RcXvKUk$x>x73Z6*BPeD{ZurgzED9qX*Ou643J zp|uaRO>-W~K^4Tk{FUyz4eoN}s^q_#HpM_Em}UOvutZvi(H#%`pf~xjzxBEHiLN>`SiW)Zcg&zwtIHvn<*oq3 zTO|&UP^0p+`ydF=8@MaxT#@{)4`WE zXb{Q>y394)mZV63zz&Eq9{z6DgY(HI(e>^y1~4&8!5@1ul!;w8V&_Bv3eJMEaLDj& zAG5={Cga@v1W3pEQbdah#m(rWEKsX&Td|-aO{GoGQjCj3m9HYTt-W)NJvJj2#)4}V z8r5*m(^(|y(xiwQY4YTG{o diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.1-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.1-legacy.zip deleted file mode 100644 index 377809f67a4a275a07059ac0cfa03618027eb1cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282 zcma*neK^wz00;1&ZD`(>m#0uEF==IoyhMyVl*c4zbEYz_Sz64n7~3hg6sDY)WMz{n zvE(gk?1f4z=WWdBWqIkS2kA=a=5{#U|Mxui{r>U&=ll036b**>03g5!aHJ(--K5Yz za1a0(F$Mrz001b|81iW{DcOM#ACII_?j&55ni!>&%jwtl-7UKQ2vVfC;!I31Ml^OCPd$S7W2v5C0Il!NlB=o5M=UX2;}+Isu<^YO+|$&RseOOJZd_jUV9 zE|{o(!|HX#*kUJdDVBSQ9FEiPG_7~Ki|d$Bh3j62ydaV8MCY7Uy&J9{`9 zqAV>$cYQrIn)>3=Su>I238!6!;+?em4EinQN>;ULztzUnh4t(=JtcN4eQJX zJ0C)=gvZQ8YN_BBnkSw453usX8LeK1u4SCqe#h%20+}^|rMjhL0M;6$CD!nnqTGZ9jI-2#jirG4nR~ z8tW|jmscHLRihbR`juJ++sWw$?lp~{!R>74N}9WL!N4c1YZ312Kb+**`QBKXr?9IS zHXYf9yUqD1;tYh;0|YKb`vc`nXq9!m&5%sJrwYE& zASurH`fXOQ{6Ux!Z^X`}^f#o4J^$ok6TEdfNvu%{zkA~^c1fc_v1Hc)a~|&Eo}H|x zq_WzX_E%Puoe8oH`;~NJVY{i?{&daF5PkSGpEd6iI3PCR?Y5C1=JcMn^e>HIUfwyR z?$_d1_vDiIX3<_x;CE=;3y;In(ix$C*LwMh1jVYm8Yl_vF5Wmnkd^F1cUxRtJxj>E7R z)ZHhN&xRkr=GWZ@)2r!On?%npZ&!I9G5d9QN|JNMEpxvVK$q$X=e*ve%N zA$3}E4I?UZCPYY&DG$|X<(8;Wwxjd?JkNRG5AT=v^UoIxg*gEVfEr*~J1{0!+;cgkQ1wda4L|kQX>K2Gf)o3> zf62xRIq$5+BSGIA2Dz=TIdRe*GB3o z*3G=KSy%;c(M7jMj6%~|v*7agW+yi&LoF`T$fc-Cjk_Lux{CUb84|qHZd|U(gnGmA zbFyp!#*~v=Q$Ks~8|uZn6A*UIo|icP#+j$z4lykb=Z4Flc8oTk4{^?~aOD*q$+i({ z%nAI8KDzOJXgUjPL2HL;qf+756$pvi=&0|$Un`57Y1dcjJh~F`0_k67wHzU6EUInm zx+Hf~f8I6__NRXijPWvc#crfz_Cl%Jlfqj?4YXvUmgDzM*)QWSr(Jimh-(f6lOS%w zl?j`Y>6+A&`5d`U%wEhl_fwCA&#ZY$$o0x&Gc-ax)eNhuNA+DEc70MIE_*+vAhExm zh?(afs}s8f+l?n90_t@)l+UPdZ&{e>F?pIMpN|Ztz5~1f-0$!IbY2ZC+`CqO`7pi|y#ah2sgvr6Gmq zhIF^3RuBjS&)3ozmKe`_LrC5#qgZ#}A`A5XRRV}&d$+V$iUJ~; zi(BntfJO0_IE6_>_kB82h0a%f-_u<`akeBFAB9jNISpnugFNPidGk)q@9eR8f3Evo zhh>$6QK&D^RpzJEW~scrd|agn*MsWuqKD1IUvDsG`>;K5a$_vHZ{Y45tJamb?H2V6 z)@;5PaI<;Wnnw(09Wq>EZ{W2S!3!t+q^H)m=$O?y4z6?P-15_wq&jO>e!g5H zuq;l6C^=}xEpYwkt^TjG|`T2!x M)_-#an-T)RKQl;U1ID&m(Fdo=ACmiFH?2DTx)NT zl%4u|?%k#vUmmVrx;=vV{zu;ChBNy^)v}+&z34c*b%FnzAKo+4S8#>=d%`dCZA$3U z*mIV0TbJf%`zuCAZQf~G&o2B*di&Z*yZ<-IWyV?NUTw-$V_w5iu3j5((}d?taoy*C zyuPK*N7VUb?qtsVQI%3XLtHcMkd^Aa9juA-c8a=2uJt&}>v2uv@pAb;Yvv2Dls_nA zquBnZ<>Q;qoYfC3nG@OyCcWg#y*{CZR{S3VP z^~k#Y72lk*x68=uaR?_c76cz}t`bmZ5LmoKINiyXqcCwsN9A$L$It54T+8UrNla2L zy75V9TYH>OX58-Ze96FBewk|=B0*oitY$Jg-Bk5v?vA>3=lj=0@V!~u{x8gJg{XJgzCHH3KfbW4 zGvCkH_1_egfLfy$>P49$Mb&vQaEt4fNfRB(fO%2J5TZDf19{h zq3_Au#S89QE%8js{kydxJ5(&Ge&?|%CA#N$_DH`eFj!Xf{^XV?)t(_A4s)DV+0|LO zK3M;n{`-#IWr`j9AAYt_&`%WSE%_ktlxZ?^esugx_Zhdij(z%N(yYyQ`bAUNImt!s z!tpKN!u1cf*ZxVL%h6JzIp5N<&ONQlIpB6{{Mw_(kk&UcZsFFlW);Bx$H)a)%Uo4=W-aI8$SyL)4Yv#smMpZe3bCQ%}GDnQO!J^9-k|*zd;h{XHYm;nL_|wlv^H z=6Xkko9}lhmTpniKUB`0I8`uisfO|D`zu#y3h|{m-u$c_y!hXbZyGTH-i%E4%(%-Y gVDSV74U8a)n35{Mo0ScumJtYpfb=Y2Nyoqd02yaYNB{r; diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.3-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.3-compact.zip deleted file mode 100644 index fc3c697b1bd541f927523a51b80de9288dffed20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1310 zcma*neK^wz00;1&ZO#a(4(I))B_+)JOWX2N&$DQ=yoHRs&KQ$rtm~M!vxoK6#bmWG z<)*ZfFebN?(PbOL>Qc!>d8v-m#1g0b|DNZ*-#@O|&00__p;FQcz<+WhQ z83+K3>;M25008OaL}D^ADa$^NL~@{zNwG<}ndGc9v2j@mDMV_LLn?)wp$Sn3@Blyu z03?G!a9MXb%^ewRKd8g$%OLI%nU|aoHb(8eyRFOZ-dyjG4T1>p>m{8cx>OWqlQtbQ z%aFCz1-)MltR^&Sg>Fo5H(jX=YrqeBnYT5N(}Ju{M&0jp%h%X7ZzAAd>e?(cC&qZC z%L|D%8l_MC?R_&(DWjy6yyXoYOt!yxudeCKSPUMMu^?duXc`i&AvVsuED`0HcX+qM zi8moS8{(wgXsZq*+vru+zzszXU%g#}R`Nzg@aayl_kf)8(|P_$ZG}> z3nV{odR9#5HlFhE;@c$@^DGo;yxMR?Kh+{7(iU=Ot^?)@l4||cW$ok*o#?4SMybBG zo=bN7iJq=7_3BZo`xCMLi9);FcBLZ^20zvAt0HMk(C?qx4a zd>ic^M@Fh?qtyeZ3!rz&`08=1-8$=-{+7akyR9Sd^nTv)B>Om_Ofj0gnKQPsSYY;< zqV>$%pQ#EjJtD=$XBEy!9E;Oo2yH!gv1%w$lFYtwUwM^=MxrHg>1JjC{2T^Dh>UOX zAMkxn=k;Z*j7!&)&%3F)a)OaFekR`v@xbY|kfObZBNyvlDW$>q7EMhro8_O9hnA=C zf|uxX^(MojQIr9E!l#A@>&5G3O9kla&lf8y%1fd>ai#%Oe^BH+$<5H>Nn;$CUzS*v zVY!`6TiyLEH*x^cyEV+=4$u{1=_aAAGpPgAS&k0Qm7x(cL z@7wAFTz#3F%;>_aEeUp0KK3;yy>2?dLEJwewe!he$l6hhwM`KK6OP)+z4R;C}{_evMMAv*0dbCE3l^t?6ej1PJ>uOh6vzGT~S6w4l(qnkQ%nM>D~rLKtf?l^{z3&>OVEqx8O=yjH``!Xv{ zvzZEN4bHVG#)17@t;Q5o!p9T_k@fJlWd)6L;MaMGW4C_K*}0SfeSQEM#o!1penNTI z)7|5yKwK(P-fEQ0p07(^n(ynM@SGH5H6K-8^r=^4EXVdv#!RpfgZsic)5HB_;T^12 z{Omqz!ifoE44gAoV^(oFr0V^KZCE0!XY#d{H*&^r&Cs2GZ@*txv5@INtz{`K?96O>4JZk{N{=)#3@*|znTo;UZ~h#_{- zC8XkMlCyP0c{JsNfqm^M_yNHNO;U&pR0ACX|F>IPbp0E;+PC>Xis1s)zx(!8+iLLE Kwr?p20RI55Zd|DV diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.3-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.3-legacy.zip deleted file mode 100644 index 1936c5cf42cdeccc8f57f2e5f81b9f4248b3241f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1278 zcmWIWW@fQxU}E57FeokvVJg}3C4_~6;hG==g9-x!LvDUbW?E)yk#1s6j$UzoPJC)b zL4Hw5d}2{@MrK*6URH5_9w!ScLo5SB0|SF?M@PExALGJ>m(Fdo=ACmiFH?2DTx)NT zl%4u|?%k#vUmmVrx;=vV{zu;ChBNy^)v}+&z34c*b%FnzAKo+4S8#>=d%`dCZA$3U z*mIV0TbJf%`zuCAZQf~G&o2B*di&Z*yZ<-IWyV?NUTw-$V{gCctm{~i@HOg8aoy*C zyuPK*N7VUb?qtsVQI%3XLtHcMkd^Aa9juA-c8a=2uJt&}>v2uv@pAb;Yvv2Dls_nA zquBoN=Zk2osF@7+nXk^dd@tqBQ|mhIqqn}UJ<@-4)$b({A95pg?d>}DznDF@%|p0l z@;YgadmqbLeS(=c&N1|k4_}(MdZ)!AwrbNTtNbhz`Yy-2KO_88eZz+XXNrFxTI8U(l~q>5+vjWAQ9kFO zEAiaDg8XNS<@8+&l0M(R5M(v6zq3_(=>vtmQu93m6tXsp7Oq^gPP1dSb&p$WPVHNr zpYN^pEt`=JMd0E+n)NHF?MbAELzOQR|{K(Wf z7gbLLPwkx6E+(gVG$x7LadP{WZMPBwBvovS!oydJ_GSF`I5emA!aFav$@+U{{7!li z^=$UUhdG6vQ~s@IS@9-^TaxFI?Br|JN9?~aSt;E1i+Ge?wJJM4`SyDo{hGFa`ve(m zx6f9(_`t5esr;1zx1sJQS^v~K!c#uHNuK&^hkb^Ier|z;!?o6vr;eR3(qghbx9v*& z>I=WCI-AAq)%gx|NQ+CWO%n8<^nL~JETR2w5kBt@p5GYsNbgU>k8e76G$&k`wYI3F zf%o@Cfgtyb%JK)>)#`lp9@h0gy*B5ZgZGW2aRq1JojhP-eQe@_tmIki?>(7b(ABQ8 zn5A1$rz=A(V+qscQs0@3SH9JD-E{i#%KusToravn5>0~Ab8~kU$gVk(A^C49Q^lg4 z+WS^>GYOkb-m6_5S+zdk<&k4+L~aQ$`gv)a=KSS*u3qm`n!+~WNMZ$P0 zyCOpQjxXK&QvA?5j<)Q24+XbhMGMsyY>%CANW{z|v+~%}{i$gyu7sVFx8n5;KF92< zVGuj(-)xS^^y@2%|E(KGZWb4}Rg%lL&HwP-K=oQ(^b@0XaoY_3b$raOaxR(G^8e@djtxya zcu&nsZTRqQf5^rI|8qH%BN$ZbrXRc(yC?9SLBLNd8E3auvqiQaT@>#5ps9P(1jTLo z32Pg71kY_MG1xrs>H&k!&wcL~^gZ%gx{m4LoUDfeic8F6ZTQ)1bo3QY?$OTqwUB4p z^`?0ro?o#pIJk8ZN73QFwwhz!|1-Itd+BgZl)iD}7Pq5&h}Of2`5zrT&1M|>BNV(P zJ}aQHQ&0BfJ~A*`p>L)|J9Cq7vRmvWY3JdTmlwN dV9>w_qKGM_0=!w-Kx!F*FbGIb1D0|O3;=w7PjUbN diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.4-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.4-compact.zip deleted file mode 100644 index 819497795fe3011797a07b65d57194bb14e696c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 zcmWIWW@fQxU}E57Feokv@muw9QyB{b!zDom1{DSdhTQy=%(TqZBHhHC9KGWFocPp= zg8ZVA_{5^*jLfoBy{zK=JWdu?hFAuM1_lP(j*fKWKgNX%FP+jM8bKfGt8uiy&#_k>^O+mz6y zvF9x1wl2-j_E(IK+Pu@Wo?ZBr^!BxrcK>gZ%Z#(kz1ozi#+~x)@t?V=j&4a8bVQY& zzbeqLNSshxbdEP-D(k_j7JFV!@6_8?84Z1^FD|y4sx@$|_4`|w$9=x!;u1w$#zMwo z)yLmkjEdjwv%Sir@Bg^+Vn<|y_lw4l$6PJa%o~2#6)%6ORJyz4o)C|yaZj+%yN<&- zIbr&#Nm)O5Czc%cTkmMExmk`axm8-KL|wu=@ZY|)$4k-$-Wjtf9J9XtWM=I&M!|&C zDgVWfY*DSc)p^S`!@42ht#F&4{0D~#-xlicu(tWrI;BwY@${RCvcA3>*Q~DSbyzH| z^ZJ+gmg6zmS6`-UO_&;YRkPjRu5YjF^uj;Z!Hx~FY-;+eZY^#twe5FbAyBp@#cS#OypSO*R;~oPe;B4 zymx%h?SJ%CtAConuUiH44BNiE(m#CbvyE(o<`y4y-#O1c{;6iJ+jjcQB70HWd9OKG zCbH|+PklFE=;M=jtF+`|f4Q#y%KKXIe`t@|J(XNxp&9Rz7EPOxS``o{zeUx8Y1sv% zx(l(5o(<>L*k9~ecYOBaN~0r2Ngk27*oYbqNz@xD&?`ugD0#ZBkG%doxWU8lsmJ+rp5c*icTI(?o) zMR9yjs{UMlV!K-<^U>V7Gvn3W%zdP%u2{XtWc`$~VCp#h+9^53{a_x7RQH#MaDfnta#mj~2UW>z*r%Z04^xzPWx;aOkrZZX#CmEz` zzjSWzIZ_*}ouF{-m5TS%WW|hnmA8}sZ?r1%3sQcyzI?}@=39T(Zceer zcwX0qn=-?lg7?qoDSx$5^Z$o^!AAqU8JX;vahF`c!V3%<7(o;<D;r2HBM=4w L=^emwkbwaJzKL5o diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.4-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.4-legacy.zip deleted file mode 100644 index f7c156912a3512346f16bcbd330765812c1d83c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1281 zcmWIWW@fQxU}E57FeokvX;S}pKb(bu;hG==g9-x!LvDUbW?E)yk#1s6j$UzoPJC)b zL4Hw5d}2{@MrK*6URH5_9w!ScLo5SB0|SF?M@PExALGJ>m(Fdo=ACmiFH?2DTx)NT zl%4u|?%k#vUmmVrx;=vV{zu;ChBNy^)v}+&z34c*b%FnzAKo+4S8#>=d%`dCZA$3U z*mIV0TbJf%`zuCAZQf~G&o2B*di&Z*yZ<-IWyV?NUTw-$<4$?@_|M!_N4KO4I-*L? zUlr(ABu=O;Iw!tL`J|lk!`d@qua6$fu93Fy{P!#)X0|1>%6m&5_W9ZWjK65)E_w=t)zZ`=36We6BP1lVSxpv0% zv&}`t{2Ke;6PuNax(-$>zAZO1xPJca=WXZhFIYN#VvoGRD7R?c!ZpVFYTK4%F;9?X zU;pH0i?=biEANH)6i;*S1@6+(IRa*Hluay7-7ow7_20dn+x0g`Ut{97)k%4D^632e zQTK1RyT*J=5AVI95cu!Lbsk~!S7#*uUolx4zx5K!tH4Ve7CCU8h~9faaK_GcXP&qI zHlD^^cH!Ul*`8BdIy$p;JoeqLuKC9p7@9Njnor3;uT9e?{`1+%(sX5`Jp1BBUMEF6 ztxs?1X*uNaNlTXBA@@}r@9xjF4d%z^DOg8s3R`<|?Yq=f@7o+KniE=Wo=&>0^IIW3 z;l?K;kElxzZcXhAZ91vBQH#I)xc~9u^oWL#s~1ytCsyrYlkJVT%FK0jbAak$OP{S< zHn;G&cK#Bn{Qf4e&$sS4`%Y`O53w`W@%|OKv;1XQ$6NVlJLYNKdm^`{$%S(k_qVEP zS%!*F60A07)oxlNtLjzkpI^q**p@phUz>wjU+Ht(mB_ZYzZV=baFj?)c{t_xv+o;H zHGiI2e3j$FvumnBySc+NnJm8S%cu!n{QDaF&d)4==UX+%vwVKt9ok;L{=2Y;9rxMP z#zHx!0{v^plIwI*_3YF(AA9`WI5zvB)3J^juX>e^D*pI?qpfE5+!H%4ugWzPkp>-He_viMKAst`!$DdlfjBC~6{JLCf_^x{k46u;BH6V+^FNJwWk?uuA~@Su}bj?d{h!VQ_d*nsC6`=@X>jLQ&N9U zi!ZA^*fY`1t&p|!-o-N-$`VJ|uQ!~3x-6voQDC)&w$Oi%$mf;*0m>rMOLog_4LVYi zcP;Oaz|6AQzcy;q@%2 zSJLd;x%rc~8_%?3F6_OvI(pY}i+AqnPJ7S3onOkiV4BG1IY0jY+@2#D;LXTn&y2fh g0+vo-(7*_yh$*N7yjj^mY8inr2uRNa7IX{@0Lh0?9smFU diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.5-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.5-compact.zip deleted file mode 100644 index 45075e0bf622cec0f734873ef4f03be823000670..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1311 zcma*nZ9LNn00;2@JV#pPPFaq~!`%q+v2q^P6KRv-<`}UW!!oAPI4xvco+jmKl2ce_ zony8&-4;VsHw=qfiiAW<32nu3y7%|_-0%0|_vZKd>xWd=fCFm47Qi7f0bM^|W`0fs z0EV^!fCT^maimB>6ai1(dzwhJOC%Ao_>=?^ISG5391%mH;O)*NlHxaMXaZpXkO2Vh zIXTfzt4?Qc4)x!0)xX{yPq1t^$)*QDJgl4agwCAVuJcSmu=@CdJ}slSJ7_pJd84)Jx?OA5cUAp=!c5$uny`kJ#_& zAto5`)~uELRT>UdFW=fTRn5CYRD#a;P_b{BL~AL=c~%@qnA-e_{#!f3uhm*sB=^v!1sQ2%K*c%o-dfK zU^~l(TugK<-l=(P&L&4}EtJ|q8>ifcL1xF>4tvL5Ym-)ruMB=PI#EnPHm4@?2FB1& z4EGH!V<&1ZoRL&i%AjC!jWR4ChI%Pg@xZb*21d0*EwL~=%@F&}=8?6NNQ{&fW}2AC z&^oHaxjkEG!Owq1s^b1)2)@OC?eI-EY!~rKS;({#&R7Xz5S0_gHzeP`?skh5dBMSg zAvbHaa8W0I3QF=KDoj|15O$K@7K_%OuHfa7;wDMzb=i*5AQ%iXSW}?Z-?v<**=vr3Ev7H$UK-3_|m|9;XCL$q(a`E z?*43hGYsT|Q(QEejCO<6U4}p03N?h}K8!aEI$v^1mN(cVN{A+U zHh?JzBGQyM9vK^8EPf&*?2qJ6}*?FfWR{DGj{%nA_8# zp{Vm2H+H<;Jy~(G(8!b$$4}$NZhczme;vOf@bAgotV3Lw?AoH`lU%)m$zSx=asRO6 z;j*v`mwY#N`zzWhX>qvZoDgs%p^|6_AME&}Xx!7~a@~t%anHtr{CStXm*Orl6;=em6@>)nXPZh(7e6FqcVUPIUyTA3&vX87R%&9NT z7b6_zx>R@<*OGXv0Ovo9{B4cwcmF`q{EkP^KRkXlw*%%I=IoCx+1|g+j_HB(A(|*f zednd70;;;brn+gwUKB*4XVJTU)&BPoKO{&EuKwR}ZP@j1GC*JF|1jo<)YSU=1#L87 KV+9)w0>D4Vd2AT~ diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.5-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.5-legacy.zip deleted file mode 100644 index 971fae4d2dc7de58de42f0b0ed7c87829252c695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmWIWW@fQxU}E57Feokv;VY4<4P#+oxF*QJpu)hwkei>9nUOz`$VJ(UETa$GC9erE}Y?dFLF>%T(Pj*V-E- zWv9NLd$;MvmxrsDZjWHT|B<)3;mrO}wd^NxFFMX{UEu%bhxd&16!ZiAYozTv|2@lynQh6e^4^k%eSY>o<1ZSyOV8aF zzs8bb>tz!ueac35)>Dlob1V&fr~GU;d#L7o^~d%plG9dgv;6XmP3u^(pI3Q&Cew=S zA2DGJhqk`I{m13zxz4rMPbUi~Tfb8m%MPFZ|9+C0SZ|m6#Kup*tzU{P+S7bijM;JS z!95-l!g6Nk&hMNeWN$LH^5S$i#p_q{KKjlvtoi=OCa>1YFHrj`^J3u#?S3BX1cMI6 zo@x!fy|$cjWzYZZ?S{cdqVq%^9?Gfy63Si8__OxKyeC^N*Ja*k_03znaEZ4=-0nNl zUsrtQUBJ-H7**qH6RM@SKwIZxfu++D>+7#4uoj7^%y~Ll)JvmpJ8$`no|)UPI~Cpe zaP5$3@8yjTns0NQ*lf+&r(h?VJ(rzp=WdBAz9nW!n!7x0MDxmQjEm1~6F

_n2eu z{jIlnVxAjTEt$aoBL4o%M2Yy>o8>Jg-V4z5Q!Wj=^50qbcf&Onw;LQ8=lw4J^gbu{ z`TE`i*`7PRJbwR)i2iy1=lxKwMG;p7HC%R?`Y&OZd+_WS*BK$_z5H*!Wyzdc+2UDa zHS6>9438R{BjvNy+{>puJR!LMwwV1go<9p7pY`C$J`}ygBkk7Z?)+7&u6`4K{?gJ) zc3t)RC3@nkg{~Lv(f8piJG<&ikW}@DLF;F9$rHBCEb)}1pdnAP{`M9s#wyi+z25*fe!d;w-!00fL!98fU)R z86~ZHy5j|#t>kAhCx=tV7z0k}Tb|AN+x7m=l=Qy78SzE#k8A6QrJbG8%Y-ktYrvBdlbrtE&Z_4ci-J}h~vw85o(r|{Nq4_#f~?C=+=()##Y za`%s43t8BdDjME>_wdtCPKd~QGv(yHLmj2Er=PAa$l%_lvHED)-Sc%9xlcIHeOLW{ z^Qn*>OM@2&h-WCVv^VK-TvdoL%`E>RanAs%_gBA??Q<95*Pn@iw!~RZfbG@8|B=GhzF_l+*R{N+BLnul{M< z-mHD~GgEBI4ZC+nk8b)M(EGPwiqZ8Kb$40UF-pa7mDXL4|>VAvZrIGc7Zi%6HYIdv z>^V!htxNN>{S~95Ht#g8XBU1Yy?yPZ-T#~9GUF_BuQp|>37cwlTivgY(YA_Zy}ikt z&F!ancGA?(It#d4x6AE3bZFV!6I;sLFX*bLyh(1eEtv1RVxzCjw)cMKQxy0+np3wb zsn0l&eK2*`#YKjUjDIIt-u$Wg|B}OrWT_45o8%oeq`V(q@^|SFl86d?o7j4FvGMmW z&OaQMANc-a<0M8enFG}`9QQ3&eO|HrRq*8GnNt=>RDVjpR6l`Fi^H;F-<0C7F8@A% zzjswGFse1Zzv%wj^ZP%%{Hb*ASEa(-j;L>k<#>J@Hk%5CJ06}I{yF*PtIef+>ub^$ z@7TcU^Wa`q(oTlC_Dt5x8|F=0UHD_hZ}G+rtxHcba<6pvWwe{XX7%FasXJ^6SEpr( z_DhX_<9)eK_??^fD^fQ(6}(Z@lQ2KmU-9S7q1?O2s{PaAYUaLclG6^_bNs%q`1}c1 zKBk|avWfq&#Z3p#?F-$_{z~oJSnLtJc^c1+(j$4ToKZ?ww^-+Xw2@Cgv+w9-=I5L} zKdSeZJytFD<~Yvy!|nN;>Z|pK>%C_LpD|{0&CZCC47jA@tYC9s@w~jC4=3+0Za-$m zKcVJP+_#8Q>58k~@gEj1^^BQdptkOR-toyyItkD93ufJCW9rW}6f&vl%bfX9N#KE? zh~xpTW70W&|JyvKDcqi6zTtoJyiO#``%nyvR0I}bBX7JTp_ORMF%&VJ^b=c%BTKbg4vsAKabeI4E*u=)Fg}B zG6&A6@6AvwzWM%q^wos)Phm4W-(Ppt5J!I^z|Mrk5D~eh8_*=`BeXGTV;w!!PCO=N_Zg^VjlrHzAX9i~* z_ayx+O$F&wY7LvcfAg@^nlW^-P5&;s&-_UOTch>b!i{gLZl72>=OBaGa@W&|ovzQ` z1@BpS^7gjvOw46}gEwEgUr`&qxUaU0r_}%9`Fra^`#6~`({{dI^N=;I*ifxtvHEF2 zh1$njDo;yRnyzNlxuiO4zsG8u+xrWaoV~w0c2oU7Mz&Ymuem5yh;3zFD?H1>i^H>ar^<^j7;{-xXUhJ@dXAAj3A1bk}SZRl?|kp P5eS2T^e$jY$iM&qjP_co diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.7.6-legacy.zip b/tests/ast-parsing/compile/modifier-all.sol-0.7.6-legacy.zip deleted file mode 100644 index 6b4142f3391115dc1795c2110428d25c2811c20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282 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 LeS3M^5CXtIb@FG7 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.10-compact.zip deleted file mode 100644 index 26ea5c5ada5a621b5335e1c28fabbd021a963864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1349 zcma*nYdF&j00!{?Hsm_tAh-1>ghE>Gb2(B@q;1SK_xqaJOlF11gwi(E%z2V$v)Vzq zrK8N{k#=-)8^`35q?LP(<8s^zM}0rfbKdvE`{n)oLwQ1^oB=QZ1uT<^nC(HU!4fF| zV5$Is0RRAaLNqoO8$&XSNJubGCM1N#P>2N5rLYK6R6Ld(V}3E2kSHf54TJzd763Tr z=f}an!IR1cgwGt5?sp_&4clPXY2MmSM`{(Ct)9#Y(s<7UAQMYU)U2L1UnAUP=xly( z0|)tK!}Hg;3VF=Vq_XZB)0Y<_w1YM92sotvg`lT=tIU0B^E%I~?=>;w2M?PI%DdlSVIY)U4s&_b_ z&OtYIc0xYy0BpKw*0;wjFtVXdmD^EuZBuqFV9t7h!F4x(a=cTeoDent$H+unCgcLy zYfAvT7Qe;PC>KAXZW^zvLm%S~!u$kChy>SS>f-JogK;}Xg*-q9xdt)|T>8@!*&Cb6Ylr4dh$cvjwMWLUcI zfky=VLKa4n&PtSy^I);E|L49o0<@ENA;ulWlVtTVlJ5TN_>HezEkp za_FnI(X5~w^NestfQ7Z6WX!77F^aD8HT^!4vXA1qA`ZnRwSlT!6qP9 z@O+#OH)hnMG#|9~wKuVmQDEM&jTS-GhV+NelR7(#g3h$>N7meM!~};e=S?h5y;3li z1%I<}<6gC$SZ&1NZQ1Sk?$o8LLSbX>Qrt)r;$D?uC01EJoVYYO7;d<-c$B4PYHOmBO(#_3Y+xKKy^ zR>M?fLmi*ACJ79Y>O&zr99VuCsmOZguT@WdkUP|;xX|HYb`f6X@Zw?AsXrw%@fIo7 zJEj@KmIKO8wQ0G#2~S`4pP(&&L@M6|VsDgd1-C?Xx7r-cL$epDmt1l;OoGRSUdJd# z-Be5sQDd!SmhDpznBirhc^x80Ycbo#;LCNduBwgkhEDRk-lJ;1ep9+bi{4(->(W@~ zR1&ibdcHUn7!%Bof=LQ0nbu3#TVXT36Q3i%oSX#rT8Den*6AsF8OdzT>4EVQ`U6f~ zA0sFT&tpuZ6h#KS->zJOPVqI_n?rz`yvY>WtT=sC3pG1$9WbdJ8UdEVKOk59R8E5F< zhR#BZP3YR3wt*o55F;6V>g=*H`EzU+vw=_tdQz3uwS3{mZZ4T4@+yKJ3dq?&-63i& wmxjBJ&+L*$6#U-I&Gj{pDw diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.11-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.11-compact.zip deleted file mode 100644 index ff4b57bc4bad9144b8e751a8c914ee206b7fb557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcma*nZ9LNn00;2D$2`;umuVQf;XDf?4`tnP9V4?mi#%^KCgdT@7MG_)d1@_Wm`L-G zi>XPU#(7q$m4|R9W=yqq99fp`{e3?7`@Q(R`Mv(4kW$i)fFu9{jwHr=1!&DhR7e9r zsS*Id004-^M?^?u_vA$9iH&3i>rzkP7P3Ts4IGkg;shb=o9jtbFnTYbFM-L?_<4_-8SStEr>6@Yww^P9%6W^Nem*(Zp5T{=6qPc zeSvw(9WvrF@70x~EeUG!k&gh47C7H>Agnm0F2#m+1SmmLeN!|f4DB11&J0YBsp%3D z1Kiel%tEP03>bf#-aI12nL^cJ^T>$ApXWx)41-D1(E&z z$_QiU?a7(6LCq-DF{kocMIZhU7tBk^b7i|)8vvjg_p&lDh{JSh{+tgjOYqhv^6+308|wX(2v1eZ+q$y5tYU{SWY25 z?B(*yj|M)*(M4!8Ka1CD6Km|zkY=mN@ULhPyN9dh^Lqk<#AuXkOM2()|AM;ecH{k) z-fRE-RXaqajrU?04pE;}Aag#i3|6?O-zmm=ai+S!N^5aiU{8=&5e;w6-m|)^&Dv@9 z%Pecw7*5&}+I+SZ6o+~=^iLP6z13W;K{Vt=a;6&^!(CU{%D z?SF3cv?<`soj*HT)>Rhl85h5##}1G9O~_KRiWzzBwl=rsadV-b2a4op{t$_x<|{qo ziZ?N$j8T_&lXlv0T?i z8*=FSkL_3OT&HBvuKt_P$iXe*15O`(1z+9S>z{@$bEahLnC7v<-i$3>Dy4;~?Dm2| zwc>bFC<<^h-rq|fsf(IGcb1R^C2;-Vpbj@zU5lia4D)VrPm}^KKEFJ@V zehA9nknASUX6K7e!ZiC2J^UPKQneAQb*&!spfaF(d;V}IIjbt;@>QqEdrDUXl!5rm}U{jV}E$j3> xCn0+USz>W14jzI+N=Q0N{kLzs#QhtR#P|6>+M$p#vfsZFyG8Hr?5>so@C`8EfC&Hq diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.12-compact.zip deleted file mode 100644 index 2d9ff748832da1de43fa57a812782c4a6db6dbd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcma*nYdF&j00!{?Mu>1MPOUP@wM-+ItQw0&NSM3CT!tAoCMk(X)Z(~I9AzfYa!HL` zmbP*v$t1UWmJzvyTpE^34M%-H&vV}Q!~5m^{ByFGkhB26fC6AhA-fU;6Oen706u`lR2m3x>Q}uEpu%0%@9j^%3hkOx*DY?+h_x5 zaBRaPv^5OML(#B$zPVqUV_y@e@h}ykJ1@BKFjD zWyy`~%ksgYULc5U<7@(>>XMtq!QkWS-;tI$Hd$%v54#?Q@BT*1s=v_1o83 zp%t+12FBQ6PKrYzzqnutKR8skUK#`*wF!Zb-=3Fz`py!zC)zVp)nRV> zn!#c~yjQ)jaH?H_P%Drn+v0Rx$@Qh4d1FO%xX_ZFf>zQcdylAg}6~6!7qxdrd0+=Z^#$%DnsTkgkOh zoLVDy(ddc_lMdTKMz;$}MQD=TS_v-(bLQt8Mck?ZlC>JM&zW8oNcF}{Ta~C(1hbVV z&(&uzK$D3cXBum#h()Zoel7t+eRykYC24r|8={2|_bFj~!R>)4ZLB3pU8q%T_cs)y z>AW}h7WvQ;exp;puq$5ib-%ZuS~_DqU_soM@*1G%?>FIqq!RvYqk^kNV}q3Unxa|* zc0m^VlkB3)ye$X=k#;imdSle4hL|J`$<%;LUVVB({n&q_tWi>35|dx?UI#i5knxW? zcd0AuXmhv)A<@!#8$G+r8;lloOUa@Ud{M$g`FzJ%=M=Y7b{d54QNTRb#+iMgmx>Yt z^&ax>Ftm#fZH8tr7(iCD4eG9J|G zd!%zBFE#HJxOs-b{6jUCH{we{sV5tms4xzEDs#E*b33x2#kp4))NiA4V<(fW2M5PF{ZZlw&3q|VIB@sNY_+Fd1TofqzGB3KkBqWM&NY~- zu8aC*U~)aLvd;Eo?X^p#4_gJN9{E-!qnV`q!XFa>dhl@gYLV_t3j`iffHc3!f%gs^ zge*!JcrvN25B&J_?!4GryJrf7u?MrA4b+}{?b?`v?3xoa&r{0l+gkd`V7Ig)F7k0< z!HS+8St^Zr!E$Fjxnd5Na_N@F@IZQHc{ReyTP?IhfjfD;=*6}1QeIf!RC&{}(d@La yXGhoW+U(j)`Ac8uWDf#cNc^{NTg3fN66n|bAMKp%w@Ll_g0_m?+Mz8i0pMT!8hc9s diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.13-compact.zip deleted file mode 100644 index 7845c49f6cbe7a36b1ed17e8cd88b0ba4404107f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcma*nc{tMz00;1&VUBV%IWjrkWh}=W5o+6$<9*d^G(;OYW^$}e)=Ta^avynWTH{$> z3q|B8sjW~sh7L!h!xb61mb`BA>iz$Hp7;Cxd8&?t&&7=uoeladB}0e}er zsEmyBmRpt=d3|pijwx{4XrcPe+Nrq&O|;G+qfyO5r|wgVaA-PViqg79;Z6;*zX`a=Y`Jzt(SA<8^;-d&npI0e zmd$R8R1+aN4O?D#FRm4hSM@|`CB$FH%W&km688SF_b7IhB1f)=zV`YrxY%{^`(-D2kh2Han(*k;$K z$*@ms){|H>3vuoRt91%$N;;Qr3i*CftE`h*%Nz-I?WD9^LHW2ZxalF>-PyUJ>H0g6 zX32uPOGh&}Dmy4y11vGx7LO{vV8Dh~e7PC_=E^#cKT1XjMF$6NEu! zFjv36II{YQSDE?240fW>ZdNv)coI&Mj9oPet0iepB5bW+wpXMeRH7!WY;Di@4~4Yp!{IKKh~h-42PL2!>Z2eUev&5 zd`8($4X`?V zza25X*#yYYeI|aOoW=gDB70Qo(RMjZJf|FSB&kTy!_EBwH>liE7-V_t=q1}f6n#y} z(}%Dc^Zx8`N<4grkhS$BIJtH*kMYg(&flkFA;fA}$C8!+{}|D+K^cBp z-~$|_bo#bM%InoNP8!}f968jw+KF$Phk00k`D`IZ^^c-l+i_cj5VYsU0A;v}m2}vl zdbzOj@G}!_0(SCsZxUBI+Bu|L-_+Ek>!`iB>wyD~QB0q5gmKQfMk%Z7*C z9JL)~!}KfmJ%%64-KwlX(B_0{#WJw0vUIjnx|+``>c({(k2{%UnA2fJ=3Dp;vJh2T z!8Ily@^|j>`!dYr)dnMb96OC;_g*acY~YIkb$)c9?P>IVKRvjnt{EjEv{v{7^!*E- zXzZ&JQ3U4{I}L{~W!hi!oV6_WZa5IgTir&x*0@?W#lcjAm(s^ln~)+K;@MRV&fS?O zoyA7#CRB8J<4=6hf*V!>gpvGj-*$=nH%y6N^MAB+!%BmHeI<5F*xiv`Edk&kYpH8P diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.14-compact.zip deleted file mode 100644 index cdc342f1230e5434b61101d36844d56a5fa5f18d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcmWIWW@fQxU}E57n4Iz~L|k_b;~W+ShFO9P3@Qu^47vF!nQ57+MY@SOIeNwUIq|6# z1^GoK@rgyr8JT6NdRfK!d7Lb)46zIh4Gavn9UbY$e~b$kUOKnUns?68yiC>oa;?2V zQg-s!i}#8d$#1;Xa{SJV+UKc9e&o!kmpYVSd-3Zb!#wt_8$wEar>@)iBjvhKJ4fo| zKV?uh`bZkx+*PKJyJEm|S zfA{fG<;=JHly9vRQgM70b2LmiCgAMa(=RL6-(zrjd*bA@l?<6C7Q2;BO7?HhXHMQ0 z5xDz8*59fZob6)G>1GRGek*M}b;HZuGPyJR@aGzFm%eKgRxgtCd?;&h>9O5}3CfEiqX~k3aEUdS+=djA2unq5f;8@%Lxv6h~+SEqVM~`(U?h#e_ zbI<$0WO=tV!KR>{tGCN+(wMh>=Z3dumX>VzD0tC5C1lmz8a=U}5&K2CRW`2`Ua;lM zs`fuRe2(QdJM)dMg?!&vEmWu-c3n4x@%a7E&lR4#t^QG-6L#}M$W8&jbCXs)>^dG& z(>1qS$nxu#Dxvr57I#cJIweo}k^H0tv>UEucuX@XS@yAfB z1s|^ln}}~&U8Q>Ws?;N&M+FBKK3|f#XlDr5Y)S;YemXT z%{DP1#;csoe;k>e$0YGHyD6_C*4y=y6Pxp&dmntcEImq}-*m8apYr#3Ov)^WlJ_eQ z6_y`eICJ-m6+NFknzW^hF8_P{A*Za$x$u4YmzK=aC#!R==bTM`JNfOdJ7;*F)JGH> z#)g^v+`pgScBP4sfU0T6l|%D87TE5z3)E2I_xriR;d`x$nx=fu6q)INx+lFjD|l+h zX2!4X#oOZ|Ut8(+YE@ULA8C_S7EesANwF==eP|ojW~Y67k$&8+EizTLzN+DiWozf% z2+vDDRc`%%$36YdH?tXSKYv>BsNs!-r+2;!zo$3HHcoA~kSl!KCd+k;d(GUtTY9&* zS;_XsfVtJtAIhd$dKl?6*B%wg3%$+D4J9Zu?*`=pQ9U7G8gd*d$WyqB??URoX5 zxSOHRAXfgOY}SO=Z>*R83YFS-q-v|orIiNKUz;5zWk1Ynw3j;N_WSmk5Z9O9Eax-k z#Qyu%a;~*WY>ks~Ra>Tpz?IkYQ`fa9hn!K{B6r_M+Ax4UzAHZT`pPectJVm&&0TO) z^VEJHL&kn7*Mb$7eZ$vpT^*+XaLLpa)rTzJY?%Ki^X8L9Yh(fWMBXQXT4_c diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.15-compact.zip deleted file mode 100644 index d4d53a419e0abbee46099180e35742bfc3f6ad82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1349 zcma*nX*|;n00;2@X48QlmJzC%TbbN7bByFHS8|4AQ)_Iwa?G)u@jT&q&>BKWv5zZ8 z2qi*~#UfW)T0PTZDo3MdwMWnU=ks}fzZbtZzt>-P7YT?p00#B|g*cv9>SvyPDFgsY z^DWx~H-gVmi7=kpWxUq8+Hx0|)i7ymgNj!?Oiravx=#o^=PZGHaOOIqHhQy(|GUhp2ou;?X zHbPkS-cQSNcbD}O9~4Oqt$g7o&;`Bfb9FEcn~!G)z4xAVXEprEPiW!*c7oxN8+8D| zP~Qb+m%Z$0_U3XGQD|hd8!KXnKcCZ>TntKz_6uH-hxeX{#sgIrB?A( zQ|>#|?+@V`B96xeK`Q1+6d9&!BR z>OI{F*%JdwpX`*i^Ru+>A{Vp7<~M&1!ae8L;K}_sSZdAK;I8AtHtM0>OgR}o?dutR~tfOosbnv)GTm1H<4 zhif6Z-~7ek-(&-CsUU&u>qu8v{Vke>+aSa3B<1lq-_UbE9ae2ck)+Ux!A4FHEQZk} z>9}dI6j)GENt2mtz}rt34RdP86pzDwjj*+E)41u3c-*7+vddh*k+H1)HEFfR#L+A- z%;E7o0t-FTI3_Me7t)q<*>L`$McJmneQgC!TkA0fDV0{+qXL;rE7SxbHCq<-<#j-FWO5=+7SQ)-vTDd2?6aq>yAok z07!-bfDQlvBuXS9nh=$A6i*}?CsT;HsMG{X(s>*{DI%7T5@j5hOd;=)mI1H;Km!0I zogQPpWu90w#=mE$Sk*@+=yq%76k!fJ=(82>TXGh9GwQf!q+Wki%%%->2kOPogwNB5 z+nK%}#9oy#4e|jyGfL`T$^z@Kd>hU7I!e4RA~dA6!;&hiya?wumE4zPX%fP1NH4O8 z4$kSp^Y)C^CUVCp?PyEeW=IsI?9_q&>^l6&$lxPVr~uTW(rWRC&V_k~#&|>Vt ztL3Mij?X<(%`L@rzbn^jHKDhRxL{FoZJv=xaM*zNXv?$QV+9{Kx5FRTvh)fFX@&>oIr%+5~hTk&WN#YMZmh3q1 zEj-&4o6vxO`uTGW)7eHV%SA=$iQL?jCC89jjUJzj+9CUBSOy{Gb3R?Y+vC|5I2o}d zd2&`fdbwWfEy@0UA38qWDJ<&rTuk7Pg9&W zV7xanay?R&dIwi6B7}`px9WF@8M2T{h&h4JcN!PZWQRvrwal`MBfjF9{2L@LRHz?@owZPTT(XpY<2ogGqZ;kodob*g8+i_ z1?^96*p2B_6iC!8W``&jymlSP>y7}(w5=8L7kVjdcBgnkZ8_0FUdw#6V{wp>0q-5O z{V~?mnx&&1V?uojb?3Ss);*GqeMZs2u`!7JYA#1%#aZAeyIP`QJ@t+9C8aXs9gflw zc)b;;C1T3<&s+!JEVq|D9p5UugVDJ24(l-ZA$>o<@R*_3lAEVyu---=dM|Tj;awo4 z@*MR!2yx}_pFEH>Q~S0~Ig6SO(ai8iBZU{)_8_tyhi5g6n7#=Mexu#BZ2-~tX%pAv zkn@+!5^HSg-Zs1FPjVSKB99fQ&!(nydtJ(o3XHn2LEQiuPg;K|-h?bEtTz+|`p}W= zVTUO+`q zoLf3X?hX+_Y~K8JPN8D);oJDzMD19ulT)ZNkqM6>g`T;NSenB}l2+qiIojYxeR!F+ zcJO5j<)BME6Wx7{ETO~IZN}th!2_LNXyb)(<6BnuTzZMtoBmG7E2#(WvLO3~GS!i! zPK`sK5r_GAq=tf0GlP5FSB<};S^8ilGVeo!S&D9R&a>GEwSs=n21 tD_`I7YOVq_20Jb^7e0Nps(|Pq(ghjK)!xKyT$D8)UK2O@DDS=W*-0m diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.3-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.3-compact.zip deleted file mode 100644 index a1a5cb9987c92c53c71a3e38e75541e1e13877c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1344 zcma*nX*|;n00;2@=6YPAC2~EFT&o=Oj2I#2Y?hHp*ic(*S{qxF4mGPehU)RS9!E=Z zXIZY|36a~T7&#u-gG%N46uHWy=l%2fJip(I-<#j-F9szc=>UL%T>y*`?&}nEASqoE z02sRgKpy~r3p4`xESX3*38hd>88k{TF)Ex!zZe`!KXZ;8Ni+>((5SMKQUDGBSO8!b zA5VgB!6WkeL^ZaGIjvN(L8A^Q*+;|P=&^jgrC_e*YC)~P#Kf}VO;%4M*6{oc{(Zc# z`o7nvHB=_4SkCwRjFQ%BDz*S8Lg-W%(9V151_o3ITf)*<5&7Y5iA zdspniDyK80kB=cuqCBJB$9bg>IOu&HHw!|0d%Is=2pj}es8(8x=`-JFYxfu5eh?TY zc{k0^(fZxXy|*@ydWU!O!vklwM0a=1H5avvq1BtItN~PTIX!%1Zx8*@le=XK!!HsJ z;wj0~*p{F6FImF>vU#hNJt9C$(xTbiseorXNQ8$#UU3*^JKmh)w#IKW%N)TiIXx$E zJ*b#P{z8GBwn(o>OV!V{Ex>rs4WYjhG{G%;!|#zEbGY;CI`wUzk0Wi2A=}br>Ls>- zmnJSY%~$xNj|WXPad}~s(=|XH3T@jA6pR$7QTZcW=&Y=a%XNLEH!Od_+dAJg_(-NPEt&?QoR8cg>b+hnAC2uXDBigICiRp(AJUSqTjoO_w1OTk!o zdXjelR*P~~7Cn7<#e11O$mSsxQ~lMJ;VTtSmlXrGZp6jO&Bal!#IRN6g9M65_wq>voEZ{3 zR)VV_%*30|BD`cWbk;LGum?JydIu*nC-qwg_OSSGtg{0kj@^ZNi7!0ZZca&hKclkJ z?wtBPe+pscyylCXP5foBZcO@R$Ccl<+r@?rmx79tGKI_9&c-O3Q&x$Y8vgqXIp*QD zupFeUPWb=Cc4o9W`uO|zucIzIzKrGUVJetaxV zfs19bml5qcDD%=&rVv7sWe^D%y#>l2S7E{smbQNR;z{-LZ^oA-I%1_{`tO6YJJjW? zyS*XN`Yc?nxo5M5a3fH4cuKdbRrBbvCm#|aco#ThQCCg=mOUN|$4zkLqX}Kl-`wdD z-ak~dWgU%%#;zf5hNV3%7lzmbN;IkKr&^wNcB%4o+q4#amIG}Ua=<*J&GLrpdNlv3 zFfr5gUR7gRO>WWkwuEA(J>p~}nWLa=wCrHNmdqMZ`f9V;x!L?>s4%+DN#xq^I8Ox6 sQ75*D1`G@e1a^@4Z`pQm`!_7mkNH2&VNg=iKfa)y`t0n`j*|fJ4-{W!H~;_u diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.4-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.4-compact.zip deleted file mode 100644 index 33e6f9631ab67153ffebb3a13bed836ea4669552..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1353 zcma*nYdF&j00!{?E@(7toz#OIbMH(pp;|SUQ*NQ{7#YL5u#quFiMfqr31QY%BCUzT z4x%KNtW=LCcTsNTxRlE#b1CNNd_T`~-uJ`%<^BA_yFj2e02ojP%p=1+yq?~gy9)(? zR3rfC0RRw64+y3N2Qv1YqR~tu=`?cSg>X6}ihPQ3CMfuPpvl=tdKe5U2lxR%5&&S? zY^ueYMMP0od+i~3{>!jn{U)u{Om}r_LxEDgRpqph$$LzMj7Z=qNpG7x4MN8Kr`V#J zLfp)X%MEIYqK9l;MRO_7ljqlt(W>FmLvSdPPj#JDqQbT>8js6!>o=0Mg8ea}y~#A| zV;V!Gr4p8}VWWag*@4Md4h7%!cg5C?#kqzMu#4=E_UI~pD~i$ON*H`)Mkq$@znwcg z*gg*akv!@TtCrv!U9TcdmmYqO<$cW&&fR5IWNtX{RbRYD6?a?pz0LC`hYlZ^>Y9m; zVJYyZJYbaNc*1>fn}xGXZmmWb+NZWudM*6YGp+#QJu&UBxluU({jxOh*OHlC^ZG_< z*URC)!zWtC?1Xqkr@7K@!@r$k(sUx~Rmxx3IBVKvM49QVP|vnuEOq}_FPLS%?lKR8 z45Y+wL@|l)P4h0Ir+Vg?eap&zP*!D%FJ|PJPRB4Rks_1f#K*rOM$m;5;vvqVi_`q9 zK_mP>qC8@sdxmv<$|LOI0rN|?S} zI%W2eomcpv>@d`aYD&?2h{FwLXq5_NvwQ)%zXm>H`k+FQDZSA7H02aKDvclMOk zibW)Oo=;} z<*EBV65Dcx=;sL}KNS*FeF3CC4Ww>{S7<6 z4pO)0mcEXzrC7HeyR-;jKB`SOqB_dk!|oguQONlIDT%?iixu!V=9X6CUIKvF|OigULN@^8EP@j&Zg&vB^!k+v~& zhl2>!i00#~2rW?BZOc(@^l;bmL}#Odpd!!MqRd$Acpv66wC8it}saehBsCB5{FTWbA~uEVGh zl^_pz>VXd^U*DL|SOMc*Kwulle-pQ<+`mZz{ha>;9^OSx{^u98S@+Ey+XNE;{s9d( Bd+Y!J diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.5-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.5-compact.zip deleted file mode 100644 index 6751bb8dabadde5c063f65e157139e810591afc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354 zcma*nYdF&j00!{?nENmxV%f;0L)Id~wgiL#8Q?^8gget;E2;tv0BHvR zKobCfaB@I!U@##{A0HNmj3$Tq5GWDksB1p>DF2|~7y>dRnoN=aivU*vAPE4>Gc$>X z0>jA4@fRIv>5`|UU@ewfT8^8Fh0X)1Zle}{e>|hpOL%TwIwfg@<)IzQ!!2b#Z?C{C ze|0P()=9eW@?>FO3OpEBUzn-2GsvMB^~>IET}Fvw@_(y#HqpBGsA|DDv+zl3n1%E7 z)5~A#lCS76#Vi|4KXA^Keb+i1*Y!5RDHLnInfcmQueEkiJ!;$uJHtU?tJO{J(ca9w z;0f(e=W!Bk>n=>EJkdR_JkMHxe9BFlp22ZsfKe2?A!n3VCEo}=(tmJnR3KSwO();g z?UV7tbyf~U-nvfYv2R0W1)jOYdgeUMT9tgu>eM_A=HqUR-GPg@EG0#6R;k;dr3zB3 zPD~fmdOO(-y=Ot_gzK|fa>;6Ti^jb9w@Nj5TKEMdVOQ1Murn#5llY(vzOwCJST@5M zd)0Q8%VVJ+g}L_@v;8&{>@(URYPkCngyJia1d{`|1oBU;I5jgk#b?1aEawTj(xAy= zUKyV`Evp=gS4{9ruN?Mzyc#Q0fp#UA40ytRrxs&TUwtz!sI!{$Qzwx_!$1CJO`ReNSvJjuSLEEt~f_`f# z&5KlAbNHBYBb4jRAY_WJ_b&0-f%QGr$>QiyXndAL+JccOnnR&5wLKHNiqit@I46JD z9_NV;1P+s6S|6Tc{W=;qDSx?5zei5%3$kD(WLE0Ip=>jod$W4^k{z%E4ym#vh!}T0 zFJv|6*V2u(&xeGcZ61Wd;*MmZq&3tPDW7BzwkG*8@ICZW1RJs@+9$4{5r&A@jMnG8 zD#;Q0&=ew`pp6Nyc13hHrojtW2_Bv+H^V6!DaEr+u|H1dBdWRu_#y^4sOJ&a^oq?= zhP~{o$@aUXit=wnV0g;1w|3%Nthp4Y2_UIfJGn4?eD?2Pq(g zbfBqb^J9!B8klWt+V>$l!_O9T9m~ze!)zV?oMzt$#_;&K9^Bq5%;K&A-nG`ZSr=&y z?b~@|`fJbmKYfo7z0{se6{a|@^3Uf&G^{)Vy6f*KJ0km6%=SuuGn(m(JKjV%9g&ISFF>WPH=WOS-Q}g0x748_-yCwd5_vx*WYNdu5=r%_FblD zeQH`U5G(t|JH(@oX=`7`dC7&wHq#AgOu3anRDYqmj8761UPC``*K_(#MWyShk6Ld^ zYihD_;Vw=Ka+4i`VZvVy@m+HCkM=Uj&4$jh1j?PSLm7idzcfG#h;A7tCFI$j5K7>gp z9l_X$pPRULarX9Y`Jjy{B~j?WH1$pOqSgHhXWCl3k;+kEjU=SlA1Z7Xsz`qF?`>UE9ddC530VsNw{iQ-{hK7v&-p*%xj2f5{``XW>$bn|_QeE%e*h@V BX{Z1I diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.6-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.6-compact.zip deleted file mode 100644 index e6393db5c17f00748bdec7684e02b3a9e74c0639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1353 zcmWIWW@fQxU}E57Ff1+zS>S!OZ9WSFL#q%2g9-x!LvDUbW?E)yk#1s6j$UzoPJC)b zL4Hw5d}2{@MrK*6URH5_9w!ScLo5SB0|SF?M@PExALGJ>m(Fdo=ACmiFH?2DTx)NT zl%4u|?%k#vUmmVrx;=vV{zu;ChBNy^)v}+&z34c*b%FnzAKo+4S8#>=d%`dCZA$3U z*mIV0TbJf%`zuCAZQf~G&o2B*di&Z*yZ<-IWyV?NUTw;;3!J(!`rC@e81;SZ_Ny(P zA9tJgOI5aN=ffJG>|on39d}%{H!VM=SaiuJ_||cQ;KhpOvnSoVb?yn%@1_TFoSQ!e z?DOeo+;=&DuU@4FTjN~G5`LD?VQc3+IrQXHQsX{t@Ao|`*SDmFf6-X}=W}3;M5Vxk zl5Uk#DV6WeZmAHDKQ}*kd-v`Aob!I(-tYCrSMJCYj^^)2H#FrWxZO^k$=RsesT_E2 zR{pLlKR#^Ud)Kp%>193Jt?K*X8M|LtI!@ni^XZ@6ak1jrKNqXl{V`w8IkP|d zv#x)WBAu~{)AgX2anPqt(^8 z>x^iQEukgL-E*w2ER9@ndG^~WdI1I{2506sE&43p;?9!u=P@(8C_|k}>RY4tGEq9e z9$LKToPSCqX-)kS)`JhW**2be{IW~=1H8=1Y^Sz6q!bC*jS^yE*OXIGV;A)se$Pdk@;4N&mo#)dn9T3~ zb4Jh45Rp4JZ<=hDbM2YY5NUF;B5~~-TW6wZR!1YEu#Lvkk~9{g`kTm?U&uX z;v_^lr9AZ?DW<-aI3}F&&-Z1CLTS>ZFHtZ&1l1A7gKL9e)ri2ro8sl z`fF?W%_*i)oF}^FFn7rIZB5K=%eH27pSXHXeNDp3r5kUs8?Ja0s4vMIof^Kp?4Jlv zxn||NwD^L`Ba^T3DTqAjTbEiXQ|9OJ!DI5f6Tf^<>xhbp1jDgHN4t$&_V_3%np zY|F3G=?iC{miYW}A!pgk2_42Bs(&w)OFX~#$o5_1<=ZVQy;^QR)NY;`eOTz0jF#?) z{h=35v3mrmybxQWp|Csf)a%kv8QY5<9@foq$wfDtIz_9tGOW$Cj#DmcpWeKK)y$}6 zg?^mvp9#Hh{k*>J5o}?wxYy9-Xn5<8qx8~qMk~~q7qitxd@j+xnVXfj$1}fTU4ry4 z>Al7_C+_|K^zh}J0B=SnduH549I%uFg9b(rMNEMg;LXYgQp*U0K|uN;u)t(s008^k Ba%TVl diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.7-compact.zip deleted file mode 100644 index ed7cbdfc8702c9d83c4ec1c0664c07de40bf2e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1351 zcma*ndo{yoSsq&(j^WA{w=s|785L8m zywXBzTp4-o92dQiJ7Tf&mdEmlaozj>J?DPEe|-P>{{8VlD}o&W1z;a=ica-3vFU{s zf&n1uAOIW(03eJKNG6ekXlBIFPz0S4N(hRkQfLtbA}t`892JDPNvDKE!Aih207w7; zJ2v}<#iqrrNAG)I+NwP42qzmf>m;RNwd{>}%8kgHskYcs!4<{PMU^`V-OXNxAyU6d zb`QVUeRd6BkT zWt+>F@tTbNk_gW6u0Y0o&x>dcLN6C5;0!fGi`IvlQ8HJZcIoars~yi-q5jT80R>Q| zS+f4+-usk4`qmcenm%1hSD3mD5yy`D1UF9FoV_PFv$SO|Iz)f4USbr#X;lU-$hf*V z&+E5&WB3(mp|&6H2^ybhqcRXnuVrc+12@zyi!irz<>Jyjde7UtQYn2|qdQ~1;mitA z&3AOxFx5p7-@*m|ro|$z!xFD)*{XKi^{sH(KC{%wC(j^`w-!1tHp=NRu_SFFEzWGl z|GUEXRkNI7W0bj3i>b;S*?4cB=#ayyi<}>f!tL@DKCdj3Sq)_dHxap+G7df^t4*~! zF>-D-5^utgSp>}PuB=`Cw; zh_4A_*=3MA_!v9CouzhZC7#itQC(Cm&*t~#!lD%iyes%V$)C9!@BH_q*G2QpNFpI0 z^S0$&vWu?1k3X#>LLJCDBJlRXe$qf#q-@7@1CYNAjIHud;G0bCpvcWFWXHHgDrto6 zO6ppw)Q`)~R&8{Hdn#;|4|Prt{_6cIaxAj2t>n@-ZdE;^02@>yIZN;k%)?E?cr(5q z&cTaNU*--}d;XH+Zh*OIDMmZ!!?cl4uLMi%B( z{BQx^!?HFf*IPcpkAf`_yd0;g<5%x}p2`m0HV>A=8Dn_e?A?yYNX?pBhV|M2^1LW> zCSUipyeM^0`zfkFfTew)y}~fah2o}NkK1~o9MfSZ-Jbd4+FC(VAz(nXh?9O2y)^Fm zpuNJTna1gX;_!7FDMTf*`y(sdOu=c%D+r{jt}I8Hv?t{r8!#%&Eq9vufs_TbWW3SV yx77YQBxn0syz#6D8l>Q$_}{?o824`yK>y7D;m!lC1o`I++9`HtM|ZdcfWHCe=6;$0 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.8-compact.zip deleted file mode 100644 index 1e0c465096bfda1435f507709382f51266078d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1339 zcma*nYdF&j00!{C4b@yWi7q-jA$m0TJx=XxGmBi(VHOUP`-EYe>vGE)GNR}-my(4< zE=j}AAH^M(CI3~c55=o;Tkd*^G0e}er zST;KlDMf}C4~QDkN`K z+wjow%cgyPUn z!Uo#v@bVl#e?Nkq`cak@j^Y1QfRL;b)eG0Q0~>Deq_(gi_a_5G7RkNRw1+7yqdtA7 zn5+Qke9>3kwKCJTPT^MVM;5*hAATVsBdUd`UOld@P@=C!sv_N`B#>d>Ws>By9aevM zV0TndjHHy~d%u}hH*6{~F-^zrc}Y4Bh#p)rZM9VFGQZjpe<9*ILD3iHu4{O^ld)Qv zlF~$(I^W+pdHdrNl&Y1{k(7}$P@oxu%e)QJ1ixC&TmxyPbdMV{EwTzV4 z*?LQ;!$IvaZ+Ee?>dEHInfq;IxW^y^PfqIiV2*s@`3_}YM~lge#dV0hTA0ns5JRK? zHG2DNtj`Lmm`8253VlTkSH!PaYKzU(DvRbO$;mNJOK+^f1vOGla?uCb8m^k=Wr({6 z-5hW&9E2$zFIQaAgr_21bun)tIuHv9-Egm_NF64( zG?L}ADg9dDgH4`Z-6|re1Cq);st+Y6Sf_VCnrS=xUguUhKL^#*VN?WNv<;Hn39L}F z@!OUcHVp|=uT2~23E-@5IOBv}TYMY%xj}lpRB!mjhAY;;sJ=GI@Y&QFGT!I0f{bu1 zFjK3H){b^!abkoc5Rv5C70>hJ@OV&>F_yz zOJR^l{e7`g1wG?1rdON!Vj`p1%~WTs(4@rx1hZ10Y4Jl1i9iIaSETb*zs<_OhxJ31Z>wfAZ+XZWX8Z;l&Y>aeLMwpzCX439W zVjtrPozJ7q4-F2FoJo_n=?ic0KXuM{brwOBtSmE@~eeZaqQ&X*{ zF;!03=x@}^Ejt{f7KnPkcJ*RZklMaWm{tWBRn7PVnbzS%4+;pnZ6;8|AlGlIB=695 zBTVxfh>DO;APkxUzcRso=h<-$`g+26a_%~KCia^{k6SKor|&#Zzmz1qF}JCe8#cl& zNy=kO^D_+U`$^s@hauaR1F&C4v+m}#tQU&VO7Ui&70m}6&lW9pVMWI?P`=-%=fz_L mdl?W8{NJeUx%O|EGXKo~A&y`#C;!h^X0OD(9o!=l0R9G`VPskW diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.9-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.9-compact.zip deleted file mode 100644 index 7c12e42597c8339a61e5a57297db71823cb37249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1347 zcma*nZ9LNn00;2DHlv!PdCWu8VdQd&U7jKjJz(9IaPpWHYql9yOBs#zV2AUxWMX-k zjo3L|1a<+o06PF{N{sIkF696l z3;?+r0AK~=;}ZxYvX1$0if$ayTwjeBn< zEfBvvfn}VxZ2Y-yS5WV;%q~5>cpB=;+*P)h^XzYII{0OydqB;o078ud)up;@l$s;v zVMZO1jiWxDmC#wjC0odvqo7Oi>lKtObfsH;pHl)M8=L zmEX3F9cA{0&Qls3@Fsrfx(B}EaEACmg~M$8H`3ipzRF;r=`%u%C}M7fSqtbMhm4o} zEUVNgAiF?5cF*E96@PgjP8cnf*5{A3jXPn;t{KB6pW|NKk1}*aNgvAkDS(XIV0cRI znKzIrLV1|@zj)@uL^zC?l?(M%MP^Rn z?`v}F+jtLHr@P?ssJt_pb_Qc4lvP`P;{qnh#@`2#IZLm&{ec{a9@e;K8iq1etmzHW z%_?A^@;F&P3 zwYHs8Y5!BdwfLPPvIV*9)eyh;cv{+uLH-n^oSKknn4d*E6z$$GzB6@VgjAM(xMdqg z)N14kmlL(@F@he0@tEp;qqsL&ne9UMX}4h3E#mZbi8{i^cdmUQMj5Z@G>Ui4RJ(@0yD9wi`asuUaw5a@F0_iL={4cUOqJA1 zx*|Oa%Ch}+Px&j*jx=R2)xFScE)Av~eR&W{OYUUyODpuZqjWlQ7{$%I>9MOerCgaj zWxsn4@R*z4!HHLuFQ*^ZY$z-s z4~;vhHwI4>Y4qbf=#P<+SJqTj_TQ0bW6U|-&3vVLrtX;^ho-XDW^&(`p4?tS1rwPD zEOnR4Ig6mn+d}TGIg>H&V8%Yyu1?0(2p#eq t;EMS)brp=a(iRucf8)04+rObJeVzY99mZQ3^7X5@KL7#%4ggtPJ5|b~jD;St6FLKbU~a+sJ{#xJLRC`5B$z%M z6~}a>q`zIOgcHE+aMFlC`MWOJox5zGRRx{uB_(Qvx-^HK^X;&eDpu~w7wHxTkfZ8i zrJ=7$*~@YxvKFF|Ncq% zwkg?Ud$H~toX2)`rc$*7nw_mflF9kAvLo?lcgPE_0d#B7bez$uMJEM3mO*FtlxPce2RbBs8q usmhh>94OEHCGZYVO928u13v%)01g0ITsu|Dql|?flY|9X25bcY00027upt8g delta 611 zcmV-p0-XKe3*!qDP)h>@KL7#%4gmaU$5i+dnSUX%6FLKbTjv%OpuO!hd5a-vfBvEP&%dI5q^_&%xKp1s4Cw!qN@!jY8hM;kJV(O1LM@Z*=OU-T zRcMRXNQ1atc;UiJ|BXzb_vLG2=WFA|bo*#f0nE$epHoVh=3ARI1o=^in^WLix({9z zg8Rl}O*7Gdu$_Zxa_i~vH&B4#$AQcZdPBDa%|wFfgvZqLipwI%MKFMueJVz#0LwqA z*5u*)EDC!7c;{?54nz<1RK$>~qY{+5dy6`;K*~(AaH!$6f9Kl zxSMi$Fp;Ta%_z}~zy(yB>?N>0x_*NYgz3ydvorC3Dl`7xonC(z$a<_uJdHm8z$VJl*$`x4Efg19aYf}HO$d=}PB7nnrtko*x$Q#@ zzU88db6g+N&O9w)i$;^J=dwRaK-?ORgr1DrP-=+dMI7TTw7s@~O#V8Z<7AIb)uY>L zG6Oq*D#2`pc~2ZL1K@KL7#%4ggtPJ5}oLIoKVs6FUQcJf^C$J&|LM>)q+MCKU?g zi4~?9-i7pAt|eb1 z^3O`E=W&nh^1T-q#9fVW$==5Ianij4Gx*JY3sbI?wz?-SahgEv<84IbQ#m?l`qYG) zSHkfm4LDPO=U^83n!Kfvcwu?xV{!lI@7z}P^%~C*86R;XpQ!ze5cJ5CyIQduF6o=~ zxR3O6jzKq9d&0SG?pfoOeTWmh>Z&Wr;%wf%#5^jNC*UcC64t89G^WoS_zWYM-OBWe zb1zXC^1M1Q12Ey7cdio@>ro~ji(md{w8-=394xqh>0}Ea99IUZwEBnS_GMh2hVln0 zB<4rm)#a_8id%=>VfHpbIp(kEkSz_wfJtobw6k?n!ZjqZPL(BX7{^`ZB~Hw|ZlM^} z#jBms68&w~sMrsLqj@bTh#Kb=o+@zG3}a`4?M;mrKiHTJ$lJffYNSsR1a1dY;;;P6Z?}`PrY8ijlTKB5QxV zYFIw(kWn6`5;2b(Kgcg31Fmr}9+Ebto-SGDTL>)~?Z*gs*N>4>`cxJES(-pC;H9+(GMY(QPO6RY2h_ s4M}qE8~tm(Ay7*J0zU&k00ICG09jl+RqF0J*d3FD1z84b1poj504)zEZ~y=R delta 609 zcmV-n0-pWf3*rkCP)h>@KL7#%4gmdV$5bKr=X)Tr6FUQcIA-sMwL)lcp*sml4|d0{ z#A8xq3$2IJ*wqv~wAiOUD9^m zhnInV1zG|WWu8EUa{e3388(DV?9@gTrh7(0p}*ecTKGdbKmG1(6*?m+@VK_+^dxq* z0`#HTpg!jgb|F>T(T&{d_Gs7wkHpUQB#LiYQBi__M<(on6@ov*;!pr&;F;R4Lj|I| zNcUaXiqOe-Jj3`&L-@lRK$ZO0#uI*N-!%i#1&1#Yyg-$wabUX58z7g|=~fUOGydZQ zWxpe3nN@j_KtN$T*C>|{-;N2zB;Jl*JBrE@24(Y_2v47+9UTl~rkA0U9-}9L{dC3T z%l6iP>fT4WyISY6SI@PkMM@I(fb<=;Z|m)cQpTtu&*)xqqbWYz{ZX;>W3a=GhMZlg ztm-|V)6BJcscz1tv&QaOKQ}V^GmvRlw{dbnIoa2m2wHK+Iq&qV-_`bwjDCc}KhH}l zZ+v1@KL7#%4ggzRJ5|;MbOf;ya07p=ID)Wf2adm41a^ADiP`Fw zDQtm`5RN=pOjVZ!dg-$5BMOmJ6~Zw%zjYX-nI=Au8`wP$k&IhiR+ssGf^Vf5M8x4k zSQ=6A2li<}2Amedyb0dX90150K~$=8yWgrjuxt@lv(?%a)8y4Ps9MzDXtLkABYw@# z93ritOM`#trFZ$P54`F3Depggsc=pd3z#ia7$D2@+WHLzh1zWG!FYFGFNs7*o~^0jYNNm_DcI~1h$^Y#)Hh#X5OUEyyjlk zuk~>+X5i9;J63Obv=-*PnMd!yWu8}oaj^QRJc#-fx?(#67?rmx3!GI^ua#bTu7Qtj zcKIZPTFQ-*;B(8PqN_nZ+=`C|0=yyXL~j4fM(vtzY7_j->fI$T8S);o$QhIQM#`mu z!ykW>mbHs=vP5{y+>n%>)s?8)!y81$ao6Qa9W$^}!sLsx-El@ZyEf#OkPPnB7Cpc%zG#+sZ*NgloNzo6q4fn+g*? z80D8enjRH6WLeq*p*SSmFh&Y^-@KL7#%4gd;i$5g0Pyo#|Ba07pap4GB4}0m3LZJ*Y<*xLuYGy2M5~X|)sq0ft z-daq$Jm-4^A8Pq<3{f86h8YxII1Iy76ot&x<*s-M2AaMJY{}y-sHds*hx-+fn4| zAltmC=uQr9w@{ySrq|*ok%WMF@uHIjv`YCzUkGvg+Q`%2-NWbZDfL{BZUbyT(fS5g zvoJsvfHF5MYj2dnS7y?-;IrJ0K612i* zie4k;*?ufG<@|wgV(p$ZcYblCAcv5Xh4w9Y#vP7k2*Z^gYJhN64J$9oO_`Pd>J<@+ bP)h*@KL7#%4ggzRJ5|gW-RDOI004^@001zP!38t1PBjC6^5x?T z`OZzZ<3MJJ6D8^3QM~&Z&EzEGc=W+VkrYzH%CM2ve@aXn->Ap9q-P76p&J(GKTPz~ z5*7+AWe?6_>F93}18I;za&Q*rtvb=Kir16VCt_9i1f%;~*&*4cUh5xw(WG3DvBnW|5FCxMXjw&pl)H~P zW!D&^cJ_xN1C8q9 z(dGQCPh@lkWf}ps!LmVk%TTea&>vyb3Z zv?!gi!jWz=7bE9yR+yY{IYW(nPlVt6UbFBB1Vf|2&;KI>F?fplJe8khe#J;U@bF8} z1us5|2xg-$D-wZ^hxdv}=g~y80yuZZdqx9;3Gatp$ok_bd*;|HumaEqvZJvs5lYJ# tlx_l5$^W2I6;Du00Rle*KL7#%4ggzRJ5|gW-RDP>s|8sGl?4C*006T677_pe delta 608 zcmV-m0-ybf42ldJP)h>@KL7#%4gd>j$5b=sctl7A004^@001zPzy&k0PBjC69NEUM zDuc*rSpFHWUcv$l+t0ptMP)=%#;{!!S_LPVr8|O_XcrgqWQ!ksPP;yoz)Ss60m?mF zoRR*%>>^9|B#PljPI=#t^!!kT;c|dd1-F?g3<{fDcJdfsfV*WJ6~@b5(35qfACX7& zItW98hhHqJ{$CRVA1~d8i&5uu^Gk_8YKey4 zg2gp*wDd*o!Ay@6?yah!+=FGo@ss|nK_PHVQjM`8xhqt2j9}>7i*le)-cB#b4$S?` z>^`+qtdo_rWRsSN2h#wOLL$OQA;^x6C_Dn*=n)sGO3sDo6P28M0l^A?IXi{(73>S$Gu0IrSiM_%>D^?}aAVtzhh1#L$`mV-9B(&5DToBGN8f{MADG%&e zqnwQ7$@g_t;Ho#irHf~OrJPlKmR=sVJ~%j^ODZxgAmnhv#Jxj0#7y24SoBx=@ke|N zQbi%EHap`p9qVc;Z3a!t?)%onk*c~MOk(K^qEZu5+gD(TG#*vanHP5&;binauZw|D5IpWIZh2wU23IE%q7YTg ux@t)W4Q&4NibPdVO928u13v%)01f~PX~$GE=6FO%ld1(-29^Z?00009Ulh>* diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.12-compact.zip index 7e6e7a65f51548b536874d0ceb6ffd7a06530898..6159756b985c81d7e4414087f5196590fae8d3e3 100644 GIT binary patch delta 607 zcmV-l0-*hf42cXIP)h>@KL7#%4ggzRJ5}G#!(K-P004^@001zPzXda~PBjC6ki50s z-ymFfN;ym#PC%G{Uxg(`cWH;(U@T0+Ww~s-o-Em5_Ndy?bytvU{Y^1{x zS@_fc29n&0T4_sX5%b#z^GZX16zObBtpM{BHCL=^(lI;JSVYizk2%GBzeHuaMf@Lj zQ%S)1$+P{4O$jt~7_?KcLSXkNvT1LYx3y)uTobi}F*KA7a?@oQs_L^D??=g> z^MzxTDF61RE8K+r3Dmab!?7`!=y%kDnzWPyTssD zD_ER_%O>hpwI`6X^6~L&EIVib%D4_`-47I+OcCF_PW_`wZ#UCEz~QXwu1CicS|_*4 zZ(wd`M>1J$Wnl)Of5d{4hZRlW*4G@W%7!jT_AWXYXLq=y!X^lM%j`}_ojH>6vj39d zMQz6*y*dbJMaSgH$mNQEgtC6nXE3{)%n{^HHISZgVIa|k9-+Xa9B-)}`@+IdHgym; zGIUmTi0F)z&j13l&9f5RX@BZSZJ`&$A=}fS>tW>DKpA5CZIN^d#{GaO|B$jTt#*>t zt$hcxL<~hFw@-h$H9{`@KL7#%4gd^k$5aWAw^l|4004^@001zPzy&k0PBjC66a9Lj zkE}H-YU!4+)=La~IgPqoEXSOGG`^t=)n~+!*~7J^50zV|w<3W`QG{xFq?tI5E|&PF zbqOo>Mkgv6%mrtc?+2mGmXmxI#|Xb8FElVe&a}BmQJs@-)#KgqJeKFxy#Weu%nBQ9 zFNLLLQ$!H16+?t4ZJ}7qTOxvgtB`SzNR~F&4cI$E6R*JWNM)^G;YiJR!ZGQEq!d%p zv*47XhXlt(^Z`okx<9EidcqA~{}Ul^c?A0|QR-O-$%WMrK2Y_rvvo!Z0KnZ^S#3Q7 z!@wSgo9OBp*5nCQ``^6=#&ESMK%V`qVIK64tu^y-m3-MJBS#a8Ed-O?86kkskgaIS=H3FdQWo(4RBF|aV8Oxe?}=(_QjCo zPoPKO)I(NdodpD?!$fn$ZAs`42IxBWVAQWNRGM*x9*a2MTi;VTh($ diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.13-compact.zip index 47066aa8b650a72f72f2a5098cee0c3179304acb..41d76763d5d1542974c67619e73de821451c060f 100644 GIT binary patch delta 598 zcmV-c0;&Cn42KLGP)h>@KL7#%4ggzRJ5>OBI`%~c004^@001zPz6CR}PBa65dJD(q zheUD4G-$bss#4tew+48+mIWJVKWlLwllJ7nzn{78M#^4Yt{*Y+y9}dQSk0)F_#s(2 z7{3plY(&T{5t;P&&-8XpO^y+W>;x8cTq~TBgS~SL z>HyEoclQ?;Q@~a@6u!Lme~W{ReSit%BR#w6IvP?kvV{iUuED;XhyK{Ooyh5!$S>ls zffxmepxaFy+rPzZfu00k2&aXAg)-@ff^R%Q$fs4p?{W?$y}G_1kl!S~`#1~yj6e1n zoAT+*q8Bvtk^J4Y-!i&?YY=S1!=n^=rqiZQnq43w96(@+J{kR@DVV8B7?08jFN(eQq2Pqp3ymZtX5MI5^5hCB~!86KJ**J z?;z|{sqZDVt0I0f$rWQ^qGMMozngS$?mLuk&KDWjdXTj%9?e53k630Mq97?nHY~b| kvL&E@|NWkv!ca>A0zU&k00ICG09#x;RRDTA_LHXtU`SLO{Qv*} delta 598 zcmV-c0;&Cn42KLGP)h>@KL7#%4gj2q4^_5aBqc=!004^@001zPz6CR}PBa65d7ut8 z4l~K0a#Al%R1FSq{MPZIk+&{_C$yAnSz}C*adu&uqZkYSmCV;G1 zt4+`GS63Y0C4xOEy9nMXeBbtR4J3r&(Y2QGu9chXMu;Jq8d4?QTHKD!VB$8WiA$-l zr-Lx&8L#a*DN*h#$F|TFf5*9h)6t8xMdKd7V#S}uK*J`w+R%Bye$Jb1K}9BDRWN*I z_cE-*K=&j-*$1j!GGBNL@4)q9|FP43gEcyIvP9!B zn3I>DnPmDvOlr0b$%;yUN0;c9eqyHA zi1lp)_`9pKc3r@4nlR7cVi@4WE^r$0(&zmv#0aiEys)nylBV#_7M6aaoI0!R>v*jT zDk^0KIJB-UcbPLyb#DhB9Q&NSIz5d^Tjpf8_~Z$q>{L`Fc8nS+memZM|8;z-ulc%e k*L}N!<^7ScpioNz0zU&k00ICG0Gx>rRkmIvC6lKGV3V&NBme*a diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.14-compact.zip index 01de606fb0b89b11c3e1f9e845ae07c456fddd3b..eac4ef5fe7a3d4b126f71de2dada790ae6699198 100644 GIT binary patch delta 607 zcmV-l0-*hh42cXIP)h>@KL7#%4ggzRJ5`UKOc6%~004^@001zP!38t1PBjC6v5vJE zXk~kjBP}Y$buw?Sp)iC^j${a34J$Zak*wMMoa%7&33Q}L)x3<}?djed61VrDO zUSDyi;CwRx4IB;^caDDxYAeTgp~$E=0TzN47nqR-a0+NIh2s79e~2BSb3M z_Q10BP^?d34J4yJ^K54HT>>~xDOuRxj5>ahOL*g4ZPTKSs`N$dSZyAEfb057>l*Bp z?8VC+@{VfFk3OOx705k0Oy^p^hId9XaL@m#Ovx1g+|GtjKvr*lCF}ltFZkOr>vC7T zy-#R4N<&zQv5OhVKrw;iIx!HmaaV14O@@8A2o#6im44FWLL~8%6n)^1M6N+V-3?iO zZ*~H-P)FF71M)`{C!W`VyUuj4ZgyPO%Mes zvWdQNSNdFAmb#J%OKu>;{q~W(aqc@w^1%4IcfMLH{f#YOr|eC9$XFR2ZX^_^(bj0& zt6>`$+TLn~R58|irB@{djIC6yy1X~kiLfqp94=aiyaVq}#?XZ;c`W~3@mMxVf((4? t(``$bVU_pFR`yU!0Rle*KL7#%4ggzRJ5`UKOc6(us|8sGl?4C*0093H8xa5i delta 608 zcmV-m0-ybf42ldJP)h>@KL7#%4gj5r4^>qTumng2004^@001zPzy&k0PBjC6SsY^2 z4ZcQPg8hS5r42Knw52(KIRT!FaOuiVq@AK~Z61|SdrthXRpNV2{u9a*IB8O$sSR8f zn3|!`%s?s1^7QH-Sni$oFZAw}b2T^i--m*IVLoWm&IX88|J=eU(%8o@f;Xh|0&c4$ z_JNB&j8I!_ldnPhcgxc`jdFN@PmeDW#Wh0%#-NdRU&~x?XF!#R2;dWlH?HN%I|yAQ z9r+>T_}MFq#kDNvG4#fMtkl*Q-6(cmBZ`@xvml7u-~t0d2^J^&h>kN|XG-aX?}h6T z)*S**o=-ktly=8>tC9^rXp|<{_AD7txR+enMT;2E)=$$zPzZtDV0K)8L6R*+bE1hJ z*M;rh@eBFl^cCbE>Z!_eVnP6qYuj`Gn{!c>@5`&j--ZHpP);KD5`xbE<7 zwd$vgd7?L6&Eu=Sfm@;tnM|KSg$cymn{xQM`vJ0Lw}p+UYvtSB^pEIcTi~V=MMVX6 z8AkX+Y_512tJf94#+~7RlUvMbJSe|ysXU4P2y^Wq{L+@(UYH2$YH|a}yU@21o7yZ< zLC2GIb|DruMmsQ@LGS(g{b2P+o+^3@KL7#%4gg$SJ5~3eq-9636L156@`Vuzq$zClNDSk2-X|fTY@kot$O^(1PS%%dQF>o^jnq8I-kTNckwoe4gQAP1ayM-LiDn7? zb_^#4$gB#QrJ&8lu60(3?fCsKKOPFOCpK*Ai`9DF*Sp-FL^$!~2RheFHxkK1C`P@k zIVZ+Zl^HdE-Jv<198jPvKSumW4w9{xNiuEQWy6AV2`TKS?0=))z2+=IKxMp{p|KKy z$Ik&y$sj_9B0|>BUo>iggUA|ll9#l%k zvNlonlp&v>7cX7JAb0d9t)TmY`=n|4>H3H!zql zpw~>ZF+KYH3p=P$fYlePN1)SsIb#Q3=OoXh{ zvU+_^?ln71M`P1YMa@qO@t7FhQ0+tH&}92n3HX|318A|36q~ze(cJGfZ5kw-%ktAu z&s1`fj?KFcta6>xhukpfxZAS6IL^u=z3fLTn-5|<{6$W>SnZx%IrOz$E#>(bHRVuC h0Rle*KL7#%4gg$SJ5~3eq-95wtOZ#Hl?4C*005|38{hx{ delta 609 zcmV-n0-pVe42ujKP)h>@KL7#%4gjEu4^<0eWsFG$004^@001zPzy&k0PBjC6rfE}) zB^*BvDdJravy87srucen*H@!-SuW0hDp2-V8k%ie^Y7;%3Q^TO$KMk)GFk3{k^Hc< zDslpj0P%x#5a4=73DX&ls9X7Z48FPr>)=w^q3RSNf~Dj7E>`}zZ-g2{5^G8E1Q$$o z6d=5teAMQ$dN2RzDgWNLE$4oJliq)dioTC)odkV(`Ga!iVwYw3IL*LbO0zKT-^gzw ztxEH^-SVv!j?aY!eiO63(2U8Ln%KISk;7pkGMPiO2jB1GjNm2Zv-_UH@9F>}M$s1c zrdd(NvOIwCfsXkX9P|qXQp_tu`<_497j5ARIQFj2*-hT=g0uPA2n+##px+Up`0i!_ zwl2S)@N#iY%KpbBV?du4@t0{~crS&*1{@Z?utD}bHhb`gwg#0~ z)XChh7Q_{u5yvUZc(@FS{T#Z#?OHWHg4Uy2*${u--Fl7NMRZi7LHZVmoMP(=+$ub< zoJY5Y`b1tgUMCRJsQSZyvl;IDgY#)jNx-q$;O)-S~a{fbeZ7f$(G|r9=yPEePBQfKsUs@p+-%g{8pjU z1P`h3;4W~C@gWr+V#s;PWG?u{2-YS>!YYigPw*}gw+Ap!dE-+p*i>NNZ{JqVp8Fh7 v^Eh?bBol4_5rS+0P)h*@KL7#%4ggwQJ5}n6t0?5^jkA_UC!c*$}RBExhs zlpGgqp|BCC$Kl?$Z3ii?ad#wmc;KBJq#>VHJ<8us3XSoGHYT-5`F}xgGQ) z!Y<+hP|jj-t(6CNdPS>EB2G{z(?pNqa~f1kSF3QKb=b^iADrP$!E?5m0v0cO$fd0j zJ74sFvK+u@h>bU7?pc2ozj|nO=>1&O?MM^Axf6L{`Vw?qfeK}I=(YF(u|`#PK@S`43Ok2Z11&CJP@v{xQ|5X u)kM_bi%-}4X-0`qO928u13v%)01g0JTsu|rq>~Iflb{7z28aa!0002G$|L&# delta 611 zcmV-p0-XK)3;zofP)h>@KL7#%4gdgY$5hJ834J}W6IKI%NDbaOQ%ySh?1Wo|2JN1= z>aa=Q&k_ShBt~=kyN{`7vcv8rxdRUGf+EBzsW7zPaDvjKYdQooNNf?#mh0a4TsMrO3 zA&|;1lG=(EhNCOoS&X~)Q1uH#t()Jkq#bVv?ZbsjI#m`J9O1*E>8gF-jerfc+hd#L zvSinTwh1>>oBjiJp<*sYM$_9UA(3iI_^(I?w~tMGcjNK)Lnn^vJ#fBm}9k39@L z|B*sF&+ciR&lW)W1d)9qj}~Tt<9;`S5i+@5*s(4SV0PZ}8!RcX8rbT4Uv>zub}m4F z5Xd`bFUr_@6vb-tIDCMZt5jv{CDkOvo3p(>>HCg!M|$hD7d(A!%_pPH;|dV_;wk|Nqy0xr|Ut0Rle*KL7#%4gdgY$5hJ834J}2odsD2iv<7x005D{FaQ7m diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip index 728beb81f1b5d58e398ac780e49e1a6831ebadaa..c5b0b7f1abd00a7835c99d311b22e2619d5f4169 100644 GIT binary patch delta 609 zcmV-n0-pVW41f$1P)h>@KL7#%4ggwQJ5_uJw(>r)6Ila)v%<1V3dIwif}G8Q%*AGi zBvkP7f!U z(i3rdL(GWusqHasI!CDixXpg5Yp11fS#ElFUcD|D)#>O=YxdqJh$^ooIpU8d05gu#F;pAEn+&8bxqj zLRHm%#dxuN)ko<>{Dbj>`=R@VU_;tb8zNq&kT@@Ho4;EH!;f{*s778e#TN0MM_x}P zsWt?O;t=kbnREmMP#US)jLrOMX4?bm*57G4%3vXSIyL(n4)04C?X?+LZF_--6(+`; v(yxOMStebZ{)sT-P)h*@KL7#%4gdma$5bMBXe~dn6Ila)u^!6l$+_&8`1&ScbkN$n zD}d4-zi%aCz9y;;sIT*YC96Bq@RpQNjt+T-kilw8Jo!brX{Q99p15SWdVRhCOMh~G z2epW5XW*PW&~({Tl{o&74HcUpvo;}EaF*wo#YJrOSmslpxz}980y!*)I$b!8_dry9G%g391^z zg2u+X7U=1Mg9HgldcBLQxTl=A$fIYf&8+3AK_(NTaU11MbUHQn+OvZ;rC47i^<$%3 z!FStMDzKBXS(z~|BZy*CaE3wCxgltL%JZVZW`MSTy5Pv2+2IM}X7?4(xyDi}^cZ~b zL818e!+=^QHCd|k7mhP~N|>Q^48dPhfF#a_yR(IiMh9#ysPP{qX}QJPye_gP#JZc2 z5{aetXY>E-#8y0U#_<#CZ z#PW)o3Yj1&{MWDFVksuC52k~+aL$Z1wE4}EskrN|tSeki0CDCT#A8Lux;ARGYpR3dk1EkBc?1z84-1poj503p;O_5c6? diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip index 1eb88493e65a540d7a635b94019e1ceb5f093d32..fb11df4aef1e488ce17f8d5d784912f24a048cb6 100644 GIT binary patch delta 606 zcmV-k0-^nc41)|4P)h>@KL7#%4ggwQJ5`M9iOxZ>6JG;=sEJ)$JcXy3IX0c~;RcH% zLSIawv-oNXuhXm=&q+Nz*5knJ1=jT=DNmz-HEc}g$!inq+W;GA9$u3xOa3xrEkls2 zpHGSKej!|TkU}WcWkZLkLF)3mSn*I=5es-i$8<5m43LDD#VL~SdE9-l(kH};5gZRa z@c@LTffp=)%tGhKMK9@GUxny@f*8@~>LF!iyBrYbpn4LjB!N{oM#^C}6TBs=t@{yG z!Z|S}&B#2v;XtOOBv6XXDPkACnOhlU?Zlsr-g7GM&O&g3Hn;%1yMWIHXxB5h@@ z4*o_$?mBX4TZ*|tcB3rwc~x~}h&vX^b7i}g+YVuW;^RQ@OGXOARX9+#ekcnrzeTKw zjg|5ahZFvg?UjM9n>y|H2*wrHqegf7_xG9u`-NLy4MKvJxR;BQZ{=LrrEj>qx7Dn_ zTFE)O_cSt7%3V8g+TyCt&kNc}VE;=mw4=n+3qa)dUCPtMThfKEe3F~=_ zmj}_A^g%d}N)XH&$OBmkdwspTJ$VrM*Bh7>3hp2w5OQ&LkWo70DQ3jnB3$7XBSbTl zJXzLS&3z3Ngn(T!4KqPZ-Q{kdV4kg_#sz4AV**Dr s!3@KL7#%4gdpb$5f@naMePw6JG;=rON4MkAMOg8Sb+Iir08L zaHFgZHT;x+#AdK)@6tKI9A4)HEt{7hD_&aKUI}m`@dWX$M*a5Kb@7c!$HyAsW7A zv5y#BY1+eoB5~4Nfb0inV}vurZ2?BtU}gQxz5wQL`40E}iu?kJs`Qt1zWv0Gkp2h8 zaeDSBgNrf!seA;nr0WDeCn2c+qx0JgZEpPGS%-QHz^o9?#Romb#=-djNmaCpIpt}Egw3d7Ddf>G zn)3pGk8sA(lq@dd4|opZ*DNS1hQ=tw=Z6BbW$BTd0CT_`+WH2Y4Bw3Ed!__{a-D;+ zZMCG=7em}7zq#Z+$h&3i&G&ZS=&XrYAoRa8JPjbK$NV%fTUHxdzoAfX(2~(%_DK?i z!IARTv$ecT>3wi`dw7z+8|s}X?Oy|>s^YgdriQ7Vu<=_b4-s0+y62kP!e@KL7#%4ggwQJ5~Cr>tjH%6JG;=aN_UgWaEM(l_l~qldY8g z;>oSO;M$R*b+OXiK;+OqZ~~iz3DANltw;R(0X;#plDC0|h8R$FPeBQBh5NJPC+X%< znaQKZ)t$RrR?(NY{u4kB2h^#Wj-QG4N|;pZMTQ|C6X zGFo6eZdNb?{LnW?6L2R~)rGFY$cQr9chQu&!Xl78w>Gw@36E#CtO=@^$@5TAv8@S4 z!X^oS8-K~g;+>ucxF`1B-5!|&WPo?$3f2XvuDh!VD?OUuz(yIFvP38RH+KZb(}U!X zvnfbGFM@q^d~y72z!O!Vpt}z$G}Rtd@=eUQB8yhy%q@@{g+q-*<5$PZdcM_aSuJT< z%GJ{JJGxpY!F*ioV=A!pBROo!I9-HWHRtg))wM`+(l?aQt>0(URLCW93uHNI+Gjx0 rPc}3Ef$Ap!P)h*;00000)>t1c delta 607 zcmV-l0-*hZ41^35P)h>@KL7#%4gdvd$5d^8zGp(Q6JG;=ZqP1fp}MqZmCuvaCj2Im z&!~}-n6Pi8Qjg9 z@(W3{c=sWHju)Wv-h(|(f;(n?Mex<4ym=gmwy-!^yz`uzt|&Skh@k)9V={bYUvIfa zBkNUtof{Ak6@^(S4e~Tru+V-_P$0W|ozV0@GAf}yGb9d&IC3TDLAyl7iX!La{U#IY zp-rw?$myDb6S+<^2U`Gqog(qV#d$DH7UMM^yv$^OfZC89Y#Ow}JDL5Pqx!U`%5`XO z-hWn;%z+mgRcRNX*t@~#py&@Iv*YQ*+Ln8-$W6JKzr@yoi9(6a=nOQVw7L8ETEd&> zE+is<%Dq!z#6*+dWOo4)T`;DWP`dCGzxz(&e2G+6E}x9Q?Pp=}Hu{de8^K!n8x81J zB?Y&CR_Y><9oIUh8CVqnQ9ARP*i(m$gaDe2)<@%PmJaV0;KhiIIMhJ@uA_Wy2a0Gi z^5m}8AXsFUU3!f287m*1DcjyA`i0M;Wbz@03V1(Q98fNn+pDK2$e3n)x0o8tZ}Tokm!w++=V? tH9fPO=KtwY)(%ih0Rle*KL7#%4gdvd$5d^8zGp&{qXk(8kOcq$000>=B%A;M diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.6-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.6-compact.zip index 6fd91e0e7fd494f1f97ef51881c70b1cbfc6a740..b157c944e557e14e734161c55bebe7c7c6d9c96e 100644 GIT binary patch delta 604 zcmV-i0;Bze41o+2P)h>@KL7#%4ggwQJ5^pcY1Tin6JG;=rtT^x0?DkqR~tl|tHm1t zS}jH?!T}ElL-k1d{}l{MwP>Vi7vK{~`F_CLo~ zgA1o=dzh3K7BbP_zNSQVsto3{tk7Lk2tB>ExFp{>GPiIhU=5|t%Gto%f1_jVwjRIP zdBmsS&*#~H1uTmUow)VkM9Riu#I`YAauIy+$Ipd3Ulf z$LQj^@stH+wbk!+9Fp+&uU;>~6odhoAXj>ad46{C(y@U*M@Y(Kun`-vHL#!r&5V4= zhxUYjl>;a=F;Xp;VAq#n0WO|r>|)hNy^fgqYsnvK(SPh&2j~jaDXl?^D)j@4BR>~@Z>klY6jOa2P;=F9+0m^L q$KU^}a3+{gO928u13v%)01g0JTsu`>H)+;Clcfb&28{&(0001du^0;g delta 607 zcmV-l0-*hY41^35P)h>@KL7#%4gdye$5e3=wQxeQ6JG;=q&?m#aI?ndd!HK-M#5Li zJWg!?HJ)rF!&IWp5W=KguEAJ56X*M}>(QC@ZX@J_Uu|~O=%5qDZtpAsb6FYgtda*D+tdsM3*eX=3BcCNseGcSOOB za%brzohx&H{1f0?VJlr3>`592o=#_FYsHi4-9)jK)n5G$?d$^Fg|x0)nI^OfM-IKB+$=NVwcu1+%vJCyRT_i>FI}Emb|mcpu^y)9+k{WZ8>0wTMPUa==6igaor!3`FLR;gD7)rd%{UY;>Zl~k89kV zF#_J^Qhov*qW+!%oS&nxDTChb=I0sD2lm|M%#TwK@;u=}obimE=u`WRqSwqNA|FjO zvXD)Gy9-^HVe`C$PvAP>&?ap6Uc$fimnA(k@1NFqil{SK(QhaD=ybv>CKf;bjitXW z$Md3F$dXt3fskly6Xn2&;RuUNtRGc0Rle*KL7#%4gdye$5e3=wQxd{q6Jw7kOcq$0061@AhG}e diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip index 041c5ea9eae38b1ceca80bbaf2342fa0adb0a084..a5d2432e063f66f8a9d57d5ad4c2647785f0fceb 100644 GIT binary patch delta 618 zcmV-w0+s!S41)|CP)h>@KL7#%4ggwQJ5{XMxqCqc005X6001zPy#+I|P9y_=Z=7%9 z+hy17ov9I-dO(u+ZVLUhnctAH2|!-~ry+mYg9h9Eax+DC6-Du%O@tAxON{(FtJbee zwX93KH2{WyJQ+BIWUKZO>P304dPl!{iUI*5mc&fH>+Rj8mlB~igoTw&QEM_)z!5sH z?u3U{iuVJWM+~M6L4fcb5S5{Ss`k%&R+M~DIyYst!YAFJj!HSo8Rdok^qk{AjIQQD zyf339r65QfI`C9a@t^NYBK~Qk#64i3`1|b(n8Jy?e@}W8DTOH`U{P!dG7*=A>#h)C zr7ELFr)TS;?D@T^Ho>hXQX~ay#16?uBo9Z1>iqW)|8sBrEaVXUH3Nfx@M193j=SQ- zuWR0`<1ikb`a5qm0w+#*$R?s=q_%Igg?qd)Fs@z{@UObD@5eX8ccN!~VT??M_@KL7#%4gd#f$5ba_Ia@@r6JG;=ZC$Z>sp`bT%IShFagQ_c zcc#gQZ24gh2Mx!3g8r8Xq;0Vr3IMdwV;?Rd$>P}e5suVts@1s7D@ewnzYKd6S7*-9i*hnVUc@~rL2OVb*BsInR6_+bdp|;SiF0Z)E zO_-eCB-z5cB~qI((w<)4(}Afy{1hEuwfN!|{ynm}*dplYLDWI*mPA!v4y?FfnXHnx zG{9n-CVoC8FZbOHB=s?#kaef@#1z%FVo~r%$ZVp_I1mpwXWdr}h!B;(1B0A7@LZolB~8Mb!BdWPfBe^32bx-Hy|ss6 v%C%`A`NJ*$9DJexP)h*@KL7#%4ggwQJ5_twZ;Lvy6JrB^_{OZ}yS?^{7B^vi&r)TmJ7yom|I`9yLyy z!K}4!^dgl+kwv=Swkgmo9StF%ZC`NY(?B!fJn>o(krz@-%4Yy$$ExTBJd z*lK4`Lw`_uVt!|9h||g29L>xV@55ygMpS61OY3MB4wSt$m{SI<<*CrqFTm7qmGewI z&55v`GT|I#*Onl9p_^RqXT}TEUw9m&7YWg@e_d{WE$K=Hd~x0>e5b$^TAD`eYz?{| zMZ)=vsen$d_kG9J4yZkdesZz}B?P8NPQnwnK!|s59|P4Dj>+%p?`NGsC%7e9x+a8i zfS=0Na4Mai_c@WLbTk6_bvjziBZQa}I(d14>Hg3g+ zG`|Oa!s1u${m`&v7pyX#yzkI8=7IIe5@)prYF`j)pB%hHe^`RJ>&#vFAOCM`B##i1 zqn{gi2>!2?(?!oW0HGiCp4ClCl=VGdSyXH*v$H6Ku?BZ$vF1RpB_TP&22cL0scKM5 h0Rle*KL7#%4ggwQJ5_twZ;LvUo&{M3hy?%u007KE7+3%R delta 596 zcmV-a0;~P}3;hcdP)h>@KL7#%4gd&g$5d)2;~hJ(6JrB^E8goK6nH{V&t+H*8B>+| zs;wJXwaY$T&$n{U(P{RgM;tOOmecPeu;UWHkX|1=C__i3$>orQAtM^(@OV#em69B(qT_)+IafwPk_1i{A zjDC2JfDh)4gC^7gquJ=9t{8={5H@&T;KxpctUmgGQofZBtmG1V^4O^zJYJ$KcZ%+` zIl_F8Kt#lQ=UHWC8*Q?I>Z|Z6V3>p3xG^Vj^%5DFCiq4+wr@pÐJm{^=Bw;Xed~ z@R*WaQDfWfiWA@_I3rwJ2>28x_nbb(g4JQ)2(7Vb$^?_!#BJBTjw{9L#a4>t6$DUj z!c)F~^U@HqT!=Lxy%!rbmthO*B1FU@KL7#%4ggzRJ5|ump1nl{004>?001zPzy&k0PBjC6_pH`U zdoRN@WbBm4Zao4Nq=PMk4CoHO27cPbF&N)mtGom7gft~1cE5B9Xd@HSPuu`4H z>b4FWN=SIi6IH)ow2mBckvg5-+8iRpdR>Q6=*83W3cpVofe|)lyM2gh77&b6n%c9T znPs16-q{KVr;%JH!$xqb8}&m);*RWM0BlKTtS10?tCl3bQ=MlSW|u*KxLL}w+l|^ph z6TMU&mpVv%<7Lyo?VWFbr4<^q-31eFanf(ki|j^iBT0UX9fqD=8hQIA!>1S}Kt~K> zcxnc=er!Vj3#~)}8E()0mXQv~c-Z`ySu);Qna7@KL7#%4gd;i$5dP7w3SB%004>?001zPz6CR}PBjC6rNk2o zMyFO1w_j_hx@lT)r1fA7FlD+j)`%je)vnuuek;KzN+GEh<&FbbbmOQ)t2Zc>@1Exvi8{tK?wrwJu(^x$=tNlA9d~UO|7$ z!0>dRu#SWC(3{}9_$D~KHJ2^&iZSAYDj#+Rk$C9gZZbK`K@AtPh7WDP&^X|hB4-iQd-qeks0Y& zhjd@soYfG=s@oB-a7+G&0=dB2+5B7xSD$cn^L%U}7J%y{k4^2zI7;15lS@D%26HAA zQsWZuSyZb8u3;yHJ|h3ZnZf{)A)|GUVshybi|B tV=Ng-9{=XN)R$080Rle*KL7#%4gd;i$5dP7w3SDbs0CRDl?4C*001$P51;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.0-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.0-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.0-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.1-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.2-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.3-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.4-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.5-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-legacy.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-legacy.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.7.6-legacy.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.0-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.0-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.0-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.1-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.1-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.1-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.10-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.10-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.10-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.11-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.11-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.11-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.12-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.12-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.12-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.13-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.14-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.15-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.2-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.2-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.2-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.3-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.3-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.3-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.4-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.4-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.4-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.5-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.5-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.5-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.6-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.6-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.6-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.7-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.7-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.7-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.8-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.8-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.8-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.9-compact.json b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.9-compact.json new file mode 100644 index 000000000..eaca6e24a --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.7.0.sol-0.8.9-compact.json @@ -0,0 +1,12 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n}\n" + }, + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/modifier-0.7.0.sol b/tests/ast-parsing/modifier-0.7.0.sol new file mode 100644 index 000000000..24240ad5e --- /dev/null +++ b/tests/ast-parsing/modifier-0.7.0.sol @@ -0,0 +1,27 @@ +abstract contract A{ + modifier m() virtual; + + function f() public m(){ + + } +} + +contract C { + modifier onePlaceholder() { + _; + } + + modifier multiplePlaceholders() { + _; + _; + _; + } + + modifier acceptsVar(uint a) { + _; + } + + modifier noParams { + _; + } +} diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index 506ee3d6b..0e7ae2152 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -12,13 +12,13 @@ from solc_select.solc_select import installed_versions as get_installed_solc_ver from crytic_compile import CryticCompile, save_to_zip from crytic_compile.utils.zip import load_from_zip - from slither import Slither from slither.printers.guidance.echidna import Echidna SLITHER_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) TEST_ROOT = os.path.join(SLITHER_ROOT, "tests", "ast-parsing") + # pylint: disable=too-few-public-methods class Test: def __init__(self, test_file: str, solc_versions: List[str], disable_legacy: bool = False): @@ -282,7 +282,11 @@ ALL_TESTS = [ ), Test( "modifier-all.sol", - ALL_VERSIONS, + VERSIONS_04 + VERSIONS_05 + VERSIONS_06, + ), + Test( + "modifier-0.7.0.sol", + VERSIONS_07 + VERSIONS_08, ), Test("library_implicit_conversion-0.4.0.sol", VERSIONS_04), Test( @@ -466,15 +470,15 @@ def test_parsing(test_item: Test): path_list = re.findall(r"\['(.*?)'\]", change.path()) path = "_".join(path_list) with open( - f"test_artifacts/{test_item.test_file}_{path}_expected.dot", - "w", - encoding="utf8", + f"test_artifacts/{test_item.test_file}_{path}_expected.dot", + "w", + encoding="utf8", ) as f: f.write(change.t1) with open( - f"test_artifacts/{test_item.test_file}_{version}_{flavor}_{path}_actual.dot", - "w", - encoding="utf8", + f"test_artifacts/{test_item.test_file}_{version}_{flavor}_{path}_actual.dot", + "w", + encoding="utf8", ) as f: f.write(change.t2) From 7951ec1c4e68b09d46c551a0aaeb9b1e163f238b Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 27 Sep 2022 11:56:18 +0200 Subject: [PATCH 199/202] Minor --- tests/test_ast_parsing.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index 0e7ae2152..f94103893 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -470,15 +470,15 @@ def test_parsing(test_item: Test): path_list = re.findall(r"\['(.*?)'\]", change.path()) path = "_".join(path_list) with open( - f"test_artifacts/{test_item.test_file}_{path}_expected.dot", - "w", - encoding="utf8", + f"test_artifacts/{test_item.test_file}_{path}_expected.dot", + "w", + encoding="utf8", ) as f: f.write(change.t1) with open( - f"test_artifacts/{test_item.test_file}_{version}_{flavor}_{path}_actual.dot", - "w", - encoding="utf8", + f"test_artifacts/{test_item.test_file}_{version}_{flavor}_{path}_actual.dot", + "w", + encoding="utf8", ) as f: f.write(change.t2) From fd7edd65456fc8104f731e4c58ca8170008b265c Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 29 Sep 2022 11:19:50 +0200 Subject: [PATCH 200/202] Update solc version recommendations --- slither/detectors/attributes/incorrect_solc.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/slither/detectors/attributes/incorrect_solc.py b/slither/detectors/attributes/incorrect_solc.py index 5292c19e3..c12d7846d 100644 --- a/slither/detectors/attributes/incorrect_solc.py +++ b/slither/detectors/attributes/incorrect_solc.py @@ -43,7 +43,14 @@ Deploy with any of the following Solidity versions: - 0.5.16 - 0.5.17 - 0.6.11 - 0.6.12 - 0.7.5 - 0.7.6 -- 0.8.4 - 0.8.7 +- 0.8.16 + +The recommendations take into account: +- Risks related to recent releases +- Risks of complex code generation changes +- Risks of new language features +- Risks of known bugs + Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.""" # endregion wiki_recommendation @@ -65,10 +72,7 @@ Consider using the latest version of Solidity for testing.""" "0.6.12", "0.7.5", "0.7.6", - "0.8.4", - "0.8.5", - "0.8.6", - "0.8.7", + "0.8.16" ] # Indicates the versions that should not be used. From 104a4790e56f3497b261cdd2bedecb3eac530daf Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 29 Sep 2022 12:23:15 +0200 Subject: [PATCH 201/202] Minor --- slither/tools/upgradeability/__main__.py | 8 ++++---- tests/check-upgradeability/test_10.txt | 2 +- tests/check-upgradeability/test_2.txt | 2 +- tests/check-upgradeability/test_3.txt | 2 +- tests/check-upgradeability/test_4.txt | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/slither/tools/upgradeability/__main__.py b/slither/tools/upgradeability/__main__.py index d772029d0..414a4c175 100644 --- a/slither/tools/upgradeability/__main__.py +++ b/slither/tools/upgradeability/__main__.py @@ -166,7 +166,7 @@ def _checks_on_contract( for d in detectors if (not d.REQUIRE_PROXY and not d.REQUIRE_CONTRACT_V2) ] - return _run_checks(detectors_), len(detectors) + return _run_checks(detectors_), len(detectors_) def _checks_on_contract_update( @@ -175,14 +175,14 @@ def _checks_on_contract_update( detectors_ = [ d(logger, contract_v1, contract_v2=contract_v2) for d in detectors if d.REQUIRE_CONTRACT_V2 ] - return _run_checks(detectors_), len(detectors) + return _run_checks(detectors_), len(detectors_) def _checks_on_contract_and_proxy( detectors: List[Type[AbstractCheck]], contract: Contract, proxy: Contract ) -> Tuple[List[Dict], int]: detectors_ = [d(logger, contract, proxy=proxy) for d in detectors if d.REQUIRE_PROXY] - return _run_checks(detectors_), len(detectors) + return _run_checks(detectors_), len(detectors_) # endregion @@ -279,7 +279,7 @@ def main() -> None: number_detectors_run += number_detectors # If there is a V2, we run the contract-only check on the V2 - detectors_results, _ = _checks_on_contract(detectors, v2_contract) + detectors_results, number_detectors = _checks_on_contract(detectors, v2_contract) json_results["detectors"] += detectors_results number_detectors_run += number_detectors diff --git a/tests/check-upgradeability/test_10.txt b/tests/check-upgradeability/test_10.txt index 1527735c5..3d317aca5 100644 --- a/tests/check-upgradeability/test_10.txt +++ b/tests/check-upgradeability/test_10.txt @@ -10,4 +10,4 @@ Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#missing- INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither:4 findings, 18 detectors run +INFO:Slither:4 findings, 21 detectors run diff --git a/tests/check-upgradeability/test_2.txt b/tests/check-upgradeability/test_2.txt index 7641e8335..dcf910c00 100644 --- a/tests/check-upgradeability/test_2.txt +++ b/tests/check-upgradeability/test_2.txt @@ -4,4 +4,4 @@ Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initiali INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither:2 findings, 22 detectors run +INFO:Slither:2 findings, 25 detectors run diff --git a/tests/check-upgradeability/test_3.txt b/tests/check-upgradeability/test_3.txt index b3c7c0a15..fb694d5fb 100644 --- a/tests/check-upgradeability/test_3.txt +++ b/tests/check-upgradeability/test_3.txt @@ -20,4 +20,4 @@ Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#extra-va INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither:6 findings, 22 detectors run +INFO:Slither:6 findings, 25 detectors run diff --git a/tests/check-upgradeability/test_4.txt b/tests/check-upgradeability/test_4.txt index 4e32dc904..4752eb706 100644 --- a/tests/check-upgradeability/test_4.txt +++ b/tests/check-upgradeability/test_4.txt @@ -17,4 +17,4 @@ Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#extra-va INFO:Slither: Initializable contract not found, the contract does not follow a standard initalization schema. Reference: https://github.com/crytic/slither/wiki/Upgradeability-Checks#initializable-is-missing -INFO:Slither:5 findings, 22 detectors run +INFO:Slither:5 findings, 25 detectors run From d8f0b99a15fb3b1fb5a2d3b65ca00114c177ea0f Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Thu, 29 Sep 2022 14:53:08 +0200 Subject: [PATCH 202/202] black --- slither/detectors/attributes/incorrect_solc.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/slither/detectors/attributes/incorrect_solc.py b/slither/detectors/attributes/incorrect_solc.py index c12d7846d..4f1675b19 100644 --- a/slither/detectors/attributes/incorrect_solc.py +++ b/slither/detectors/attributes/incorrect_solc.py @@ -65,15 +65,7 @@ Consider using the latest version of Solidity for testing.""" ) # Indicates the allowed versions. Must be formatted in increasing order. - ALLOWED_VERSIONS = [ - "0.5.16", - "0.5.17", - "0.6.11", - "0.6.12", - "0.7.5", - "0.7.6", - "0.8.16" - ] + ALLOWED_VERSIONS = ["0.5.16", "0.5.17", "0.6.11", "0.6.12", "0.7.5", "0.7.6", "0.8.16"] # Indicates the versions that should not be used. BUGGY_VERSIONS = [

#$dar6{n**_)XkkbP->$!PPWrRL8=}7LlF5I@GR69WF zk!{r7mj>@-VQ=Xl3PNgsqE18^(ZdxNR`N-AI=u{=JJc@qP)3PSPt)S*DJmz;QrsML zpQTOwhC2LM8O!vA^02=QcKAKS_40Z(HxEDlD!}+)K{8IVe{YH}viK`Z(4Y8+-tfVK Q<^Q~czSREzZA%^78mncUZ6QF4@{vD`PIltQ-5oO6vF zB|jqjITo?xE`H63f4~3p|AYVM^WgpH^Yrt2+rc?FjRAH*0Koe!Bi>gnSA_EbK;;<# zfC2#EAME2B9gYn4^F?}l`$j~lYeIFQTF{7)z+1l2p&{Xsw~*o9Xn%|^^mar@FfZpZ zzyko{0l+XN#ZTuzC+z88A4vM35^AtNgd&rSbC58Sor>rX)0SsOK}257t#4uaOa~WGyGhMHt4W#EUo|i7iRnA6A;aGqgrlWO-946711=n*Mln_2B-{Ia-{ zF`mO$I{`5}SzSXE6?wyOovmiV0A_&F_emlymWM3UpA8~FNT$W3IUDUm@3kZ#RNt*f z(WY6jmxp3GV>L$ECtqY>d9j-J+CwximM7&|AC9cB9G3&GVIs)s=8NiG7N0!(7nEeA*tV%j<>mB^UHpzx&`g z=0)RCGk|uBsFd#0?SGvxrt2Y5x!29Wk%SHFTr30`tNjKcG+)r%HYRb@ z?!)%_u57e9a;?^?kw9vmhD!$un_y(`SWgqHveD8Q5o>uYqTurAW{!vC4D;PTAB6M| zoef`SS=P#nR``rx%bG4@tY$saHajYF^6xDd7MjWtQQsV~V`?voV|&9>lw)7c|0W%O z<6Zc@_l;yP!=YWgFxWPfHsb!w3xcW(KSPan8QFRFch=xi@@`%Mmjx|{U&(Y#?WC)(eXdPhbCs^Z zcK8&HIAOu#pDI3YKMjz=^0U3gjOn+LKxun}hFsTeWZKI|K)CMVNTrpkk5dzn^@-1H ziAQ5l7)$QkhS%|PC|2R3zeMSPLkQO{|n5X--ayx z>@bjzR^W3o6VE7*b-sTint9p2C9}<4a`gj-(^2ZzMHcnR>4lz?nV=_+$$)V2Q z=Jp@C$?9xYQhs;8IvwB}Gn|x&&m4T3`^c?x^L&huFsB+{7X_AhKKs&giQrjc`%~?< zIu^F2sz}}ND#9=J9;tLP-|N6+ez4ErF)P#RYKGIh2SK*i*AD});q)%$o+g+;_w~vM zw>bgZ-AHS4Hf^j@0_!KLf2Y)WxcdoLAFrnPtO*WdTji|MRj#y% zqA3@=lUFRYlVlLEHJxX-9@FSrdJ#1g&9!dG713CJb8d=cZzogGE|921b~FZ~KA*j1 zWu4}b<(jl_Pguw>Pf$83kT5u)kyj*H(@cfqI*cXGv2>BydSsY-I5Ejm&GjYBsLN*4 zPin+MSmB<14>Ei3ZaEJ9X@Ie;lJ_;^nh$5calAj}APh3+Q@!&=Ukj0f$R>1sr(<^X=l}gB{%S~0t zYfPBa%*Plt}3N!MXP;_aT_y-fa z9r;~XVNtSRu%T=)SQvy1~@V31Tuj^n*JK;>!x>~MMg@BzHt}pe{?g$5e zvRuQTk6dXNwx!Q>jHP;f?pa(J%kggvFdcb*p!_i!B4?!M&cdrbiQBdOhPoZ2@$3iwyQbY3(}HZKv_(GmMJec1x06&J)ECAp&)si=XSJLcX| zqNxJ<8#Ac53Z?XV8I2*e$$N%=1KMM2T#Iya2|IcRZ;K#WBU9tVC`yY1x@ge~D E4}>acvj6}9 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/indexrangeaccess-0.6.1.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/indexrangeaccess-0.6.1.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5d81df8d1ff748dadcb741ceae84a32d6e105ce9 GIT binary patch literal 2351 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 A^8f$< literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a32f87daf4b6f2e399b2cd768bf2a878e2fd86c7 GIT binary patch literal 4223 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/library_implicit_conversion-0.5.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..198deded196774f23b188ecf8c2a53cda4d863f8 GIT binary patch literal 4226 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 sWv3fC97aH>K=glWfPW_7e8NC19 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/memberaccess-0.5.3.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/memberaccess-0.5.3.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1849ae73314c38655aed21a68506e3e136810cc8 GIT binary patch literal 2593 zcma*pRa_H_0tWEW0y08M1nJQ+hIGdSM#m92l)&f^rYLZb0glEYt#o*3Ht8XZfrP}6 z7%@_mE)^ss4%c(v@9%fN@8Ns;-v5>`Dr#*2B>)IW^W3n#oggmdPY(e2D*ynJ001Bm z9_S7aedyrJ`DBn@ePB^`XPdY=&5M{&Hw-s0MJZK z^oCqQLP{scTGg2f`h$E$yYHgXta-HfXAxbT3jFWpUkom8MQy_S&I0nHd3xP6Cysl; zL3Axx+s9_v4Y)JUSvGDeUD5IA*oHjZ${x%hKM_;G>Mw+?P;-$TU{t)bVpInWk za)FRo@N{}fo4RLO_j~Ipl&Fr~%c9Bm*^9k(&V;}UEGEM;^&d;H`Zz`@;Zz2e{S2|~ zsff*KS_x_*3(==%O>5IKbzJDf0Ic8NST(fj5X3{;SQ1DlH4EaPav7S$Lnk-)!5yik zVXKSkzIO$EJ3$&mO%kjF>8mXMBy|Eo0~Y%$K3uc+4w7lxKHXzs6I32++?*+(HuF`8 zb2EEb?#L2+NX+L{^D0llWeb3mkt%js`7lv7v+^W zgV}`x?&!EmhzRsj*d@wluQs_uA7gc%{w>eJ~zD~4C6;_`Y@e?Gd% ze8Y@UAR{pYVRCquWe|1xsKE_vW!h=cT~eb#F00L?%r=Z90a0yMOZ+@D`+}cepp+jx zlw7{Dn8`~9RfcpODC~yNqdZ0!2ACPzYZhEK*DVM6$fp2u+gq{8E;8I6m52{9+z|{8K-GzK5!eF7$z(yNfLUlg6W_W&E zA*zfJK&MJcmvYY8!ir3)UUiT(cQnWI8qFw%I`f+E^u6oT$Ap{LIdH-B@Y+M{9_L4b z18=kAbY-fgyKA&*-{Vl$%uDQDl6v0JByNikBI_i!jvl192N|l3YO?ceO?2Fp>rvf1xgCdATdk>Y z%?f2M2T$4VZ(W_)mtGIv>D_q1bs_72d~cMYdxp^Yp^3m293NENfUJiyJCn=tC>d@h zh>DAvT`;LGfnRPZu+nbh@>t zadRhfT+pA>5-hYsi>FJmL(+<;*R$Eo?KFP}^*#FdHrPUdGm!psuWhxP&r!t$=Ie+W z_0yvSBj}9tp9H!=lfa7N)XCt78=MSCaJ)Ec%$l0vP6kt{+@OpOua=0Om=zqWdzb~S zzh!bv4qTxw%W==mqK9#5bH-xj)CsICSZ974r*ls>52I_O<88BR`+s0vUX^vROZPAV zo4)N9QhzSir^TVIq?1WnGgOkP2dn!WbKNo~)}N%taD-6~rf=_qEh3?vQ zQfO475+fn{Q=3C^4I+EqD)9?HQ_`$7@ru|#)TU{zRh%p+%5Yg{B+g*LTVM ztGhmPkn5^{2nU<5`7UV+T>uhf@u#&-YX$*KiN^~@ zAZBNKf#j6EE>Py@^>^bI8H3`5)AMep*&`7z=KR)d^L(N;Y%n1$f4P6NjR8?Zzr>W> zD^Y2xy8j$VZ@A-f9ccsr3nDg^Rol7hAf=^3qXRUI=dv#8!7(|u zfH1z`+^wAyuNVM55@rtbYDq~+sJoz@i-*K?JYAD%se2{S8!V~UuHZ_6DRW1p*XB=g z)Ee&sIUMiq*KkZ5pTLM{^F#lN?4xUhSwiNWRk}InhbeT?PjW)Atv~CqpJ(3%EJFfJ zv&>u@*|Vi6zJ#QJVhgL(eO9R$myy*RDja_Gai9iXTjlZ6&=vAh**wi#CasW{qI4?#8k3=l#kQmU_QP%_AIYy-)FJUt=j8I-^7330!AnQJwMTtHjNx_67^$3DR7giF-25G^|f&hdYt)%=x^51WwF+h=OSDc1Eo)pl*f1 z4$LGeK7E}N%^VC248^ijf>7=v<+IR61QU-qQ#eS(;zpIp+Le7*#Yq}}r>1}y!lNUs zu=CvMF^p2ejAmoD_pY#g)x{4n9*)V^i&DJkqUSUC@i|Bg-o-4|xFk!*Ym}>V0l;0f zeo?_A1aBIQkv~>!2FlB2wk>iF_ViSp!n|Y{iKSv*lGV?qD2{}GPJUoswm_TEE;N<9 z$|n>C=|>ylPt#yGeY+#9bKuz*Y^bTkP1);7X~_V)D@?zFuRIo zV+su`hg~@a!-wd;os_NEmm}F;3HZHw5LJ>Yw5I$N8djQi(BfxiR+ zm6rf3P|3bLEMnB}7CWaU*fF;=?wQ=KzFPpLQR2aruU?56uRH~xZrx@zBtb%!I0X&a z6HBJ_3^RQ*1q~i5{yeSY8-C5(bn lo9cg~?YGuGP5?j@0HA@# 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 AGynhq literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..682a042bfb397bd47f18b94e19b3beb0943b5341 GIT binary patch literal 1611 zcma)-Ydq5n0EYj=Na!M$B~y+jD$J#lOQVv*Orj=Roym-r`z|ikatTqBO0Gp4i6ZyZ zWNkKtIS$LcQcW%qT4Urer_T5D`O-J4eEwCq@!XFOb7Rl@-9iSpbLw0Q;1b zK+6@&2&S;B-d62?ODGY>(MwA6)H$?$fXvpi*j_!H`1;)>ZGzCe6r2;Q!}GQ8S>Tz6 zDm|+@NkL^+u$KG>)Q{L)A_*d_7QUKpK1@ZxGCiv@k0Dg1(*w@YcUjfm4lXgTfGz|T zXT{pSR^8Y*pVDnzd7C!nSL(fhp+5U?<^Bt&b=C=S@ol<9Xh@tI~uLxp_ef6 z!6D@d9d8xy^14v4hJ+i<1TKB!603OdM7~IC@AJs4K3CRT9f$*0H-RE+2O_34}-6xea1%w)dKo+Ki=otd+)PIN>oSQ;^WXpgXF zD2xD?L~EE&a5dAuy7w?bOWb!^{jILzv+0rE-!bWDO1CV}%a-zjI^wRhzsf&IjMBz7 zp4_F1)4C2^Pg&E-1;L^fYq`UOe3CTz_uC0h#sfi*_wbxd00^Z8fgi6X40mn@bom-- zzD-62YO);T%46BZe_~E&=^qgoE>w(KIP2ytnz*b3>y-WQJ@b$W#-uvesBk22EdvG7 zZ7+Mmt2%_O{V{=ZS$qPHq-=P{h_jhuSGB^ZwYv##tkLbteQt$A@xS9$Nl) zoeu0=x$Yq?W`r>aHjHvZV#59MxBofmFF`pmY?Ej+=T!@*+icE;u7u0dea7PFn-Ec)1#QhX z2Oym|!8Wqxxwt(zkYnxhM}{$W`rYYLkPNIl6-kPs#CfaY@^mz7q*YL?FRYN}5aX(um+ zA9vT~Y9&tY*dJTHo?;mKs^K$2gj*{WuKJ`=ONDl3=)g15HTtcNfNM8<{mohiTIx({Ow9J|A8?3aSFSDSd3t|P=#LFts_NSCL4ZC(M zXGvP-z(wh{cn$N*_~cX!vlFRsLk*nQZ8GMiQhk(o&+TAVMoI)`n;jEkL1NAl}!G9FDE7$7Vmxv*XJgRPSitA3porutEM+R;}n^ zWwOTG%y$Lq{7V{-suVl+0Uj1V#MHyGWYbM?R!V!!>faj&K^mnOzUC%9NNz4`m^H7N z9HUanNz-S(ZxvliOH5Ff-!9iT<_-M;nyV0Je`y=s$##@D8KeKGPU?7>R-&reYttLq z)DOIAy<=V^K)s0lbbbO|ZorRnbS&uM9aWLf98y5Qe{d(eOuy+b%QaWWw7p;JEIgLCdrl1*BkjZRB0Yru zP;u`}3x7y%?PL3tp9c~ohmiko$^Z2Hzlj6=!v9ge2NJCKYYX~W&z~Iqc^Lrk51zgR AIRF3v literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/minmax-0.6.8.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5ef0bb8c448c185f7881cf1853441251b5fd4448 GIT binary patch literal 1612 zcma)-YdF&j0LK3dBlm=g(a1G5NkpDCr9v9BV#0>ZFvcjivRNV`B!*^k%cbNJQDiQo zR> zIHYi}x4}Y&`7+2~yH!0t1+8*?@9<@o^5MNtM&mf+^Ax^M=XzjHj0)QmKCsF*3KFlc zxo`zZuWDS!4=Y$5yB69Va%5Ei+i@}sp-o5E(9a;G7Sjk`w{?%yr3aQ7RjI88lw`$Z zeA$$1UPSx?bq%ZkNM$}hEnyZrQFV6tT~-6{XP1g63EF(*y4p3@>w%=l zv0Y=}Om;6)yD2ug(>t%&>e%oz8I|32zP6;M@e`p(Ybr=1TVncRa(?1~B_c0|B9 z*}{b?NbSid6OPV;O_$0VD%fLC)k7c;iQF`J#%Wx$aYeT-$zYmht}P`cjJMAO?xx>z zoU_Eohm;zLM)DcY33unMoIOPTm@-`09=scLg%;ht7NaP(x~8$$L1CnZXH!4&(2s41b5d!S=FlueXN zE42}>$be>)E`8u8slo-U+Tndye+LwPQ^h2h7 z@gd6TFWvlaB_bk6wGW0vK`vK=P|G?|5iSncozv%}VUv}L=3tVvLXlrdYR%QUf_{5T zxHW^@5f+tDxc)S6WOEyl@Mc4kyfTtH-kCKEh;OjYsZto=Lj4Ky#2f$46Gn1EG9?v9 zH)!*q$Z(u0mwuKTGB)-c$*C1@Sc_EF(pc``CC!s8xXhjEqNmz>;xfT<)YlJqmhKZ5d zWspnV&KjfArrcL!wN8A*DlSWZm&(;^K;P5x8^eV#ECw$k^c9j`JSgG`|*UbSOjk2!tu=8f5TDG8pTa{}aI@axa{IX-F!vKY1se0|tl zz**Z#?`p94tXQN+*p~HY{M0z3$~p1J!1vx<)AFjx7putr@V<}=`CeKl?Zj?KRCxW} z{aP)e9WuotTvsLM8K3^Lq?8FPv`MX3ncjZv(v;JbCr24-3)uAC9~&6WJ)D38S@Y=7 zLc&IXdu?l1vQw7DjlNWS+qogrv|O$_zs&Kro0*rL=lR=37RHgKjxWhuy@UQ@Py-{B z%NCIUr8vEyZlp%7v=hK46vt;4`L{ix zf!`hX7^{a=@}8q&Hx=>gHM{XbWMhKL)R)UHOdaO4I%R1mj5mKe?tTP!T)hS%1#XYXAAmW^l#4m{tN*42R;4slK=n! literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7845c49f6cbe7a36b1ed17e8cd88b0ba4404107f GIT binary patch literal 1350 zcma*nc{tMz00;1&VUBV%IWjrkWh}=W5o+6$<9*d^G(;OYW^$}e)=Ta^avynWTH{$> z3q|B8sjW~sh7L!h!xb61mb`BA>iz$Hp7;Cxd8&?t&&7=uoeladB}0e}er zsEmyBmRpt=d3|pijwx{4XrcPe+Nrq&O|;G+qfyO5r|wgVaA-PViqg79;Z6;*zX`a=Y`Jzt(SA<8^;-d&npI0e zmd$R8R1+aN4O?D#FRm4hSM@|`CB$FH%W&km688SF_b7IhB1f)=zV`YrxY%{^`(-D2kh2Han(*k;$K z$*@ms){|H>3vuoRt91%$N;;Qr3i*CftE`h*%Nz-I?WD9^LHW2ZxalF>-PyUJ>H0g6 zX32uPOGh&}Dmy4y11vGx7LO{vV8Dh~e7PC_=E^#cKT1XjMF$6NEu! zFjv36II{YQSDE?240fW>ZdNv)coI&Mj9oPet0iepB5bW+wpXMeRH7!WY;Di@4~4Yp!{IKKh~h-42PL2!>Z2eUev&5 zd`8($4X`?V zza25X*#yYYeI|aOoW=gDB70Qo(RMjZJf|FSB&kTy!_EBwH>liE7-V_t=q1}f6n#y} z(}%Dc^Zx8`N<4grkhS$BIJtH*kMYg(&flkFA;fA}$C8!+{}|D+K^cBp z-~$|_bo#bM%InoNP8!}f968jw+KF$Phk00k`D`IZ^^c-l+i_cj5VYsU0A;v}m2}vl zdbzOj@G}!_0(SCsZxUBI+Bu|L-_+Ek>!`iB>wyD~QB0q5gmKQfMk%Z7*C z9JL)~!}KfmJ%%64-KwlX(B_0{#WJw0vUIjnx|+``>c({(k2{%UnA2fJ=3Dp;vJh2T z!8Ily@^|j>`!dYr)dnMb96OC;_g*acY~YIkb$)c9?P>IVKRvjnt{EjEv{v{7^!*E- zXzZ&JQ3U4{I}L{~W!hi!oV6_WZa5IgTir&x*0@?W#lcjAm(s^ln~)+K;@MRV&fS?O zoyA7#CRB8J<4=6hf*V!>gpvGj-*$=nH%y6N^MAB+!%BmHeI<5F*xiv`Edk&kYpH8P literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..cdc342f1230e5434b61101d36844d56a5fa5f18d GIT binary patch literal 1350 zcmWIWW@fQxU}E57n4Iz~L|k_b;~W+ShFO9P3@Qu^47vF!nQ57+MY@SOIeNwUIq|6# z1^GoK@rgyr8JT6NdRfK!d7Lb)46zIh4Gavn9UbY$e~b$kUOKnUns?68yiC>oa;?2V zQg-s!i}#8d$#1;Xa{SJV+UKc9e&o!kmpYVSd-3Zb!#wt_8$wEar>@)iBjvhKJ4fo| zKV?uh`bZkx+*PKJyJEm|S zfA{fG<;=JHly9vRQgM70b2LmiCgAMa(=RL6-(zrjd*bA@l?<6C7Q2;BO7?HhXHMQ0 z5xDz8*59fZob6)G>1GRGek*M}b;HZuGPyJR@aGzFm%eKgRxgtCd?;&h>9O5}3CfEiqX~k3aEUdS+=djA2unq5f;8@%Lxv6h~+SEqVM~`(U?h#e_ zbI<$0WO=tV!KR>{tGCN+(wMh>=Z3dumX>VzD0tC5C1lmz8a=U}5&K2CRW`2`Ua;lM zs`fuRe2(QdJM)dMg?!&vEmWu-c3n4x@%a7E&lR4#t^QG-6L#}M$W8&jbCXs)>^dG& z(>1qS$nxu#Dxvr57I#cJIweo}k^H0tv>UEucuX@XS@yAfB z1s|^ln}}~&U8Q>Ws?;N&M+FBKK3|f#XlDr5Y)S;YemXT z%{DP1#;csoe;k>e$0YGHyD6_C*4y=y6Pxp&dmntcEImq}-*m8apYr#3Ov)^WlJ_eQ z6_y`eICJ-m6+NFknzW^hF8_P{A*Za$x$u4YmzK=aC#!R==bTM`JNfOdJ7;*F)JGH> z#)g^v+`pgScBP4sfU0T6l|%D87TE5z3)E2I_xriR;d`x$nx=fu6q)INx+lFjD|l+h zX2!4X#oOZ|Ut8(+YE@ULA8C_S7EesANwF==eP|ojW~Y67k$&8+EizTLzN+DiWozf% z2+vDDRc`%%$36YdH?tXSKYv>BsNs!-r+2;!zo$3HHcoA~kSl!KCd+k;d(GUtTY9&* zS;_XsfVtJtAIhd$dKl?6*B%wg3%$+D4J9Zu?*`=pQ9U7G8gd*d$WyqB??URoX5 zxSOHRAXfgOY}SO=Z>*R83YFS-q-v|orIiNKUz;5zWk1Ynw3j;N_WSmk5Z9O9Eax-k z#Qyu%a;~*WY>ks~Ra>Tpz?IkYQ`fa9hn!K{B6r_M+Ax4UzAHZT`pPectJVm&&0TO) z^VEJHL&kn7*Mb$7eZ$vpT^*+XaLLpa)rTzJY?%Ki^X8L9Yh(fWMBXQXT4_c literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier-all.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/modifier-all.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d4d53a419e0abbee46099180e35742bfc3f6ad82 GIT binary patch literal 1349 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..bb0b279b795c7258fab4810b4e05c9f9cc02a841 GIT binary patch literal 1816 zcmb7__dnYS1IND+V(a8kS84^RSfy6P$#Gg+)mB1m5<=|~#HQCfjjGmas8M^wZZ(L# zB1TX;6jjt}ji)%z{r>#$d_F(CU!TuE@HRIBvmyZ&fDb6ZEL+{T_)_8m0RZ`50RRR7 z0M}a}SPJWiP6u@eD2vw45_{)YAFQ}{ANXa*2vc1UlY{+@`* zQ@$y|Exp*xQ2{yN3~pP0fwo*!*CDV4Vk^-qI$cAb>$EgyN^*a|u)_szYLav-kSO<6 z9b@svq>I^~-4A|7j1r_Dm3QU6&U$Y4Y4 zE?NukKKpJ+h|kPh={+pt(w-2cRWLj94w)Hv=8FtV1P#Dv?gQDMd z`epY$v&hYB7on&XxCrrzZx32Dej{1c+X*#6)Ea&Uj`sKka*~#F`5W|#P&^SgFJ&1RFU+f8IDZ*El zJ4w(;FEkfEf_xrRqYHwL>S!$SLax>%{-)jXTtQH3=O?Y}_Rmyk&SDtp-&3;5$9V$* zT)#mRHCws&W)LO~gQ8*TtoWfVqwRYC)q-u)HhNl-*&AbjaX)GoHLcU8P_n%N*shtku=>Ijas$!H_N$xrRMt`4+I8!P-(sJ7*Jx!^p*JK9+=)!q4SybHvhfd z#5rfWj3ow|riHgNF6m3^_)Xb(UWzdy&C=E$?^*w8V?5upoun%*j4Mh}W>im#FQF87 zYIjj~)ui+5Y9xD+XvpbZ(xTB(i8G&E%C!6l!l1VRf`l5zi!N42)IL6W>-1H{f3JvH zk{Z3=s2&gv(@05fRa*OS|HchNwFI(sZ(+0Q!p#i^zQ8e4+ghQM3HB{}FUS&;JsmZ{ z?5XHBK+=7-WnmrN?;IR{y!U$KE9eD=h(~P-qYi23>M)>C75`m!(|z*!(^VW8dHarD zHnz%hjaV1bQhU$Wvtf5?+%1bWaw`*F2YcK9B*m7;HOdR^Vi1lf(Y?=HEB;74o$2ul z4~&zJ_%^6#pTDya)p6VmF4b>g=9b#L&YhRkSrS4oNb+*=i#M|g4MkdrAKi;%Il_|b zC18iw!jMy%&J@-^!$JvNAID;hpJZnt`M+l{?W#J8JlZ&q%3H^_0({cT=l-L>>;;-a zVJNhQnweL=sjlG!w*?=Sg|5i3npvt4^H9PyA;a=mos*YChW=>dp6#~ncF2Sv1Gb@o z`%05t>d&(e@AubmmU6;~<`aT=gH}+zpT;#xJl)lVwF%XRlD#!t{X`)emUEh$92K=Y4TO$eknIc<#g7|ILOCzR=TolM4zzwWiqm$ zb%4@Bi^-gu2ee=E#6iqt8b-@&BNYIvP%#?^teo~ug%YdRrz`|RpL+j+jzh)1LxQ}B zc1o@zSCuj1jc@B;U1^E>n{N%$cwjDWGG z5)Gw~6Bwn6W{&E_45!Xp%}B3Op7!5?XJ6ys@lJN(JkfX8rk)#pq&C zm6{1O9&xC>vpS&~GQ%S4{j_Xk_=#e!{@9BZo++ z{U%4q7vdE&scNZ$H({8fG~f0SKg_403rnh%*y=-m- kVnKrcx2n!;^=}BE|Kk4;m$?z!nehMsbXL1Fmi@c_0Y%Yaf&c&j literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/newexpression-0.5.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..96749d0f2658cc2e4ee69dbbff8a320eda6d91d0 GIT binary patch literal 1817 zcmb7_=|9^E0>*!0qV8(hNE1p2Q6*tQ>u5+RMbW_~L|gY!G^7%xZbclUSZ8${b(Ff# z$heO%bgM|+G>$q-)mdUf9c$f zk^rCx0D!lvzw5InWLFBsgXE1=L0w0wpeQ7w{n<$(``SB_o!veBTv47Bk~iN^V89jt z!T~@#HujO~k*ZJr@F4xBQ1+kR9&#O*sR@=a9jOUQ8w4#?I~~=>S`Aro?coqJ!(a>t z?T>86FW%=GYH+@0=~Yb}mkEe@LCjpIY!*x!O8bjJBxSQ~KT4mLv}?wjy}L%5xOWiP>imK?Mu{~qq? zqAqpeqiww)B(jx2Z$w3}7io5c_l-<)L7h!fqiu?-5gRR#770^oO_0VM(fq@eiAJSBs{T zv~7_l)}w(bH?gM3$N$cR%f&3$g4@@u>-&vJdxt=P$|+$Rux?-z`4k*TY*# z9W_`pvjnW{;_LIBw~_=}nu(Tzo8l|5oeWTo<*Lb!&MIL`4tXk9yTh<)fUC+v8VrV8 zQ@j+L-zB{TlY;7W&fDwBDp_%C3LboU)@9oR{n`jUR_ebttRjpu+xXPA<^^48952XA zIjsptPU%X+iK$ETk&R<@AeBNxk*?*{EnjZZ(C2Pxih8~r9j1AJlW4B%yp(>mHp)Mr zOn_o0H_By9#CxaSwD*BeZ!*6WLb0;!cvhzq2`8Snh6js!YeYq2il` zQsXSu!LMO4t08!g7Lq@b)M$(y%BbMLIc;j&di^S|KKFCpwBit6abI63q04@jBbZiT z^Q5Hlot3p>`yW&x&BJ%4rEE}jMYi%C$Gk?DdNrK*1hhRS(8Q4)1ZALJcsZ>{3;CB{ zL|U1U;dbwzC0tZL`DQ0Un1aA93=_7UZxjllFF5s70=dd%nj@1pM2EV$il-5ab+W$) z9>UX-3#XWcp1xtfO2E6CPZdpy9b3d9lw0KMtoW16h}2U-UIBd^J!&+`u*!k)h*#m( zp!L%lcZsmu%4j=GhHmR&aZF(1w$HSxZ@1%kR5Sa(2&5W+<CStkI5Tz3lGYz*P_QD0``n( z=Lv&Pm#gcedgnFP`bWN%@n4qP-EQy_^Kj5{%m3Yrbi5p)147p+k2`eSrLv~es z?`xp%H)Ta4N;6HRRW6LmbV=TWTfH;Nn<{KwU(H+g|2dU7Pu;XS%)wG=ucv?T6d1JB z|LRB-r?LD;gHRZhuUy7MYpngg=fvVVcG~snUW5oT8_Dgi!CBm;w&e)?Skfoy^IGS& z^3{M10ZgG@znXhxAecvjMa|E*g)6{7eCM*WD>4fq3EAI91A*)u#ZP0`cSiG68axlh zj#G?zf~`P*G50ghpZ5~B$i0y+HFM9I-zZg|UD0Z7yOs=T8Dlo7riJDq+28Ha+q>gs zx3%(Q4rca(ccL^Ep42AG;$#d`AtWE|pi%RDhdJ8fKfzGZa<7tMyx;@Tfe&C<)Htg{ zA#1GqPW3^uRk!eOPsOY*lNm~jAt~{~uV;MJa)IvegG-#Y>RaH!mky}3IbX&^qWQ@~ zg<@A74;5#{_~5ZlVdjHo)wgbq30@k8iMA4t-PCxpJ8_Oi*(b3Ym+krsVzaJc5yzOo zu%QcFA|LfMQpqoYvS2|oDsVRq*FtP%1}q}BB1IA`tAT7rTTy_p( z+J<4I*4bKXI7ecS#sVY5wTd171bQ*Yl0PdVY<)n4bbvK@j!&rFHA@c_FCylhc&bgB mn{a`!-2dBEXS(`3;ava4|6wk36Y!bx0D$YPHfJpRd;JF@-&P<1 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..37c80b75b3bd4095b869afd82b8427bd4936f59b GIT binary patch literal 1023 zcmWIWW@fQxU}E57=t_AOGBfz7NGLM{!y!%v1{DSdhJvER^xQ;U13e2p1HIz>ocPp= zg8ZVA_{5^*jLfoBy{zK=JWdu?hFAuM1_lP(j*fKWKgNX%FP+yy zpWN?uHqN~-W;t!I=KEa{MiKTiq|5tRAHELMXN$U@_%<%!x$OHBkzRaO9V*Ffvu|mX z?09)eaDtQL^Mjw#yBXY{NUf6OFEiR3)qK-;dcyW6XU;Nydw1jZ;vActnr6nb&PuIm`i#Q?cP*bW z-{bH;p&+tUggew`?NNW9lNVA~|2)FDLXnfV|E4cIbCgUDeCUFVrmd zrEIXVUO6NG>t1o;g2EHmjpi+T@ZoJ(%8c$KTsL!^q`X#LG}W+kI<5Ya>-CbI4J_aD zFHaFMX0dXYoRnu`)^o+uFs!nF=9QL{@PTBL5ok!UfUNf=2_`dW0 zE^nbS*(GP33Zf)}Zwgz6t(kc3SL^A%gHHe7RtS^@cr!BDGvm&fz`O|t4U8a)m~0y0 U&B_K+%Ls%)Kzcebn=>!~0Kj+4)Bpeg literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/pragma-0.8.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..60fcc04d0d95799c5dc9a53654466c41ad8a575a GIT binary patch literal 1022 zcmWIWW@fQxU}E57=t_AOa@T}=MF=wk!y!%v1{DSdhJvER^xQ;U13e2p1HIz>ocPp= zg8ZVA_{5^*jLfoBy{zK=JWdu?hFAuM1_lP(j*fKWKgNX%FP+5dfZrZa1nbLC7~`Q>-4^^V0J5Aw@>yK8@K5os1Ud!o-Q#jp37CwdxW)o=1ju(2yux9gYAPVo~|DOI?8 za=F9O$ndFGOq=|)x#mQ1F|K@RqWf^|>9kanutI+CFRLEz(8ytWRsTnM{hYZ@^0O}; z;^OQ|>2ADuNHkI9mW4M2YD>8d(Gjlk$iX==m^0{)HD{7@o;^J8S zxV?Oz?Av^+g%|uSdz6+?%@-UpZ|{DN_r7$KY1r!esyD!gb3{EX+@p4j+CM z>9Xf~xyTgtM62(0r&6xZxyf9xDB|mx$wsOSM~_@t@#JOhvT328cOU!fr~a$WG-CU` zcqYz5o862dj%+EDZCNr_m@!4%-E^I6hsw9`Cl6+1eLdMc!LUE;*z;Lmy}z0@*!jfh z_NHHbwJvYo!DC_CHWRXzygcn$yY_{M*U=y447uwx@3{CIhwYj2+)W|Pd)E>7ApaEk z+wVeGN=q1(zT5f4SU3FA(*@lgm5!VRvy9)D`YJ6*Zzx{FIC0IZif1-2>J1-0J{gt4 zyrI_DE8aPZE7onp>80h|-5gc#1KJe-o%y)_-NCt{DWZIzb3bmF<+ocPp= zg8ZVA_{5^*jLfoBy{zK=JWdu?hFAuM1_lP(j*fKWKgNX%FP+^Ydw9gto-hHj*?r} zlVhFVu^tQ0^t>-EZZ#w6taI)s{~LyU;nMd$9|$+tb$43-rPN7|W%;+#jV|@)o~%sy zZ(nHDxT&Rc=_*Ik*0YClzExYr5rP=4aOzV@J2ev(~*m%ZrZa{|d zCHdbk7i2l#{u3g?v;8OQmoq{f>NlS?MZ26aeXYxT{^cUub(c(zRegP{`be@bu$B8{ zz`lyh>1F3^yr(Dkx7`q*mEro7rPZm>&1L2r(}|p#5vF z?nZxupH9hFS9dy8N!Cy5WtCIg^j$K1E8CgV&fczH<)`+UcP3eHt>xbndwuB|)NbWp2?_KEI%+mi~=Q6Yecr!BDGvm&dz?=yN4U8a)m`obr&B_K+ Q%Ls%)Kzb@LlQS>?03hhc>Hq)$ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/push-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/push-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1582a59548ffa3e45377ace039ef2ba431777e37 GIT binary patch literal 1961 zcmajgc|6mN0|)SLu02ab))abB%`wL?J-p_TxmGPlvow;D$6Pb#Sfn{Cw?@Vs>vD|9 zqueDu4fB+nIk()TqQjNjujlvw^Ljp?KR*9_{(s}GMa3|H2p|P8NplY0nG#_j5CC8l z0YC)+fWT0yw~iZyf}{peTs^`91A;?b-Gbe{eP|v?GBv;-EG7H6 z5Ms-$Xjmr=DL4A2O-jY2pu0uFVH?7*?vo>p0D`qMD!0hZuUQ6v)@UlRVN~t=)?OoV zcsg~w!VEg<+AM7xZ`XD6liiX}e_v@xRySd=H2eY`HLttI+|+5-5I?qfyVm5dH}%0e zV`UEWrzT_NEuM4~bz9e)UG3Ex`DksZ3S@$Y4_?pIO4jh?rDC4wbYXD8T(zd(37Zu; z2K*>__SYL*LupgZ!^-M~N%unXN=zm_3$&Op`*R>rnfQ7=k`xQitvl0GirY?*!Lt5b zaj|UMi@4HlOjJ7p(iQ7ZCYkxsI^OSQg-6~L5ISSqBedjl1#>yc%YsWi*9ZHuUWTio zdoA=jClpup%=+)n(h9bCUWH#KdX7VKQE;Pmm*B(v{_o$V9+{@GzqVzjn~Q?7wuVtD z!JU5jO3wvzQoGHNxo3@rh&pa5`S?a`0{mozY+@qxJp9#Mf+}>VgApt-_z2?^S-uix zw+pj$ijlE5KK*@N#zC2jqjpLjd?i{nsj%}|Tmf9|Q=YTfwj~0i=p0CNs7yzEuaH>jBB>aFsG609k}LGRE4fTQsLRM zDb&*l26O)pZ7T$6W6ev2mUM%UQ@t##$-I=hlo$pTLq&&joYt?(QXu2_ zl3T_62(Wx%Guw7xni2)AC*OkCikvFUg}eLJ`k} zxVKqxo{FOghghsOUU#Bx=~pupUdk!PHZ>!gU39!jr{LE+>_pQ7hc=<=+_YiRLTyCd z844RE=I9A$6Ti`O*h-cD=K}N>YpZ*ntM#>yp_A%V_wM3szJFEv@PAlMGW*6&^ zwz1^HICQ2fV{#l?D6o+{nr~jr&2d3o_hni=ld=dECusHUp$s?6l@4Z zeK0fH|0*Eb?B>i}BC@-8)Wd!=z-T;|mapqH5MJ_manJYi4S{Xoc%b>q1(ch$IGpEU8Jf+-yp zpL7xs69S*TmSl2F;3iEw{mo!IueK_;`u2nH307D(OE-;jFY$Dj z>d{zJ#cHHBsVY7VIiHNXh7)Bx^y;8(>-+^GM+}=6Gy$G<)WJqZIl7QJCnn20 z)!i)=S*r;mAY$15Peum;F$#*)haKiAJCB9aEH=YSe8-oTFKCrcsvAb0LvuIGp zJ?~=;6I(|5dJAL5D6B}?3}s-JEPu#(XFU!I`6Hbq%!TmUn;MVpxA(%D@&{ZSR2JHL zREGO{A%{vhHy*si6U=7~2r)c7{2R?~%v*&xQdAte%YqN{w*)5V6fGV>CnLO0XPF(l zX#IM)3caL;Y{6mf^}O3LF#ZslE^kDP#AP9~KP}b7Pt!J?vbM?aid`2S@YtZy2lH*R zC~tw09ij09Bc6Asp!kv_O-w5x`N;F9ie(rN0<@h*2#>#d)6a%A!l21NoXI(WVOga& zL~3*lXma})j)yTkJHJX3sTPh&1}MpNn_k}w*a9xHix1~!|He87rB-=Yz6>3TjUw!T z$pk~L^x2ETCH;S*_x&^fg(}`!T;iYKzMr-Gx!9i|1Hk_Pv3I2& literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/push-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/push-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a6c6125c174717471bb46dbe206277ffcb787152 GIT binary patch literal 1963 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/return-all.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/return-all.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..6416b40fcfa9d2eda1ca0697a57a69cbd0514fd1 GIT binary patch literal 3063 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/return-all.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/return-all.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..80f7e0ea8c5fc7321e31177e8747da1aa36125bc GIT binary patch literal 3064 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 H4*>oHURBUV literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/scope-0.5.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/scope-0.5.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c7d44dedc5bc204ec5aa41ccb3cae45e4a9b8fa4 GIT binary patch literal 2551 zcma*p`9Bj50|)TAk7|oB=Gb!PnwTL+ZnC9VC^6^A&E_UI`<8RAV&W0v>&#tZt|H1& za^F`ObLR^2?fd-xyk5`e^TX$t&mZtMK{GIF0_Xui02%kg%z;|Ccb5$SFw+14L;wJQ zucNn*lk9ak5`G=->+NCd6y)Pg@UyiiIJ&q7IKka~y}j5NnE+S-AQAx3c=F^C;uL{@ zIW*9ycIiczm#bKtP+SrQauYh{OW{#~)=b8JoTi4YIDI(s$clh;+G%{<@09mqX{a{y zGtR7PI>L>~7-|xRMF|>^R_ivo&FLt4N?}g#Bx*?g-gSMzJQ@8~lkg!s>Ff zvaL`a1=x-)x8bSoEO;hS*o+vaA=QR&+|)j`?>JE4P++gsr8>&f@Y=(y0vb2uC1YhR z9FCTG`*9UEtHPOz73>zg))QORiN%$*@753di!BYrXDvs~@hl#Q0*U8*$W{c1?5({H zl8@J^4hYK+d_DPNgczD8!+*bgCi}rCWcMdDL!Nrfm+z~*blWUJu`t2*&?ETep#4b2*}T%zKHh8-P##nL|?IJiLgp^;z;$0CXEO01c)50pxHwCq;OSh!o z%&?QmVWRFg(ty<$e~xJs4b)ON38lSvP6V6N16DkYMAw)zG)sB=e4{3o1KMu5e*)EQ z&g`WjLHUR2R>oq5xGkZ#~kA`Ugw9Y zC_{T%T)yxgUwb+~T~lLJ!sA9nwB6CJ(fIXpjt>$m?;-oG$*LPMRr;UjLGXLQ%2GSi z(&@!{i6eImMvhaD-f?Z>Sm2sg!6k;?=;ES7%Ok3d(2uNv*{G);=zSj0VoKpPEJUh{ z6Y8HGYf7JfDv!e<;L_ij5?JM4!J+4F*}8V-I{@1UlW|_LZyIFU;~M9=khe&`*)L zIEpeha57e!bU)$k;%+j*zBL~w^E+&rNqDDLq)c+5%?uW5KH2~Wy>X*B(*blHkY$oO4dW#x~$EcmxQBgTpp=!HPOn$7)Fm*tT}6M-A1pS@GIzlJNbeG zVW_M=!yn&Idt)BRwg;~PyzhHzf)p}K|3V@>q+J-nB&07wl%-V%(kmPF6o`* zA{(84Ey%zbuf{5bV3tB~0bpw`QN798k>nzej%z)oS!%&^O-q;CX|O(<(R}rGGr^`r z2md-$wFdYZW;C~D2q@6^QAe`tgG?^BitFB)tm-_=069S)Aj#2!g*P)#Dz{GCC2KE9&mq_9!s?q@^pXiyFM{i>^*ieg-Mc4PaLJ3- zzdcmt&#-&Ao!b)am05~?rNFgRwfWM1RD5FT=ci%mHFha95zDsLdb~C64d>(nVfB)oxLJH zE9sLLcGe`KYbnybd5W808#wM1ujENJeK#!gd5`q!6Q6DHETpnOzG<^=Pf>g7shdam;7^ z!1)WaM_TlgDqwsY$j{74Qsr1#_=F~zI|$794<+1l@jybtaX$M|`6jOCp)sk}CVpix zD15=pFq<5z=rwl4LO}cRky3xjlWA)`)<1@M3Fd<@N3k#x#K#25b^4Q<~(PCpuxqaYo63O5XAp~;K9!{YPTFX$*Pg?ydRJzf zxOBt~_Hn&?WP-#-b6d<8%#~lrDiAovL-`y}IXCJagYIYPlL{Y1u;%Laeo-#+g@}Z8 z+UObUE=tkQyg8TSMG+e|_>swS%2rcngyU6mcMn?-of@lQmM`XAd2saG?>uI|IfZ{e zplU6NgSn!rNZnl2&^w+xMpaNg0Wpb1UMJwk9Nuc*reHq*9{&QJQoV$ff!>igO8#rH zxG2PZj8o&PJMpi0)ZAp6Z6&Ov~5N+DqX{>e{BJ_nmXz027;$W~x zcv37X|7*F(dGrr@fC-w8UX$T}i|h}|{+md;f9L=3nF*SS`QIzupPK$z(jVRd0RI39 C@W)^P literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/scope-0.5.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/scope-0.5.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..949a82255a8e58c039682d4201ad4afdcf27c1c1 GIT binary patch literal 2555 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 Ii3b4x0V9*swEzGB literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/struct-0.6.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/struct-0.6.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..cf71c5cec22c1fc60e449f2d67afd112589b972c GIT binary patch literal 1425 zcma)+c{tMz0LOo{X+0syu^giuMcM179OWuAB4!CCjNDtUB+N0&5ppZXln7(x8fH!I zcZl)kXwG7Wyya-h)m!iX@AJIh?;oG%`#j&jKQ_n%pbG#mAP6L5*r*3vY{Vi6063xm zAP)dQP;g*~d$5WsTpO+m55oGnc!c4wfx#}Wf$m=3p&oFbAZ)-P5E!@t0MP(o@bKYn zja`j9CByF;^#lsK0=yOIu=q!|5{5EkK{PRSnb#i(J(HZsMUT$!etCF__FD$bZ|!OU z2OD0Yf~~S^n!jTva4EfISD49RMi%*9#J)l%x3t28n$KIsh1_N6V98Nm?XE9{=h2qC zXRHl4zE;PltM*%@wT4i6UUqfMEA)kIV7+!!ZkZYy=_g{&7}%2XltItzjomx(cqx+X zb0Hd6pXArd`#O^ZIykdC=pa*izU3lLoc6p@Edw4E9HA_FrJ&ec+dnNR1gP8e5b~6F zKdc<8eyDhz!*RLbG}2W=a5ifcA+)Isz2omWn_NH3J+k8w)UMSuo3eIRdhy^- zU9X1K>7ngxo$xNmFd7vKAY?>L>iFau(k-V8mx}wQh&R)WQBpOv31N8OrV0O}m{Wy! zkkz%qo3{^Rb*o7Z>cr-PObEht3R}BGCF_oygWvi~?ISo4Y}T(LL2&Vx%lNyANDDVw zc3ZNh<`b|ZFli!2-BNNPQHp{LixlKPe`xK8HJy~Je~IsniNds|O@B(U@G9YQ+j=t_ zbmIA_*_5WObkbBUmE9YV)4674dYGH<%g}kYK^pJVP`VtmB072}o%9nr7s9es-#^RR z;SejSn92Q7pTyS%hqZ_Jq0I_giHK=xtR8nA)EMP|_0) zy*@$;E@FSB!9j^u<7#zt3-cJ!oqX@OL~Nd4Lsp_(p~8nx6XALwl-N^9%*QoHQ^)S| zv0P;p9$oFLi3d)my)7@{8cjs^7qRLKY~~m%oh>t)%fkKuZ70M(+lZZl zHtIRvI3~x(K9fmg`Ps*rrmENvjiJ*adS_=;6+f;jo1Y%IRHh>#q?X}B1(x2Em;CD! zIcO0u*k>=viQys^&}%aPq`rbXD_=pUj1cS4?hu?H0>6n9@P?xLYAl3SIXUJ$X#OJ? z!LBj=9W##{qtVQ{%Tbj#B9z1;KewjN;%D!^NtM+o%oCyT?~^49bp`vC1f0E}>(}R0 zeDU557)t9%E)6QiGQIIhh~g~6x!BZW-K6uh-gAsEf}L~WC591=XeewxAzW&2MH9*Q zqChbv)ub_;?mYh0P{p0RAbDN5BRHi8`B2dy{$`zPm2*~hOrDFdY^Ti+RzBkKsqvK} z_i5Bcg`Lf}(|KErr}Iem-c{M%{hBfw0Z(ZSOS8#mY#}5ink~>LK+Uw?VvgW0RJ&u; zZqd*f-u(x;=lWuRV2j@UjnO)zV+FgzZb!sxdP*+gQ-X@j<^~`5zsx1i5A&1T_y;WC zGp5A_Cj6j~h0`Ul(s&Zj=hYAwy$|HU?Q)7yRq6)IIc@-QQZ-`IBO2n;FgxUL)vlm| z(Ir(6dL3=4m+v7!AvmW~c;ip<$TPbylNKzjw|=q*U%+gTJiHeU{I@E9+4A2+^ZdsD V5vL6j%=i1t^Q*SMs09AK{sF>)sSE%B literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/struct-0.6.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/struct-0.6.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..55eda1a92e2fc64dce389de1e73aa3ee4e380180 GIT binary patch literal 1419 zcma)+X*kpg0LK60YK;4;HRQ^K%4CQkGnI)=&WQ<=`!;08F(x^N?B*E8H56(?BUe@u zNkgo&a)m(#D@2TT+|lOP+VA^3`@SE3&-*;@=O5ORU*J5z2Z#fyJ`1>@;pMm)0RUK( z0|0dZ0K&;(5#D5N9k>Bp2Odtk?(Q2ILJA|hdxm)j5GcOzz;F^#SU?bP1%P+}Kqn{r z>+R}=77z75Hx|3!NhH8ply1}Qpy!mw!kZ84DnI4?+C8}#`^mRs=Xzcow9NxOxYdRr z9;&awk*#y98+UxhL(*QC+6<;fnpos_7WMo#_@$)6mzB@=_zU>PTO{cTb=4lf6qVP^ z?V5J1hxBeH%6Tf(lD+m+OZHr{mqgk-WXX0b%+>cDUG_$-cYGGN0Ws*!*Dma2%UtwE~FQHLfB4-%F>EoYG!T%`yHb85`WcA-hPXWSTl z`7V6xoWdaTKs`{mX+GK)o^PRg{mAb$6fC6FhHXr?tGS zgsN<{Q{d}8$FvOL4_+I{ zdk2}-d(e&7?JrY5UzVo5x%3q3W6z4vr$g9&NE!w*B4Qlv9p7tM2UyKi6U??rSD=X% z(%j`WuwSZHfQJ|*O?-#KO;7CC@A5_|Ve6x1$4HlE?-`Fcp5wjHmz}TZnp8L3KhU#& zXUuCBe5cEOw&zvn&U)Cv5`Ymy6=w^j(yPIWqz%=C4`x)-Wjs>@vKt=2KGP>MnCxkW%V8YCIDX z0A})ceQ`c3Jx2A~lbowY-Rg&`9_H~fneRIsN1U&^9LfuFEf^9D{(GqKGWmI%_`3pX z595flOx%7}56Ke9jg_7*ezjS@D>G_NSy|V^6t*AQ!;4m$*yp3nbAl+dy2r|GS~NJd z47I?diwJc4H;k(dWr-W0*Fk~FC7hU0xksS31a2#onKe@k1BD&cYnRX&4RulLTz}E4CIK5lt$!_8&vh@4j!nri zk1BP*5g>7zxw);9#dKJwjuBm{X`Ayf%msmosT~=HBb@e5C1`qVT$rrKDL84EKhp9S zw>QLtIH!#U)@oqKkc;uKth%h-aT1UdrYFz6I<(&CT!eAy>t}PVC5j8n8MT8MH zM{=B2BI(VQatd^X&V6_&x9Qyq|wgSU!GpfEN%0GV$}S7rx18&hP`k zA{+oz0RSM9BCp^`I=Uz{N*6^Wg!qCn;e<$%uYV*i=u#Aj3MLZ5g!mzVHvl99fZ5HP z7Y)7}MBE>F-C`nI(jRt7ts9Y=!zc49r4vh5(FhBuiC)<>ZN0sTW$c<|@y3BK;^^NJYm@qjec?H! zgqBgrhpQRCK=Hw|-Dk3m%EPbd3?e-pD@C(S`b>05@$$>v^P%A3{nexi8v5Wks#E&m zNqo#04VvS+?nBL}Z&zFl(o}|F9MPFditZhjtHP1l9QfI^P?`ctaH7Gw>bu;H)M=mm zSB2Bh-13bg;28<;MB%SH_>~*TbLrC6jQ6I%zWw!k@qlXEjjlL6)PCTVM7`(ghrHVFB;-Pvzq0HBS(D^zrntG#e7T}ZfCJ`=;PB{?}7>31uq!LP1K?&jzfGO z)cVMd#wD^9=Qk1*(5O`N#QDnhxA!Ug8G%Bo(FXNpl5=@?hbZSQ)yYk}Vk`;K>bad{ z^Gf7Q29;>KW;R|lkiQ)2E-4eH-DSs`K25qQ z;nb$PAU{8xoM2P1eMDsKkWC%N>9WcOJBs}!GDlUX5$l^$o1kJV#}r3v%fJioRp7;Z z*VnFNW6Aovu5aI8Udhu~*voAsA@@}M4%Uy0M`g z*^MzuT{PSF1kbV2+XphxVzNVH4H%zS2)R|Nz>B@sa_tdUi>`ALH0sx#@aAG2c5=Pl z!8-I^T&wY9NwBzpG1wPYlOMssncg`y%N3~}C^0q5@&@^5&kGoaAcnPhV-nzJkh2PF z%xG}hY0)-OLri07(cxt2lnAyT+%7e<6?7A-3^JTrW?*np;;|7Foh8F^DNk~5i|RQ| zE+y>nUIKv_Agtq-M1ZL0R1i{x++g$j<@(5iAdaSX>Pu;6N0H=c{BvQKy{%7WnJ%Q* zvE3f^K0(td^v>z?y@Ej?XBR2{0oNl*F6z`pZyM063#`57pR!wpnM9wICYzY1SwrRt zg{_f5^8)GO2(I2im23K+u9B3rODM4SA!`0>9&Cn4mM|z-{ zgpRv$dIm*W{*q#BKzcpwD{Bhv$lxTXDtdGnt_+ypZ+3L#2DOY6~Ft_~;N4?m%U8_Kz z4sO({l(+UN41&alx_lg1vBt!WEHq2u$!RY@2fn!=YxUCW`J9KaNwok5Op8PjUbKH| zO;M?3MR*K?=jud=DVTA`b4uQ2+n{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/throw-0.5.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/throw-0.5.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..782b152faa1334bf7d5e45fa7814f2a37f93e736 GIT binary patch literal 888 zcmWIWW@fQxU}E57=uLSRB5;;Z`vMaKgCGY3gE9jHLrF$aez~rJo~fRJUU7a-d}>8O zeo;w$Vo`ENW?8CUR&jnFCkrb>ECWLW1A}cxN4oJJvsM~xmoz--c_3! zvmcr*o)q-u0f$!GUYS^)=`&?N#Y|OInd$j7wNg9h>V?o-9c$o`{{ca{u9{mOP;k_rE=MU^~+lyMk5=9nnqczot8j25#W- z>z~}sb+=ELg+n%9um9|4*Q@$7LwsIDai9JeE6ud}W261l>x`)veKG`&H5p#$5y+c! zCOBfjw#j9lu_u~VtV%14bn~cl%h{xJes}+|xupjK{-kcS-S%;l!S7|QftQv~2)dK^ zd2zwYr$6#%J-U5*%TeFc_Ey&>{kV56ZH~K-U)7ApSDrWD`UzahS@~sU?#IG&+s=D_ zx6$YM`R~S_f1i&iPk0lwh5M3}dEu6f3-{wQM1!7}_}@(l|EjZfWtR?zGTV;@d1s3( z1qI5DW?FrJ{61~PS^?z`mEvmO)Pg$~{4u^ZYp=FI&-2NZD+215PBAF@UEk(-cYA@} zn~U6!>~F32ekkyyL^3VkY_s_OfE7P){t#Gu?!?54jA2y`9T|1Me`Y$#MV?`uxTks3 z!Fei6J_*kIJK5tVze(s_hpky%{%6r|^uF&Gy+dTs@EOJos#R z?4wSmlwgNjk5%{G^AlX6Zp5|VLtXnmt~)Y@jekVCrl_P=nMp2^TNV(spyAA%EoO~7 z1V8)iX46eJu{NzLZ91J8J;j?fBKvOA?hT)#W^Y?s&~xk73iA_B?lKB`|NLAL6X4Cr jWY3H{O8|2P7&I_~C?YaQfHx}}NGT%_1_Eh8W)KemLdcV} literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/throw-0.5.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/throw-0.5.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..69ebe019b51db5cc28268093c1dfda2e075e20f8 GIT binary patch literal 888 zcmWIWW@fQxU}E57=uLSRvL^Cr%LOI|20;!624w~YhLVh;{Bm6bJySgcz2f|w_|%Gm z{GyWh#G>Sk%(7Iytm6DUP8L>%SO$g$1_s-Xj&$Qc#)S(no!e&3JLhO#rs{sV*4`i~ zJNfIyd&P|8H{NPFe&ue5^GHBe*0QI^?Vr^)UjW)MdNCRtf*w_FG)|4>fg`R z9{zg5d)hbcZ-ejgV=Zf@9=(Ab@Q-2mV9Zpklrfc`=|PD zImN05Zu!3VPs*d8Q7iHo-Y^J9wJ|nWcypY4|7YL5zX$ma1#bw64mrxUH*DcH_g9C- z7&72b-T|P50aG^EgJ_rZq5Rn(3xbg%0`m|AJ)T&nW?5WnGugWoed<<2yCCh~kROkwu)7&K!LyIxU{xFZ_K$m zL+dT4W@jE_+womi((dKF67RM}J3gg;Sn5gV0FSYLCi%nCx4`2KLb-_{T0B=Sn iduH5O0+=hnpn(xY5s^Uxyjj^mN*RGL5J(F$gLnWON{(#+ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/throw-0.5.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/throw-0.5.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..19b0b183a5763777a628d302c2a9cd458ac1fac3 GIT binary patch literal 890 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 F{0YF8>m>jH literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7900e8f7cd1bd0d41b89427d42d4002bce480af1 GIT binary patch literal 1617 zcma)-Z9LP90>}R|GeV9$(I(Qcmw3im0wq$V^!yN7$a8K53GAf`P3@qhDKb zo8H~(mw{{fjd2k;QQwq@LDtaeos$J;DOOjKyjJ%yOq!JOrZZC%7j?yErbp@s9ikUi&H{SD%oX?JVd3rS2t*#L2fT3oqfxO} z8|jssZ1y1v^j`cXXDekaJE>#6@H?KhHDRB)C0}0OYO$&2+d7bY$&kvV1%As8G$6~{ z=dGBI<&BThJ8#;lhOlg4vA1JPhmR4)Ewz97=jb0WEcEHqK>=J(3&r`(t?H_r%Vn#L zoi71}=#Ng|y>%tf+Bi3zrO4*7`T^)&{Sl$jXVW4bmIix${dINXPB^3hkOygUYMP%0 z&#fX7UiN8fH?CL`NRo7Icz*HxNF(yJHGiCGUqLJ9^&ToK+@lc7Ggx6|Fzlu#p9@v& z`l{48N-OL=tG~prEQJM~CZ%wms|ru%!enp$A{$j>j&zj|i?KS5aL-+h3@2V;gR+E@ zCC%{V#dm<5$ou^Djb-PEHj)FdQMu_kSbh^8Ny5ImV9!hUu6RkM?h`*RxKp2XGmrg{ z+){?j^m|Zch)}V*uKaH1z;vWt_TX`YcWhv&<8t?rOQWp~^lzewkC180qrIRmY)PGD z?`-Hj^esb1@~JucCzPC-`L93b(;f@tkUHl{zgZS z=@4(Ue5&CJu|B(Tr+Pwr5fPtv}JqLYl&{xiV IJq`f)57E5*od5s; literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/top-level-0.7.4.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..417dd85a6ee5bb9315c871a8270273851461d961 GIT binary patch literal 1617 zcma)-Ydq5n1IPa}llquA?qal#`?C?nDUoZj&~nM;kTBUYTcd|qt+_^xoiiM=xfEHh zNs7p&#(7`OqPUm_5d_K?b_u~8J_xk%op8zW#1(X1Fpd2F#eyT6T z-GTrB#s~l`006j1ynw*Rr^e$Ec1S1W0b~jhA02<`0x|hwbWCy_7MB{2JfA`&>{NyT zQ2;;%0GIsy1c$EUQf z!u1nP4jdePnUFlcc^u=U??*>Tk41;A2}&~7<*1X<4EOm=Lb=jsnH|xVgic%a#{H{$ zoiRG!oJJ8hDkXZgIo+XqbZo1$r-qr!=$UU_)hboEP=z6>JtWbV9CBtLX7C*&a<;X# zS1`lt>ri&B%yd7Ob4c?qslD2E-on)|Haqut;nHi6Lo=1h#cts2t=1u#m~L-&G2K-K=4Wqm69XjoUky|+*$MzHl4e2rl-4w6y}BH?<3Kzp zipmoRqBS4;-!;*Sn}wKK2*>N2K)bQE(~O`61Dm1RuZp-e9oFUi>py?`0DC}6jx~hI z(3+Pr->wB&(vzQRtvGqZHb5mP+2?ePQ(R*)kCec#YB>BZd265rRMrdjlX zl2&Ix5JuwSEknnHG)}h*Bh1eeie7T!tkN{0#l44Se}m^vkX!!n%7C~{h$&Z|=Xj1# zkD45^esMl@iAHM^IKe$$sXdx$>@m@wTwX@rQ5OH|GG;wzrfl0+#=UOJ2=~FoE~m%c z>(af{2c2oYo51h(34YbOp|)orK}B*0=A9Fr>7R9 zJD>9%U_%3`yBl>Zj+Kfsn%kRy$U4}Y_N(nLuG{;%x~YK?o;Ey2R=rY`EmCK&Z$7ZV zJ-)k^t<&Rp+vf<*+js{~+p@n?#83`9)cPd8 zw~d*Zu4@_vnau@Sb>YI9yyr~FY3ZNNuFTkAw}tL_U1-l+heY#(` zr)x&I6_b=3h+o!2(kTilCMo@QR(;H-+hEwlcMyJnTPQ-Jc=73hCySh0FJ_oCP6s zhFajd4~rZ+T3U{^q!u8(4R;zCFM3+MsdO*X!#^*I_~yWOK1crI>&eppSjwDt$Trna zs=4NG-R=qdBjI)B$b%+4S1dMBiB;G^P=2sMY{jFH_nd)x1Er3tJE?x~`x%%H-Og~y z0q`5}ZgNDZ-a4yZqlc~uacj!q5k+gJH7Z8vWs8rMiOAw6V6!B%!BJS8f(kh_4M zi~3U9c0PrTh;eD(QSn%~rD~P2vM{OMG&$>9?ijXqa5HG>*^jzq0NV$a`%q!U`AqG> z&Al&m!Wmi1uXmYCcQLM!;YFClI4E6wvdF?UTM*Gn5s!|SB+ez}@)74=(A`k*v zxmmZWdp~ij%O3Yvf5b@KBu^c#pCDUNXshU~ENBUXdx6CkCd;Q#IU@2dZAsGxuFe_9`X0;2NI9Q3^*-zoZj H902e)jw%D| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e8e2147cd7b8ba4c1aec12d71c686e22db7268aa GIT binary patch literal 2839 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 QMfa<2zgYE4e*u9102b;-2mk;8 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/top-level-import-0.7.1.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..73779b9a07dedc438ff3d1be9722d144bc95d18e GIT binary patch literal 2837 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 CxrLSh literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..8d24a1e6658b7ee3664e00abe2f74f90e321fc8a GIT binary patch literal 2407 zcmb7`X*kr20>=OLIL1;TW0|st!5Cpo$exldrV_@!@1$fejs0Xf#wf)gE>5-~#>h6r zL}aNU`_dqcEn;k^bHCpY_kBP7p67j@_xsQCCJU=BzzpyJ7&n^DMH$Q%{tN(!Tm}GD z006=QgP?xy;qHD=Z~vgckT9r=cPLavNka*y6dLG1l04x@@L>G#z&j);zdOKNx=s99x;0n_LJfT{s0yk5me4b~9KGb;weN?E z1$R1W5AAls0yr9KY{G8kR1x>xTC&*({CBu|-SptF4W1`Spbt1oLZ#F(Z8jo(#x1ot zv%PPxJ1`4^%4`@-&eSj>{E!+~MFpb{hc=gGVtR2%v#lpO1l=JXyEP@pN%~O}XC`Lj zu)5gfrXcE+t?b-i5INtTiEaVQd2Yi9xydWo>DfPveLbRMndZ%-yE~~Y%g1jLOyZtW zMQejOQOGr&*qQP1O7RSr9CC~2g4CBUT(QH3jblRRyStP6oBXf+u!%Hhz8V@3D)UZ( z$%lUi+4wC~K$L8)rI|}Lf<2qI8lO=6u!*CQPOhgi^a#5&uy{Wsut2OAT6x6#kPCi{{&XWJ|VnSvWRhKX)F+ zpS^Vm!2jblfvbtZx-NeAR$!6Hi1c|F9m{AcJ%XxoqjA#(YoHm;<>cMBf^ih>26uZoG1q{gUQCr0vrHfSysT%x(lo*o|pX z$(kFEg;JgU-M7~5(*dwVSp-)ik=$jBk~CgYHpjZFMF-~bsVnZbWv-1}zpJ-3z)E?w zAGa9o%0wbLhY(j?to^plZaBeXc$B|?Ht5HjLXowtN4x&>eA1EX&tI_K(xJ zE+SD)16wD>?PtC2JXDJ^c)9UC+udq{AI@<(Ah}2f^aZk*G5z{Bdz$3ysQMvNnPg+? zhXzh2Mz?fvQNv%DaEb&mCjL zd`HH$Q(Z=TehB7iO}?+nrQ~Suin8Xs^s|Xo>^0-cvh-L={px1JuTg`iy+%9uL~nhS zJ!s@Qd0&%v;Xy7`T3$^x&p~EbS@D$KH-kRtvK~fyl81z8ial1}AJAE5tM0%=BL$ZG zS>Gcfw5=p?gQ4Lhrq~8H1+orrh7o(VEq-0%xn89s*lIXPP_OoE9Z`F5<*GZ#) zx%vX6KPSF;8+LuqLU&O3v44k_3mtXIb`>O?!(Cs(B3sja`=L{c@E=nRg}Vr~R5^KR zaS4i#nc$7*=hr!A7z~WP3Zz8GG+s#(8KzIZUUtU9!_B^n`_HF~I9BtPVRNsPHHdrG zBOVf5$-0qNp|DOe*Rm@FUaE(xzD}rWs^Rsz|D5I6RAgqo#jdnd{i-u;a4t_W&J{^lGiUj_j)u-QO@_$m2_8Q1 zEf~F_ajG-H3!RqQKU01alb|U#v(?B$TqJtPf<*fexnj5%Umr3fllrO~QwVt0Z~0d> zRI}5%dpo!Si~`d2v*s3oL&`O zWAIIFXsf(#o*YXfbaXf47Z|`;ca@D7hqf=YF|;U}mzm zojzd?TdZJ&e09*tb_e~nE6~}#^#SB@*I=W(4M7Z6k!{s_G^4AWm+_T=fcRc3#WBPC z+23d>Dq!>D*Xb6t(!3Yd)n`28#Pn0=n@zf#S={^X1S>Hy3G@IEbY~V7+gr`n--()ERp9;?!N~!3|Wl?WKFSXh6#|=-%1*H^FHHB{Kv=)%E|E>qI z*(|Gsmk5OV6&%>!+O~6NuospfyJl#ZCwxI<(o%dVb8@9HLKsP3VvpWhCT z_X1z3odl)SAV&a0gn+nFbGQ>r=Q#|Mvs;f;su;w0_A;E=f90x3hr&z z#uQtG*PT4+Mx!H^q$}snB32%`Eq%9RrH-K$dH1!vgnp?2BVoNj{&IV`1b`sv;OIqT zV%wmy!?4!1LD(oa`Pt9*`d?P`y{}Z|A1iDixf|M= z^raNc=pXJ7Sy zQk(kp8hLWaUuA81lZjcE<$o*BZ|nJQ;+X!$|1Ut6H`&<#eKP&7({FD5)+qq^2mIED A9{>OV literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/top-level-import-bis-0.7.1.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..48a253f3d491155370efbc1a5e804ed1944024ca GIT binary patch literal 2410 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 G0RI78_<@fA literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..0070f96c4b17a768a3f5f2b69276ca20314bbc42 GIT binary patch literal 2277 zcmbW3c{me{1IIVS+))xnhDK^b&eWXawO4X1$<>5mXj|?%B1v<+t~nBtmE0lZK61?U zQf|sEN6eAiT)+DL|NH0n{r>TJp6~N~|Nod6GP7s`m;gKgvg5*Cw`X&qLLdNud>H^x z1^@tF1R~5G>w|TN;jx}xSVtJ{5s~2G1(S!X!WH121a}P9@6UjF=;7dk^TEPhJqdVr zmNNib03ZYaK#z7Kug|&|_1ubG* z_uXFx3pd*#`gWQX@N5+&cfE{~K2+~J)=^k{A8m1TIBFLPM6D-#Ht}tZ-FoCJXvDe^ zWF?z3$X{n|iyEg?s`s~{lfv%Aj?VU~CYO8E6g738$8S3{Qyd==!X zr>xSm;DvE}14znmIjLit+Eo?|-GSrm*opfsMp zJgT4!zL4t3o^z3IZ~oL@^v=z4t8G0`WkJq4yT-qU;a#gH-~@f3uV!~p_YNUUll>3{j@id0;W?} z(4w~|D`i$+bGHA`@SXE;PZrvb)|S~DRl8b;&~vsd2=rIf;2@Wq9wk%`&nf_47*^jA zGEP8Ct*J^kcgZDrj9xai30*4&<3H=n5PBMg6MycxKyy%}QglS5T@glRKia}9zLGK+ z@j8h5ZbzjKvCvLA-$I8E(>;2cBYLJ@Hbsf;Z8%K51(pYlJrleRbZS(wt_)Ki8 zm63@wO%}~9=c-6_R85k#J6pUy&>Siv>&No_F4?vB7}DAg-TmZ{5LtFcE4pGtUYEsq z#u>X>9s@^|W*vJJF{UwbH6SOWJBiMuBOE(O^3RiPp zDPGQE@b#*=&$H$0>LZfx1;Y%8)1iHR8y>w7I8LM9~sl`+$*;$<{V&K|_)#W`Web%*M zDb*IEWIeQabX4%YjN|?g0o5@vbOd)XYB(cmfF=4|;QcE;`lMBD#+p|RzhpL={bwY$ z)xtU!<9f|DzeeP2hw8%^10;w}qiUaHPUD21wzp)~B&HPl6ddk0{QP_|P~RKZIKOeL zWH#TYWd3pehu8`yD#W&&`%r&CWq@QFamb7QmPV)*gif9ShgY7O^cx);o>)>GGo}!c zVPqCghNYCjy;lwDG@sKf`MnJPAXKBM=mEOSAu@O9D%%ujdwvj#x7_t1TfsQ8LS(|y z1UN(*YoL42%;cT~1PZ%KH2KsQumCRbiB%w>y8~`s?C2-tFj+)vK=(BEz@DR94Dr1W@{t3m%01j7(EZj z8_(`C4<(O9lt}oVOn=-Fc)>f=s*yY6?bgq(C5xL+0(xel7qa&j3yI?swDV#2tDrFt z8a?V6a+2?D61InCsX( zIh+0thFj6x;-E{rAsfh3Vz1dcrF)J0UEBk`@v+O{lXkCaX33JSTKf&^ zt;UC+(Wg^K3O%%{U5eVOdqIULkK&knwpNaqQ((0HHxmZKp^W5;8=fN1UlM6H#SB;F zc}#oHCMS)V?pIp-wcyv0nR)mN#-mVm9+B8KUFDCtMApNyF`cB^>KUcn&W|@_Dp6}+ zFW)Pe6d4(iOdDAId+x7auVU4H=xeqpKTbWAOP#o0fs$UhEqg|f!{Iz3MtsOp)=PXj z4sy1#&x(U4K3q|>shGouP`Qdr3k&SyEIÉilZ4x@$h!!|SbUBsAJx#m`qGgr<`?xRtX zBUf^hWUlby%ZPbakV>`rQ80zu|1Tj6%# z;!$3zJn5>(0)kTo~dxb@+$G`_TmcE|cA@Rf5RELv0k zN&P1Zc<{tEan3b`m`b5kA5Nh8VZZ&@<90*!K8MKhUt`$UIO5pa9S`9adz;ULmW#+m27tH&7%?z|uJllcUdLfdz_<8%rFD10$guK|J@BNfH+3^lZ9L z8qPN&i8br05bjPGX;!aVNc89|PsoN%AhTKDi+@q-M@~2OpF)daW9r=>mJii$M@Rb5 z%LjIkH4%g3QC-tVD@K9Hf3Iu{;>%-2S!y7|_Ib_~@!F6=e1S(ZgD!qx2Zv=LyMY@9 zJb2h&dX6w&p;6)5x5HiX>z~Ipx%qw16FOG#)MXdPa$%y=n>_eNwM$&1Z(-k$)5O zh`eR%BJy`{Y@knPfwoz20!<##Xzck)7k`tT)j^Xi!yPf2af>Mm&L=1H7U-U&n|geT z^{55{2^y&fiGK4#6&{ga8xz-MgLih0v<(>M`|Vi?;SoQ2*`muMPa1$WyB*g0@TM|>h14UrH%X+3&s zCs*xGQ{LDu0dnyyAHzmSCySYO=XrjL$eso+-D74?meKc&k!-XcjfHJBq8NLaXSj|_ zRa!?ao)ap%mcU!XV?knB-?)n=^Od^?C^chEhmn0cExHDH^Y3kgZLJEDvRx61r0>{g}kCQCn1paLb( zCHSVR4`SLm+y`$LR+Dx1c=avy(wMQrf$eOIDdUNJ>b;6{dr>5_9?Cf}U5gDt8|jn| zvx}Gz>eIt@z2hg)wuhb^HUjH#hqMf1AK_@ADtzc{IB#*|Aj+WynKz<`)Qka<79iJy zrswI-DrFYpO3uV_r`YA5$n#fFSPt``+7$6U;~)+ok>5)xfTbjqsKzLL?dhK$Od0SmUV@2!nWO1XF-GZ(Xb}YX(r;TFswhGlsCitt&B-nkV6*< z(lT6z_m7o$IiXE9PSzixY}dmPQf=(^bD-MTz$-ZYBA^^j2c18VFxYaT;azg2V$?fc zCh3tLp}p3ri&(Zmz~;SQ)@$!}gDK#S{ljI~-p)EQ{PT|TB?cAIqOm58iJG-D`OWf9 zha)Q(8J2(EaFEI+eGyW(_5fEW6x#AQVDS2Zd-I9Ty%%3iNwiD(!=O>Y_pGz-_*@jcV z+c{>cs_F3ZAWF9P<#})T>}b`)!R3xJ#4KN%m=s>>T3NZBD?+cz^h@I8)O?;eUBsdT zF4zxadwm2g9*EYAQOxBYnO|?1?2G&4-(51TQd%sZE~h5;SeVK_cZZR$XEbp6y4+J| zhl@h0-(IOKjMUY$gB@%5u*JUETkH?>l)%n|X#Db`&jWrB%aD%(ZHEvdk0NvQrZ^vCCt6>I161&|5?=Ph-&rTNocSiHn<5kUuvH4=O&M6k!v?+ zw{u6*MZq>oHFvwuRT?v29^W6&xl@`YtH9l;5~^`FBO`MIVa5Q|Vf^2^@!L55n<$1q Y_`l=>VaCkz=gjcCsNcl=wiy86KR9wduK)l5 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/top-level-nested-import-0.7.1.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..26353193d30f0189112bc7ed2ad9293663908a3f GIT binary patch literal 2276 zcmbW3c{me{1IM?yc~#1l`*@Y3t&xP8t5J@*62gR;9Ah@3Xp9o27;@!E;nnL_SZ;-x zT#Ysh(HO1dh(cNX>i7TepWpZU$LD#z&-4BN<7CIjZw3GX4gl^1EV+)0V=ZKb0f1Bu z0N^wL0EogxfU%fp3>F-YiHyPofP=##aD*r@6mkZl3yH*GFJrF#87}(~&_Th`7)VGY zE?k6P0DuAjNB{slHTB9V-YNX!@zEBTcu{|Nutv91@_iRMQ{~CXPH8>m#;IEaGhE_F zOy3SRKSA!5FP#4Um2S9DbAxLXGN-O}C!ix+a5QXFlonu7BbBz68`&eV`OYLPMg}Rk zPW05Se0#XV3uQBtO)(ztcfQP8?XfW^_^k4(PNoK_Y)2ZStdAVbIg%6KH9mwsL|lI(fPoAoVkEaRCGr@ zjC9#M5HxWoR;!hu_N}0C!!gAjCdypQtuJ;7$jsTOb)U+B-l*1*dXh0J6m5{{R3{1F z6_=00vSK6$PxL>T$qG$ki;OYGLK zWvNdQ452vu8~ZP$jgW@C^p+WPRHB-}JFK>#Nu#7_&crHIY$>tS7+R1?4&w`bhD_{p zJP*=vWt6`98sNzO;AZ7>cZ$m>1!Eocgn3lS!AC~S+B0Q4^wNAI)5U{VyYR*=m@j0A zAsaIt(rm79+_4(&3V#sn*w9Jg53LNrMRY%ZStVM&^fz7B;#>925zlE(Zj@mk2o96E#cdPL5s=MbOdwH9lp zM259gvZ8T%#JkDibHJ6|Lp$3Gc}s|&G($YmFUk3^_rC|<`;VK;J(+-9PbJ#;Jm`&R zj(tyus=MT;%%*P>>kKV>HM;c1Hhwv%RJHNGEHGR>O#x+DDbNI!bY4NR_av3nB1&p& z&-L>U<_3u-(7p;ta$Zvz_XIV6st^9tpp~ZN1PNBec);- zLdlUo${Uged^SxxGTOAL&|}u?4Hc35meAK+mUeXu?p94r^}*zw#^Q5W@_CE0O{TV6 z-Pv36T6D+G8L;-)s#|a1!_(**_Q;ZK>qosj@QxmQfgrWFNS@TvvNJV1Ta%awZM)fo zczf|={Y@p3iCoQ*FraYK(L3;kh7b7i^-w(=oOQwr=9~ikV3m}od(3j+q(`)`S`0Ck zFcFP3klEf-$Zt{KX<%to%0Y$w#GFYh4<%3e&@4Ry8!cub9OIyMp;ls|A5_( z@<-gBn+UwKk>Y9bw+zpcR&_xk`*Bo-vyOYiI$Q}kU92VDyiIZ~@~|#q%Icc_V(0ao zVJAK1wg;~Foi08d@LJx|)AUU3UrJZ$wfs6Ni0k7fie?C+VA9LGqPAw;0VK~>11^vo z5Z<>7gn2oR@WoDIONNq+yewi@vQ!o~j~iCMx!4uDA}O~1_>(G%CW9K) zh5rSTz?Mg?Yf>BWD#LSkDy4m zk!elC3-@?FR9Q!c9(4%49klJ`nOrI!C#-8f@LgE7Z0@MTR-Q+n6YaIYw{|MZ!6Ues z99X=fHDzNvdzq|%D%yYvDQ*q+W`26rL=zNQTxE|1Ei%SJ;Xyl^3&M9R)}-PYpHn3B z3qM7K-3*l&BPA9}p;SQ|4#OiDd*{O4Y37Rszq!(V{{5 z+%sM!Tm5Mfb4+udYxRC5nA4fmURm*BSP0E+)ag3ddlod())iB`R;Em#as<9(HX2U8 zUfgiuEL$M#>s7XlgeMpVYHv6y?Qu#8)TiarH5h%2O8%Fgq4A+HO{=ojnG=Ojq7C^h zb*^H}?sJCmnK{#`$pTjXdt2|f9?grEHG#6^j=EhyU%h}_3XVMGtkdC-*{-ex-4CI? zGfG7La6asWZuj@JP2Bci?Q=G#1Eu0B)!104rUFGOhrfwYn4EMe7%l(T?)y%SK5f@C zJRz9Orw5k>+sG9|agxYl;(W_V{foO#)Xn9V4=p#^HyoTFT|RIiulVh)IRNpcEz{F2 z=V-1%)JJ&>EfBx7eKRx2*nLhlZ%L;P?%0nofssI~nez7_Q7a`kLfY~@7NOY9PTz|_ zTg!y3&fY_nS1d0)Iy^&g=q@=y02(aO`(+0R97$4nkrZ7vJ;wCi~>9rQ&;`}s1z)D^6c(YE%~dx2EjwNhEER|TD- zniZj+Zg74fy3X|Jjaz<#55)omM1@{UshfDvMHy~oeoo6gQ696V`S=*}QR@KeqWB|p zBl>{P1Rdi7kZ(e~0Lj5sY-8AHvA8VI z9)k*&j@zq!rubZz)q*S}*+qfZ3NNfbO52}3-=8J#6f=SuH)K^$W8nslS;PKTn?7>)r*{N+*q>S$$@IlZy?pi!|Y1t(5Q!&*vm0tF`c0fkT6s z<&Q36@M;g0NA;tsV}?P3=>SM#R3(TFmPF%pF5=h?eS@lg}IeS30}b zExW^vey8AnwALH?>=1Beo*~iPVklL^3_Q6TS706NyIV1$2ahCad@4{(?%Q$BFUMQ2 z1#(vCBb^%xDMQe=>mR1>8-BHt8;lzOO$jXKf?g^Cb7EB>xkU{9(M9>`x)cbkG(+TCLU~tlbKu2XF*0R6XH{oYGwPxdT-ndkR<5>%pz z4bUjzUO-J`jZ0=w74GjKO+#AlQ&9ti7k)tX7wLDASBO}}ptz>7 z-RVBdtJ`{4oIFkIIJMh6?cbV+nwjpsZ%?|sy9cK{7CO$G2`RZ^ESjpNa_N^e$3m8B zyzi_-5?p=D%2PRHKS^x-MVoxNs9HAf8?Y}IY48Q&Pt_0XZ4j1FQ*|?=Yj#_nk_yGB z#e`~C9PD%$HOsd0!e6E&<&Ny08E8~!@6cYg?YUjrs&4g8wgBIIQ1W!)a8;vy>CKaI zYStVyqjzd1JZkjEuuYAk@y3iovx~A8S65U;Bk9lCttXcS-}iSXnirRM+r9Z*5C)45 z-2YMwlR!hT$Z{YEqS@%Q`N{M}9Wlch#Uqkzx3$MDAT$R*nI_SYh zek7S?vd!nNxJ6tp6J0Fy#LgVbiMbS*6ZP&X-g1z_oV3F@G8{$+BI&jej&!5w0Y&l@ z6lXgnHK|~9Lhx$sD;h2G(!;sd_3t!#u0qg)Ma`b|uy}TA_WgQnRmO$8^L?>RW%>E- z9nzmW(i0*oh4E8YUS|#45Zw=VRB5SB_Iw~D|Nr*nkt+Y2P`-ch|60?@{@9Uo0f6tQ Lw~wd_`FH&X*HD}O literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..7048a6264d5c0c5d08281f139f0948caaae8dfd2 GIT binary patch literal 1947 zcmb8w_dnYS0|)T0k@`YKR-O5&kvv1=P!7pEqQni0d7DDDD_^mvy6>jo;d>m z-d6xX9RL7gNT@pjPr?)2NuJ^Uo?ZkzR9#g^Rb4eAgy4>k3JnP-x_gG>{QOCH)qseQ z;Iq6Sz!d=E06;%E*%y8c4=bG*YtlPc&>!qC*CmydZYyCRO^@h+z@+PDe;u6Ph*`(? zaR@oF61^V!HnZj*?b8fJ!P@jO3Ab`8edt^EK?}?mDM!tB6bCqT0ZjJh zykl7-gr8yh=B+!CI^4E&*{71nE`xqdl!R9wXLgIe5IOSI$q+~wH8Q9-m%qy!q_HD< zVoj%%E$D$x%UY!=>rA*78^pic@uf!H5V5!mxI5xt4k-w%orS?!8dCzl}dq5_E+=Ss&s|H7e+=_s2F(ne#9}fKhel&l05nv zvmV>2f*aSbxG?t5{tQf`?vhU`uLmgJrG^3bT<~8TaTTgNC~QP~AhIsQ?K67g#S+^|GpRwmdpLQL`!z4E&IN9KkUCImW3z6V9O~UC zT?OTe75k|NOIDWncsj+9O|73PD7(6meWn&wEy55oOj4L0qou)?j{Gjk2ZFKY@lpe7 z`9Fx7zyE8s3L#vrOIFDJGzor#Y|aZ-a^wbkzFn@$FG$pBzHtG$m4CHQ`O!$bV87a$Vo_ z-+U-N^Xx2Yxhj>axo1+P==<_xLWxR7k(Z!vMEezpfA9w9If<|<;RQ*v2gU0--`ei% zeMB@-A*&`JYmgz$vf>eRqN&5o9!`y$EV^f&7k94x5g8ntOqiy-5(BIA0(m1@71~np z=eL=F78@I4F1ly7X28#ZA?86AfG3D1>MgPszRTp=-T!*{mQ&r-5f#;A#+9_Xo^aL$ z$+q~oRM?tZ-l%Z59valb(0C%3th4$mY}FIdf#x7+sFbf&Uxi%%(ACYFunk|t*#4wt z&?2oS!X&0C<^5Ut80;lwWweOc80dV?;nIWJ|LYKRfk zrIW3rDkXFKL=Pe_R~%-;3u2*zhF!8XNk!2P>fWTFfP<>LSMRj@7ol2UyYHN>>e2=? zMK=4?Lsf`7*BPmUi=ztghh1n=${1$MWCyuy*`ayvqAJBfegf8Hr<_Ni_297P)_-*5 zo?oVelCh-pm|Xk;vy3qi%l9CkAR2HQ&OQ_hdeQ^OCA$ z5wIED0$kVbF0u7+JDTSg9W2IU0BieN;lyoasKyg{q7*aG0- zQJ<-X6|nIs1#w*)ao-p*iYk#1?eHa0$c)M*-h;32@o2Y>+ro^8vwjXYSDhoT=9Tju zIupFG*SCMnAuH~%onR+4d`WIEc`oijb>~dSbvbE<4e(^ z-AEaVx%|ULjaObZ_tGJ-H|aOa=5^l3=C=$Lk2r2hO|ay==klkvhbrL(4bFbEJdMF| zg8n-SJ1XnhwxVvO_DDabnPXEk=NBGrl(sFx;gGtuO?~FX&R|(=iD0cEdZyn7UvXMztbOY+EeH{dHk$B;uZOQMu_U zc)wOCVWR2I!PmZGWAT5w9loe#QoWQiHKu0}D!9nE4z?GSkQIau%V)S#nS|&S5sek5 z3B<-}!&pL|cNsqYD6B N-|O~$75M&r{{bzMqm%#u literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/top_level_variable-0.8.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..81f8f6716b79795a6f9f49123b7a606c60961bde GIT binary patch literal 1949 zcmb8w`9Bkk0|)TAHo{zmIZ~mAuwl!QV~)zbJWWP9qRr9coVC0jbL7Z1*<4Ab2)VCe zEtENO=g#q%np=e|S6O^}zQ2Ee_FR*?6Ol8lyv+bAOL_> z006WB001F4#4`X##07W~z3~2C-T^o*ZKwfM8yXfI;E4+l3C0sVz3{jE{E0Z|?Xch= zA$|dXI{**^0GK2t`NFyI(1OwTO-7jx%#{PNnv!( z+N|q~MrlFz<(>gg!bD&5M|q!eJ}1f~m!Jr*;!@kBDkKhk4Jg8~1G9>;kb77Ntt&xZ zCA4^{@nvRTS>G#_t&!Js0k6m+@>1>Pblanm@K?{B7OKZu`yk~yR;!$SGo08yqr-)KQiW&xAN9aA)aO*xl z)JLc9wq*EqRia;K+fyGd$Yq^uh923gQdY?#eD6%qI&@Mljd<*c*q8csq*~#a*hsrTWQ0EEOD9D0^%U*-+-RM64CU#()VqtiB$m97(b#Qnt%2$mMo1= zRAI93U7aIpHjEiW*Cd8|blCkJLFsT{X{Dkinok_x$6?yj$wv|;f}$6{QXVBv@8n{% z4!kZv5v5uVmsY9$#?}iZI}v6At%)ibJ&$`=Zhrf6-sH!7H)j?HK?YXO%Vw_^hjpy9 zc4I;O2=WSZMqagb!IeShrNf4oQWQuv5a%YaXRLR}Ec;Rz8x4uqgwqID8 zZ=$3dslPPpK?7kG&gn8;mZy)-8FU16zRAi-d|K;z?yhZ>l*LCb&ZR)CD%8WlLKpD`d2}BCQ&1 zhp}V)vITV59}l<1NR-ovz1$0_+2PPQcJ=DIIQy)M+{<0ngt8kKf(Iaz8e81ITm2AC z8#(^nfsV>s6S)f4n;wgvm*D3H3Z_;{*`vR?+-c7&cnM~j?~!L9oKvZ6CP?qDZFHHh zdwJ&ydsLn&Xn#+XecZec1%Dg`!eLBbD>FrT6W0rAEj-mTsbXM_RIVlrR5NF2M45p& zYTJQ!dO8(RK6>VX&SpQqqo*^|^CswyJt>GXHNEdcXg9tA$&|{MEtb{|lDm(sv<6*8 zk|6HWK<(bHC5F{R_@SE)?5T~&Bht7ST{uPGYV&#oeSB`n_V8)l8bCI!SxuYo+nH;u zW;#cRM020%rFQQ=t)_+5|IwURF5)V4)9+y~ID2|nV7TrB#aD||XFbReQ@E5}q)(m; zj=&akcx8}j{S3n_hK7oLLJ#H#+C;mGqwAqYv12V0>VUgaLmyR1K_`VRi!~~z;T?-{ z)G-uIaOdqP%4*Fr+xXMLc}-6(R)^KsLe4Y%jvDucq}{XAquUwMX~X`p@ZJUI%s=Vx zy@!e3*W;^Paa1o8=XxKomn;)XSM0e$JM`^)iy@#W;--xoC#*xRoAB1;j-rxlY(7PA zif8~mK5+7vIrk5dJQevri^j1v!bb#S7x`Liwm8HfC)mAR-ySz91^YI7FD$a@?~#H~xzcubeaDdAD( ze__gg+U}{s9kOE6e}N-D`Xe{gHjzSciuFvEGhwwg#sXH~aO$)e9)Mt-*kh_b`UjCn z^-H@Gdif^9E^koJb6BaQRiZyFe{r!ks?cU#ZXQ%Q4U*fn@Gv8)QgTNBO4K{&;BeS! z5|wzY?Cce%Q{7uk0rL_n8!pm>KH6Ssf9Pn(!;9qm-&FqA^1q4U`FH+bI34W-ezOYz O@cgdF?^Or=`~Cy?=b*a) literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..12d6382aadd896fb6ca23887c17bebbe3dcd2dfb GIT binary patch literal 3374 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/top_level_variable2-0.8.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..40233c756d5ad63489c26ef49bbbb94dcb4fb49b GIT binary patch literal 3372 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d0f3c1b4c3869fe762972a723aec8613e5bc4586 GIT binary patch literal 6479 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 VMI_|^zTy5;t^e%)f6xQ~_#Xw&Zq5Jz literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/trycatch-0.6.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3950995d1ee99c97d0d81b8ba314c3d904a2dd5c GIT binary patch literal 6482 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 RM-D{=078fLI;79{^$%)=E}#Ga literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3de8575060f7b0aec9306c08e4c91e121b9316b1 GIT binary patch literal 1742 zcmb7_={wtr0)>A>i;JmJq0};VL2Mx^cA;*A#=eeNlF<+$Vkw$RN9vkNGc`?8G!Iq# zIv884Mo~gVqtz1K$92>~cV!avPv< z8UQNP0KgOgfYh{P0uFaAIR!^16_lJrz?_^(DXEy~l-R5IbR0CEoJ5qC zI0bwM08{{Q$j^_nI{zAk4&LJ8OyFN80iNT%9QVyh2E9o5@i z;jqrx$4v=H#onIWkY&NQ<+Ek=sZCpmGREe;s^y{8eCRK(KfvP4!?#+t>K6Y@-^{(Y zVsU0uyRzQ&b7q&MqOn2>@Kfcv-78>j>(U^8L=Gza&vLp>&bTcc59j5mUW>ht< z{N@sxeAD}l100ck?Fpa~4Ws{c$shcoXbJK2(JOv|b$jxtn?;=712DEXWSD5TE6<=U z>c=`(V|3uZ91}Fju`|@FOZ`~w;vPXNV-n`Pt_rZb%>IZ?7N;yiZ#~7 z<7{<^-c=^Xevch7Rc&YBdA~t2eL-g{u-*+mdzk01W_-wk&_$>bx6^7Xdt<~Bu#XGqHi|ht-Z`OFJ*?dRa4p+Tq zaZWfZ_97w4dq1+flV8z-$>6BBd};mkNe(35wfiU#6fp18X8HNy!h5PlS>;yDeq}C? z#OjXBf6Fiva~#%(?-{8{87G@jGA>7GM2s!aA0FJ5fz1fzz&BO({Gzq@Uf+Mgh1GJp%oekiND9%EG$qmgTqcF{cw=^od#E#F7jS7>6w6}L+tS0fA@zv++ z;N0^NTFJzZ$xbfT6OHWSED!|jIm9dhgM`TDWm2!SzL-3NU#$^vjZ-|Bdb+|Ev2fl; ze=TmI1!2KNT0CrOO4jc1%fYPs;WjL@qlFhL_j$l5HLoBoRN+a!YN+cxU5%fCxzHYl zZe|_RcVI8^xQz%ETLh0wjL@?vwJz(wWg&nKQpk%odfPuTMt>K3uwmRNKol4muMJB`-atCOPB~pGCSO_7~{K+RMv`1>0r>am7FiiJw`W?kn)b2vKqh!I1N z1Ua@qgjiA$1i73xs!iBvY(Vr-#G)X?2g~Efb=RWW=~)IdvT>Dt9D97{U>e*#Q%I>g zAmSi}O?d#2F zSS|i5s9?X}?GiK}JMyQBG~7bf3%!Xute_)$bB9j^flc|{L5HkcebP@kfzi!dcnM# z#LYG2sqM#Fr6Z*;!BL=YzXl^x@f6kbDKRz2U`PVqVC;Q+osK2x-BGL_OXDqP4IU%= zL~#`)G)VXIDn~aPbz~LVWV#S}P+zcJOEqM9-J7)8a!#rr%G1&EB?y>YtsXn&&z|@hFkUxWloQ9RLKJgDfX2N7AeG2c(e+*;dA@E_|4O@ZC za{`L9t+N5i;Co?~gX~)9dQvezzChi3K-+DPQ%s-)u{TKh2Y|yAvC!PWT Mv6F_M@VkH3-#pMPrvLx| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/tupleexpression-0.5.3.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fb45451072668700c45f471ed3c39468102caaee GIT binary patch literal 1737 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 Yt_J7-d0OCZNIRF3v literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/unaryexpression-0.5.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/unaryexpression-0.5.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e9876b8399ffdfdf9c196ca4461b27693c41e713 GIT binary patch literal 2471 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 Rh4t?d!=JVLLq+z#=|5u%s8av{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..56c527b01ba9b7a9a729056d4344dc4194fce3f0 GIT binary patch literal 2460 zcma);`8yMi1IIVV5KZnYH#r+Z$WV(MHI11wSFQ;&tms4KY7Gq&A<5NTxhIxLVvce| z3c2rV_>v=w`FuX#-@niEeZPNrJ@4mv{{b(=byhYL01E&Nc<}x#dx88yaIf@&uc>TA)1h|;6Qhu2yAdD&fPQA3+;c;2XZGY7{kTJ4sZnkq5%LS z0>MxFNIRrpsK3GR^h+AXU$Ir{G0|4sSb8L^Mfier?a%nGiIoS-J{`XUvmS|m@-Q0Q z`=o{8cw1wKgJ)E|`|UlV3)53BHo5jyGCKz;wJFOpjJjOXArsnHpB^`&>U8ZMSuC6V zWBUHl;b}W0{qt{)_ncqAzjk@=y9?d+aR?dqYj5g1fGvf*4S*iQ7tb7#NWz5eH+)tF zVpp*wVJs)&=5lLIQmNEal8JhYyF1t7v_$kqXh(XO)ItiMV!j!|K789|%t=z)7zbj= z%{IK!0?)=ERwC{Sly=bO#|m{J`n@^I)AT;hWL?LdX4^T5GTskWKYJrAGE2tDllV+wqrpq$%K5jK_;uL@++@tOqMESBSDy*N z3-^?HYq~$ka+9ZC*mV^(8=8=2!P5XsbB5K`DPDy@3wm(6IfaPySg%>caEcZy8-RDH z=M&K~`K;afZn_iKLMf#zWWOf<-e1u6a=tx*o%>BbLIXUq6Jja18Ew>CozrEjmi?jL z>d{mFHSc-s|R>G4to_1w59Sdt!xxS^;p5iU_vo;!|p7F2wq7E=MQ z?o>?cc&$bzIJZp-ubU2FSKUyc{XjWeI;WFtPe$*1(tcLkKzKC|`kg53u)UuHbFkqE zm&T3L`gI+fA_ei2smYKb)Uq#uNO#D+UQhG)c(|fum;1{4%)lU2WcImNs|!mgZ|v z9`6RHvWY)D_q^i(;gRk)2onb*Bb172^I*@9|1yFKIMT&Q+w@*^V?uwM4nEfHE;>{b zr~jQTAaF#{IH>TuYh88plu6>n^1S;J`K3}QzFjvabrx2a>B5ICO1W*Zkq5;YF^@qE z<|a;7QyxmhUfQ9+jTNs{X&WYdH#qQ}lem`{R007By_gL?OXrR;Eoyh21q=msSY1xjaq1s{&(&udDI4?_h5tgo6@} zUHi*E(lwp;A4tLOsrQdZHSIEs5OwmA!e&IbH*d zQn<)N=VFM2UE`NgI@#g7iGG~t68>tYf|a+y>(=jR6Ez%Ut*t1N=mHo-Q2L0NXvd+9 zqkS7{&BQ>pluBL)qg3$^y%uflg4R(yZqHD80U4OU2C=#ev%{xPavo$i26}FB+pMH~LVyeQ$ zSn5F`+dLlUxKCj*h>le3{DBL@N!Z8URK8)pQnmti?0!-V0r^r(X{?uc~FtW-ya8Chk?l`^jl^!pG0VWpM(T+B07&qbNn zaS#zs3pwgK-0WT%D9c?mCD;1+>lCnB*7}u|tn@IjOtCgaFcatUmbQaL3`)skVMmtk zTFIO7MO;UDPI_653Ns(?t2VqMSi_fNlmBW{v7$-q{OISGh~K7cj4PA&Bp1%*g`X~_ z@#1X_Wc-XZFBT=yL*C@uFV4$t@^R;63x=@qenGb0`&K)uQ2|@APxZU`RU+djt3+JS z1TXfoKeQS>$AK5iq2ZQHb&^)x@;Ok+ zP@P+02{L?sbYfP0*J?WSf+Zu*f}i+F`=#`t^RuQuMK9oHw=X$FeN4#|q2AqkK_Tdt zXzHSp_%apq`CS7(NDFy8s5H4qVK>AvO~HrBRlA&5DjGj7tIs_v8*kjW7{dv){B!o8 zQdwFzdKGC~StvJ}CaKvNU-|S-$Y9oFaHe)kcL3gDmXoV^z0Y?`5uB)=W}FNzY3W{y zv7p6Bi4+JZvvNR%ZmBU0np5L%0+SmzHy`a83r65PJ7R)i<8KDX?Q~+>_X9@zcdWVc ze;Ir54%rCi&9I&o3*&a3wjLW}8YD%k3^XN8NrE*vCu=M19M0JOye8oJAGV{AW7nH6 zJ4>FqI5AG-AfR1_z2~#$Mc`uK;troYYXg_gBCJtk9CjiSR~0d~)m&c&y<;^I^u^4P zu(-KpC4ECSuDnznT*b@yX3xYUL{~TU`2$@ve`Kdv9$1hbsEBL3&RUy2fd)skIEsjt z12rGljprq+>7NStBhfsbbJAIF$uB{OJOipatcLrEgSec2qM?QPVHHRsiUYo%foC># zDOY~K!C%$wPiEU%MicD}KBtvJrpe4hm5VnJ*MTf1tp8h?{;{V2CK~uJ{!f8ITxSRU Pdk6kg)IZeX`gi>eF&BpE literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/unchecked-0.8.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..8b4ca708ad578f2dc935afc00cf136629f8040c4 GIT binary patch literal 2461 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 QfA0eS6#EaMV*jrH0EHfynE(I) literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/units_and_global_variables-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/units_and_global_variables-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..94a3448cfbc62ed72f49cbbd1d904edc01723bbf GIT binary patch literal 9657 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 R|MkKCTg(3_Mftz~MbnbAN8mS{Lv0U3~ZJ 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 TFtGpYL;SZE|51wif9d}KYlNyS literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..dd3068c7f96ae3b4dbca55a46da8058db90b91f7 GIT binary patch literal 2364 zcma*p`9IT-0|)T8+ro+@O*Xf3-#1&X4wPeZ4JE{A<|br9j&haz_{cIu_DR`9$#Nve zaxCV)K8obbvAMr}zQ2DTkMHaC!|RvVAMmucU}J{^tN<8D@ce-^jT=>e!VLfxssJDh z06=K4FXpbIcR-M$ijszss#0)(zq?liHXta({dUkDAKx%9C3J8A2E@(*xB>tU01T6p z@2VfD2bK+fCF}DQcVK*_TcC+)wh$v2J-As&4OTan&^fUfv*6Xv^v{olwB9lt*ltzD zaFJdkL#%R$jZ9Cv7D{pi7S&2sK8WPr=0tE`_1*Q(>ZIZCg$l-#4Khl%B7ojg85Ku*^@&p?Fk1Oj zw?}#>neaE<4S(A*lN{>a>RH=Se?bRU-QRl=hj`G{#^&2T65#=-$dY z%}5bl$hJD8&_ha?)?(S*;g#E(NgyEvpe5kbjw9jdKGl?%OZTp?SQU-oaIRk^MJN`F zE|ZCA{8I;48|_6$roPOFC-)TbX!y;62CyIWJklr+k_BJ>Vu9r8&ZD#jtNL@Y%=RBG z&09KUnxbmf*&KzYuO`~Y(CE{wz3Cmgw}=u;R=i+wh_Kx)j&1VmJr8ybHvBbP*{awz zrGk@F>zuyh(%+WP!)xMm_>*X}j zG+Mz{icYtX0?|KQEjO@q`2#)ay{BZkAHF{Cy<=h}&TS!nsgmXvakQE$p0OfS0Bbys zixy_tzUX)I{pR3D_J%=+GsUiBXoz#ybFz9^cg9w1YmG5M)_iRBfi>dUi{b$V#&NPmIUVxVeDhkm=_N9I#?wjvat6{89 z8Blz-f4}sDU-+Svt9s~S-9MV=$0guV4W=vd?Cv0;6v&nuqB>E<;5kAIAt7XaA$xeH z4`^g(H$w{$?M9f_uo=0J+cjqiA_IlWpN-T#!^6)^i8FKBbrAVbqE8uPsuTI13kAf# zHGb)s_h26u6?LuYBj5e--a(OJLVXh&{E_R-bIVgU+BMgpdz#X7xjOgfC~?6lBxf0x z=_ef6T5>MUx&WSZIqa_od^Ne7vZZcW^(QsGE7>Y}5g(0FUaST?cwuSI7^%9tyFa)4 z;)r9J#XTIq>X*Frr{*sG!r%qzjUM+IBX-gLK$rqQhsjx)~&UO&+ zwrfTkb&-!|phE_hohecugXB?WPYNBbeTO)lv$*k4IPY~sqcnBWebZ-Hui92Gzo9b= zgCB3{Y?GkAu1{Y~rzV9yc8EDwgv^19c$wR|0z*wCLU%CtQ+q=R0Fta}70uR)r2XCH z<=vus$y9p9@qrCb)Y}u@yDn1vI?qj^Ewh*b-y-n3K0`YzNKDy2HRob}z-Qa9pvK7- z#yd@63}3qqn;kaD_@9)E9rHMfyF+tyPZ>OW+-m;Y`R6$(my9BLiQDFwtkud!g@)fI zf&QX;2FF(9#m0j5Hr509SyD6>D_`y8ja+^uf;+fe_VjMW@n~&*5_9_r$O5&f5_$wOFQ`aK)-PU(^M5OH@86o2ehC_YDnI$cy z9%sMAyUl+Q+U-d$GhkoV#tu-oys-<>P=t$x@+XLxb0SgJp2EQTv`^;(Gm$NO1>0AX zGVJNZ4EN%7|Bx)+2=(N!r<98-GH+b2#G+iyD2iHW2@|}4OVvsdvqNg4I9_X@L6ZF* zWLB*7W@QykT-#PgJ4pM?RkBFMu4nPqZnK_%MqRHC=KSwBt4)lzc9Ce;>02tAsKli-F?N0 zr;?-J=BNugn=iC4$=GY0SZQmv5DVjSFrUAmy-{-E2%Zf`j(Eejs0;i`(o<_X-wJPz z;oVp-QTXRPcoFx9G*@-db&OKBOmH;az`3sM=0WXOBm`O3{pm9(HENm8gJ+MWMX2%M zuf$odF|g@E9>+0RFN9LU1-X^4Pj44yLqw2HZf>z;6Y@LbRDRtXl%W$Ak+pkytW3Jk zjr=Y7P(AMQO@GK!{hD!K5m=j-L(Bfriwad`QXdue`ze>5+1|K4L<(7);32zMv+DtqmNUv6SSpIe>{UT)3l>&5+y5rbAJzOfIF^6s{{)V; U1qbK9ca}f3|FZ*sj06Dx0oRge2mk;8 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..22e37251d5fbf7f868ccae9b4275ee5a975f1b8a GIT binary patch literal 2366 zcma*p`9IVN0|)T0`#y@CIcM8MGZ<%X2_cIHW5#`t9An0rBjak_WSGGUAwr?Xl_=ww zj9kMKX)&%?waO8i!P7p!Kd;yG`TX$taea2!W+pz^o@z(ySa zE&~7%6%iB`2o6AF!DvNs{XKGNc{! ztA}y5w>n1J7B{~<@_VoC2AY$L?;lfT-sS!_IiY9JZf;Vipip;1#^T2seLyM|K7R;D z%=uu%HroaFKrcEYQS)o;4tT~T323(T7CQa_Q6XEhFP>MGW{0~ZHT41oqR0sbtks&P{F`hYk(gZ`@EVig9kRqvB$kW>?>JoIV!#V$bi_K%m7tSQW~i z#QvyE1jh3@O@9tJzg+?V4TR8H3&*Wi4Hk))A)AJKx#Q2>y-Q2L1)}o@zplh)24(rkaUVSQRXYD|k$sT#+pF39^`5Op z9AUg}q+*w@n+6M(uelZ+CJVEKcFES`jFnyC=QoOn5zKAX($Pg$=ysyAHiu z_$ol`#n$6_2GbI@!uPKFR_DWQ*8&KKx|1ZlE(o)9epVH8^1)JZUZtK*%l-I}rIMde z`X<ukgDA1DW=)PqFk^+wk zx^%i8{kBafk{T0j0iUu4e;&W=7A?4fZ>VMD-q4VpHF8FJ*pMWP zUMoatR6XSkLfNa&1Q*11h6)K)c~_R$mmQHQ=F+7S5%T!g8Bxn!aPj5MS0Svb*Kr^2PiNzF-`z zo60o2Qw+O(l5dzv4{777ku{*@e?DZkhdPVg>rzNAmX0v_p(;gQIc7+h*-f9U(JF z*FkOEfccn?3>hXhx=vwa?Xp@wLRdzTlRO9$q^CJ|Shd z{SXoBT&=-*{T+Tu%~7A2Ioza{LN<$5ptwzl)R={O0BWBTH)cK@A`^F+7VMuNiWTFu z*1kde70tqCMWe6nBJpZSVqox*p6J_v5#AEF?2P>HUZz#aMRrx)%kpOnJ^l~{Mknv|zE4lq z0Xy@&D<8wnbz9ETx!wL`Dh{q+xP$+Fqjy6x*|o6#V!Fy5T8*8J@{Yq4Uri43JSo#B zv78iwG3stL`3Ee`(8yCIE!ZN*haY-3j_lDiXCE5Ydhy}-!R0#BYE_vTBt$?%3n!rF zRGU#L-XH2$%={a^%=d1NL((Yg1?36OT7t{@=EA!?3%m^XJ&8?0K}lLwm)Rdiu4|3? z4FWPYh(_Mm$-E!VUFT3qRcZOQ*=yQh)eU>@P$!&^->RER?8>JED}tUI-X0};)`nXu zpU9mQ6AM+xM9%TgYZ7CSf#-j(BB*Z=+~-Hz`IlurJ}(v&+G+6ZsL`NRt2T9Hm#>a+ z$}cVGbJH+w)1hUfgS0&ZSB|et$ttsYGU;|=5h-C$fhR7vR!oIie@X@>j0Xnp=-h@x zKa7{v&?(G85EGy67&l&zLi7oYe-H1y3Wlxpd6Tl~8w9Vy6CS2;iS&h*UT?Ik(05WR zXXo_a$Ekbhp=%u2rg6-0D60n|y#9u{k7(1nVa%9Dz$k>yQGwbD;nL9=7#7E7N1%By zBbbi%Qy@tZ%A>4mu5B=1BBA*qkIH=Snik5PJl3%|vFIyl`Z7e+?Duw0ac(gy2!rG3 zt+m3c^|n*XuPLTE!w!sexP$Z+i?cdZ7=S@YG04tzt`R}ExP>{iketRG2&Bg!cQZC2 z&!Y-Aal{ohfpJlLlCxy5*15ORmAA8hR_7Nqn{D+`jNDW4<07d8N7J<<<}EVWzVj80 zq4BEXN_pil>M+mbtDTd-I_XEl$p&T7BK6k@36eHV&||Pt-89l~Ryj~C^T@WSE#oTb zky700y#g$v-U;FT?v|gle=2OBx*4CP*ZbRER<_VHuNzCk&+N&m+cv#PqgdO%*>d5L z@BsSLB`Ku6PwW-*6ZP6MQ<>Ool6&k8M~?50(Qi&aYIfV(u&^4l{cqI#bj^Q*WBGUf XPvY3yaB%*6XZcyDpF90iNdWL4$$)X6 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/using-for-0.4.1.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f6aeaaba7202deefe6a3e34c7e4a788f995c2cf2 GIT binary patch literal 2361 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 VZNbX+@15yyZU64bUmyVh{{eW~Zf^hp literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/variable-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/variable-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..87e778600d5b20d3c5001a431c47120cb9c10e17 GIT binary patch literal 4293 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 WTMYyAKW~(OtN-u5|JN!2fd2z&VKYAf literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/variable-0.8.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/variable-0.8.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d3db72a587a1699f1bafa79529de3a2ffd54b7d3 GIT binary patch literal 4291 zcma*rRaYB|q6FYTad$0JB)ChF;x56xxJ$9%THK+y2bbVdyh!k(8;S;Zx8f8icc1%y z);co}^D@8S(@=SbBmqDK-~dvr4|GIltbK{`002P<000C40Nxg02MfzDHXPiXLY&;3 z9JDA`OYpUSaiSyr;%!FY9pmgL>s_xqb+;`guA zliV8sdVEKG8(O9Kif|Zs0Da?Jcry&8&7>Gv8$nR%g*SD3c<{Sj zQW4z+vIf0WkBcI+l-)$5z)|hrPz6=6L&i^|l`KvQF5mK_s#9$%3@jMxG@7h#j|bO6 zg*05`PXHUdA^za@3-FMQ;;!0!f7gEk!@LboW@2pG%(E{iGpmT_4;}+?zvtTE@3#Z~ zr-U3_d*BNaEwh%EDc#lJ!YRGe_3F;M$~=TQ)GFeM`CF~mXyFF*g8*-W*m+#~jdgEL zoqF-oTw2@}`VF72=?1D}wQQh~u%gAr(X-xO&|Np&1&S$Pz^5ENuso9B=949U_#%7oPE^{9#o*(_4z<*!DN zUv=D9U`|`CHhWH-x+2o7f89VUUpH~cV>y?W9MFW3~p9s@pgGk zi=+cbgRj&BQ9E2?9~GU;Gbg4uquW24G>p}Cjy8j}vhcqa3w^KJPJPkL6Sd3EuN0lH zt9M_o$;ln19$HFoWb_DHJ+a>ROu*8awf@F%UR8O5-5O{Uv84YHsK!Ewa=BX@yI_nU zB3asR7xcr#0L%nSmq~7qV}g>sKXU`GN^CZ^H~s=VI%x@Z65hZ$EM?k+j8IVCcAKg z48AVODpFyJw{ME?gagbM!zFbZ91csb)*v$8Q-r?UV;ERIkg@9H)N?q_3#b}yO$AW$ ziVWee_(ynq9^N+pvLBp*{&xFIQnw>m1}Cep;%ZR|HtJ#B#-3EPnjdHBBKz?0BrZZp zio@G%3(d`6Kf&k}t^L~yuY?VcN?K6J1{K#0%|WJ#*7cPiCJfdt!y<$6oT>hThVa!Y z8wuZ%ua&ko7e>~|Tm+WfIS!O?qo7QzYbB24v=akS`z_7fcR6?L0?FBU;^aqukf!@I z+UtHLd#$?hb1W@g?8X5#)nV17O2?eU!16yc7&`3=b4VhBlA0CVA?)5LDhSlb0-uWx zW2fn114O-ovHh2ft5vx}nN~T^nM?Be=R@L@vIh3|eu=jErd`ry0HZy2Gd$E#zFZT3 z=`t!a-S!7^$}6rdAmbyb#rq*7tgx7^WE?r3Oo2<6y|jO@k>rdj@YA!Zg4^#QlGp}@ zHx1ow(ypE+zmVq9h>3~@Dw9sj_1jHS@iLm1+~I2tXtU3621~Q|k1+$^c{VHMwj_zKxO9Vn3@q1XGaf<$*RgA9mlx+Wteg3|IZS{U=8Gqh*t+V(EAW z+svj@d#AfMOLQnOy=&IJbJA;8Z&Jhgpgox1#+pO8E+$!fe@pY-N_4^PM>wFN4E_az z(lveVnLu&f`noCw`h-qxh%LRWLK(g#VGiyKBhI0b6*}uwK2SRBO$AG~0AChbk&gH_ zy;dppw|Z-L|J-=~^P|U@rE_OFD>^%U^{%V`bGjqHOjh}~D;CUO>D31w)P_{~`zT=5 z31xe~ol;WFk<)24#VCIgtk?wjyDY+kmy|;t4$c}ni#9*Qi5|iV&tq;cu>L*oYN!cK zCV@{!GbiO)5au6&Bdky}ML{_RlMljzawhb{%R096&Ej&kV>o!oeP7ykgtOQ&N8($3 z`r4$Xm5zjix!b6n5}-YJK+7|YTLyC_;%e^?ceM8>{#Q2hHVX-r?e8I^uvJw(rv&eO zHDBude9bD?1*K02<(`WO^197>&$czxocL0pK_}{N`jYb$)b1wk&^GSR`O7dz%b1@7 z8k|XT8|MYUM|}!c@y{h0w7Ga-a+i>e^;=U|p_ZpGhet?Lg-uf0EuS-($~yJF1!aM6 zsq(Dc7;0qW&nnb^dYx}+uGz6~Z{BkqbNE16nE$74%*pIs460jmH*U%TkEl5)w`a&Q z6>8@H5;uQt9d}hKXXP7K!OgaJVdySBN|SRapagM4M{3!8WiefWN^R!@}J{Mb~c;{P;rD?4B59+x*{nCC}38=SBy>Yu~9I(kok;vQPOEOF^Lk;B>Tf1O?i{M ze?V$C?#iVeG=uIlg8Tb}@R;S}gc6z%I8SMZZ)bmdGA1aOIdf~_V;$30JZg6wVYG=L_A#g07 zF32qr8!vpR=Gd_L1C!MLqTA%x3zc>@vVBYVcF$eiXR!&YELR;Q&X|tH2X9+{g$vu9 zl)#RHa<7v`IooW#@zps(rlo+m?S{v5D4XeM?^yOVX59sMW>a`+=V5$pS<#D}#QOKS z(CTTNjZq-{*B3tTCrVxo8=$+(3@~?vo`UN~q#)<(g2~rQVld<2-1wNU1&(Bt&G-t_ z<%M)~%6ZYwT*O^RdV~KgdrV`I)HBmmbSB%YJX&Zy4I5K{q6g|`hq-%fp^QVA;3+xH zefU*}_Huz)i9k!b_^m{OQ2Mb(>#PDYjIjXipCatE_IMNt{SA|*Vq*Sb!JSN-Ob3~i zg08xOpB(X$B4LmZa=E!hMvx{7;h@iQNRanEuMyZU@+sE!d@Ap5=y^ke6`((Ist=o0 z4dSWuewS`mJ`^s9W9@ZT@V1jB_`gxp1*E&6I8bN>v0+yLJ`CyW5d00cQb|;A9nn^Z zJkDVCLCjMM_B6A+3?*1DP940YCg(}jC6)7Ty2;y?`!sSfLX3K`h;FVt%41!&;oiZ8 z3TuT&BHQhx&L2XQ?KzhmVKW33#D;2XL8QvVUVr?!eVGVDl1?xh*2O~GgO5mB()Js7 z2mLxTt5Wvg8j{S_T7y1yT_Z-6$0j4WU+QY0)R6fKer_{sQWRyc=Dq_}E0IJ_hliEm z%5a5{2t&XD=utSO0hhv+%^6<1V67T09E1Z6#K577@EAh5F2@vR1j@N%l|VexWU#x2 zz6`9=&-uM`xTOh%cI#=SQGNf7cJhXvT8OKRe3!m(pY~E%mJWVT-!gzc#Fec2q+H9P z&n!!`r(l>y_?`MM`bbltiB)1jyQzM0=ig6u9Q!TyDSpjyjRdpKU^hMZrjZ3rRB-xU zm+BmJF}xDwd->2QXtDAm6&o0u5{bqUDI-HJLSgl-RJk%0s3ybj?!1|ziK0!1n%Y%B z)`*vByJogGfcxlZ5rI^!)Q=20-sLjGXi9$*Vc;;~yw;%gJ&(^U%U2#BDS;){5%}Cp z!I-I=X=-bYGYgu$yE^V=U9QJBB&Nhf8ds&+HpxJv;G50wqqHXecpxE=$O(2j1ga|W z#SXHF8TSCx z@%5Tj&1dT~XHJU<5)wcg`iIMoaCfu({zr3B*$mUrP0{lx!>;JBs)Wv(Nb%^vcy;Sk zUAa8PsspXG42+NrQLNRFptFa*_Xh@nE^VM{vu=K88jMkex^vNKg@MjFWFtnrQI<-7 z*DlrS=J#G(EB?Lge6JNerlrGCiEhm)vRXUsL^!Puh`|~+SKp9*IXl5l6_?s+CS};g z>D(FkQy^{>bQ3Q*r7$2&1^?N5hPb7LEVQEG*+<@Nkf>}lO0kReDWU$d z_xios&pMnMXk@0qK_Uhb`I}76$u)!K%Mbm&E>yl1vVy;93Bh(r2!&e7T9_(>#5wb{ zLdR?;HU_bmNlD^QRmJTH{xQc&dw+U~J#u*2UJ!etkpoc$M!Pt@V^;F28Wn360(ViJ zd-jGix0W$XnF$q^clu=y@w82-EUkgaUi7q0>ofll#agbNy^CDncnD0iFj}4EEY-Ue zc0=<(S-DC z&K!=c>USfjAaxO?p)rc%1Yg~{42&WOr})K6bfq3~{2G@<1Cu+!uX?h4@ZwOPa(m#FjIU~4aMMB{$DIFr3YFcelUsG46K3iCznI;=z`vJh zUq=}f3Q6SBBdxQAydts-bAGzTsh;aca;+>&TV)yBw`9v_-NX*PAnkm;LBOd3EYD zy9mX)Gd;1!0mpjml`sAe-ICQ}qQ&U-2P6{eH7WwCI1~Hok2r53;8yy{1n8Mp9-1QV z5ON=ayHYKeC__oElQdfE5E8fvE=)MT`PYivTSEl_QR3Zyr-grY;r|nY@SpkLpg}_g U8Rb83gnz5^?;8F~6#&5h0VxzVJOBUy literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c6aa3e7c06844cec4c6f17ad86056b67d38b2c15 GIT binary patch literal 2891 zcmb8xRX`Jr0tMhvQ(8elsUax>BcxM0MwgVR0%)~paI0%<4mV&mBiIE05>fG;eXP$QUXp}LtA_(i<$|we^n}5@{_$y?~q34eqI*hr?Mq&K4 zOB8J~jnqwN1%HG1^?P2fClFJFj6F0&sWdd~4l|3tBk=KwP!`5v^;)iwR4lz;za;UEhEZU8&&arYzKc6>MAM-G=|bsF>Ac_?lUSe zz&dntWv#Fim=#mizudI_HuJYWRk`1Jsw0~j;k)9qFTSAA5M(1fo>po8;5V*{_=$khg z{k^RcIi@!*oFfl_-~emn-4K zl1z-Mb9Yn6eN6`^%cK4PpZ4*uKR*x7mCEqp58}0eWJbh8gu?~*&)f9QcLW$K&>=L` zOSQ18Sd&6<)i8~atdS@ByWPgbCVcqD_kAm-iw-A;D{RGR^vqW^OOhhq_Yd>b--ouZ zu&Pk=Nq+5pv!`P=0QRlD@`A3~g*boAW^7`J+qeKz6ML?T~c{IfUWvJ(z*7|LTE;5TB+tub0x!{z~Plqb_XFqJHa!ct7$gU81WuXyi6E6nxFlUW!k6o1!34EEGWH{Em zzmV|UNR5OTT%`RnGp!=2xJnxX5^12E)#+IR(|)z>b>tYOQ?SLo3k%(^brwQ!MwRP3A?SW+D4Y zDT;5nWVIwE3=+JsC}ybuh|~P~LUnF{56}HU+0vh*42J%cI*pjDixs1WJo^j}317yE z*L*WItR(}$78M$iG*wdm-&l~A-mb1^9@XJd>bE7~yr7U6worP7#-J9h{E^%Kj&^~C zRmX%6q*^mFwh1!+%NigedmxsD_9kKBC9V%1zr{RdS6Q(%=HOmday;#5?7qEMiR`l1 zN@L|PSn96#OXiF#3)a)U!-4;T>Nw(A$o#aReh`NAz%YI6IQAd($GNUhn=nt zKeWM1n;tVh>U?KLO-RCRS`4c==MWf9WDYKpygS$^%QJzn#~}Fa{6ISl4PHBdH_mt~ z%Gy*~BWeoz%z%o8JuApQ7FFHp%c7nhd?zs{Gi9fU@T}%L=Hju%*?g*KeH+|F=t)(7 zxI;+b)u?cOEq?mMLHFE3KYxDa2xB&Vy9CIXaWU7B;w9hiIcE!DKaxrd5(btO#yY!nTWODip(qYZD2`ghD51Hw{9V|)h)xA4)&=?>jo3a zVd_cr7{z@uQq)Prbu~o`0~%%e0IaN#)>meMktO)-CNIu+Z!(%xT&5xNkdu<>Ka3eHnRTnJ><&BpD(GdTf%LQ(8c{(J6F7x>CfN{2X4>N)`G>h;RTzB~f_ns2#Ok zAj6dug~eeHUL%e!Kv58Oy+fbDSQ%4eDG}dwD)IC8LpABC;`&9%w}2q{37KhSZ+zdM zF1ew{kB}b_rja~EY#LMBJ{}}J3#>RV{pHo)ko)|0gX?`|80H?*HFMq61&gHdm`p>YnBD6X-@b_J4HoAp5|J$(&$Mf2`k>F@%f zBpI}xgzNmYw*n#RKWUHnp%`BO!-V^XC;L`2q4GK~>Y}E-)6O~17~c`shwOaeJv*%p zN+_Z}kJXo^DxFWb%aTrTV7j_-QU5?b{>_(U!)(UoPi68dS9im{{y#kAc%kD#o8}mM zin*KFmHRI|_pHxV_@jDUyh7=y-iz+wAbkkh(=-IQ1)2sd- zjY@*RK6i#KLf((jtdn6G{!23xcaa+3TKn}U^}sT4BAZO>HjG4^V4 zVYdexS9%LVt>D+M0=cIvx95DCiwU55FjT{%{mnhr| z7L4haTd(+JB(mGJ9GaF*2w7B-&xZ~6n2Ua}o=`K2#rW@&p2c721a8+KZ_F(eVPzG9 zKi2o~+6$d@Bg4dR42lm?se-yGU=~))bUURT;N|G0N&}>=Ge!^-C#vt< zH!DX|J3@rk4a!8l%I=d*^1K^+JB2+!(ROn*9tJ&>J9x+Av6j4s**93Pd5|wIkFAub zxx&2((9rB?T=xcIn-`Wa6=ryJJFWvUU`5;BqOdA7HWJPH>y`wiR6|O$2DU-6wHQR7 z*u9~8nIQkk*Q+LOQEsa8r6>V0id?`>u-2Y_J#9#BMU%T3(UubbuzDemAvb%xh;>V& zyei`@7J+jFpy#@4`Z=?IJhZ-9`eh N>%Tkmm&^dbe*h2@hdBTM literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/variabledeclaration-0.5.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..298087feabcde047f537644b86593579bdc5f089 GIT binary patch literal 2893 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 xoAVOmG{1g&+E|maj@rYdjE7myITD^+Bli`x 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 Dv#(7s literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..783d4e0ef2ed5a8cf41c824258a48bba6b7616a1 GIT binary patch literal 5771 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a3688063592f63b0a26fc1a926c8aab9ca1baf94 GIT binary patch literal 5768 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/yul-0.8.0.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..cb145b39d1ce8e40cce5d479643cb87baa58399b GIT binary patch literal 5773 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/assembly-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/assembly-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..d0a1cb33e --- /dev/null +++ b/tests/ast-parsing/expected/assembly-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: INLINE ASM 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/assembly-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/assembly-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..d0a1cb33e --- /dev/null +++ b/tests/ast-parsing/expected/assembly-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: INLINE ASM 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/assembly-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/assembly-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..d0a1cb33e --- /dev/null +++ b/tests/ast-parsing/expected/assembly-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: INLINE ASM 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.13-compact.json b/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.13-compact.json new file mode 100644 index 000000000..8f9f9857b --- /dev/null +++ b/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.14-compact.json b/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.14-compact.json new file mode 100644 index 000000000..8f9f9857b --- /dev/null +++ b/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.15-compact.json b/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.15-compact.json new file mode 100644 index 000000000..8f9f9857b --- /dev/null +++ b/tests/ast-parsing/expected/assignment-0.4.7.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/break-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/break-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..b9b7fc93e --- /dev/null +++ b/tests/ast-parsing/expected/break-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: BREAK 7\n\"];\n7->3;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: BREAK 20\n\"];\n20->16;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/break-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/break-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..b9b7fc93e --- /dev/null +++ b/tests/ast-parsing/expected/break-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: BREAK 7\n\"];\n7->3;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: BREAK 20\n\"];\n20->16;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/break-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/break-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..b9b7fc93e --- /dev/null +++ b/tests/ast-parsing/expected/break-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: BREAK 7\n\"];\n7->3;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: BREAK 20\n\"];\n20->16;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..113bb5a14 --- /dev/null +++ b/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.13-compact.json @@ -0,0 +1,6 @@ +{ + "C": {}, + "D": { + "f(C)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..113bb5a14 --- /dev/null +++ b/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.14-compact.json @@ -0,0 +1,6 @@ +{ + "C": {}, + "D": { + "f(C)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..113bb5a14 --- /dev/null +++ b/tests/ast-parsing/expected/call_to_variable-all.sol-0.8.15-compact.json @@ -0,0 +1,6 @@ +{ + "C": {}, + "D": { + "f(C)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/comment-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/comment-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..a53745acd --- /dev/null +++ b/tests/ast-parsing/expected/comment-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/comment-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/comment-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..a53745acd --- /dev/null +++ b/tests/ast-parsing/expected/comment-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/comment-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/comment-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..a53745acd --- /dev/null +++ b/tests/ast-parsing/expected/comment-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.13-compact.json b/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.13-compact.json new file mode 100644 index 000000000..6710349b1 --- /dev/null +++ b/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.13-compact.json @@ -0,0 +1,7 @@ +{ + "Test": {}, + "Lib": {}, + "C": { + "f(St)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.14-compact.json b/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.14-compact.json new file mode 100644 index 000000000..6710349b1 --- /dev/null +++ b/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.14-compact.json @@ -0,0 +1,7 @@ +{ + "Test": {}, + "Lib": {}, + "C": { + "f(St)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.15-compact.json b/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.15-compact.json new file mode 100644 index 000000000..6710349b1 --- /dev/null +++ b/tests/ast-parsing/expected/complex_imports/import_aliases/test.sol-0.8.15-compact.json @@ -0,0 +1,7 @@ +{ + "Test": {}, + "Lib": {}, + "C": { + "f(St)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/conditional-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/conditional-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..6ef3d40e7 --- /dev/null +++ b/tests/ast-parsing/expected/conditional-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->6;\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->9;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n9->10;\n10[label=\"Node Type: IF 10\n\"];\n10->11[label=\"True\"];\n10->12[label=\"False\"];\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->13;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: END_IF 13\n\"];\n13->14;\n14[label=\"Node Type: IF 14\n\"];\n14->16[label=\"True\"];\n14->26[label=\"False\"];\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: END_IF 17\n\"];\n17->18;\n18[label=\"Node Type: IF 18\n\"];\n18->19[label=\"True\"];\n18->20[label=\"False\"];\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->21;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: IF 22\n\"];\n22->23[label=\"True\"];\n22->24[label=\"False\"];\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->25;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: END_IF 25\n\"];\n26[label=\"Node Type: IF 26\n\"];\n26->27[label=\"True\"];\n26->28[label=\"False\"];\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->29;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: END_IF 29\n\"];\n29->17;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/conditional-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/conditional-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..6ef3d40e7 --- /dev/null +++ b/tests/ast-parsing/expected/conditional-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->6;\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->9;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n9->10;\n10[label=\"Node Type: IF 10\n\"];\n10->11[label=\"True\"];\n10->12[label=\"False\"];\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->13;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: END_IF 13\n\"];\n13->14;\n14[label=\"Node Type: IF 14\n\"];\n14->16[label=\"True\"];\n14->26[label=\"False\"];\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: END_IF 17\n\"];\n17->18;\n18[label=\"Node Type: IF 18\n\"];\n18->19[label=\"True\"];\n18->20[label=\"False\"];\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->21;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: IF 22\n\"];\n22->23[label=\"True\"];\n22->24[label=\"False\"];\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->25;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: END_IF 25\n\"];\n26[label=\"Node Type: IF 26\n\"];\n26->27[label=\"True\"];\n26->28[label=\"False\"];\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->29;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: END_IF 29\n\"];\n29->17;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/conditional-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/conditional-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..6ef3d40e7 --- /dev/null +++ b/tests/ast-parsing/expected/conditional-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->6;\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->9;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n9->10;\n10[label=\"Node Type: IF 10\n\"];\n10->11[label=\"True\"];\n10->12[label=\"False\"];\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->13;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: END_IF 13\n\"];\n13->14;\n14[label=\"Node Type: IF 14\n\"];\n14->16[label=\"True\"];\n14->26[label=\"False\"];\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: END_IF 17\n\"];\n17->18;\n18[label=\"Node Type: IF 18\n\"];\n18->19[label=\"True\"];\n18->20[label=\"False\"];\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->21;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: IF 22\n\"];\n22->23[label=\"True\"];\n22->24[label=\"False\"];\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->25;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: END_IF 25\n\"];\n26[label=\"Node Type: IF 26\n\"];\n26->27[label=\"True\"];\n26->28[label=\"False\"];\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->29;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: END_IF 29\n\"];\n29->17;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/continue-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/continue-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..bba15d9bd --- /dev/null +++ b/tests/ast-parsing/expected/continue-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: CONTINUE 7\n\"];\n7->2;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: CONTINUE 20\n\"];\n20->15;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/continue-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/continue-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..bba15d9bd --- /dev/null +++ b/tests/ast-parsing/expected/continue-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: CONTINUE 7\n\"];\n7->2;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: CONTINUE 20\n\"];\n20->15;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/continue-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/continue-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..bba15d9bd --- /dev/null +++ b/tests/ast-parsing/expected/continue-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: CONTINUE 7\n\"];\n7->2;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: CONTINUE 20\n\"];\n20->15;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..1df28fb3d --- /dev/null +++ b/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.13-compact.json @@ -0,0 +1,19 @@ +{ + "A": {}, + "B": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "D": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "E": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "F": {}, + "G": {}, + "H": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..1df28fb3d --- /dev/null +++ b/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.14-compact.json @@ -0,0 +1,19 @@ +{ + "A": {}, + "B": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "D": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "E": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "F": {}, + "G": {}, + "H": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..1df28fb3d --- /dev/null +++ b/tests/ast-parsing/expected/contract-0.6.0.sol-0.8.15-compact.json @@ -0,0 +1,19 @@ +{ + "A": {}, + "B": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "D": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "E": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "F": {}, + "G": {}, + "H": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.13-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.14-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.4.0.sol-0.8.15-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.13-compact.json b/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.13-compact.json new file mode 100644 index 000000000..1cf317575 --- /dev/null +++ b/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->4;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->9;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.14-compact.json b/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.14-compact.json new file mode 100644 index 000000000..1cf317575 --- /dev/null +++ b/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->4;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->9;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.15-compact.json b/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.15-compact.json new file mode 100644 index 000000000..1cf317575 --- /dev/null +++ b/tests/ast-parsing/expected/dowhile-0.4.5.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->4;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->9;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..b043ced39 --- /dev/null +++ b/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "emitWithKeyword()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..b043ced39 --- /dev/null +++ b/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "emitWithKeyword()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..b043ced39 --- /dev/null +++ b/tests/ast-parsing/expected/emit-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "emitWithKeyword()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/enum-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/event-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/event-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/event-all.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/event-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/event-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/event-all.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/event-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/event-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/event-all.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/for-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/for-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..fe24348d8 --- /dev/null +++ b/tests/ast-parsing/expected/for-all.sol-0.8.13-compact.json @@ -0,0 +1,15 @@ +{ + "C": { + "normalLoopBlockBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopExprBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopNoBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->5;\n}\n", + "loopNoPre()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoPreCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPrePost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPreCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPreCondPostBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->1;\n1->2;\n2[label=\"Node Type: END_LOOP 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/for-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/for-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..fe24348d8 --- /dev/null +++ b/tests/ast-parsing/expected/for-all.sol-0.8.14-compact.json @@ -0,0 +1,15 @@ +{ + "C": { + "normalLoopBlockBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopExprBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopNoBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->5;\n}\n", + "loopNoPre()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoPreCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPrePost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPreCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPreCondPostBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->1;\n1->2;\n2[label=\"Node Type: END_LOOP 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/for-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/for-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..fe24348d8 --- /dev/null +++ b/tests/ast-parsing/expected/for-all.sol-0.8.15-compact.json @@ -0,0 +1,15 @@ +{ + "C": { + "normalLoopBlockBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopExprBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopNoBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->5;\n}\n", + "loopNoPre()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoPreCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPrePost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPreCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPreCondPostBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->1;\n1->2;\n2[label=\"Node Type: END_LOOP 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/function-0.7.1.sol-0.8.13-compact.json b/tests/ast-parsing/expected/function-0.7.1.sol-0.8.13-compact.json new file mode 100644 index 000000000..50465d36d --- /dev/null +++ b/tests/ast-parsing/expected/function-0.7.1.sol-0.8.13-compact.json @@ -0,0 +1,52 @@ +{ + "C1": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C2": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C3": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "modifierNoArgs()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "modifierWithArgs(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "C4": { + "hasArgs(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasReturns()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasArgsAndReturns(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C5": { + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n}\n" + }, + "C6": { + "abstractFunc()": "digraph{\n}\n", + "abstractFunc2()": "digraph{\n}\n" + }, + "C7": { + "abstractFunc3()": "digraph{\n}\n" + }, + "C8": { + "abstractFunc3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/function-0.7.1.sol-0.8.14-compact.json b/tests/ast-parsing/expected/function-0.7.1.sol-0.8.14-compact.json new file mode 100644 index 000000000..50465d36d --- /dev/null +++ b/tests/ast-parsing/expected/function-0.7.1.sol-0.8.14-compact.json @@ -0,0 +1,52 @@ +{ + "C1": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C2": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C3": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "modifierNoArgs()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "modifierWithArgs(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "C4": { + "hasArgs(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasReturns()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasArgsAndReturns(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C5": { + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n}\n" + }, + "C6": { + "abstractFunc()": "digraph{\n}\n", + "abstractFunc2()": "digraph{\n}\n" + }, + "C7": { + "abstractFunc3()": "digraph{\n}\n" + }, + "C8": { + "abstractFunc3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/function-0.7.1.sol-0.8.15-compact.json b/tests/ast-parsing/expected/function-0.7.1.sol-0.8.15-compact.json new file mode 100644 index 000000000..50465d36d --- /dev/null +++ b/tests/ast-parsing/expected/function-0.7.1.sol-0.8.15-compact.json @@ -0,0 +1,52 @@ +{ + "C1": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C2": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C3": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "modifierNoArgs()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "modifierWithArgs(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "C4": { + "hasArgs(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasReturns()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasArgsAndReturns(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C5": { + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n}\n" + }, + "C6": { + "abstractFunc()": "digraph{\n}\n", + "abstractFunc2()": "digraph{\n}\n" + }, + "C7": { + "abstractFunc3()": "digraph{\n}\n" + }, + "C8": { + "abstractFunc3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..f266b62b1 --- /dev/null +++ b/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,10 @@ +{ + "I": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n}\n", + "publicTarget()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalTarget(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..f266b62b1 --- /dev/null +++ b/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,10 @@ +{ + "I": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n}\n", + "publicTarget()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalTarget(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..f266b62b1 --- /dev/null +++ b/tests/ast-parsing/expected/functioncall-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,10 @@ +{ + "I": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n}\n", + "publicTarget()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalTarget(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/if-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/if-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..c0c884b4e --- /dev/null +++ b/tests/ast-parsing/expected/if-all.sol-0.8.13-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "ifWithoutElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: END_IF 3\n\"];\n}\n", + "ifWithElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->4;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "ifWithElseIf()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->9;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->8;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n}\n", + "ifWithElseIfElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->7;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->6;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: END_IF 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/if-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/if-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..c0c884b4e --- /dev/null +++ b/tests/ast-parsing/expected/if-all.sol-0.8.14-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "ifWithoutElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: END_IF 3\n\"];\n}\n", + "ifWithElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->4;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "ifWithElseIf()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->9;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->8;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n}\n", + "ifWithElseIfElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->7;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->6;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: END_IF 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/if-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/if-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..c0c884b4e --- /dev/null +++ b/tests/ast-parsing/expected/if-all.sol-0.8.15-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "ifWithoutElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: END_IF 3\n\"];\n}\n", + "ifWithElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->4;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "ifWithElseIf()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->9;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->8;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n}\n", + "ifWithElseIfElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->7;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->6;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: END_IF 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.json b/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.json new file mode 100644 index 000000000..355945be7 --- /dev/null +++ b/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "I": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.json b/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.json new file mode 100644 index 000000000..355945be7 --- /dev/null +++ b/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "I": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.15-compact.json b/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.15-compact.json new file mode 100644 index 000000000..355945be7 --- /dev/null +++ b/tests/ast-parsing/expected/import_interface_with_struct_from_top_level-0.7.6.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "I": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexaccess-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/indexaccess-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..43190fcd6 --- /dev/null +++ b/tests/ast-parsing/expected/indexaccess-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexaccess-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/indexaccess-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..43190fcd6 --- /dev/null +++ b/tests/ast-parsing/expected/indexaccess-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexaccess-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/indexaccess-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..43190fcd6 --- /dev/null +++ b/tests/ast-parsing/expected/indexaccess-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.13-compact.json b/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.13-compact.json new file mode 100644 index 000000000..f4529bc86 --- /dev/null +++ b/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f(bytes)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.14-compact.json b/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.14-compact.json new file mode 100644 index 000000000..f4529bc86 --- /dev/null +++ b/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f(bytes)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.15-compact.json b/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.15-compact.json new file mode 100644 index 000000000..f4529bc86 --- /dev/null +++ b/tests/ast-parsing/expected/indexrangeaccess-0.6.1.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f(bytes)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..81b56547c --- /dev/null +++ b/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,23 @@ +{ + "LibByte": { + "t(uint256,bytes1)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestByte": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibUint": { + "t(uint256,uint8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUint": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibInt": { + "t(uint256,int8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,int256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUintWithVariableiAndConversion": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..81b56547c --- /dev/null +++ b/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,23 @@ +{ + "LibByte": { + "t(uint256,bytes1)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestByte": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibUint": { + "t(uint256,uint8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUint": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibInt": { + "t(uint256,int8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,int256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUintWithVariableiAndConversion": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..81b56547c --- /dev/null +++ b/tests/ast-parsing/expected/library_implicit_conversion-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,23 @@ +{ + "LibByte": { + "t(uint256,bytes1)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestByte": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibUint": { + "t(uint256,uint8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUint": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibInt": { + "t(uint256,int8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,int256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUintWithVariableiAndConversion": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.13-compact.json b/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.13-compact.json new file mode 100644 index 000000000..cc7fbbb8c --- /dev/null +++ b/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.13-compact.json @@ -0,0 +1,6 @@ +{ + "I": {}, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.14-compact.json b/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.14-compact.json new file mode 100644 index 000000000..cc7fbbb8c --- /dev/null +++ b/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.14-compact.json @@ -0,0 +1,6 @@ +{ + "I": {}, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.15-compact.json b/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.15-compact.json new file mode 100644 index 000000000..cc7fbbb8c --- /dev/null +++ b/tests/ast-parsing/expected/memberaccess-0.5.3.sol-0.8.15-compact.json @@ -0,0 +1,6 @@ +{ + "I": {}, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.13-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.13-compact.json new file mode 100644 index 000000000..228af371a --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.14-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.14-compact.json new file mode 100644 index 000000000..228af371a --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.15-compact.json b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.15-compact.json new file mode 100644 index 000000000..228af371a --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.6.8.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/modifier-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..34aad8ef1 --- /dev/null +++ b/tests/ast-parsing/expected/modifier-all.sol-0.8.13-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/modifier-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..34aad8ef1 --- /dev/null +++ b/tests/ast-parsing/expected/modifier-all.sol-0.8.14-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/modifier-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..34aad8ef1 --- /dev/null +++ b/tests/ast-parsing/expected/modifier-all.sol-0.8.15-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..e46dafe75 --- /dev/null +++ b/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,8 @@ +{ + "B": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..e46dafe75 --- /dev/null +++ b/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,8 @@ +{ + "B": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..e46dafe75 --- /dev/null +++ b/tests/ast-parsing/expected/newexpression-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,8 @@ +{ + "B": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/pragma-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/push-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/push-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/push-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/push-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/push-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/push-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/push-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/push-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/push-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/return-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/return-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..7eddd38f6 --- /dev/null +++ b/tests/ast-parsing/expected/return-all.sol-0.8.13-compact.json @@ -0,0 +1,9 @@ +{ + "C": { + "returnConstant()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "returnVariable()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "returnTuple()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "returnTernary()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->3;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: RETURN 4\n\"];\n5[label=\"Node Type: RETURN 5\n\"];\n}\n", + "returnDelete()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/return-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/return-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..7eddd38f6 --- /dev/null +++ b/tests/ast-parsing/expected/return-all.sol-0.8.14-compact.json @@ -0,0 +1,9 @@ +{ + "C": { + "returnConstant()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "returnVariable()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "returnTuple()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "returnTernary()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->3;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: RETURN 4\n\"];\n5[label=\"Node Type: RETURN 5\n\"];\n}\n", + "returnDelete()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/return-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/return-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..7eddd38f6 --- /dev/null +++ b/tests/ast-parsing/expected/return-all.sol-0.8.15-compact.json @@ -0,0 +1,9 @@ +{ + "C": { + "returnConstant()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "returnVariable()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "returnTuple()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "returnTernary()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->3;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: RETURN 4\n\"];\n5[label=\"Node Type: RETURN 5\n\"];\n}\n", + "returnDelete()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..00c3dbb1a --- /dev/null +++ b/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,8 @@ +{ + "Scope": { + "nested_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n}\n", + "if_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->4;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "while_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n}\n", + "for_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..00c3dbb1a --- /dev/null +++ b/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,8 @@ +{ + "Scope": { + "nested_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n}\n", + "if_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->4;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "while_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n}\n", + "for_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..00c3dbb1a --- /dev/null +++ b/tests/ast-parsing/expected/scope-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,8 @@ +{ + "Scope": { + "nested_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n}\n", + "if_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->4;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "while_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n}\n", + "for_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/struct-0.6.0.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/throw-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.13-compact.json b/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.13-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.13-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.14-compact.json b/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.14-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.14-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.15-compact.json b/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.15-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/top-level-0.7.4.sol-0.8.15-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.13-compact.json b/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.13-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.14-compact.json b/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.14-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.15-compact.json b/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.15-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-0.7.1.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.13-compact.json b/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.13-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.14-compact.json b/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.14-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.15-compact.json b/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.15-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-bis-0.7.1.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.13-compact.json b/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.13-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.14-compact.json b/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.14-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.15-compact.json b/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.15-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-nested-import-0.7.1.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..35c752376 --- /dev/null +++ b/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "T": { + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..35c752376 --- /dev/null +++ b/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "T": { + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..35c752376 --- /dev/null +++ b/tests/ast-parsing/expected/top_level_variable-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "T": { + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..503a5cebd --- /dev/null +++ b/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,8 @@ +{ + "T": { + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "T2": { + "h(uint256[10])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..503a5cebd --- /dev/null +++ b/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,8 @@ +{ + "T": { + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "T2": { + "h(uint256[10])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..503a5cebd --- /dev/null +++ b/tests/ast-parsing/expected/top_level_variable2-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,8 @@ +{ + "T": { + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "T2": { + "h(uint256[10])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..6099f6be4 --- /dev/null +++ b/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.13-compact.json @@ -0,0 +1,9 @@ +{ + "ERC20": { + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": { + "tryCatchFunctionCall()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: TRY 2\n\"];\n2->3;\n2->5;\n2->7;\n3[label=\"Node Type: CATCH 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->7;\n5[label=\"Node Type: CATCH 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: TRY 7\n\"];\n7->8;\n7->10;\n7->12;\n8[label=\"Node Type: CATCH 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->12;\n10[label=\"Node Type: CATCH 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: TRY 12\n\"];\n12->13;\n12->15;\n12->17;\n12->19;\n13[label=\"Node Type: CATCH 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->19;\n15[label=\"Node Type: CATCH 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->19;\n17[label=\"Node Type: CATCH 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: TRY 19\n\"];\n19->20;\n19->21;\n20[label=\"Node Type: CATCH 20\n\"];\n21[label=\"Node Type: CATCH 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n}\n", + "tryCatchContractDeployment()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: TRY 1\n\"];\n1->2;\n1->6;\n2[label=\"Node Type: CATCH 2\n\"];\n2->3;\n3[label=\"Node Type: TRY 3\n\"];\n3->4;\n3->5;\n4[label=\"Node Type: CATCH 4\n\"];\n5[label=\"Node Type: CATCH 5\n\"];\n6[label=\"Node Type: CATCH 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..6099f6be4 --- /dev/null +++ b/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.14-compact.json @@ -0,0 +1,9 @@ +{ + "ERC20": { + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": { + "tryCatchFunctionCall()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: TRY 2\n\"];\n2->3;\n2->5;\n2->7;\n3[label=\"Node Type: CATCH 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->7;\n5[label=\"Node Type: CATCH 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: TRY 7\n\"];\n7->8;\n7->10;\n7->12;\n8[label=\"Node Type: CATCH 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->12;\n10[label=\"Node Type: CATCH 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: TRY 12\n\"];\n12->13;\n12->15;\n12->17;\n12->19;\n13[label=\"Node Type: CATCH 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->19;\n15[label=\"Node Type: CATCH 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->19;\n17[label=\"Node Type: CATCH 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: TRY 19\n\"];\n19->20;\n19->21;\n20[label=\"Node Type: CATCH 20\n\"];\n21[label=\"Node Type: CATCH 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n}\n", + "tryCatchContractDeployment()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: TRY 1\n\"];\n1->2;\n1->6;\n2[label=\"Node Type: CATCH 2\n\"];\n2->3;\n3[label=\"Node Type: TRY 3\n\"];\n3->4;\n3->5;\n4[label=\"Node Type: CATCH 4\n\"];\n5[label=\"Node Type: CATCH 5\n\"];\n6[label=\"Node Type: CATCH 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..6099f6be4 --- /dev/null +++ b/tests/ast-parsing/expected/trycatch-0.6.0.sol-0.8.15-compact.json @@ -0,0 +1,9 @@ +{ + "ERC20": { + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": { + "tryCatchFunctionCall()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: TRY 2\n\"];\n2->3;\n2->5;\n2->7;\n3[label=\"Node Type: CATCH 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->7;\n5[label=\"Node Type: CATCH 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: TRY 7\n\"];\n7->8;\n7->10;\n7->12;\n8[label=\"Node Type: CATCH 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->12;\n10[label=\"Node Type: CATCH 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: TRY 12\n\"];\n12->13;\n12->15;\n12->17;\n12->19;\n13[label=\"Node Type: CATCH 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->19;\n15[label=\"Node Type: CATCH 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->19;\n17[label=\"Node Type: CATCH 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: TRY 19\n\"];\n19->20;\n19->21;\n20[label=\"Node Type: CATCH 20\n\"];\n21[label=\"Node Type: CATCH 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n}\n", + "tryCatchContractDeployment()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: TRY 1\n\"];\n1->2;\n1->6;\n2[label=\"Node Type: CATCH 2\n\"];\n2->3;\n3[label=\"Node Type: TRY 3\n\"];\n3->4;\n3->5;\n4[label=\"Node Type: CATCH 4\n\"];\n5[label=\"Node Type: CATCH 5\n\"];\n6[label=\"Node Type: CATCH 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.13-compact.json b/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.13-compact.json new file mode 100644 index 000000000..b5912e6b8 --- /dev/null +++ b/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.14-compact.json b/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.14-compact.json new file mode 100644 index 000000000..b5912e6b8 --- /dev/null +++ b/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.15-compact.json b/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.15-compact.json new file mode 100644 index 000000000..b5912e6b8 --- /dev/null +++ b/tests/ast-parsing/expected/tupleexpression-0.5.3.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..f7fcf9203 --- /dev/null +++ b/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..f7fcf9203 --- /dev/null +++ b/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..f7fcf9203 --- /dev/null +++ b/tests/ast-parsing/expected/unaryexpression-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..557c3d932 --- /dev/null +++ b/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,6 @@ +{ + "C": { + "f(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "g(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..557c3d932 --- /dev/null +++ b/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,6 @@ +{ + "C": { + "f(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "g(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..557c3d932 --- /dev/null +++ b/tests/ast-parsing/expected/unchecked-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,6 @@ +{ + "C": { + "f(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "g(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..74226bae7 --- /dev/null +++ b/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,17 @@ +{ + "A": {}, + "I": {}, + "Test": { + "ether_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "time_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "block_and_transactions()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n}\n", + "abi_encode()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n", + "error_handling()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "math_and_crypto()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n}\n", + "address_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n}\n", + "return_addr()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "address_edge_case()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "contract_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "type_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..74226bae7 --- /dev/null +++ b/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,17 @@ +{ + "A": {}, + "I": {}, + "Test": { + "ether_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "time_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "block_and_transactions()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n}\n", + "abi_encode()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n", + "error_handling()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "math_and_crypto()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n}\n", + "address_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n}\n", + "return_addr()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "address_edge_case()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "contract_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "type_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..74226bae7 --- /dev/null +++ b/tests/ast-parsing/expected/units_and_global_variables-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,17 @@ +{ + "A": {}, + "I": {}, + "Test": { + "ether_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "time_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "block_and_transactions()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n}\n", + "abi_encode()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n", + "error_handling()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "math_and_crypto()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n}\n", + "address_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n}\n", + "return_addr()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "address_edge_case()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "contract_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "type_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.13-compact.json b/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.13-compact.json new file mode 100644 index 000000000..27fa7c323 --- /dev/null +++ b/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.13-compact.json @@ -0,0 +1,9 @@ +{ + "L1": { + "f(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "L2": { + "f(bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.14-compact.json b/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.14-compact.json new file mode 100644 index 000000000..27fa7c323 --- /dev/null +++ b/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.14-compact.json @@ -0,0 +1,9 @@ +{ + "L1": { + "f(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "L2": { + "f(bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.15-compact.json b/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.15-compact.json new file mode 100644 index 000000000..27fa7c323 --- /dev/null +++ b/tests/ast-parsing/expected/using-for-0.4.1.sol-0.8.15-compact.json @@ -0,0 +1,9 @@ +{ + "L1": { + "f(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "L2": { + "f(bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..97689fda1 --- /dev/null +++ b/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "basic()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n11->12;\n12[label=\"Node Type: NEW VARIABLE 12\n\"];\n12->13;\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->14;\n14[label=\"Node Type: NEW VARIABLE 14\n\"];\n14->15;\n15[label=\"Node Type: NEW VARIABLE 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: NEW VARIABLE 24\n\"];\n24->25;\n25[label=\"Node Type: NEW VARIABLE 25\n\"];\n25->26;\n26[label=\"Node Type: NEW VARIABLE 26\n\"];\n26->27;\n27[label=\"Node Type: NEW VARIABLE 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: NEW VARIABLE 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: NEW VARIABLE 31\n\"];\n31->32;\n32[label=\"Node Type: NEW VARIABLE 32\n\"];\n32->33;\n33[label=\"Node Type: NEW VARIABLE 33\n\"];\n33->34;\n34[label=\"Node Type: NEW VARIABLE 34\n\"];\n34->35;\n35[label=\"Node Type: NEW VARIABLE 35\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..97689fda1 --- /dev/null +++ b/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "basic()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n11->12;\n12[label=\"Node Type: NEW VARIABLE 12\n\"];\n12->13;\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->14;\n14[label=\"Node Type: NEW VARIABLE 14\n\"];\n14->15;\n15[label=\"Node Type: NEW VARIABLE 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: NEW VARIABLE 24\n\"];\n24->25;\n25[label=\"Node Type: NEW VARIABLE 25\n\"];\n25->26;\n26[label=\"Node Type: NEW VARIABLE 26\n\"];\n26->27;\n27[label=\"Node Type: NEW VARIABLE 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: NEW VARIABLE 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: NEW VARIABLE 31\n\"];\n31->32;\n32[label=\"Node Type: NEW VARIABLE 32\n\"];\n32->33;\n33[label=\"Node Type: NEW VARIABLE 33\n\"];\n33->34;\n34[label=\"Node Type: NEW VARIABLE 34\n\"];\n34->35;\n35[label=\"Node Type: NEW VARIABLE 35\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..97689fda1 --- /dev/null +++ b/tests/ast-parsing/expected/variable-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "basic()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n11->12;\n12[label=\"Node Type: NEW VARIABLE 12\n\"];\n12->13;\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->14;\n14[label=\"Node Type: NEW VARIABLE 14\n\"];\n14->15;\n15[label=\"Node Type: NEW VARIABLE 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: NEW VARIABLE 24\n\"];\n24->25;\n25[label=\"Node Type: NEW VARIABLE 25\n\"];\n25->26;\n26[label=\"Node Type: NEW VARIABLE 26\n\"];\n26->27;\n27[label=\"Node Type: NEW VARIABLE 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: NEW VARIABLE 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: NEW VARIABLE 31\n\"];\n31->32;\n32[label=\"Node Type: NEW VARIABLE 32\n\"];\n32->33;\n33[label=\"Node Type: NEW VARIABLE 33\n\"];\n33->34;\n34[label=\"Node Type: NEW VARIABLE 34\n\"];\n34->35;\n35[label=\"Node Type: NEW VARIABLE 35\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..f9182c607 --- /dev/null +++ b/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->12;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n12[label=\"Node Type: IF 12\n\"];\n12->13[label=\"True\"];\n12->14[label=\"False\"];\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->15;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: END_IF 15\n\"];\n15->10;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..f9182c607 --- /dev/null +++ b/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->12;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n12[label=\"Node Type: IF 12\n\"];\n12->13[label=\"True\"];\n12->14[label=\"False\"];\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->15;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: END_IF 15\n\"];\n15->10;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..f9182c607 --- /dev/null +++ b/tests/ast-parsing/expected/variabledeclaration-0.5.0.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->12;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n12[label=\"Node Type: IF 12\n\"];\n12->13[label=\"True\"];\n12->14[label=\"False\"];\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->15;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: END_IF 15\n\"];\n15->10;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/while-all.sol-0.8.13-compact.json b/tests/ast-parsing/expected/while-all.sol-0.8.13-compact.json new file mode 100644 index 000000000..4d9657391 --- /dev/null +++ b/tests/ast-parsing/expected/while-all.sol-0.8.13-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->8;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/while-all.sol-0.8.14-compact.json b/tests/ast-parsing/expected/while-all.sol-0.8.14-compact.json new file mode 100644 index 000000000..4d9657391 --- /dev/null +++ b/tests/ast-parsing/expected/while-all.sol-0.8.14-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->8;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/while-all.sol-0.8.15-compact.json b/tests/ast-parsing/expected/while-all.sol-0.8.15-compact.json new file mode 100644 index 000000000..4d9657391 --- /dev/null +++ b/tests/ast-parsing/expected/while-all.sol-0.8.15-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->8;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.13-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.13-compact.json new file mode 100644 index 000000000..c7716d2db --- /dev/null +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.13-compact.json @@ -0,0 +1,7 @@ +{ + "L": {}, + "C": { + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.14-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.14-compact.json new file mode 100644 index 000000000..c7716d2db --- /dev/null +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.14-compact.json @@ -0,0 +1,7 @@ +{ + "L": {}, + "C": { + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.15-compact.json b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.15-compact.json new file mode 100644 index 000000000..c7716d2db --- /dev/null +++ b/tests/ast-parsing/expected/yul-0.8.0.sol-0.8.15-compact.json @@ -0,0 +1,7 @@ +{ + "L": {}, + "C": { + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index eafe6a2f3..c255f06c3 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -60,7 +60,7 @@ VERSIONS_04 = make_version(4, 0, 26) VERSIONS_05 = make_version(5, 0, 17) VERSIONS_06 = make_version(6, 0, 12) VERSIONS_07 = make_version(7, 0, 6) -VERSIONS_08 = make_version(8, 0, 12) +VERSIONS_08 = make_version(8, 0, 15) ALL_VERSIONS = VERSIONS_04 + VERSIONS_05 + VERSIONS_06 + VERSIONS_07 + VERSIONS_08 From 77551209d2f3307219e2d09175c3b9185a237522 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 15:08:16 -0500 Subject: [PATCH 065/202] convert .call() member of address type alias to low level call --- slither/slithir/convert.py | 8 +++++++- .../{calldata.sol => calldata-0.8.9.sol} | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) rename tests/ast-parsing/user_defined_value_type/{calldata.sol => calldata-0.8.9.sol} (97%) diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 663d96abe..35fc8e11a 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -33,6 +33,7 @@ from slither.core.solidity_types.elementary_type import ( MaxValues, ) from slither.core.solidity_types.type import Type +from slither.core.solidity_types.type_alias import TypeAlias from slither.core.variables.function_type_variable import FunctionTypeVariable from slither.core.variables.state_variable import StateVariable from slither.core.variables.variable import Variable @@ -428,6 +429,9 @@ def propagate_type_and_convert_call(result, node): continue new_ins = propagate_types(ins, node) + # Validate that type was propagated + if isinstance(new_ins, OperationWithLValue): + assert new_ins.lvalue.type if new_ins: if isinstance(new_ins, (list,)): for new_ins_ in new_ins: @@ -531,7 +535,9 @@ def propagate_types(ir, node: "Node"): # pylint: disable=too-many-locals return convert_type_of_high_and_internal_level_call(ir, contract) # Convert HighLevelCall to LowLevelCall - if isinstance(t, ElementaryType) and t.name == "address": + if (isinstance(t, ElementaryType) and t.name == "address") or ( + isinstance(t, TypeAlias) and t.underlying_type.name == "address" + ): # Cannot be a top level function with this. assert isinstance(node_function, FunctionContract) if ir.destination.name == "this": diff --git a/tests/ast-parsing/user_defined_value_type/calldata.sol b/tests/ast-parsing/user_defined_value_type/calldata-0.8.9.sol similarity index 97% rename from tests/ast-parsing/user_defined_value_type/calldata.sol rename to tests/ast-parsing/user_defined_value_type/calldata-0.8.9.sol index feb2d8ac3..b69e2e0d6 100644 --- a/tests/ast-parsing/user_defined_value_type/calldata.sol +++ b/tests/ast-parsing/user_defined_value_type/calldata-0.8.9.sol @@ -1,3 +1,4 @@ +pragma solidity ^0.8.9; pragma abicoder v2; type MyAddress is address; @@ -21,7 +22,7 @@ contract C { test[0] = MyAddress.wrap(address(21)); test[1] = MyAddress.wrap(address(22)); test[2] = MyAddress.wrap(address(23)); - this.f(test); + // this.f(test); test_equality(test); return true; } From ee82e1016420d80b68195988fc4a31f164bfd9d8 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 17:29:16 -0500 Subject: [PATCH 066/202] fix argument propagation for .unwrap --- slither/slithir/convert.py | 14 +++++++++++--- .../{argument.sol => argument-0.8.9.sol} | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) rename tests/ast-parsing/user_defined_value_type/{argument.sol => argument-0.8.9.sol} (86%) diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 35fc8e11a..ef5cacc16 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -400,6 +400,13 @@ def propagate_type_and_convert_call(result, node): ins = new_ins result[idx] = ins + # If there's two consecutive type conversions, keep only the last + # ARG_CALL x call_data = [x] + # TMP_4 = CONVERT x to Fix call_data = [] + # TMP_5 = CONVERT TMP_4 to uint192 call_data = [TMP_5] + if isinstance(ins, TypeConversion) and ins.variable in call_data: + call_data.remove(ins.variable) + if isinstance(ins, Argument): # In case of dupplicate arguments we overwrite the value # This can happen because of addr.call.value(1).value(2) @@ -429,10 +436,10 @@ def propagate_type_and_convert_call(result, node): continue new_ins = propagate_types(ins, node) - # Validate that type was propagated - if isinstance(new_ins, OperationWithLValue): - assert new_ins.lvalue.type if new_ins: + # Validate that type was propagated + if isinstance(new_ins, OperationWithLValue): + assert new_ins.lvalue.type if isinstance(new_ins, (list,)): for new_ins_ in new_ins: new_ins_.set_node(ins.node) @@ -1682,6 +1689,7 @@ def convert_constant_types(irs): # TODO: add POP instruction break types = [p.type for p in func.parameters] + assert len(types) == len(ir.arguments) for idx, arg in enumerate(ir.arguments): t = types[idx] if isinstance(t, ElementaryType): diff --git a/tests/ast-parsing/user_defined_value_type/argument.sol b/tests/ast-parsing/user_defined_value_type/argument-0.8.9.sol similarity index 86% rename from tests/ast-parsing/user_defined_value_type/argument.sol rename to tests/ast-parsing/user_defined_value_type/argument-0.8.9.sol index 7bdc7d560..55fe237e1 100644 --- a/tests/ast-parsing/user_defined_value_type/argument.sol +++ b/tests/ast-parsing/user_defined_value_type/argument-0.8.9.sol @@ -11,7 +11,7 @@ contract FixLib { uint256 y = uint192(Fix.unwrap(x)); return div(y, 1e18); } - function broken(Fix x) external pure returns (uint256) { + function test(Fix x) external pure returns (uint256) { return div(uint192(Fix.unwrap(x)), 1e18); } } From 378f5373f33334a0bc5d917cc9f6b8538244edd1 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 17:44:16 -0500 Subject: [PATCH 067/202] remove invalid assertion --- slither/slithir/convert.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index ef5cacc16..2d5f7ad35 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -437,9 +437,6 @@ def propagate_type_and_convert_call(result, node): new_ins = propagate_types(ins, node) if new_ins: - # Validate that type was propagated - if isinstance(new_ins, OperationWithLValue): - assert new_ins.lvalue.type if isinstance(new_ins, (list,)): for new_ins_ in new_ins: new_ins_.set_node(ins.node) From 57cbafa51dd87190e2eec16e150a631c5bae69e7 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 18:20:32 -0500 Subject: [PATCH 068/202] handle constant conversionn of type alias --- slither/slithir/convert.py | 5 ++++- .../{constant.sol => constant-0.8.9.sol} | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) rename tests/ast-parsing/user_defined_value_type/{constant.sol => constant-0.8.9.sol} (88%) diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 2d5f7ad35..0e2311f69 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -1667,7 +1667,10 @@ def convert_constant_types(irs): if isinstance(ir.rvalue, TupleVariable): # TODO: fix missing Unpack conversion continue - if ir.rvalue.type.type not in ElementaryTypeInt: + if isinstance(ir.rvalue.type, TypeAlias): + ir.rvalue.set_type(ElementaryType(ir.lvalue.type.name)) + was_changed = True + elif ir.rvalue.type.type not in ElementaryTypeInt: ir.rvalue.set_type(ElementaryType(ir.lvalue.type.type)) was_changed = True if isinstance(ir, Binary): diff --git a/tests/ast-parsing/user_defined_value_type/constant.sol b/tests/ast-parsing/user_defined_value_type/constant-0.8.9.sol similarity index 88% rename from tests/ast-parsing/user_defined_value_type/constant.sol rename to tests/ast-parsing/user_defined_value_type/constant-0.8.9.sol index 0cab2a6f3..70b395441 100644 --- a/tests/ast-parsing/user_defined_value_type/constant.sol +++ b/tests/ast-parsing/user_defined_value_type/constant-0.8.9.sol @@ -1,5 +1,5 @@ type T is int224; -pragma solidity >= 0.8.12; +pragma solidity ^0.8.9; contract C { T constant public s = T.wrap(int224(165521356710917456517261742455526507355687727119203895813322792776)); T constant public t = s; From b6e17811f9e6d9ac359c97f548eb8d6e0a55d072 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 18:41:45 -0500 Subject: [PATCH 069/202] add tests and artifacts --- .../user_defined_types.sol-0.8.10-compact.zip | Bin 3215 -> 0 bytes .../user_defined_types.sol-0.8.11-compact.zip | Bin 3215 -> 0 bytes .../user_defined_types.sol-0.8.12-compact.zip | Bin 3217 -> 0 bytes .../user_defined_types.sol-0.8.8-compact.zip | Bin 3180 -> 0 bytes .../argument-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 3576 bytes .../argument-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 3578 bytes .../argument-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 3581 bytes .../argument-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 3575 bytes .../argument-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 3572 bytes .../argument-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 3578 bytes .../argument-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 3566 bytes .../calldata-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 9648 bytes .../calldata-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 9661 bytes .../calldata-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 9662 bytes .../calldata-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 9661 bytes .../calldata-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 9632 bytes .../calldata-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 9666 bytes .../calldata-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 9489 bytes .../constant-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 2428 bytes .../constant-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 2429 bytes .../constant-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 2431 bytes .../constant-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 2430 bytes .../constant-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 2432 bytes .../constant-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 2432 bytes .../constant-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 2413 bytes .../erc20-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 12287 bytes .../erc20-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 12318 bytes .../erc20-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 12317 bytes .../erc20-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 12308 bytes .../erc20-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 12318 bytes .../erc20-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 12314 bytes .../erc20-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 12316 bytes ...n_parenthesis-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 5969 bytes ...n_parenthesis-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 5964 bytes ...n_parenthesis-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 5972 bytes ...n_parenthesis-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 5977 bytes ...n_parenthesis-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 5981 bytes ...n_parenthesis-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 5969 bytes ...in_parenthesis-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 5936 bytes ...defined_types-0.8.8.sol-0.8.10-compact.zip | Bin 0 -> 3244 bytes ...defined_types-0.8.8.sol-0.8.11-compact.zip | Bin 0 -> 3245 bytes ...defined_types-0.8.8.sol-0.8.12-compact.zip | Bin 0 -> 3243 bytes ...defined_types-0.8.8.sol-0.8.13-compact.zip | Bin 0 -> 3246 bytes ...defined_types-0.8.8.sol-0.8.14-compact.zip | Bin 0 -> 3243 bytes ...defined_types-0.8.8.sol-0.8.15-compact.zip | Bin 0 -> 3245 bytes ..._defined_types-0.8.8.sol-0.8.8-compact.zip | Bin 0 -> 3216 bytes .../argument-0.8.8.sol-0.8.10-compact.json | 7 +++ .../argument-0.8.8.sol-0.8.11-compact.json | 7 +++ .../argument-0.8.8.sol-0.8.12-compact.json | 7 +++ .../argument-0.8.8.sol-0.8.13-compact.json | 7 +++ .../argument-0.8.8.sol-0.8.14-compact.json | 7 +++ .../argument-0.8.8.sol-0.8.15-compact.json | 7 +++ .../argument-0.8.8.sol-0.8.8-compact.json | 7 +++ .../calldata-0.8.8.sol-0.8.10-compact.json | 10 ++++ .../calldata-0.8.8.sol-0.8.11-compact.json | 10 ++++ .../calldata-0.8.8.sol-0.8.12-compact.json | 10 ++++ .../calldata-0.8.8.sol-0.8.13-compact.json | 10 ++++ .../calldata-0.8.8.sol-0.8.14-compact.json | 10 ++++ .../calldata-0.8.8.sol-0.8.15-compact.json | 10 ++++ .../calldata-0.8.8.sol-0.8.8-compact.json | 10 ++++ .../constant-0.8.8.sol-0.8.10-compact.json | 3 ++ .../constant-0.8.8.sol-0.8.11-compact.json | 3 ++ .../constant-0.8.8.sol-0.8.12-compact.json | 3 ++ .../constant-0.8.8.sol-0.8.13-compact.json | 3 ++ .../constant-0.8.8.sol-0.8.14-compact.json | 3 ++ .../constant-0.8.8.sol-0.8.15-compact.json | 3 ++ .../constant-0.8.8.sol-0.8.8-compact.json | 3 ++ .../erc20-0.8.8.sol-0.8.10-compact.json | 22 ++++++++ .../erc20-0.8.8.sol-0.8.11-compact.json | 22 ++++++++ .../erc20-0.8.8.sol-0.8.12-compact.json | 22 ++++++++ .../erc20-0.8.8.sol-0.8.13-compact.json | 22 ++++++++ .../erc20-0.8.8.sol-0.8.14-compact.json | 22 ++++++++ .../erc20-0.8.8.sol-0.8.15-compact.json | 22 ++++++++ .../erc20-0.8.8.sol-0.8.8-compact.json | 22 ++++++++ ..._parenthesis-0.8.8.sol-0.8.10-compact.json | 14 +++++ ..._parenthesis-0.8.8.sol-0.8.11-compact.json | 14 +++++ ..._parenthesis-0.8.8.sol-0.8.12-compact.json | 14 +++++ ..._parenthesis-0.8.8.sol-0.8.13-compact.json | 14 +++++ ..._parenthesis-0.8.8.sol-0.8.14-compact.json | 14 +++++ ..._parenthesis-0.8.8.sol-0.8.15-compact.json | 14 +++++ ...n_parenthesis-0.8.8.sol-0.8.8-compact.json | 14 +++++ ...efined_types-0.8.8.sol-0.8.10-compact.json | 10 ++++ ...efined_types-0.8.8.sol-0.8.11-compact.json | 10 ++++ ...efined_types-0.8.8.sol-0.8.12-compact.json | 10 ++++ ...efined_types-0.8.8.sol-0.8.13-compact.json | 10 ++++ ...efined_types-0.8.8.sol-0.8.14-compact.json | 10 ++++ ...efined_types-0.8.8.sol-0.8.15-compact.json | 10 ++++ ...defined_types-0.8.8.sol-0.8.8-compact.json | 10 ++++ ...{argument-0.8.9.sol => argument-0.8.8.sol} | 2 - ...{calldata-0.8.9.sol => calldata-0.8.8.sol} | 1 - ...{constant-0.8.9.sol => constant-0.8.8.sol} | 2 +- .../{erc20.sol => erc20-0.8.8.sol} | 0 .../in_parenthesis-0.8.8.sol | 48 ++++++++++++++++++ .../in_parenthesis.sol | 9 ---- .../user_defined_types-0.8.8.sol} | 0 tests/test_ast_parsing.py | 9 +++- 96 files changed, 519 insertions(+), 14 deletions(-) delete mode 100644 tests/ast-parsing/compile/user_defined_types.sol-0.8.10-compact.zip delete mode 100644 tests/ast-parsing/compile/user_defined_types.sol-0.8.11-compact.zip delete mode 100644 tests/ast-parsing/compile/user_defined_types.sol-0.8.12-compact.zip delete mode 100644 tests/ast-parsing/compile/user_defined_types.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.13-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.14-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.zip create mode 100644 tests/ast-parsing/compile/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/erc20-0.8.8.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/in_parenthesis-0.8.8.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.13-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.14-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.15-compact.json create mode 100644 tests/ast-parsing/expected/user_defined_value_type/user_defined_types-0.8.8.sol-0.8.8-compact.json rename tests/ast-parsing/user_defined_value_type/{argument-0.8.9.sol => argument-0.8.8.sol} (94%) rename tests/ast-parsing/user_defined_value_type/{calldata-0.8.9.sol => calldata-0.8.8.sol} (98%) rename tests/ast-parsing/user_defined_value_type/{constant-0.8.9.sol => constant-0.8.8.sol} (89%) rename tests/ast-parsing/user_defined_value_type/{erc20.sol => erc20-0.8.8.sol} (100%) create mode 100644 tests/ast-parsing/user_defined_value_type/in_parenthesis-0.8.8.sol delete mode 100644 tests/ast-parsing/user_defined_value_type/in_parenthesis.sol rename tests/ast-parsing/{user_defined_types.sol => user_defined_value_type/user_defined_types-0.8.8.sol} (100%) diff --git a/tests/ast-parsing/compile/user_defined_types.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/user_defined_types.sol-0.8.10-compact.zip deleted file mode 100644 index 245529e6b77aa572359813a25dc4f242f759cd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3215 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 diff --git a/tests/ast-parsing/compile/user_defined_types.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_types.sol-0.8.8-compact.zip deleted file mode 100644 index 36924b8c2c904640651d8fb697001be94eda7f5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3180 zcma)E1pjU7|Q9o}_dwAe0Z{OGUj=nG45dLsccRz10Y6?n#EdUS!04T-9 zxk_G2`V@=}H!INP^m`%rx*om3m^@S#sH1I{ZrJ)9Qqp2czH~qr9WmGi+q zqPO3I&SX@Bm}b-|_D%!$j~DTm38BhQZ`QZo!;jw*a$6?TW(4YR=FLB~)D-2kJ~Q+* zb(!-golB2Mz4Bo9QGs}KcahiKHaomv#&`Th1Ep z4XIfO|MMh;gYxzvC7`7`h_`ZKl~~H%m_%M(fHnf@YjtP*&dO<9rpKt93^IFjqhWx} z&^7VdU)C?Uc?Q{?d$;h}hh9v%XOY;^vv!coI#_lI6N|9@9cYn3MQXTSTHIazV_BH0 zTJ6p~{B}pukL;Ube=NI~xVTzz5!VWi3V~%_bW1>*xj|?}% z1iEA;B@Y+}h^Nb~FU=|dSgti%2#m}hL&&62V`k>5YyJ>QllxhtY{us(!j_+pi@^^# zOzTNeyhc&-?Q%jpw0YnLZS6{)Ey&ZXP(D$dfXEykp#20QRruE}ojyXTi5X}Ok6n|{2<>^zf{jG>U{1xxt zA|d-+lzvSv-0^;COQKV0r$^z9k^UIVatHf$8cUj%rKO*>)O4q8^-tvfP+waDA^t&Bq|J!C|YeKDPz-S`sFL9rzAI|02JtsrPOM338NN&f^V+y%aZ}P)w zf93G(;Bg5Va`P`pBkG_B&_T|SXLD81BPO&j)<#VDP2!PW_Y-!AADQji$(6j;Gi*ns z8Y3j_N(p^zp?}-CjmPXwA#HubBIg!|HKH0GUURrhVEhz?G5k7FP6vJ>BYfGWp3UPU z9O2v=NtxY$f2&oRB&6K`V+I4R^lL>+=z2z9H})^giH-4_ zl|r|fNyh;ifU4T%y9qXTPL@XzA$?NwA4ON;j~_;lh=RKAu5I4iWpF8AV8ZC?DD(cB zs49u5PPyf!knrwC^-F{vjiuej*Q;saJH?O{+w#xt4zwOHkiqJ{_>I~8obqvyX^V}Q zS9EBCVj%y5tHF-F%FkIcHN&vV6q=;rKrxH1-nU5WYF-5#fN0Ch{$l7`s(P6;w^>e2 zbh`_I31}7G)cB;IYS7+~MjGX|``M#}zg(0y$A$fKu#LPDkNuH6T@O)CcK`Bq<{kn&zQE%!w={nU0rNvSW|yeytV zlaa@zmTM)dDrn3~JFd0x*`hXT+S7&+sxBrSI`HY}0nDi4kLE%$M8EIPg*1@BO2zTQ99tN6h_te`s zVtrltuC%MEHUpQAYJvXuqMb(O1p!eaz{ZzFraphp3foR>EQ7WLazoV=1NKMYtZN*9 zzD$ktUfuY~SS`Z;NrPsksk!|wAVw{mPQUD_Vh1YAmvVsmQL|mjQ*v@j+a{x<(;Bmg z=%r)FPBx^1#74Pc;^qcq?hK6OvJ~xuUY{<}x5e3YcTNh~XdJs38x|<(a_pywQ7gZ8 zRk8~+$n0U-N-eC&`Ys@;^vO$U`1w7-uGD~Iwi@FXZBKKTY`}M0-C=Yb@t9vR6C4=e zOI&TiB@x;z-ZCX(unp*`Inuj*ZZ;6Ji)%PJ&?cMa>+;|VQyjzm3=r&?G0#0PsF(0Qo@WQ#X8*ff`NOUoFDa`p72t!Z#v1+YbuMD{ zsNI^W(Kv8>*KSSc69&!|;M?V4-TPoN|4>tun5kFwvb=oZ3oQO8f0N#ZF#Ms_wLbL3 z{8HqXr2HsX{(uHa`j)~DGhx>>RKSpm1M%f>On^i&H5fDF&>hw}d(2N|5C9qSm9mGO z`cGZ{MNX9akvo|E-uW3srFD2g`b>d?23Y}hDAVRX~4I;huEH zKo#)bhx~_>AF{yC(eLP@UGn5iP~}u-7p9&Ca5)W6*on9IHwplx)b4|XQKsQ*Yk9KPvcg>@8Zf%nw`UPS z3|FJGcQWb`Ak(S!+;bW0j>ut5-1*4)`2afnFsP?ud=YU+Y=sqqPVA+Hu;zR9d~_gf zvioEQ{?qM!Rd@^%C}lhURJ2NRa&miWU3N-2uPo4sPH&V7NvaELL(~R$b|p{zArD>y z#XPF;*v3ZWybdce9O-Fy-Vz=*WZS6sZ^Few*FV<06S8>_f~IXPo>YxHM}_CzXR$%l zvk*H8^9?8+np;I^4Y|wEV8s3Y*BzJAnvZ+i-d@NY4)*!`Ql@o-zgd#SioB+Y>oUB$ z;U?dO6;NsrLUd`t1{YKJOxO$-D#d`Y0)0wiSC)=h2|GK*tGU6E9u_)~P-`J+dDnItUr6l6E z+@k3GYk!Y5H3f;P%vH+rMXwGSCAjE55J}mb&3UC@UfINDKpJDK=2l3J26WH0m(bJf zwywn)3_*k*cZml09IgbPhx^P}=)?z*4s>m&f0;RF$5yWxhx8-D*jr^uGJ{L)(!C{8 zlS(otM#*1*#thpX!TL;^?J%yptcv~;=M>tU3fEZ7At*;uIM9?9_0hh6AKf~e zCx4Pcqq7?1Usqj~(MZ9{NIYYwOXjZXg+RX14f`=wap>JIRHcIkhqnkxx(bXwdCX6Y zJ2B%$k-&xvMXS%A*5;ZwiYV}^)rtKU=a75C2-!`9$W>JHOn zb&ZbCN}fx0Cj^iu>&nHLrUdLVPxF@n!Ryp$q1Tey!Q7zTbKJ$XG1RF5c}E2%Q7C9C zDMeUdReG7-G1m9eJCnDxacFylIC+VBeCZUBh2lO3Hci&mdmU+%V8UyMU)fGx@<^@@ zMqlM7#hO@MWqZ;?^?+n538Bn8BC_`$(b+p$k#R=C z@$K{d{quT#-p>!uFYkZgG1Mg@Rss+Lr~%XITP9DGXjyfr001d70DvC=0ND9B`+GRT z{e;CtWdGso=?-%Y^78cYgW37mySN58in#fD!pVt&0BZmM0RSi7wmUCq}E zhgq<0^9ArJ1iA87pGuMDz=q(_22kS8I%VjqLE9hnf^l(AMSUthN2r1EFwe3X78wp? z2qR@FP6*62gLGz;6<`VDai(_mXt$)j2dSf58dg3F&If5$98aRl^@_<3@Psi6$-4x% zTUXP9$g_k!xWY?6U- zHt?Q0Si_Fo&kMZ_&l9SkjICMdada|1Kq4u_Z=(~M`<1+2Ugo|grL5F04MyNPkU;*A z4K_PY&Mf})*fEUJ-<8wgClt~|j$R)N>cpeN$~a{%Ao^}$c114F-6Wl0 znxi{SsC>%+650*V2cQX#2X$3SN$)18r~Z0#x0r1trq-_aHhQ_0UqQ;6L`ML73U7oK zTEmXK!orH>se^UOVT=)h@Y-p@O|>ra9NL8Y5iZg-9LcvRAo3E4^wiktqxs;IFJaAa zHha=jW2qnBD>WxE!iwJAW)`GoA^*lkSr#J7Yx(^0h;~k3SF~q!4%O~Hd~KKKz#h=~ z$obkdPRe%?!QIv@SI9nmtGuU_Z8TLiWJ?&`Ii9}teJTwCVcd}pR8R^-2^a*ul%RUI z=|0TLb6nij!5nqu6+iy~ZEYaVbBbbNixh2%>;7dt!L7Qo5M9sXLz48o^N;g+)!aqd zE*z9Tv^ryilZ4HcWBGKH!2v|mPgqKY+sj}_L^^C|iAuFzrsb7z2+2dJb zLfTW>miwKpHjRVz%>vI;MGlCUUOl&@6W~EGS(6{!ksQ~JZ&phUcHn1c~l&fvK6^LqkNxSPe>{XY5@r-#+QIbX2*J+A#^LA~qtHOPx;=}ts2`!oZ? zQ61CwhruQDdo(q>_K;|_TSRbJF%9bqqiwS4Vctf3)TASJv|{dwiZ!Z5Ep)oj$%glj zxVUIur09axO&Rd6K8}PM|uJZcUOy zSD(J6PI+;7Moh2bN;GERg`Tam&|ZymMSQ=23!VP^`mK=`;#K9@3eq+H|qq`QDp*nOdRHy#mRmu(wsVix53ODp(jka>j}Vo2G<_<5T#P)Nb;3H_+xOAs!l8wtSH~ zH5pS;egkWw1rK<|N9mWap}mLhv=yDoM<|7lF6_E4?8d^B;dn>v?G&vWJ zC8$n5xg8Z9>|Rc)xx%FBTFhcj_se*%fHv+G0c{gkeCv>o3A|C-c~;ny6p0Ct$A8A> z`Irq*D7V@qK9_xUJM;Lx>zBXK-Eke_9wZgZzO;$=>uoGshSqCXNl`)qj;|)5$e*Mi zScj#bu&O}OMXg(R* zC8fnd{`*=2j_JJKh-5ZxZ6P_b?tbdt(VgBzJ2rdip}aZ66`@posIWDk5AOH=^B4`io+)vWjxf>;uhFl;UU)g>uH` zPQN(ew$w|$*NP2OuQ*~u3=8Fv6wS|XP?~q=uV=Sg8K@Li_+X)8)83rkO6ycap%kkyRaZ3X6L5zw}}&C!gWUS=gf>_df=rIm!%LJZcDQ#db&9>p@5KkUMhEssai&St$?m67+1qSDK%C!&>@Cp{h@Z$! zC;&;ge*;#17U6s!2afy+J$|pN?PxykTxq66XE=C~HOZ@+M={T37mJ@mL}@du-)wrM zL@_^Nf8EFIfSbPZfjPmxW2$@1q{#h*eZ}(!C+p!!Y`SOxRk@SKAhD)JvtE$Ic-lFq z&fk17zEbak*%#Ma{)mZzP0{NJ&a@P|*SQE`-sp(0E7*e#B znZILuE$26ur_v(uX0JXd_h$__tx##};g$DkLO2MvjwyOM70kmd<7@b<Q74`NUTV5C&2OL&`dI0G zrPDA-tq%HFD6@=6u_9#FgBrlwM%msmSiZBaU%2{Vgm|n{Njn+vCf6?NZPspaaB< z*|NquEU(JJ4Qb)ANT01VwQR-b{o+bihEjcT@8siljIDpyxGnG-h|20(MwUyqG%DW9 zTxx6?;#%anpft;woN511*ecu>+QW~P=;yq)FG;EUgxkKam^*V3rc%{}*j!DA(a!|F z2JI0p(G0E>WbXg+9BhsLXzV#L^Vug(Z?A4RdbyDO?L7^vLGvFRU3%zgJ+QalG4Qx? z|L|$whcghPFUG9+4V6j$3$^t{$imT=6yqMl!+G&$3ymGowvk%50hrs26w4=ybT%to ziFlPAk^I)^(UWJ_6Il-7F5w4Usn&XRY5ItWc+!QeAIGyyWDRUJkA82@zoh+ga1zMw zOC?USNK=QgH*&GiK4smOQJ(8r(mVOcw;^cwdSbfV4IP~GY2}>Lck#D~#mm%Nthh*Z zWP+$7ZK`np&pxG{n8tzJ_Jtn~B*OkrCMnJzU?Z}&97C?|&BhLa{kqlgOiUcco@w$q z(?)CEVG_v5(v%#hmQ}7uy@gw(&oAx5Bj3HQz7{NQEhV~>*x9l{atBcct$m5j|5Ojo zA~-v&<`B=KM+vazMCT^{Gdz;1YS(Cy(089Q}NX|q2X;I>gLupKVTS;)+*5n zd_N3@co*-hlN5d1=f&bEyT$Y9-NU5L+7xF*?B*LE^Mh?>D3(7L2jlJPTdG&AM%U!h zE=whC!nuuE1>ouGch8kii$741dabddGZ78r&$|C`bv)9vBX+{oi03OY_?i0JbEp8) z*4b^~6X%}Fnwpn`o*2_>s+D$bVf`rHL{KK zmnqgrN2)JZ-Xnap)*w{r`*nG9&iz1#JNa7DzM)Uoe5&w(dftNi6h-?Zsj*>A7KLi+ zg?FinHq;i0^>-cA%){Jk7_SnUNHbjZ9`b3*v2&+QOu_vaqv)K>DpmQ9!wfNNciTJ> z^Rq?5ixQJJv0BJX*m1{fdsbCNu6dVNG?XBIT1zR{$+$A;F+2M2Z@f%1m7xwnL&+m- zuS0mD>6W0|p}y)r;k9Xf0+AlQ$vzV_)FmKPBKq$= h_Akl)e+YvA=zps-LtP-rf8GTDF!|@?e|-l4{2v*C$I<`* literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5b0bfc860cb7f525bca4b84f768878f82147bb22 GIT binary patch literal 3578 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 nM1%Cd6WKo~`+r3O{}cZkpP3nf$p6y@{?GC| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c4be608bc74c831c2958ddbccab1fbefcf9f6776 GIT binary patch literal 3581 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..56841fbaf550d377626203b8d913e1446b3a3100 GIT binary patch literal 3575 zcma)<_dgVX_h zb%O^>$w({zBgoIk$t~31FEH2%7U<&PiExwl3i5+fky8L30RXW8fLe00yZm4IfYJ$k zt14Xq4(=)1!=IFH$*nFh6V$~nCx9X*4$f~zZMY4b`Q*lM_c^PLANR?^DO;ML!6vU7 zKAySGC>nR1QCO%ZFJ_t0sWa?4l1Q#n$kBeMi4GrfUSWo$q*&Yvto;ywPw~>puZqB- z#Fre!N>h0tp~yx^j$zV7hF=RLRuy3z1&kWdkA*;HiHCr21=c0^Gf2Yf1oOpT+XcSo z*|wo6tDme4=^beA)3DTd6F!jTy%sds}m^m+)s_SmSMXY8uM$8!jU1tkUv{}70-A0pXVlo-L|zNJ!MSRN*i zeu^`;(X#!^YmbW^jSEs@$G;>tk$slc4lP0K3$r4|kB+2H(M(3RRxc^t9liDEfS>NKatGlD;w-%T0pu%^M*nt`Z*8O<#y>-fs`K0m2 z#D{jpL7i|ww?&{eg-uQj=?VYj4FURdP{;yZ2La3;gRRn~AyB>1)rn=Sk z{qI*dGghbJ%1;Oyq^^kHJL{N9W*Hv4pZnv(0XlBDS4n7Su3&=q7P6{A_XJ|j*z*Nd z0^6cT;mf2>!Sq6`N{j0Tb6;h>NV=V1$@^ z=E!S^zWVC8ad0?`(rg<8CjEMMzN>F2iH;mp@b*pWl#%-#^zq$XOY4`)4MYUH)raY>!>z39+S>9 zD*tAyj*y-j0}z+HSpeO(6vUrN*rif^540pJeg|s;WpHs8LhrGC*RibV#Mei{#~|~a zpvN;U8Vp&y-uRAd`!?P{3=dz;aQ$=h;$K~LkUP@kQ?eL(w=*LrEL|Jq%JY^l>6s2W z^MKUn_sw1BpL)-PRK?(Qzs~p%7_f3;0(P(pkOM>eHp|?>%r`5OD}E$rQLfI7bIFFV zGWAY_VPXc65c05Wp!%`~>LD;#Z2yF)sdOAdJ)4ygGEaf#ERs&E>hW|gz+T>I%yKT6H|8D3zRS?iEaDsFEcXb zU>@4vqvj7W`HN?iO zw@mUxJMs{j$|J9gkz)j#`FA+dkXQ$M2g*yb>zc&_%U*CTiN`ut&urg=p80Bs(e>7- z0exOcF&MzTgE;d`((B-XBh%2@#yJUIL2Uj0rCs182S*-YAy4fc(0@<9c$%0Ew&qjj ziy^R1?Mwln^BLECX_okVxkjx3LV;;+XC+Zv3_3LkR+s;1%k}VUrRbY7p#g$f5gcfi zl=6AZYL-G+Y>*Bssl@qo(JE8Nu0xfseS*-Ire%R|u%i(`4qWMrE8 z*`;UsmTT^6Kany8`s2)e0nzV9(mw<;2gel5dyU%`eqyFLg;~LMfl~+l!!9apu*0sP z3m3`;IjuUBBZbXKg#v!I-ffbtu_!0HMoUEm)^xWkzhv<>R5`RQeQ+af$8$SjGvl** zPzapR^<@>zl0m;EgMhqv+-sWHdBiAjAXUjp7NPxOEAi|s4`C~Ax&lf4S@xAVEcvsg zb*lY22Rm6}k>(@RzNkg-%Oj01)jv4>g*tGb(z?8AakXSkQuX{bwA>|on3=5N z`|akt)~1P2hFzgmDOio3x5rYP26eTNnl@V#aw@30;r4XweFN%UFO&}gT%>}<^|W;) zE=j!8<=3=tnc29dXKI~K4eN`=W#`!a&Tyv#eVbI~)sqP8$Ukr0IGW{N58oK27FQ^n z?2ZnJ9RPEkcvbAFiOptTg2Vyf!-pJ5-N54U*sw>NHmm-6Vo@atTK0RMjHVdd6`(A5Ftg5ljM8jUuMt}@(D@wa`Jg_-=t(Rz ztCqI1h;#_1WhIC`U~fy z$X=KC`3TPD>}qFDh+ggAt!kr@R%EiOJ9KhW=dHT6(VF`wghXsPVC7k5()I3P$paq| zFMckeRHD^_p!1cuPN*}1@HX+BeAm9x_V!SvK6RgD+BEp^)HQB+3FM7SyPTAT1mXwvS&ngU39Q5N&1HNlR%3ETO zD@V{!@G4Xv`K><4<_VQ$2t?@Bx&e=7K#jQBoVa6ln>PIo67^CQK#rzMKi|Xeb|cm9 ztFu)%ZN5v*fR~O=FM8U!3|F0 zv(VvgnV5$tYYC#WGm_1(Kegl42qS}dn50h2*LCA@1PF*QGDsKKuU3?jr?36)H~64- zK_QJZ!Dv5tx!n2ruJCB3%TzWxW7vm>W?)vo& z{_1h!rt5%+`L1Nk=Am-@6Uyr0}7$j=Pk?!GEmM|r9sIfm;Gbk?F11^(ABT-}EaRQNU zE8ixHQQ)#Fo_X?au)*|`K4dJD3InBAvBZ9%^F+?B7O>s(qd_LmmI!09N7&#+Cgv$! zc@lS!!SC;gIei+{+Ecz~&dOI7LyqnXpSiSCOZi(y16(I*YX|OH^MGYWCg!>G4O5$< zxIzy^#Z>M!qLGex@!OpxuJ+Vi^q{|Ei=T*p&=^-q`XzC#N^0Q3aN3b?o&r4D1FJfB*qTO+6 zSk940OH1Lus1$56@f~UkG*3`DUl+^x`)^Tn7ncz1y1?1bn2&B)hNtFx-VRr_Ejv1T z6*w6D{B+_@@0Vwn)E9ipF08OZrTgEe0?2+?D!KLCEQvYjTqrNvjqRbM;mlmIBj%Jo zDG17~Ek=KDK#}R=AwboqqTZ)?yC8#=F0;C*#+I(mdYh=>+j`LmrQcZ9p^=YwXnmgd zEi}3X6xuFgU+rGV+Zvpa8cI&)hP}zsk?3p^8M!tanOPjW>j8+(rUyy?Sc66hIU!Ke z^n{c?TJ$__z>=zRCpybaSFPeQ2D2b#))etx_)+LZzacda| z&0Gx|tl@f^fc{K&Oo45yT?VbGWSLJBKea`c#rHfMI`N*XtT(^qGBZhX@A)!Ul1Dn) zyF}5I=lI(`hMR9h=+yc_f-*-#?uACGy<&H%ZE*Gx1;UrhP#ktd-8(`BVm@GP?mUkd zTbN&@oG|$S;{vsoCEGQZrpP7@3><$D;5I&azss>fe((p}i0LmqKMe4)8i7knF4<76 z8oy0wKsBP|a*#~MGy)!m-A|Fz61b`G`}Xut6^|{Ng&i~P7v6i0ZmTY*weLi!X%)Vv zOt`GT?JQoS!{%hurv4flCCtsCblo?cu!$38y0}ekOykqle&}`7Pkn&7F$t*#*?-Tm he?|8HizWGw{Lpo=S}ht=s&0b%R2zz{{Zg<$MygK literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..131c5769ed3f4fc726719794639c70292f321522 GIT binary patch literal 3572 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/argument-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a74b49ac1510e77161f322c69c1194d41257059c GIT binary patch literal 3566 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 StReqH{lEV4pO*yz@&5o}Gg`v{ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c69a936a3bd23c5e73baa09d82c8da216423b69c GIT binary patch literal 9661 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..2770368493927fb64a2fa9321aeb77a982d6c9dc GIT binary patch literal 9662 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b17496fc484df2a04c9d59a208d398e08a50e643 GIT binary patch literal 9661 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 GTRAH<+IKBXy=8 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/calldata-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..4b98a2bc6548b3a8c598312263ecc029d28e057b GIT binary patch literal 9489 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..24b01b8dfb98a5d3f15a3682b4953b8e05a65b78 GIT binary patch literal 2429 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..43f7607498787faf149dbf1909ac06fa9cdafc83 GIT binary patch literal 2431 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.13-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..647d124a43fd9832509633a757484e3481502e2c GIT binary patch literal 2430 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.14-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..50f2cc275bfdf103bc203c05d1ba26e42d981d10 GIT binary patch literal 2432 zcma);=QkUS0>*>bHQK7SA!doxmNqnMZ@D2_atec|@k5F*)kiA3c zk871;*&1%&(FelZ(G$G^!84C51!TXxnR$NyFV!+~ACgS29r4ur;ufu_^8!0;T|*Tk zo&)S0XG9$e9`=J}w%TtZKF~UucQ&5-TIq$NMa)A#DlP>eVQ0o0I!@DJTisQ=ZAuKZ z>an4&OVZ?T2DkbVDfKx<)u?U%W&YhUbiIj%P<+?dRvN~!%nEDqgi?AxE_1>c#Jwp{ zLhEex7+m>L0G`(xin=-{{uO9>@YXv+nORmqv&mr8VTTlSteP7UIus$5!D3Q22#+&N6ZErKcf#$}gZ;kA|;=Ci%`uAWrCIMmN-SipFUgwT0P=fG-WhL(u zi{{JIk={X_kvUv3q35Ua`=9d%(tI<6wV~w;lA){$X5$X&K}j?Iw78Wg=)r@P#+R$I z&lE(V8=N}92z3g|=Uj7-dc>p*V(k{3X3tSJl64_%dtax{_%=J~WV@W^>n?bsG@@#+ z7+7_S7TnntzdjE!DZ2{UAIbwCy|tspWNf+%@J(WFn-aKx`E~GyXIrXS@Q>t{(LBPb zd!`*WqTiVV7cMdt`X%Ku3}x@IdA?1_TyTjZ^gQ9n3)MxM{0tDBE|^>nn08~bA~ z8Tml9vP8{j)+aJ%uekg|XoPc8xKl1lGo+rES$&r!aQfOUj+^V^_~TeZ9FjCIW~)^{ zc3{BC9U`@3uV2D1*MF8ipd$INGt5IcsT~M1;VaCi=rVlypcc2<^#|hB{a2o)OWwYn z^+bt}ay94Pg@@AY48=L7&n3$#7B2L<&K>p->XY_~#n_bZZ7GJ<2(7S|8Q!ov(uhTvKCpptoIdXoC?Rwz^DWI%6CqIwsTdw$rao z+%|{zA*EX0d$!uTzTI9bNh_q--K&(Ht$6pTR+zMUUewAD!ELu|BGP(TNK@)l%_|RE z6)GaZvGI+`{EK$0P|{LcE!J>NxZmx)k%`KV^(4E{oi})GqA>F`a*2|{*)Byma1FnF zn^9g=F2}qp;OC@9Ey%CdxE)h&9AWc7C-E1%S7D!CgWQ6hU4v4bP{VBLo&cD&u!dVe z9OdTjFr6aFUPc~hFNPW#EN`lCUaWcx>Ke4fTlej3nUs*;{*-}fI4B0mBZ=Emm#~o2 z-A`i)cWo$A3biij-4ix!i$JHTe33vAR}Gw{ zN0myo^%5b(dx_Wjr2vscS}v@k*jN&5c~#Bt#XhVuc@VJjY(+GEac^-T zp2`YK{>m1doc>PGp)8DdjJH5~Spw`XBu>|LgI58^LEifu2etGGfFX!+-GrT~Z(Z1=@0rWu2z=fWHsx&Q&W?Fu~4zzeN1FcC> zwwjH;H)-0}R`h!4ZbxPMelK*(gqHU{#j13IF;AfXHlJ$Lu)0>L|D~3am-)cmc$ti{ z^8$@b0BWC3Pjxc9QWF1~h3ilYQirO>-S5`uQri6XZ9;f`BQ7Gw7SWSXw=EJ5Ea3U9 zuR#s0ni@H4SYysG6xH8N5II=WcTP)^e`@9mmva6o$g*F1>@x48wUmW%dMDxGO^rUj zFoVA&g2AlfI`il1gAV8NleHyZax+J7MGwlwW{JRJt|tVnOn|(Licc!5=D6n|$yb6n zn0;b|4x^Z~=O6oARYesK)VacMwpAi3-*bA9#rY;EAGym$!DW_=KY%l`c4SC`uHA!_ ztwcLA`PeQ?ezf?>eiBfGgsWpqi6cx6jOXwVsD$Bfjf&7sXK|l(IBYv3K9MxIAxFy` zWMhYIpTTOA59V?7I(15mq=+(NJT1+wfG=?8RrEN1==MRjFs<_Vwjv*KYby2d9YqvK zdX~b%7-hsz=1wti13Fvt>lf=A+jsGMT);ec>DNYrOx0AJ{7uV87k|gCZR0vwo$MPE zk(5TM+~AkoZFe}9-O!z6ds*sXp1lU4>Il;kPQ94*Lw7x_V;T!-Gb%8E;M?b@R?oZ~ zdDbK*@y+gOzF@cTn8=PZf2{l?y&HEkn}{Q>9dGc&EMuQF^IwC^nioeKwJvBR1EU7h i|MsHaYV_YkF#J>hpCzG@%q;)B8Gd8&yZPDwS^ok08i+vv literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.15-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..652617a3d536790adced2841064109600f63a13c GIT binary patch literal 2432 zcma);=T{O61IEF?J+4;nZSIu=wA=$VC+0RsL>if4iYr&SQp`c6=E5*@1W75{bwg&? zakT{8H#KLjoDJM>_x=8!^FF^1&w0*y{(v9c;S|UWzy{z4Oyw`RD`=`LGB^PMyaoWE z1ONb#VQ5Sw0v)M&Ud!+|n6S{mpx8TM5s`t22qfxebdXjECJfC50t5U3fcpS|NoM8^ zy+gh53dYB`Mto%-&^HyS(&;&u#Z6_#Fdf3WGWC;bJ)f5ozXo-)LW}N+cU?81|LD>| zb2Pnik8~;^x3I2{K^K?gdML%U({P>MTY%=pETfAaGESnnB>!m&xo0 z{M^Fw%;+sJed?b0(9^YpN6|P>!kK>vW3+5)(raI_1z`{25|?HP_Spz+;END%AD(&0 zeK(O0SJ5nq{r2A86w^9q#Yme*d=YAy0-Mhx+F{DB^}$F)b)6%~!>`m*!|fqj%sV4T zIar9z{h8NQ=fvX7j6;pm@S}dosdCZmR5@5pi zQFTH1ZAs7P%l`Y|$lZ;^yZh}YjjbU!bUC>)UG9r%jZrNIs=ePTwHy}&zyK;g2HvEV zsKmj0RSc-*BySJrHc0Sv{;p;f%tPXFrstC2u39B;_hHPs(dfGVYH(FaDbt|dQ0;c! zwAZViHJ!ZWm4}xOnY0A!w%ZvgE>4eS#FH)sKJzYG4EE!3%CWtmPs0R*zHoRe576TN z+P8V$)W{Vyf1Ca=6&Z^B(yl<_B$?(EiUyi~xU-vFgBWs=b#X4LP^Ihh9#FmT&Q5u| z8+fpX(P!m0wqv9WIKOho2t#-w?HD#*-T7AP9_-t?N>@OS+x145%(a~(Pst< z-tG2UM#nS|&MoTN?+FE8_;M!NM__0we=r}d%=6OUbQnb@Fiv2V&6n*Lv+CME#x~AJvCS1z0N=7lD=f@K15p7H3R0mwO(@vzD_Rg*8V+%2EQW>aKJgE-yCv?#^|IgIn-XCkI#6 zb?sQ)b5XLcITMNTTzZH2&ry-d0dmOnbXUbB?; zFJV{~ajoaqwU*gr^AdGmnbS&tN|`I_e)e1&#HBGv(Nn7|J^CX-Q_*_;&V@4E(c_)h zT;H)N-R;E5_e}o3RRJv{ke<`8=GntO!HkFwz0;QL9D0XQaTZ=J2G%~l-R4YRa@NWD zs#+tUq4u0z^zjb{ zd95A!$cc?7HY^yn8EP;qx0!DXDsNzO3vigK@yYyqE4=jRIBKfgKmU+EX3f|CGMI{* z`??wKZkB{g)kOTz_c|+Uh1W5*v?_4u=Y$h@g`P=UFIBU9K!S>@?U(f>gyE^SUUnl5 zgmlV5#uBfadfb8hIHfj&r;@dY`@>4>Gb2D8KgXQ!jE`;Q@XRbZ_w58|)E4@&uD^vD zdg=*h1%$QPa4zp@)-`Dy8=oJI!i<1fAe1^IgdDX(s1=3H^T2n#P4Hn-^+=fj#Y$nx zRB2}HxMk&@6{i(hdDSCB&kf@`^VABKTT_%-w8E-&V#J5HxUBcJ3khz?gt)dWrmVeBZ?+hxPP)En%$XOzI@~ z3imQcn`FDm&0EkTm4lCdjLbyG@HKW=RtB+h5(iS!6u*^MeIiRh*QI+(w`YO4UpzT+ z$_jzydliCM^Kx`7hPdQ%Iv9grfPMVMj&)+#C}GZRi#0vy>go#> zN%{rt9j`k6i2urOV{I}#Yb@h?7B=)-ql9Ixosb0 zvGiRyE~nD;!RBA91k0ZB1`Q5|u=M%8^oF!w_HyUX{Ui5;^qPi~k%)g5rZuh=pxW*o$l>!R921kgv1 z3iR&9x=WL4J#JS>LTv^eVozi5hA3&^Jk!TI`HQC3FHu+jN=`}clw6>r&`;dA0)2$#}>O#5Li{C$&E-W94j^;j~h5$*tF kGduOaz38_Z{Wtf4|JMI!NpJ@+`@e7CZ`^;kFxS89KWb``MF0Q* literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/constant-0.8.8.sol-0.8.8-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d98aa7751ecb2e21196bcd608e4695f411000076 GIT binary patch literal 2413 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.zip b/tests/ast-parsing/compile/user_defined_value_type/erc20-0.8.8.sol-0.8.12-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c9e8559cd8c272c1e62c9ba2c0504addd87c5309 GIT binary patch literal 12317 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