From e5c35def93b7642f0fc57be4530de2493af2dda8 Mon Sep 17 00:00:00 2001 From: Josselin Date: Thu, 21 Apr 2022 16:42:42 +0200 Subject: [PATCH 01/29] Update to crytic-compile 0.2.3 --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index d79287358..fb2744abc 100644 --- a/setup.py +++ b/setup.py @@ -14,10 +14,10 @@ setup( install_requires=[ "prettytable>=0.7.2", "pysha3>=1.0.2", - # "crytic-compile>=0.2.2", - "crytic-compile", + "crytic-compile>=0.2.3", + # "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=long_description, entry_points={ From f962d6c4eefcd4d5038a781875b826948f222b31 Mon Sep 17 00:00:00 2001 From: Josselin Date: Thu, 21 Apr 2022 18:57:52 +0200 Subject: [PATCH 02/29] 0.8.3 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index fb2744abc..3b5e24209 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( description="Slither is a Solidity static analysis framework written in Python 3.", url="https://github.com/crytic/slither", author="Trail of Bits", - version="0.8.2", + version="0.8.3", packages=find_packages(), python_requires=">=3.6", install_requires=[ From 4d1bcc6a5b8fed5dd37acf02a39e47615ef16947 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 27 Apr 2022 02:40:03 -0500 Subject: [PATCH 03/29] fix variable order printer by excluding immutables (#1184) --- setup.py | 6 +++--- slither/printers/summary/variable_order.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index fb2744abc..c7473f24e 100644 --- a/setup.py +++ b/setup.py @@ -14,10 +14,10 @@ setup( install_requires=[ "prettytable>=0.7.2", "pysha3>=1.0.2", - "crytic-compile>=0.2.3", - # "crytic-compile", + # "crytic-compile>=0.2.3", + "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=long_description, entry_points={ diff --git a/slither/printers/summary/variable_order.py b/slither/printers/summary/variable_order.py index f976441e3..9dc9e77c2 100644 --- a/slither/printers/summary/variable_order.py +++ b/slither/printers/summary/variable_order.py @@ -28,7 +28,7 @@ class VariableOrder(AbstractPrinter): txt += f"\n{contract.name}:\n" table = MyPrettyTable(["Name", "Type", "Slot", "Offset"]) for variable in contract.state_variables_ordered: - if not variable.is_constant: + if not variable.is_constant and not variable.is_immutable: slot, offset = contract.compilation_unit.storage_layout_of(contract, variable) table.add_row([variable.canonical_name, str(variable.type), slot, offset]) From 2c463abdb043564ac739883032964edec0b0e149 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 27 Apr 2022 02:43:04 -0500 Subject: [PATCH 04/29] feat: add arbitrary-send-erc20 and arbitrary-send-erc20-permit detectors (#1025) Add arbitrary-send-erc20 and arbitrary-send-erc20-permit detectors --- slither/detectors/all_detectors.py | 6 +- slither/detectors/erc/erc20/__init__.py | 0 .../erc/erc20/arbitrary_send_erc20.py | 95 +++ .../erc20/arbitrary_send_erc20_no_permit.py | 45 + .../erc/erc20/arbitrary_send_erc20_permit.py | 53 ++ .../{ => erc20}/incorrect_erc20_interface.py | 0 ...rbitrary_send.py => arbitrary_send_eth.py} | 6 +- .../0.4.25/arbitrary_send_erc20_permit.sol | 57 ++ ...t.sol.0.4.25.ArbitrarySendErc20Permit.json | 768 ++++++++++++++++++ .../0.5.16/arbitrary_send_erc20_permit.sol | 57 ++ ...t.sol.0.5.16.ArbitrarySendErc20Permit.json | 768 ++++++++++++++++++ .../0.6.11/arbitrary_send_erc20_permit.sol | 57 ++ ...t.sol.0.6.11.ArbitrarySendErc20Permit.json | 768 ++++++++++++++++++ .../0.7.6/arbitrary_send_erc20_permit.sol | 57 ++ ...it.sol.0.7.6.ArbitrarySendErc20Permit.json | 768 ++++++++++++++++++ .../0.8.0/arbitrary_send_erc20_permit.sol | 57 ++ ...it.sol.0.8.0.ArbitrarySendErc20Permit.json | 768 ++++++++++++++++++ .../0.4.25/arbitrary_send_erc20.sol | 77 ++ ...sol.0.4.25.ArbitrarySendErc20NoPermit.json | 703 ++++++++++++++++ .../0.5.16/arbitrary_send_erc20.sol | 77 ++ ...sol.0.5.16.ArbitrarySendErc20NoPermit.json | 703 ++++++++++++++++ .../0.6.11/arbitrary_send_erc20.sol | 77 ++ ...sol.0.6.11.ArbitrarySendErc20NoPermit.json | 703 ++++++++++++++++ .../0.7.6/arbitrary_send_erc20.sol | 77 ++ ....sol.0.7.6.ArbitrarySendErc20NoPermit.json | 703 ++++++++++++++++ .../0.8.0/arbitrary_send_erc20.sol | 77 ++ ....sol.0.8.0.ArbitrarySendErc20NoPermit.json | 703 ++++++++++++++++ .../arbitrary_send_erc20_inheritance.sol | 16 + ....sol.0.8.0.ArbitrarySendErc20NoPermit.json | 131 +++ .../0.4.25/arbitrary_send_eth.sol} | 0 ...send_eth.sol.0.4.25.ArbitrarySendEth.json} | 136 ++-- .../0.5.16/arbitrary_send_eth.sol} | 0 ...send_eth.sol.0.5.16.ArbitrarySendEth.json} | 60 +- .../0.6.11/arbitrary_send_eth.sol} | 0 ...send_eth.sol.0.6.11.ArbitrarySendEth.json} | 60 +- .../0.7.6/arbitrary_send_eth.sol} | 0 ..._send_eth.sol.0.7.6.ArbitrarySendEth.json} | 136 ++-- tests/test_detectors.py | 71 +- 38 files changed, 8631 insertions(+), 209 deletions(-) create mode 100644 slither/detectors/erc/erc20/__init__.py create mode 100644 slither/detectors/erc/erc20/arbitrary_send_erc20.py create mode 100644 slither/detectors/erc/erc20/arbitrary_send_erc20_no_permit.py create mode 100644 slither/detectors/erc/erc20/arbitrary_send_erc20_permit.py rename slither/detectors/erc/{ => erc20}/incorrect_erc20_interface.py (100%) rename slither/detectors/functions/{arbitrary_send.py => arbitrary_send_eth.py} (97%) create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol.0.4.25.ArbitrarySendErc20Permit.json create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol.0.5.16.ArbitrarySendErc20Permit.json create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol.0.6.11.ArbitrarySendErc20Permit.json create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol.0.7.6.ArbitrarySendErc20Permit.json create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol create mode 100644 tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol.0.8.0.ArbitrarySendErc20Permit.json create mode 100644 tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol create mode 100644 tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol.0.4.25.ArbitrarySendErc20NoPermit.json create mode 100644 tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol create mode 100644 tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol.0.5.16.ArbitrarySendErc20NoPermit.json create mode 100644 tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol create mode 100644 tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol.0.6.11.ArbitrarySendErc20NoPermit.json create mode 100644 tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol create mode 100644 tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol.0.7.6.ArbitrarySendErc20NoPermit.json create mode 100644 tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol create mode 100644 tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol.0.8.0.ArbitrarySendErc20NoPermit.json create mode 100644 tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol create mode 100644 tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol.0.8.0.ArbitrarySendErc20NoPermit.json rename tests/detectors/{arbitrary-send/0.4.25/arbitrary_send.sol => arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol} (100%) rename tests/detectors/{arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json => arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol.0.4.25.ArbitrarySendEth.json} (88%) rename tests/detectors/{arbitrary-send/0.5.16/arbitrary_send.sol => arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol} (100%) rename tests/detectors/{arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json => arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol.0.5.16.ArbitrarySendEth.json} (88%) rename tests/detectors/{arbitrary-send/0.6.11/arbitrary_send.sol => arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol} (100%) rename tests/detectors/{arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json => arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol.0.6.11.ArbitrarySendEth.json} (88%) rename tests/detectors/{arbitrary-send/0.7.6/arbitrary_send.sol => arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol} (100%) rename tests/detectors/{arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json => arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol.0.7.6.ArbitrarySendEth.json} (88%) diff --git a/slither/detectors/all_detectors.py b/slither/detectors/all_detectors.py index e287c258f..a79dcaf51 100644 --- a/slither/detectors/all_detectors.py +++ b/slither/detectors/all_detectors.py @@ -6,7 +6,9 @@ from .variables.uninitialized_local_variables import UninitializedLocalVars from .attributes.constant_pragma import ConstantPragma from .attributes.incorrect_solc import IncorrectSolc from .attributes.locked_ether import LockedEther -from .functions.arbitrary_send import ArbitrarySend +from .functions.arbitrary_send_eth import ArbitrarySendEth +from .erc.erc20.arbitrary_send_erc20_no_permit import ArbitrarySendErc20NoPermit +from .erc.erc20.arbitrary_send_erc20_permit import ArbitrarySendErc20Permit from .functions.suicidal import Suicidal # from .functions.complex_function import ComplexFunction @@ -34,7 +36,7 @@ from .shadowing.builtin_symbols import BuiltinSymbolShadowing from .operations.block_timestamp import Timestamp from .statements.calls_in_loop import MultipleCallsInLoop from .statements.incorrect_strict_equality import IncorrectStrictEquality -from .erc.incorrect_erc20_interface import IncorrectERC20InterfaceDetection +from .erc.erc20.incorrect_erc20_interface import IncorrectERC20InterfaceDetection from .erc.incorrect_erc721_interface import IncorrectERC721InterfaceDetection from .erc.unindexed_event_parameters import UnindexedERC20EventParameters from .statements.deprecated_calls import DeprecatedStandards diff --git a/slither/detectors/erc/erc20/__init__.py b/slither/detectors/erc/erc20/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/slither/detectors/erc/erc20/arbitrary_send_erc20.py b/slither/detectors/erc/erc20/arbitrary_send_erc20.py new file mode 100644 index 000000000..7aeaa1139 --- /dev/null +++ b/slither/detectors/erc/erc20/arbitrary_send_erc20.py @@ -0,0 +1,95 @@ +from typing import List +from slither.core.cfg.node import Node +from slither.core.declarations.solidity_variables import SolidityVariable +from slither.slithir.operations import HighLevelCall, LibraryCall +from slither.core.declarations import Contract, Function, SolidityVariableComposed +from slither.analyses.data_dependency.data_dependency import is_dependent +from slither.core.compilation_unit import SlitherCompilationUnit + + +class ArbitrarySendErc20: + """Detects instances where ERC20 can be sent from an arbitrary from address.""" + + def __init__(self, compilation_unit: SlitherCompilationUnit): + self._compilation_unit = compilation_unit + self._no_permit_results: List[Node] = [] + self._permit_results: List[Node] = [] + + @property + def compilation_unit(self) -> SlitherCompilationUnit: + return self._compilation_unit + + @property + def no_permit_results(self) -> List[Node]: + return self._no_permit_results + + @property + def permit_results(self) -> List[Node]: + return self._permit_results + + def _detect_arbitrary_from(self, contract: Contract): + for f in contract.functions: + all_high_level_calls = [ + f_called[1].solidity_signature + for f_called in f.high_level_calls + if isinstance(f_called[1], Function) + ] + all_library_calls = [f_called[1].solidity_signature for f_called in f.library_calls] + if ( + "transferFrom(address,address,uint256)" in all_high_level_calls + or "safeTransferFrom(address,address,address,uint256)" in all_library_calls + ): + if ( + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)" + in all_high_level_calls + ): + ArbitrarySendErc20._arbitrary_from(f.nodes, self._permit_results) + else: + ArbitrarySendErc20._arbitrary_from(f.nodes, self._no_permit_results) + + @staticmethod + def _arbitrary_from(nodes: List[Node], results: List[Node]): + """Finds instances of (safe)transferFrom that do not use msg.sender or address(this) as from parameter.""" + for node in nodes: + for ir in node.irs: + if ( + isinstance(ir, HighLevelCall) + and isinstance(ir.function, Function) + and ir.function.solidity_signature == "transferFrom(address,address,uint256)" + and not ( + is_dependent( + ir.arguments[0], + SolidityVariableComposed("msg.sender"), + node.function.contract, + ) + or is_dependent( + ir.arguments[0], + SolidityVariable("this"), + node.function.contract, + ) + ) + ): + results.append(ir.node) + elif ( + isinstance(ir, LibraryCall) + and ir.function.solidity_signature + == "safeTransferFrom(address,address,address,uint256)" + and not ( + is_dependent( + ir.arguments[1], + SolidityVariableComposed("msg.sender"), + node.function.contract, + ) + or is_dependent( + ir.arguments[1], + SolidityVariable("this"), + node.function.contract, + ) + ) + ): + results.append(ir.node) + + def detect(self): + """Detect transfers that use arbitrary `from` parameter.""" + for c in self.compilation_unit.contracts_derived: + self._detect_arbitrary_from(c) diff --git a/slither/detectors/erc/erc20/arbitrary_send_erc20_no_permit.py b/slither/detectors/erc/erc20/arbitrary_send_erc20_no_permit.py new file mode 100644 index 000000000..8e29ecbef --- /dev/null +++ b/slither/detectors/erc/erc20/arbitrary_send_erc20_no_permit.py @@ -0,0 +1,45 @@ +from typing import List +from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification +from slither.utils.output import Output +from .arbitrary_send_erc20 import ArbitrarySendErc20 + + +class ArbitrarySendErc20NoPermit(AbstractDetector): + """ + Detect when `msg.sender` is not used as `from` in transferFrom + """ + + ARGUMENT = "arbitrary-send-erc20" + HELP = "transferFrom uses arbitrary `from`" + IMPACT = DetectorClassification.HIGH + CONFIDENCE = DetectorClassification.HIGH + + WIKI = "https://github.com/trailofbits/slither/wiki/Detector-Documentation#arbitrary-send-erc20" + + WIKI_TITLE = "Arbitrary `from` in transferFrom" + WIKI_DESCRIPTION = "Detect when `msg.sender` is not used as `from` in transferFrom." + WIKI_EXPLOIT_SCENARIO = """ +```solidity + function a(address from, address to, uint256 amount) public { + erc20.transferFrom(from, to, am); + } +``` +Alice approves this contract to spend her ERC20 tokens. Bob can call `a` and specify Alice's address as the `from` parameter in `transferFrom`, allowing him to transfer Alice's tokens to himself.""" + + WIKI_RECOMMENDATION = """ +Use `msg.sender` as `from` in transferFrom. +""" + + def _detect(self) -> List[Output]: + """""" + results: List[Output] = [] + + arbitrary_sends = ArbitrarySendErc20(self.compilation_unit) + arbitrary_sends.detect() + for node in arbitrary_sends.no_permit_results: + func = node.function + info = [func, " uses arbitrary from in transferFrom: ", node, "\n"] + res = self.generate_result(info) + results.append(res) + + return results diff --git a/slither/detectors/erc/erc20/arbitrary_send_erc20_permit.py b/slither/detectors/erc/erc20/arbitrary_send_erc20_permit.py new file mode 100644 index 000000000..48e80772b --- /dev/null +++ b/slither/detectors/erc/erc20/arbitrary_send_erc20_permit.py @@ -0,0 +1,53 @@ +from typing import List +from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification +from slither.utils.output import Output +from .arbitrary_send_erc20 import ArbitrarySendErc20 + + +class ArbitrarySendErc20Permit(AbstractDetector): + """ + Detect when `msg.sender` is not used as `from` in transferFrom along with the use of permit. + """ + + ARGUMENT = "arbitrary-send-erc20-permit" + HELP = "transferFrom uses arbitrary from with permit" + IMPACT = DetectorClassification.HIGH + CONFIDENCE = DetectorClassification.MEDIUM + + WIKI = "https://github.com/trailofbits/slither/wiki/Detector-Documentation#arbitrary-send-erc20-permit" + + WIKI_TITLE = "Arbitrary `from` in transferFrom used with permit" + WIKI_DESCRIPTION = ( + "Detect when `msg.sender` is not used as `from` in transferFrom and permit is used." + ) + WIKI_EXPLOIT_SCENARIO = """ +```solidity + function bad(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } +``` +If an ERC20 token does not implement permit and has a fallback function e.g. WETH, transferFrom allows an attacker to transfer all tokens approved for this contract.""" + + WIKI_RECOMMENDATION = """ +Ensure that the underlying ERC20 token correctly implements a permit function. +""" + + def _detect(self) -> List[Output]: + """""" + results: List[Output] = [] + + arbitrary_sends = ArbitrarySendErc20(self.compilation_unit) + arbitrary_sends.detect() + for node in arbitrary_sends.permit_results: + func = node.function + info = [ + func, + " uses arbitrary from in transferFrom in combination with permit: ", + node, + "\n", + ] + res = self.generate_result(info) + results.append(res) + + return results diff --git a/slither/detectors/erc/incorrect_erc20_interface.py b/slither/detectors/erc/erc20/incorrect_erc20_interface.py similarity index 100% rename from slither/detectors/erc/incorrect_erc20_interface.py rename to slither/detectors/erc/erc20/incorrect_erc20_interface.py diff --git a/slither/detectors/functions/arbitrary_send.py b/slither/detectors/functions/arbitrary_send_eth.py similarity index 97% rename from slither/detectors/functions/arbitrary_send.py rename to slither/detectors/functions/arbitrary_send_eth.py index 3a7118bbf..e1752bbdb 100644 --- a/slither/detectors/functions/arbitrary_send.py +++ b/slither/detectors/functions/arbitrary_send_eth.py @@ -90,8 +90,8 @@ def detect_arbitrary_send(contract: Contract): return ret -class ArbitrarySend(AbstractDetector): - ARGUMENT = "arbitrary-send" +class ArbitrarySendEth(AbstractDetector): + ARGUMENT = "arbitrary-send-eth" HELP = "Functions that send Ether to arbitrary destinations" IMPACT = DetectorClassification.HIGH CONFIDENCE = DetectorClassification.MEDIUM @@ -104,7 +104,7 @@ class ArbitrarySend(AbstractDetector): # region wiki_exploit_scenario WIKI_EXPLOIT_SCENARIO = """ ```solidity -contract ArbitrarySend{ +contract ArbitrarySendEth{ address destination; function setDestination(){ destination = msg.sender; diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol b/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol new file mode 100644 index 000000000..4cc6bbe55 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol @@ -0,0 +1,57 @@ +pragma solidity 0.4.25; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); + function permit(address, address, uint256, uint256, uint8, bytes32, bytes32) external; +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + return true; + } + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {} +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function bad1(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + // This is not detected + function bad2(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + int_transferFrom(from,value, deadline, v, r, s, to); + } + + function int_transferFrom(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) internal { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + function bad3(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.safeTransferFrom(from, to, value); + } + + function bad4(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + SafeERC20.safeTransferFrom(erc20, from, to, value); + } + +} 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 new file mode 100644 index 000000000..e8486f5e1 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol.0.4.25.ArbitrarySendErc20Permit.json @@ -0,0 +1,768 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 54 + ], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#52-55) uses arbitrary from in transferFrom in combination with permit: SafeERC20.safeTransferFrom(erc20,from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#54)\n", + "markdown": "[C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L52-L55) uses arbitrary from in transferFrom in combination with permit: [SafeERC20.safeTransferFrom(erc20,from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L54)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L52-L55", + "id": "22de0efa869fce1767af15469c8bcc95616478aec05625ab72283df0ad9fae55", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 44 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#42-45) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#44)\n", + "markdown": "[C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L42-L45) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L44)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L42-L45", + "id": "408ea319adfb46be330fd7775c13abf56f9d106eebcbcfe6574760309d93927e", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 34 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#32-35) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#34)\n", + "markdown": "[C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L32-L35) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L34)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L32-L35", + "id": "82a43f5bf554d897b270abaac0ee62650383fe341adeff0d9c1c95b0040548a2", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 49 + ], + "starting_column": 9, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#47-50) uses arbitrary from in transferFrom in combination with permit: erc20.safeTransferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#49)\n", + "markdown": "[C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L47-L50) uses arbitrary from in transferFrom in combination with permit: [erc20.safeTransferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L49)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.4.25/arbitrary_send_erc20_permit.sol#L47-L50", + "id": "f7695706feb3a8409e367a88028dfad8c64e1000f1f71d6e55074d0dcfbc2305", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol b/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol new file mode 100644 index 000000000..4a020d262 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol @@ -0,0 +1,57 @@ +pragma solidity 0.5.16; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); + function permit(address, address, uint256, uint256, uint8, bytes32, bytes32) external; +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + return true; + } + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {} +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function bad1(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + // This is not detected + function bad2(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + int_transferFrom(from,value, deadline, v, r, s, to); + } + + function int_transferFrom(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) internal { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + function bad3(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.safeTransferFrom(from, to, value); + } + + function bad4(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + SafeERC20.safeTransferFrom(erc20, from, to, value); + } + +} 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 new file mode 100644 index 000000000..6452e06f9 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol.0.5.16.ArbitrarySendErc20Permit.json @@ -0,0 +1,768 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 54 + ], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#52-55) uses arbitrary from in transferFrom in combination with permit: SafeERC20.safeTransferFrom(erc20,from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#54)\n", + "markdown": "[C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L52-L55) uses arbitrary from in transferFrom in combination with permit: [SafeERC20.safeTransferFrom(erc20,from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L54)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L52-L55", + "id": "57068db07fd7e67d0b63035936fad5a373fcb8f84bb6a58aa463278143db43fa", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 34 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#32-35) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#34)\n", + "markdown": "[C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L32-L35) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L34)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L32-L35", + "id": "5983458eee02cf7d5484a82e17422dcdbd7b990305579e17d1252c0bb31e1cac", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 49 + ], + "starting_column": 9, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#47-50) uses arbitrary from in transferFrom in combination with permit: erc20.safeTransferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#49)\n", + "markdown": "[C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L47-L50) uses arbitrary from in transferFrom in combination with permit: [erc20.safeTransferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L49)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L47-L50", + "id": "a8f319ba65d6c81726b72d7593eb089ce9819d22856387250e009a43a98cf1c3", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 44 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#42-45) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#44)\n", + "markdown": "[C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L42-L45) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L44)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.5.16/arbitrary_send_erc20_permit.sol#L42-L45", + "id": "e3ed372c52b219322ca290ecfa79be96d7ea1b019af329a515c6c10b7a1cf03b", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol b/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol new file mode 100644 index 000000000..0a9f80e7d --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol @@ -0,0 +1,57 @@ +pragma solidity 0.6.11; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); + function permit(address, address, uint256, uint256, uint8, bytes32, bytes32) external; +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external override returns(bool) { + return true; + } + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {} +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function bad1(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + // This is not detected + function bad2(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + int_transferFrom(from,value, deadline, v, r, s, to); + } + + function int_transferFrom(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) internal { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + function bad3(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.safeTransferFrom(from, to, value); + } + + function bad4(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + SafeERC20.safeTransferFrom(erc20, from, to, value); + } + +} 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 new file mode 100644 index 000000000..911573c67 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol.0.6.11.ArbitrarySendErc20Permit.json @@ -0,0 +1,768 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 49 + ], + "starting_column": 9, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#47-50) uses arbitrary from in transferFrom in combination with permit: erc20.safeTransferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#49)\n", + "markdown": "[C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L47-L50) uses arbitrary from in transferFrom in combination with permit: [erc20.safeTransferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L49)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L47-L50", + "id": "1caf8efb7dd42f74884b4ee8d8b44585eeaa5758776ef8ac1e31b8aa749eac26", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 54 + ], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#52-55) uses arbitrary from in transferFrom in combination with permit: SafeERC20.safeTransferFrom(erc20,from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#54)\n", + "markdown": "[C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L52-L55) uses arbitrary from in transferFrom in combination with permit: [SafeERC20.safeTransferFrom(erc20,from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L54)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L52-L55", + "id": "cc58852f92580ac18db192412ec7e50667bf56d986349ae8fe6990f0b04f9f62", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 44 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#42-45) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#44)\n", + "markdown": "[C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L42-L45) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L44)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L42-L45", + "id": "f75bec4e068adbca017ad00b355347aa0c337b30a807fa8e1b80577b031e68fd", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 34 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#32-35) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#34)\n", + "markdown": "[C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L32-L35) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L34)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.6.11/arbitrary_send_erc20_permit.sol#L32-L35", + "id": "f90e97c676187cd6d727064001123d8537f5d8253d0a66ab6798b4a1c250a425", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol b/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol new file mode 100644 index 000000000..48e4e348c --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol @@ -0,0 +1,57 @@ +pragma solidity 0.7.6; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); + function permit(address, address, uint256, uint256, uint8, bytes32, bytes32) external; +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external override returns(bool) { + return true; + } + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {} +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function bad1(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + // This is not detected + function bad2(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + int_transferFrom(from,value, deadline, v, r, s, to); + } + + function int_transferFrom(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) internal { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + function bad3(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.safeTransferFrom(from, to, value); + } + + function bad4(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + SafeERC20.safeTransferFrom(erc20, from, to, value); + } + +} 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 new file mode 100644 index 000000000..f31ee33e1 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol.0.7.6.ArbitrarySendErc20Permit.json @@ -0,0 +1,768 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 49 + ], + "starting_column": 9, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#47-50) uses arbitrary from in transferFrom in combination with permit: erc20.safeTransferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#49)\n", + "markdown": "[C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L47-L50) uses arbitrary from in transferFrom in combination with permit: [erc20.safeTransferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L49)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L47-L50", + "id": "63dc39bd9025d9fa7d39e07342e5652c010ff424e6d31ed9d1559f225c417956", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 54 + ], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#52-55) uses arbitrary from in transferFrom in combination with permit: SafeERC20.safeTransferFrom(erc20,from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#54)\n", + "markdown": "[C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L52-L55) uses arbitrary from in transferFrom in combination with permit: [SafeERC20.safeTransferFrom(erc20,from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L54)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L52-L55", + "id": "7ebee7b534acb9d9502df84ba56fd0e90223cd262964c77cb9bee798eabd674b", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 34 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#32-35) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#34)\n", + "markdown": "[C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L32-L35) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L34)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L32-L35", + "id": "ba2c627103717a52a46b52714313000eb4f9d96f57dfac874854a3747ace5a13", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 44 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#42-45) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#44)\n", + "markdown": "[C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L42-L45) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L44)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.7.6/arbitrary_send_erc20_permit.sol#L42-L45", + "id": "d56199ce2b7249389dffba8e53278f5ae32fbdda8a51cae8b5eb1cf2c09a0578", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol b/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol new file mode 100644 index 000000000..99ecbe488 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol @@ -0,0 +1,57 @@ +pragma solidity 0.8.0; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); + function permit(address, address, uint256, uint256, uint8, bytes32, bytes32) external; +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external override returns(bool) { + return true; + } + function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {} +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function bad1(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + // This is not detected + function bad2(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) public { + int_transferFrom(from,value, deadline, v, r, s, to); + } + + function int_transferFrom(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) internal { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.transferFrom(from, to, value); + } + + function bad3(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + erc20.safeTransferFrom(from, to, value); + } + + function bad4(address from, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external { + erc20.permit(from, address(this), value, deadline, v, r, s); + SafeERC20.safeTransferFrom(erc20, from, to, value); + } + +} 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 new file mode 100644 index 000000000..8adf73c17 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol.0.8.0.ArbitrarySendErc20Permit.json @@ -0,0 +1,768 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 54 + ], + "starting_column": 9, + "ending_column": 59 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 52, + 53, + 54, + 55 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#52-55) uses arbitrary from in transferFrom in combination with permit: SafeERC20.safeTransferFrom(erc20,from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#54)\n", + "markdown": "[C.bad4(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L52-L55) uses arbitrary from in transferFrom in combination with permit: [SafeERC20.safeTransferFrom(erc20,from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L54)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L52-L55", + "id": "136a1b6c001d3ca4b1aab662556139786307e1bf4cb929f4c507d592eb38cb72", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 44 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "int_transferFrom", + "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", + "is_dependency": false, + "lines": [ + 42, + 43, + 44, + 45 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#42-45) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#44)\n", + "markdown": "[C.int_transferFrom(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L42-L45) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L44)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L42-L45", + "id": "398cc3de119232bd6688c797ddfb4f84d7587dbf9f72f3056898bfc442a5fd85", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 34 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 32, + 33, + 34, + 35 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#32-35) uses arbitrary from in transferFrom in combination with permit: erc20.transferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#34)\n", + "markdown": "[C.bad1(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L32-L35) uses arbitrary from in transferFrom in combination with permit: [erc20.transferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L34)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L32-L35", + "id": "429dd8afad02f0e6869b1de2a82bf36ab35aaf74ba5909de5facd767f4642f32", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,value)", + "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", + "is_dependency": false, + "lines": [ + 49 + ], + "starting_column": 9, + "ending_column": 48 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 47, + 48, + 49, + 50 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)" + } + } + } + } + ], + "description": "C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#47-50) uses arbitrary from in transferFrom in combination with permit: erc20.safeTransferFrom(from,to,value) (tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#49)\n", + "markdown": "[C.bad3(address,uint256,uint256,uint8,bytes32,bytes32,address)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L47-L50) uses arbitrary from in transferFrom in combination with permit: [erc20.safeTransferFrom(from,to,value)](tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L49)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20-permit/0.8.0/arbitrary_send_erc20_permit.sol#L47-L50", + "id": "7841a86248d8345520e98b963d59de36814b25e5fa3cef9e031c61d05a7feb2a", + "check": "arbitrary-send-erc20-permit", + "impact": "High", + "confidence": "Medium" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol b/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol new file mode 100644 index 000000000..8695d2de8 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol @@ -0,0 +1,77 @@ +pragma solidity 0.4.25; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + return true; + } +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function good1(address to, uint256 am) public { + address from_msgsender = msg.sender; + erc20.transferFrom(from_msgsender, to, am); + } + + function bad1(address to, uint256 am) public { + erc20.transferFrom(notsend, to, am); + } + + function good2(address to, uint256 am) public { + address from_msgsender = msg.sender; + int_transferFrom(from_msgsender, to, am); + } + + // This is not detected + function bad2(address from, address to, uint256 am) public { + int_transferFrom(from, to, am); + } + + function int_transferFrom(address from, address to, uint256 amount) internal { + erc20.transferFrom(from, to, amount); + } + + function good3(address to, uint256 amount) external { + erc20.safeTransferFrom(msg.sender, to, amount); + } + + function bad3(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(from, to, amount); + } + + function good4(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, msg.sender, to, amount); + } + + function bad4(address from, address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, from, to, amount); + } + + function good5(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, address(this), to, amount); + } + + function good6(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(address(this), to, amount); + } + +} 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 new file mode 100644 index 000000000..cf6feaa5a --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol.0.4.25.ArbitrarySendErc20NoPermit.json @@ -0,0 +1,703 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(notsend,to,am)", + "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", + "is_dependency": false, + "lines": [ + 36 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + } + } + } + ], + "description": "C.bad1(address,uint256) (tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#35-37) uses arbitrary from in transferFrom: erc20.transferFrom(notsend,to,am) (tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#36)\n", + "markdown": "[C.bad1(address,uint256)](tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L35-L37) uses arbitrary from in transferFrom: [erc20.transferFrom(notsend,to,am)](tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L36)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L35-L37", + "id": "430afa4e7855d25b1262162894fa21d58eea2571578d45de5399baf3eb438038", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 66 + ], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad4(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#65-67) uses arbitrary from in transferFrom: SafeERC20.safeTransferFrom(erc20,from,to,amount) (tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#66)\n", + "markdown": "[C.bad4(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L65-L67) uses arbitrary from in transferFrom: [SafeERC20.safeTransferFrom(erc20,from,to,amount)](tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L66)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L65-L67", + "id": "b2557d6385585034271b9873559de9cde4972e3207c43f260663f3d0e2a4d4a0", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 58 + ], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad3(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#57-59) uses arbitrary from in transferFrom: erc20.safeTransferFrom(from,to,amount) (tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#58)\n", + "markdown": "[C.bad3(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L57-L59) uses arbitrary from in transferFrom: [erc20.safeTransferFrom(from,to,amount)](tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L58)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.4.25/arbitrary_send_erc20.sol#L57-L59", + "id": "e7271d3fa958d20a025419c070ea1010431487e98e30fa2db65db9bf54a13665", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol b/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol new file mode 100644 index 000000000..6cf214805 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol @@ -0,0 +1,77 @@ +pragma solidity 0.5.16; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external returns(bool) { + return true; + } +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function good1(address to, uint256 am) public { + address from_msgsender = msg.sender; + erc20.transferFrom(from_msgsender, to, am); + } + + function bad1(address to, uint256 am) public { + erc20.transferFrom(notsend, to, am); + } + + function good2(address to, uint256 am) public { + address from_msgsender = msg.sender; + int_transferFrom(from_msgsender, to, am); + } + + // This is not detected + function bad2(address from, address to, uint256 am) public { + int_transferFrom(from, to, am); + } + + function int_transferFrom(address from, address to, uint256 amount) internal { + erc20.transferFrom(from, to, amount); + } + + function good3(address to, uint256 amount) external { + erc20.safeTransferFrom(msg.sender, to, amount); + } + + function bad3(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(from, to, amount); + } + + function good4(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, msg.sender, to, amount); + } + + function bad4(address from, address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, from, to, amount); + } + + function good5(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, address(this), to, amount); + } + + function good6(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(address(this), to, amount); + } + +} 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 new file mode 100644 index 000000000..18a210262 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol.0.5.16.ArbitrarySendErc20NoPermit.json @@ -0,0 +1,703 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 66 + ], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad4(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#65-67) uses arbitrary from in transferFrom: SafeERC20.safeTransferFrom(erc20,from,to,amount) (tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#66)\n", + "markdown": "[C.bad4(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L65-L67) uses arbitrary from in transferFrom: [SafeERC20.safeTransferFrom(erc20,from,to,amount)](tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L66)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L65-L67", + "id": "15a810d738734100851211c7e6bff65724d553eb693869575ec3d9c9bf47081c", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(notsend,to,am)", + "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", + "is_dependency": false, + "lines": [ + 36 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + } + } + } + ], + "description": "C.bad1(address,uint256) (tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#35-37) uses arbitrary from in transferFrom: erc20.transferFrom(notsend,to,am) (tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#36)\n", + "markdown": "[C.bad1(address,uint256)](tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L35-L37) uses arbitrary from in transferFrom: [erc20.transferFrom(notsend,to,am)](tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L36)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L35-L37", + "id": "6ca6aea5c4506ac7fa421c049e0bd41faa74317e303b94721bc64c2fc6e8f128", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 58 + ], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad3(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#57-59) uses arbitrary from in transferFrom: erc20.safeTransferFrom(from,to,amount) (tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#58)\n", + "markdown": "[C.bad3(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L57-L59) uses arbitrary from in transferFrom: [erc20.safeTransferFrom(from,to,amount)](tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L58)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.5.16/arbitrary_send_erc20.sol#L57-L59", + "id": "773c84f15f90123743b54aca858695d11603109f4da52c487ee4ae161f09411b", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol b/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol new file mode 100644 index 000000000..a61e4f8ab --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol @@ -0,0 +1,77 @@ +pragma solidity 0.6.11; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external override returns(bool) { + return true; + } +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() public { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function good1(address to, uint256 am) public { + address from_msgsender = msg.sender; + erc20.transferFrom(from_msgsender, to, am); + } + + function bad1(address to, uint256 am) public { + erc20.transferFrom(notsend, to, am); + } + + function good2(address to, uint256 am) public { + address from_msgsender = msg.sender; + int_transferFrom(from_msgsender, to, am); + } + + // This is not detected + function bad2(address from, address to, uint256 am) public { + int_transferFrom(from, to, am); + } + + function int_transferFrom(address from, address to, uint256 amount) internal { + erc20.transferFrom(from, to, amount); + } + + function good3(address to, uint256 amount) external { + erc20.safeTransferFrom(msg.sender, to, amount); + } + + function bad3(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(from, to, amount); + } + + function good4(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, msg.sender, to, amount); + } + + function bad4(address from, address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, from, to, amount); + } + + function good5(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, address(this), to, amount); + } + + function good6(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(address(this), to, amount); + } + +} 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 new file mode 100644 index 000000000..8d6b2a67d --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol.0.6.11.ArbitrarySendErc20NoPermit.json @@ -0,0 +1,703 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(notsend,to,am)", + "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", + "is_dependency": false, + "lines": [ + 36 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + } + } + } + ], + "description": "C.bad1(address,uint256) (tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#35-37) uses arbitrary from in transferFrom: erc20.transferFrom(notsend,to,am) (tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#36)\n", + "markdown": "[C.bad1(address,uint256)](tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L35-L37) uses arbitrary from in transferFrom: [erc20.transferFrom(notsend,to,am)](tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L36)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L35-L37", + "id": "040cf50981f6e1dea1f7a19f0115811be1347e0637f0ca85d789ae612a509322", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 66 + ], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad4(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#65-67) uses arbitrary from in transferFrom: SafeERC20.safeTransferFrom(erc20,from,to,amount) (tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#66)\n", + "markdown": "[C.bad4(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L65-L67) uses arbitrary from in transferFrom: [SafeERC20.safeTransferFrom(erc20,from,to,amount)](tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L66)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L65-L67", + "id": "61438092d2da6c23ecfa13e5e55c489e538249e47bddd9335b533d28a242aea1", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 58 + ], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad3(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#57-59) uses arbitrary from in transferFrom: erc20.safeTransferFrom(from,to,amount) (tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#58)\n", + "markdown": "[C.bad3(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L57-L59) uses arbitrary from in transferFrom: [erc20.safeTransferFrom(from,to,amount)](tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L58)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.6.11/arbitrary_send_erc20.sol#L57-L59", + "id": "8551e9d33fdd4f73f1eb7776480b2e8cd2cf9c897b52285c3a287caab6822ce3", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol b/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol new file mode 100644 index 000000000..0ceff0f66 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol @@ -0,0 +1,77 @@ +pragma solidity 0.7.6; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external override returns(bool) { + return true; + } +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function good1(address to, uint256 am) public { + address from_msgsender = msg.sender; + erc20.transferFrom(from_msgsender, to, am); + } + + function bad1(address to, uint256 am) public { + erc20.transferFrom(notsend, to, am); + } + + function good2(address to, uint256 am) public { + address from_msgsender = msg.sender; + int_transferFrom(from_msgsender, to, am); + } + + // This is not detected + function bad2(address from, address to, uint256 am) public { + int_transferFrom(from, to, am); + } + + function int_transferFrom(address from, address to, uint256 amount) internal { + erc20.transferFrom(from, to, amount); + } + + function good3(address to, uint256 amount) external { + erc20.safeTransferFrom(msg.sender, to, amount); + } + + function bad3(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(from, to, amount); + } + + function good4(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, msg.sender, to, amount); + } + + function bad4(address from, address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, from, to, amount); + } + + function good5(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, address(this), to, amount); + } + + function good6(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(address(this), to, amount); + } + +} 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 new file mode 100644 index 000000000..72b78d67a --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol.0.7.6.ArbitrarySendErc20NoPermit.json @@ -0,0 +1,703 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 58 + ], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad3(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#57-59) uses arbitrary from in transferFrom: erc20.safeTransferFrom(from,to,amount) (tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#58)\n", + "markdown": "[C.bad3(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L57-L59) uses arbitrary from in transferFrom: [erc20.safeTransferFrom(from,to,amount)](tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L58)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L57-L59", + "id": "27c4a0e1a038beb0c01c86e07f1aef592f96907d330bcf899bde6632a9022327", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(notsend,to,am)", + "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", + "is_dependency": false, + "lines": [ + 36 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + } + } + } + ], + "description": "C.bad1(address,uint256) (tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#35-37) uses arbitrary from in transferFrom: erc20.transferFrom(notsend,to,am) (tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#36)\n", + "markdown": "[C.bad1(address,uint256)](tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L35-L37) uses arbitrary from in transferFrom: [erc20.transferFrom(notsend,to,am)](tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L36)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L35-L37", + "id": "820841ccd8aee0469f9719d62ad01054b71a758a1d6924ed6a19ea078ff8350a", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 66 + ], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad4(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#65-67) uses arbitrary from in transferFrom: SafeERC20.safeTransferFrom(erc20,from,to,amount) (tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#66)\n", + "markdown": "[C.bad4(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L65-L67) uses arbitrary from in transferFrom: [SafeERC20.safeTransferFrom(erc20,from,to,amount)](tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L66)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.7.6/arbitrary_send_erc20.sol#L65-L67", + "id": "9ecb2b9df9554b9ebdbcfd058eb44ba4f1524b285b676063432d5ede48aee5ad", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol new file mode 100644 index 000000000..19dcf3f15 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol @@ -0,0 +1,77 @@ +pragma solidity 0.8.0; + +library SafeERC20 { + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {} +} + +interface IERC20 { + function transferFrom(address, address, uint256) external returns(bool); +} + +contract ERC20 is IERC20 { + function transferFrom(address from, address to, uint256 amount) external override returns(bool) { + return true; + } +} + +contract C { + using SafeERC20 for IERC20; + + IERC20 erc20; + address notsend; + address send; + + constructor() { + erc20 = new ERC20(); + notsend = address(0x3); + send = msg.sender; + } + + function good1(address to, uint256 am) public { + address from_msgsender = msg.sender; + erc20.transferFrom(from_msgsender, to, am); + } + + function bad1(address to, uint256 am) public { + erc20.transferFrom(notsend, to, am); + } + + function good2(address to, uint256 am) public { + address from_msgsender = msg.sender; + int_transferFrom(from_msgsender, to, am); + } + + // This is not detected + function bad2(address from, address to, uint256 am) public { + int_transferFrom(from, to, am); + } + + function int_transferFrom(address from, address to, uint256 amount) internal { + erc20.transferFrom(from, to, amount); + } + + function good3(address to, uint256 amount) external { + erc20.safeTransferFrom(msg.sender, to, amount); + } + + function bad3(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(from, to, amount); + } + + function good4(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, msg.sender, to, amount); + } + + function bad4(address from, address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, from, to, amount); + } + + function good5(address to, uint256 amount) external { + SafeERC20.safeTransferFrom(erc20, address(this), to, amount); + } + + function good6(address from, address to, uint256 amount) external { + erc20.safeTransferFrom(address(this), to, amount); + } + +} 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 new file mode 100644 index 000000000..de242ae4e --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol.0.8.0.ArbitrarySendErc20NoPermit.json @@ -0,0 +1,703 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 58 + ], + "starting_column": 9, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad3", + "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", + "is_dependency": false, + "lines": [ + 57, + 58, + 59 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad3(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad3(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#57-59) uses arbitrary from in transferFrom: erc20.safeTransferFrom(from,to,amount) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#58)\n", + "markdown": "[C.bad3(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L57-L59) uses arbitrary from in transferFrom: [erc20.safeTransferFrom(from,to,amount)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L58)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L57-L59", + "id": "196b46419f55696599f4a533ea4915c3b1c39be679d8e2ab15a60b7a0238d52c", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + }, + { + "type": "node", + "name": "SafeERC20.safeTransferFrom(erc20,from,to,amount)", + "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", + "is_dependency": false, + "lines": [ + 66 + ], + "starting_column": 9, + "ending_column": 60 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad4", + "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", + "is_dependency": false, + "lines": [ + 65, + 66, + 67 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad4(address,address,uint256)" + } + } + } + } + ], + "description": "C.bad4(address,address,uint256) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#65-67) uses arbitrary from in transferFrom: SafeERC20.safeTransferFrom(erc20,from,to,amount) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#66)\n", + "markdown": "[C.bad4(address,address,uint256)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L65-L67) uses arbitrary from in transferFrom: [SafeERC20.safeTransferFrom(erc20,from,to,amount)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L66)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L65-L67", + "id": "6ba2ac6eeef603310a4b4f7931ab44fadb3a242517096e17c5f1e39f0f4b83cf", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + }, + { + "elements": [ + { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + }, + { + "type": "node", + "name": "erc20.transferFrom(notsend,to,am)", + "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", + "is_dependency": false, + "lines": [ + 36 + ], + "starting_column": 9, + "ending_column": 44 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad1", + "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", + "is_dependency": false, + "lines": [ + 35, + 36, + 37 + ], + "starting_column": 5, + "ending_column": 6 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "C", + "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", + "is_dependency": false, + "lines": [ + 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, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad1(address,uint256)" + } + } + } + } + ], + "description": "C.bad1(address,uint256) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#35-37) uses arbitrary from in transferFrom: erc20.transferFrom(notsend,to,am) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#36)\n", + "markdown": "[C.bad1(address,uint256)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L35-L37) uses arbitrary from in transferFrom: [erc20.transferFrom(notsend,to,am)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L36)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20.sol#L35-L37", + "id": "8972d014c645b3a3783400fb2a6a38b20ea38973481025b6f99b3c15c9e63868", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol new file mode 100644 index 000000000..c74ab0fa0 --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol @@ -0,0 +1,16 @@ +pragma solidity 0.8.0; + +library Safe { + function safeTransferFrom(address token, address from, address to, uint256 amount) internal {} +} + +contract T { + using Safe for address; + address erc20; + + function bad(address from) public { + erc20.safeTransferFrom(from, address(0x1), 90); + } +} + +contract A is T {} 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 new file mode 100644 index 000000000..e89b664bb --- /dev/null +++ b/tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol.0.8.0.ArbitrarySendErc20NoPermit.json @@ -0,0 +1,131 @@ +[ + [ + { + "elements": [ + { + "type": "function", + "name": "bad", + "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", + "is_dependency": false, + "lines": [ + 11, + 12, + 13 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "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", + "is_dependency": false, + "lines": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad(address)" + } + }, + { + "type": "node", + "name": "erc20.safeTransferFrom(from,address(0x1),90)", + "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", + "is_dependency": false, + "lines": [ + 12 + ], + "starting_column": 3, + "ending_column": 49 + }, + "type_specific_fields": { + "parent": { + "type": "function", + "name": "bad", + "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", + "is_dependency": false, + "lines": [ + 11, + 12, + 13 + ], + "starting_column": 2, + "ending_column": 3 + }, + "type_specific_fields": { + "parent": { + "type": "contract", + "name": "T", + "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", + "is_dependency": false, + "lines": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ], + "starting_column": 1, + "ending_column": 2 + } + }, + "signature": "bad(address)" + } + } + } + } + ], + "description": "T.bad(address) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol#11-13) uses arbitrary from in transferFrom: erc20.safeTransferFrom(from,address(0x1),90) (tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol#12)\n", + "markdown": "[T.bad(address)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol#L11-L13) uses arbitrary from in transferFrom: [erc20.safeTransferFrom(from,address(0x1),90)](tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol#L12)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-erc20/0.8.0/arbitrary_send_erc20_inheritance.sol#L11-L13", + "id": "51845f69be45c4d9b97ff3e01cbc5bf55d1c1cddcc4776f39e22dd803a241e46", + "check": "arbitrary-send-erc20", + "impact": "High", + "confidence": "High" + } + ] +] \ No newline at end of file diff --git a/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol b/tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol similarity index 100% rename from tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol rename to tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol diff --git a/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json b/tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol.0.4.25.ArbitrarySendEth.json similarity index 88% rename from tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json rename to tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol.0.4.25.ArbitrarySendEth.json index b215f0e96..15685f8fc 100644 --- a/tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol.0.4.25.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol.0.4.25.ArbitrarySendEth.json @@ -4,19 +4,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_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -29,9 +29,9 @@ "start": 0, "length": 869, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -80,42 +80,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_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.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_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -128,9 +128,9 @@ "start": 0, "length": 869, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -179,17 +179,17 @@ "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", - "check": "arbitrary-send", + "description": "Test.direct() (tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#12)\n", + "markdown": "[Test.direct()](tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#L12)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#L11-L13", + "id": "672bdccd2e85fb88deee03d312d533259b73ca932965ae09e5b24a3b546c4ad2", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" }, @@ -197,19 +197,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_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -222,9 +222,9 @@ "start": 0, "length": 869, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -273,42 +273,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_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.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_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -321,9 +321,9 @@ "start": 0, "length": 869, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.4.25/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -372,17 +372,17 @@ "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", - "check": "arbitrary-send", + "description": "Test.indirect() (tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#20)\n", + "markdown": "[Test.indirect()](tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#L20)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.4.25/arbitrary_send_eth.sol#L19-L21", + "id": "9d50facc8382e844e7381f8ca9e389061bd0302345047de2407e0ad7b046687d", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" } diff --git a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol b/tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol similarity index 100% rename from tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol rename to tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol diff --git a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json b/tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol.0.5.16.ArbitrarySendEth.json similarity index 88% rename from tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json rename to tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol.0.5.16.ArbitrarySendEth.json index cfb1bcc13..814e44e93 100644 --- a/tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol.0.5.16.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol.0.5.16.ArbitrarySendEth.json @@ -9,9 +9,9 @@ "start": 162, "length": 79, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 11, @@ -29,9 +29,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -90,9 +90,9 @@ "start": 196, "length": 38, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 12 @@ -108,9 +108,9 @@ "start": 162, "length": 79, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 11, @@ -128,9 +128,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -185,11 +185,11 @@ } } ], - "description": "Test.direct() (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#12)\n", - "markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L12)\n", - "first_markdown_element": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L11-L13", - "id": "9531cafd91af4d7b54f22fa933dae983077df1c51bd855c2516ffee812911f43", - "check": "arbitrary-send", + "description": "Test.direct() (tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#12)\n", + "markdown": "[Test.direct()](tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#L12)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#L11-L13", + "id": "7ded1859293ad51d129850d2f19669c7d38f4687a6e2afa8d93534d5f2a9a0ad", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" }, @@ -202,9 +202,9 @@ "start": 316, "length": 82, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 19, @@ -222,9 +222,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -283,9 +283,9 @@ "start": 352, "length": 39, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 20 @@ -301,9 +301,9 @@ "start": 316, "length": 82, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 19, @@ -321,9 +321,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -378,11 +378,11 @@ } } ], - "description": "Test.indirect() (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#20)\n", - "markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L20)\n", - "first_markdown_element": "tests/detectors/arbitrary-send/0.5.16/arbitrary_send.sol#L19-L21", - "id": "f1395ebf21de9f8fb2c5d254c5990cce55b239c05a6a5e074813f58c6cd32834", - "check": "arbitrary-send", + "description": "Test.indirect() (tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#20)\n", + "markdown": "[Test.indirect()](tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#L20)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.5.16/arbitrary_send_eth.sol#L19-L21", + "id": "d27379ff48eebb6c568308104d444dc8f6b5ed5eae53f6c937aec9fb15cf6464", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" } diff --git a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol b/tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol similarity index 100% rename from tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol rename to tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol diff --git a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json b/tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol.0.6.11.ArbitrarySendEth.json similarity index 88% rename from tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json rename to tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol.0.6.11.ArbitrarySendEth.json index cde2f95aa..af4d54ece 100644 --- a/tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol.0.6.11.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol.0.6.11.ArbitrarySendEth.json @@ -9,9 +9,9 @@ "start": 162, "length": 79, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 11, @@ -29,9 +29,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -90,9 +90,9 @@ "start": 196, "length": 38, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 12 @@ -108,9 +108,9 @@ "start": 162, "length": 79, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 11, @@ -128,9 +128,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -185,11 +185,11 @@ } } ], - "description": "Test.direct() (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#12)\n", - "markdown": "[Test.direct()](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L12)\n", - "first_markdown_element": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L11-L13", - "id": "8a1de239f630f10fef9ef6a9c439fc10aad2f6caba7ee43d1a7f7bacf6028f1e", - "check": "arbitrary-send", + "description": "Test.direct() (tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#12)\n", + "markdown": "[Test.direct()](tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#L12)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#L11-L13", + "id": "51e87e03fc48363e666bb99c1d15beccb50464e1c170eeea5b76ec6fcde643e7", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" }, @@ -202,9 +202,9 @@ "start": 316, "length": 82, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 19, @@ -222,9 +222,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -283,9 +283,9 @@ "start": 352, "length": 39, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 20 @@ -301,9 +301,9 @@ "start": 316, "length": 82, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 19, @@ -321,9 +321,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -378,11 +378,11 @@ } } ], - "description": "Test.indirect() (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#20)\n", - "markdown": "[Test.indirect()](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L20)\n", - "first_markdown_element": "tests/detectors/arbitrary-send/0.6.11/arbitrary_send.sol#L19-L21", - "id": "f272e05d9741895fc22051ed09afa6ce4af8ad4cd74b3452224dfb29eb4b9df6", - "check": "arbitrary-send", + "description": "Test.indirect() (tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#20)\n", + "markdown": "[Test.indirect()](tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#L20)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.6.11/arbitrary_send_eth.sol#L19-L21", + "id": "0ec491130aac4e23e6d47193bff49ed6029330bca373454b4e34ffba0a2baea6", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" } diff --git a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol b/tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol similarity index 100% rename from tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol rename to tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol diff --git a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json b/tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol.0.7.6.ArbitrarySendEth.json similarity index 88% rename from tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json rename to tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol.0.7.6.ArbitrarySendEth.json index 0f0fe4d57..56afe8cb5 100644 --- a/tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol.0.7.6.ArbitrarySend.json +++ b/tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol.0.7.6.ArbitrarySendEth.json @@ -4,19 +4,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_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -29,9 +29,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -80,42 +80,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_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.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_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 19, - 20, - 21 + 11, + 12, + 13 ], "starting_column": 5, "ending_column": 6 @@ -128,9 +128,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -179,17 +179,17 @@ "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", - "check": "arbitrary-send", + "description": "Test.direct() (tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#11-13) sends eth to arbitrary user\n\tDangerous calls:\n\t- msg.sender.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#12)\n", + "markdown": "[Test.direct()](tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#L11-L13) sends eth to arbitrary user\n\tDangerous calls:\n\t- [msg.sender.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#L12)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#L11-L13", + "id": "76af03df5e6d33df8978a2cc00dfe944236aca69ad1b7f107580da1b76121082", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" }, @@ -197,19 +197,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_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -222,9 +222,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -273,42 +273,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_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.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_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ - 11, - 12, - 13 + 19, + 20, + 21 ], "starting_column": 5, "ending_column": 6 @@ -321,9 +321,9 @@ "start": 0, "length": 884, "filename_used": "/GENERIC_PATH", - "filename_relative": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_relative": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "filename_absolute": "/GENERIC_PATH", - "filename_short": "tests/detectors/arbitrary-send/0.7.6/arbitrary_send.sol", + "filename_short": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol", "is_dependency": false, "lines": [ 1, @@ -372,17 +372,17 @@ "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", - "check": "arbitrary-send", + "description": "Test.indirect() (tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#19-21) sends eth to arbitrary user\n\tDangerous calls:\n\t- destination.send(address(this).balance) (tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#20)\n", + "markdown": "[Test.indirect()](tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#L19-L21) sends eth to arbitrary user\n\tDangerous calls:\n\t- [destination.send(address(this).balance)](tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#L20)\n", + "first_markdown_element": "tests/detectors/arbitrary-send-eth/0.7.6/arbitrary_send_eth.sol#L19-L21", + "id": "2e1bd6d1260cf35450734eb2027a2d964f61858a3aabd0cb459c22cb4da9956b", + "check": "arbitrary-send-eth", "impact": "High", "confidence": "Medium" } diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 30999389c..c01594f5f 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -396,23 +396,23 @@ ALL_TEST_OBJECTS = [ Test(all_detectors.LockedEther, "locked_ether.sol", "0.6.11"), Test(all_detectors.LockedEther, "locked_ether.sol", "0.7.6"), Test( - all_detectors.ArbitrarySend, - "arbitrary_send.sol", + all_detectors.ArbitrarySendEth, + "arbitrary_send_eth.sol", "0.4.25", ), Test( - all_detectors.ArbitrarySend, - "arbitrary_send.sol", + all_detectors.ArbitrarySendEth, + "arbitrary_send_eth.sol", "0.5.16", ), Test( - all_detectors.ArbitrarySend, - "arbitrary_send.sol", + all_detectors.ArbitrarySendEth, + "arbitrary_send_eth.sol", "0.6.11", ), Test( - all_detectors.ArbitrarySend, - "arbitrary_send.sol", + all_detectors.ArbitrarySendEth, + "arbitrary_send_eth.sol", "0.7.6", ), Test( @@ -1272,6 +1272,61 @@ ALL_TEST_OBJECTS = [ "comment.sol", "0.8.2", ), + Test( + all_detectors.ArbitrarySendErc20NoPermit, + "arbitrary_send_erc20.sol", + "0.4.25", + ), + Test( + all_detectors.ArbitrarySendErc20NoPermit, + "arbitrary_send_erc20.sol", + "0.5.16", + ), + Test( + all_detectors.ArbitrarySendErc20NoPermit, + "arbitrary_send_erc20.sol", + "0.6.11", + ), + Test( + all_detectors.ArbitrarySendErc20NoPermit, + "arbitrary_send_erc20.sol", + "0.7.6", + ), + Test( + all_detectors.ArbitrarySendErc20NoPermit, + "arbitrary_send_erc20.sol", + "0.8.0", + ), + Test( + all_detectors.ArbitrarySendErc20NoPermit, + "arbitrary_send_erc20_inheritance.sol", + "0.8.0", + ), + Test( + all_detectors.ArbitrarySendErc20Permit, + "arbitrary_send_erc20_permit.sol", + "0.4.25", + ), + Test( + all_detectors.ArbitrarySendErc20Permit, + "arbitrary_send_erc20_permit.sol", + "0.5.16", + ), + Test( + all_detectors.ArbitrarySendErc20Permit, + "arbitrary_send_erc20_permit.sol", + "0.6.11", + ), + Test( + all_detectors.ArbitrarySendErc20Permit, + "arbitrary_send_erc20_permit.sol", + "0.7.6", + ), + Test( + all_detectors.ArbitrarySendErc20Permit, + "arbitrary_send_erc20_permit.sol", + "0.8.0", + ), ] From f131242fb2b87abd1e3a8f096a93e68d77bb91ca Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 27 Apr 2022 02:43:37 -0500 Subject: [PATCH 05/29] Update README.md (#1181) * Update README.md --- slither/tools/read_storage/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slither/tools/read_storage/README.md b/slither/tools/read_storage/README.md index 8d9b70fcb..91491a364 100644 --- a/slither/tools/read_storage/README.md +++ b/slither/tools/read_storage/README.md @@ -46,13 +46,13 @@ slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --layout --rpc-u To view only the slot of the `slot0` structure variable, pass `--variable-name slot0`: ```shell -slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --variable-name slot0 --rpc-url https://mainnet.infura.io/v3/04942f7970ef41cc847a147bc64e460e --value +slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --variable-name slot0 --rpc-url $RPC_URL --value ``` To view a member of the `slot0` struct, pass `--struct-var tick` ```shell -slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --variable-name slot0 --rpc-url https://mainnet.infura.io/v3/04942f7970ef41cc847a147bc64e460e --value --struct-var tick +slither-read-storage 0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8 --variable-name slot0 --rpc-url $RPC_URL --value --struct-var tick ``` Retrieve the ERC20 balance slot of an account: From 8dfa8033a10c48abe5c5bb9d1ebca9aec29374ff Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 27 Apr 2022 11:13:50 +0200 Subject: [PATCH 06/29] Document --checklist flag (#1190) Make the --checklist flag public Improve documentation of the related flags --- README.md | 7 +++++-- slither/__main__.py | 39 +++++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 16 deletions(-) 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/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 562af10616d450f53fa60563f18e1cefb4208f00 Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 4 May 2022 09:58:57 +0200 Subject: [PATCH 07/29] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b160cd9be..106df1baf 100644 --- a/README.md +++ b/README.md @@ -225,5 +225,7 @@ Title | Usage | Authors | Venue [Smart Contract Repair](https://arxiv.org/pdf/1912.05823.pdf) | Rely on Slither’s vulnerabilities detectors | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 [Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Leverage data dependency through Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 [Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) +[SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds](https://arxiv.org/pdf/2104.08638.pdf) | Rely on SlithIR to build a *storage dependency graph* | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 +[SolType: Refinement Types for Arithmetic Overflow in Solidity](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither as front end to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 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/). From c1b5a1ee5092631ce2acb8fe9980d1eb1d4aba7d Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 4 May 2022 09:59:57 +0200 Subject: [PATCH 08/29] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 106df1baf..dd48ce7dd 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,6 @@ Title | Usage | Authors | Venue [Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Leverage data dependency through Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 [Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) [SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds](https://arxiv.org/pdf/2104.08638.pdf) | Rely on SlithIR to build a *storage dependency graph* | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 -[SolType: Refinement Types for Arithmetic Overflow in Solidity](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither as front end to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 +[SolType: Refinement Types for Arithmetic Overflow in Solidity](https://arxiv.org/abs/2110.00677) | Use Slither as front end to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 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/). From 488dbaec1e91e922646374bd30e07c8a025df293 Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 4 May 2022 10:23:30 +0200 Subject: [PATCH 09/29] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dd48ce7dd..bf59e7bf3 100644 --- a/README.md +++ b/README.md @@ -227,5 +227,6 @@ Title | Usage | Authors | Venue [Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) [SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds](https://arxiv.org/pdf/2104.08638.pdf) | Rely on SlithIR to build a *storage dependency graph* | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 [SolType: Refinement Types for Arithmetic Overflow in Solidity](https://arxiv.org/abs/2110.00677) | Use Slither as front end 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/). From d5d95feee3810dec07ea4886535232512326a033 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 4 May 2022 07:21:19 -0500 Subject: [PATCH 10/29] do not warn of digit count if checksummed address (#1193) --- .../detectors/statements/too_many_digits.py | 12 +- .../0.4.25/too_many_digits.sol | 3 + ..._many_digits.sol.0.4.25.TooManyDigits.json | 70 +++++++--- .../0.5.16/too_many_digits.sol | 3 + ..._many_digits.sol.0.5.16.TooManyDigits.json | 70 +++++++--- .../0.6.11/too_many_digits.sol | 4 + ..._many_digits.sol.0.6.11.TooManyDigits.json | 80 +++++++++--- .../too-many-digits/0.7.6/too_many_digits.sol | 5 +- ...o_many_digits.sol.0.7.6.TooManyDigits.json | 120 +++++++++++------- 9 files changed, 260 insertions(+), 107 deletions(-) diff --git a/slither/detectors/statements/too_many_digits.py b/slither/detectors/statements/too_many_digits.py index 734bc4e30..a6387db78 100644 --- a/slither/detectors/statements/too_many_digits.py +++ b/slither/detectors/statements/too_many_digits.py @@ -2,9 +2,19 @@ Module detecting numbers with too many digits. """ +import re from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.variables import Constant +_HEX_ADDRESS_REGEXP = re.compile("(0x)?[0-9a-f]{40}", re.IGNORECASE | re.ASCII) + + +def is_hex_address(value) -> bool: + """ + Checks if the given string of text type is an address in hexadecimal encoded form. + """ + return _HEX_ADDRESS_REGEXP.fullmatch(value) is not None + class TooManyDigits(AbstractDetector): """ @@ -58,7 +68,7 @@ Use: if isinstance(read, Constant): # read.value can return an int or a str. Convert it to str value_as_str = read.original_value - if "00000" in value_as_str: + if "00000" in value_as_str and not is_hex_address(value_as_str): # Info to be printed ret.append(node) return ret diff --git a/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol b/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol index cd35366a9..523be3490 100644 --- a/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol +++ b/tests/detectors/too-many-digits/0.4.25/too_many_digits.sol @@ -37,4 +37,7 @@ contract C { uint x = 1 ether; } + function good2() external { + address x = 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e; + } } 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 1ece15736..00a01bfab 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 @@ -31,7 +31,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -75,7 +75,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -131,7 +134,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -175,7 +178,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -224,7 +230,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -268,7 +274,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -322,7 +331,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -366,7 +375,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -417,7 +429,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -461,7 +473,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -517,7 +532,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -561,7 +576,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -612,7 +630,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -656,7 +674,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -712,7 +733,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -756,7 +777,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -807,7 +831,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -851,7 +875,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -907,7 +934,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.4.25/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -951,7 +978,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 diff --git a/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol b/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol index cd35366a9..523be3490 100644 --- a/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol +++ b/tests/detectors/too-many-digits/0.5.16/too_many_digits.sol @@ -37,4 +37,7 @@ contract C { uint x = 1 ether; } + function good2() external { + address x = 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e; + } } 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 012c9cb75..abd400cb4 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 @@ -31,7 +31,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -75,7 +75,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -131,7 +134,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -175,7 +178,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -224,7 +230,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -268,7 +274,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -322,7 +331,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -366,7 +375,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -417,7 +429,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -461,7 +473,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -517,7 +532,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -561,7 +576,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -612,7 +630,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -656,7 +674,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -712,7 +733,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -756,7 +777,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -807,7 +831,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -851,7 +875,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 @@ -907,7 +934,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 999, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.5.16/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -951,7 +978,10 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43 ], "starting_column": 1, "ending_column": 2 diff --git a/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol b/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol index cd35366a9..315212c81 100644 --- a/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol +++ b/tests/detectors/too-many-digits/0.6.11/too_many_digits.sol @@ -36,5 +36,9 @@ contract C { uint x = 1 ether; } + + function good2() external { + address x = 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e; + } } 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..1a97ebd7b 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 @@ -31,7 +31,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -75,7 +75,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -131,7 +135,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -175,7 +179,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -224,7 +232,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -268,7 +276,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -322,7 +334,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -366,7 +378,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -417,7 +433,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -461,7 +477,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -517,7 +537,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -561,7 +581,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -612,7 +636,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -656,7 +680,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -712,7 +740,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -756,7 +784,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -807,7 +839,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -851,7 +883,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 @@ -907,7 +943,7 @@ "name": "C", "source_mapping": { "start": 28, - "length": 897, + "length": 1000, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.6.11/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -951,7 +987,11 @@ 37, 38, 39, - 40 + 40, + 41, + 42, + 43, + 44 ], "starting_column": 1, "ending_column": 2 diff --git a/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol b/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol index 48cbfdb55..dfd4979b7 100644 --- a/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol +++ b/tests/detectors/too-many-digits/0.7.6/too_many_digits.sol @@ -1,4 +1,4 @@ -// pragma solidity ^0.5.1; + contract C { uint balance; @@ -36,4 +36,7 @@ contract C { uint x = 1 ether; } + function good2() external { + address x = 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e; + } } 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 eb97dc505..372b28886 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 @@ -6,7 +6,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -30,8 +30,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -74,7 +74,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -87,7 +90,7 @@ "type": "node", "name": "x2 = 0x0000000000001", "source_mapping": { - "start": 237, + "start": 211, "length": 25, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -105,7 +108,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -129,8 +132,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -173,7 +176,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -199,7 +205,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -223,8 +229,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -267,7 +273,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -280,7 +289,7 @@ "type": "node", "name": "x3 = 1000000000000000000", "source_mapping": { - "start": 272, + "start": 246, "length": 29, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -298,7 +307,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -322,8 +331,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -366,7 +375,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -392,7 +404,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -416,8 +428,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -460,7 +472,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -473,7 +488,7 @@ "type": "node", "name": "x1 = 0x000001", "source_mapping": { - "start": 209, + "start": 183, "length": 18, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -491,7 +506,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -515,8 +530,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -559,7 +574,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -585,7 +603,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -609,8 +627,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -653,7 +671,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -666,7 +687,7 @@ "type": "node", "name": "x4 = 100000", "source_mapping": { - "start": 311, + "start": 285, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -684,7 +705,7 @@ "type": "function", "name": "f", "source_mapping": { - "start": 177, + "start": 151, "length": 195, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -708,8 +729,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -752,7 +773,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -778,7 +802,7 @@ "type": "function", "name": "h", "source_mapping": { - "start": 456, + "start": 430, "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -800,8 +824,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -844,7 +868,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 @@ -857,7 +884,7 @@ "type": "node", "name": "x2 = 100000", "source_mapping": { - "start": 512, + "start": 486, "length": 16, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -875,7 +902,7 @@ "type": "function", "name": "h", "source_mapping": { - "start": 456, + "start": 430, "length": 113, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", @@ -897,8 +924,8 @@ "type": "contract", "name": "C", "source_mapping": { - "start": 28, - "length": 815, + "start": 2, + "length": 917, "filename_used": "/GENERIC_PATH", "filename_relative": "tests/detectors/too-many-digits/0.7.6/too_many_digits.sol", "filename_absolute": "/GENERIC_PATH", @@ -941,7 +968,10 @@ 36, 37, 38, - 39 + 39, + 40, + 41, + 42 ], "starting_column": 1, "ending_column": 2 From 39f558504aa13ca486b3159867840d2ab61cc4ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Schoentgen?= Date: Wed, 4 May 2022 14:22:25 +0200 Subject: [PATCH 11/29] Optimization: use `str.startswith(tuple)`, and `str.endswith(tuple)`, when revelant (#1186) --- slither/core/declarations/solidity_variables.py | 2 +- slither/detectors/naming_convention/naming_convention.py | 2 +- slither/solc_parsing/yul/parse_yul.py | 4 ++-- slither/utils/integer_conversion.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/slither/core/declarations/solidity_variables.py b/slither/core/declarations/solidity_variables.py index 08ff0c7bc..f57e2a787 100644 --- a/slither/core/declarations/solidity_variables.py +++ b/slither/core/declarations/solidity_variables.py @@ -104,7 +104,7 @@ class SolidityVariable(Context): # dev function, will be removed once the code is stable def _check_name(self, name: str): # pylint: disable=no-self-use - assert name in SOLIDITY_VARIABLES or name.endswith("_slot") or name.endswith("_offset") + assert name in SOLIDITY_VARIABLES or name.endswith(("_slot", "_offset")) @property def state_variable(self): diff --git a/slither/detectors/naming_convention/naming_convention.py b/slither/detectors/naming_convention/naming_convention.py index 34aba8dc2..706f4ae6c 100644 --- a/slither/detectors/naming_convention/naming_convention.py +++ b/slither/detectors/naming_convention/naming_convention.py @@ -94,7 +94,7 @@ Solidity defines a [naming convention](https://solidity.readthedocs.io/en/v0.4.2 "private", ] and self.is_mixed_case_with_underscore(func.name): continue - if func.name.startswith("echidna_") or func.name.startswith("crytic_"): + if func.name.startswith(("echidna_", "crytic_")): continue info = ["Function ", func, " is not in mixedCase\n"] diff --git a/slither/solc_parsing/yul/parse_yul.py b/slither/solc_parsing/yul/parse_yul.py index 0c7b48091..31c74795d 100644 --- a/slither/solc_parsing/yul/parse_yul.py +++ b/slither/solc_parsing/yul/parse_yul.py @@ -737,7 +737,7 @@ def _parse_yul_magic_suffixes(name: str, root: YulScope) -> Optional[Expression] # Currently SlithIR doesnt support raw access to memory # So things like .offset/.slot will return the variable # Instaed of the actual offset/slot - if name.endswith("_slot") or name.endswith(".slot"): + if name.endswith(("_slot", ".slot")): potential_name = name[:-5] variable_found = _check_for_state_variable_name(root, potential_name) if variable_found: @@ -745,7 +745,7 @@ def _parse_yul_magic_suffixes(name: str, root: YulScope) -> Optional[Expression] var = root.function.get_local_variable_from_name(potential_name) if var and var.is_storage: return Identifier(var) - if name.endswith("_offset") or name.endswith(".offset"): + if name.endswith(("_offset", ".offset")): potential_name = name[:-7] variable_found = _check_for_state_variable_name(root, potential_name) if variable_found: diff --git a/slither/utils/integer_conversion.py b/slither/utils/integer_conversion.py index d4a3b4847..8481e8641 100644 --- a/slither/utils/integer_conversion.py +++ b/slither/utils/integer_conversion.py @@ -7,7 +7,7 @@ from slither.exceptions import SlitherError def convert_string_to_int(val: Union[str, int]) -> int: if isinstance(val, int): return val - if val.startswith("0x") or val.startswith("0X"): + if val.startswith(("0x", "0X")): return int(val, 16) if "e" in val or "E" in val: From 33922541bbdb5bc3bda97acbbfc08e7ec1d40a15 Mon Sep 17 00:00:00 2001 From: Feist Josselin Date: Wed, 11 May 2022 09:37:25 +0200 Subject: [PATCH 12/29] Update README (#1207) * Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4010448be..f1e491103 100644 --- a/README.md +++ b/README.md @@ -228,5 +228,8 @@ Title | Usage | Authors | Venue [Smart Contract Repair](https://arxiv.org/pdf/1912.05823.pdf) | Rely on Slither’s vulnerabilities detectors | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 [Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Leverage data dependency through Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 [Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) +[SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds](https://arxiv.org/pdf/2104.08638.pdf) | Rely on SlithIR to build a *storage dependency graph* | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 +[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/). From fdf346f530e712476dcd86a4b63f5503c3c9352a Mon Sep 17 00:00:00 2001 From: Henrik Brodin <90325907+hbrodin@users.noreply.github.com> Date: Thu, 12 May 2022 12:37:35 +0200 Subject: [PATCH 13/29] Hbrodin/ssa array tests (#1205) * Initial array test cases. Not asserting anything yet. * Test cases for SSA IR related to arrays --- tests/test_ssa_generation.py | 131 ++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/tests/test_ssa_generation.py b/tests/test_ssa_generation.py index 69bac2802..f002ec4e1 100644 --- a/tests/test_ssa_generation.py +++ b/tests/test_ssa_generation.py @@ -1,3 +1,4 @@ +# pylint: disable=too-many-lines import os import pathlib from argparse import ArgumentTypeError @@ -25,10 +26,15 @@ from slither.slithir.operations import ( Binary, BinaryType, InternalCall, + Index, ) from slither.slithir.utils.ssa import is_used_later -from slither.slithir.variables import Constant, ReferenceVariable, LocalIRVariable, StateIRVariable - +from slither.slithir.variables import ( + Constant, + ReferenceVariable, + LocalIRVariable, + StateIRVariable, +) # Directory of currently executing script. Will be used as basis for temporary file names. SCRIPT_DIR = pathlib.Path(getsourcefile(lambda: 0)).parent @@ -782,6 +788,127 @@ def test_multiple_named_args_returns(): ) +@pytest.mark.xfail(reason="Tests for wanted state of SSA IR, not current.") +def test_memory_array(): + src = """ + contract MemArray { + struct A { + uint val1; + uint val2; + } + + function test_array() internal { + A[] memory a= new A[](4); + // Create REF_0 -> a_1[2] + accept_array_entry(a[2]); + + // Create REF_1 -> a_1[3] + accept_array_entry(a[3]); + + A memory alocal; + accept_array_entry(alocal); + + } + + // val_1 = ϕ(val_0, REF_0, REF_1, alocal_1) + // val_0 is an unknown external value + function accept_array_entry(A memory val) public returns (uint) { + uint zero = 0; + b(zero); + // Create REF_2 -> val_1.val1 + return b(val.val1); + } + + function b(uint arg) public returns (uint){ + // arg_1 = ϕ(arg_0, zero_1, REF_2) + return arg + 1; + } + }""" + with slither_from_source(src) as slither: + c = slither.contracts[0] + + ftest_array, faccept, fb = c.functions + + # Locate REF_0/REF_1/alocal (they are all args to the call) + accept_args = [x.arguments[0] for x in get_ssa_of_type(ftest_array, InternalCall)] + + # Check entrypoint of accept_array_entry, it should contain a phi-node + # of expected rvalues + [phi_entry_accept] = get_ssa_of_type(faccept.entry_point, Phi) + for arg in accept_args: + assert arg in phi_entry_accept.rvalues + # NOTE(hbrodin): There should be an additional val_0 in the phi-node. + # That additional val_0 indicates an external caller of this function. + assert len(phi_entry_accept.rvalues) == len(accept_args) + 1 + + # Args used to invoke b + b_args = [x.arguments[0] for x in get_ssa_of_type(faccept, InternalCall)] + + # Check entrypoint of B, it should contain a phi-node of expected + # rvalues + [phi_entry_b] = get_ssa_of_type(fb.entry_point, Phi) + for arg in b_args: + assert arg in phi_entry_b.rvalues + + # NOTE(hbrodin): There should be an additional arg_0 (see comment about phi_entry_accept). + assert len(phi_entry_b.rvalues) == len(b_args) + 1 + + +@pytest.mark.xfail(reason="Tests for wanted state of SSA IR, not current.") +def test_storage_array(): + src = """ + contract StorageArray { + struct A { + uint val1; + uint val2; + } + + // NOTE(hbrodin): a is never written, should only become a_0. Same for astorage (astorage_0). Phi-nodes at entry + // should only add new versions of a state variable if it is actually written. + A[] a; + A astorage; + + function test_array() internal { + accept_array_entry(a[2]); + accept_array_entry(a[3]); + accept_array_entry(astorage); + } + + function accept_array_entry(A storage val) internal returns (uint) { + // val is either a[2], a[3] or astorage_0. Ideally this could be identified. + uint five = 5; + + // NOTE(hbrodin): If the following line is enabled, there would ideally be a phi-node representing writes + // to either a or astorage. + //val.val2 = 4; + b(five); + return b(val.val1); + } + + function b(uint value) public returns (uint){ + // Expect a phi-node at the entrypoint + // value_1 = ϕ(value_0, five_0, REF_x), where REF_x is the reference to val.val1 in accept_array_entry. + return value + 1; + } + }""" + with slither_from_source(src) as slither: + c = slither.contracts[0] + _dump_functions(c) + ftest, faccept, fb = c.functions + + # None of a/astorage is written so expect that there are no phi-nodes at entrypoint. + assert len(get_ssa_of_type(ftest.entry_point, Phi)) == 0 + + # Expect all references to start from index 0 (no writes) + assert all(x.variable_left.index == 0 for x in get_ssa_of_type(ftest, Index)) + + [phi_entry_accept] = get_ssa_of_type(faccept.entry_point, Phi) + assert len(phi_entry_accept.rvalues) == 3 # See comment in b above + + [phi_entry_b] = get_ssa_of_type(fb.entry_point, Phi) + assert len(phi_entry_b.rvalues) == 3 # See comment in b above + + @pytest.mark.skip(reason="Fails in current slither version. Fix in #1102.") def test_issue_468(): """ From 75f858d4bf588fe4370be2c6e81734dc31511ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Schoentgen?= Date: Thu, 12 May 2022 12:38:33 +0200 Subject: [PATCH 14/29] Optimization: use a more efficient regexp for hexadecimal check (#1200) Optimization: use a more efficient regexp for hexadecimal check --- slither/detectors/statements/too_many_digits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slither/detectors/statements/too_many_digits.py b/slither/detectors/statements/too_many_digits.py index a6387db78..6e4cc4cd9 100644 --- a/slither/detectors/statements/too_many_digits.py +++ b/slither/detectors/statements/too_many_digits.py @@ -6,7 +6,7 @@ import re from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.slithir.variables import Constant -_HEX_ADDRESS_REGEXP = re.compile("(0x)?[0-9a-f]{40}", re.IGNORECASE | re.ASCII) +_HEX_ADDRESS_REGEXP = re.compile("(0[xX])?[0-9a-fA-F]{40}") def is_hex_address(value) -> bool: 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 15/29] 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 16/29] 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 d0a4f5595d7177b3b7d4bd35e1384bf35ebc22d4 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Wed, 6 Jul 2022 13:30:11 -0500 Subject: [PATCH 17/29] 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 zcmajh_dgU40|)RM&ZdOK8K=l7BZSPXuW{KkB72+}j+_~hb=?sMA;Oq6&<+-1)f8bLGeatfJJ?OgULsM5}7O0E-BdES;x=*7z5=8i`>nHWW)kOYs+#t)^n#AaRRo>Y&S zL+$peM=NQPPPRNwVvwur3{WCTc1xb_D^zqshoMZd@E%KL)Ih3@zv5WbZ$%(`&GRn( zCB7rciQpS0Z<{z(E81v9N{d$fT#IPfE#hB6?0jvx%Q37zTAWrPDNwwTauSaM-+k$} z{Fk&=6`cpADjtE4nGTvBtOLz=EBt`*h+qX**TZeXCGJqwy;<>oxz3kDjrv2aRe4K% zwuAhybIjRcKM-5vO)-DE-l6KQ`l+ziQT5y0ClOpiLDf%NO$oKDoMx`ArR`~i-&OaR zy4Ci>QsZ8824Vt*5G5}dl9tTvIPBL>wfby?VeK?Hu+5VGC}n~A=40Kf_Ah=6hsf!@ zMKQbH3LAxxq>Ye<WIx2C^qCRNvPi86c!?5MXxNZ zv)sr4b`nPJ?Q12MeA^=0Pd48EI|>Q<%MyH6m|jRbKtZPx!q&X2-l2o)YL`S#;mRU* z3Mm}NoAJ=)A*O!oJGmWXptU;k73h=Ce^VeZw>KBvYo=X2(|v#|B(2E%i~|CFdktFm zdOE}y4rGQ#^EhYFM}6ao;?m_xSe0~5185Ti603n|4;Qne~AJVeyXxReR^UA~oc9QMU)8?c(B-7Utijs^}lR`X4rBsx0$mKf!mBK%#Hk;sx z9?Ulv3F4;k<-M*lnDdw_43AJG23W&D(A1)zF@CLfX*|_RLm1YkU4#)99|vi6zz-Eo zvDDQt%bb7C)a4F*dU2b=!0Iswp}EqRQPoI#Rmv??>=x88vc>Yjx*Mi$n|{<(Vk|g~ z1^v1?0%*$kf^+zEBh^K4T+$11@~svHME!hD!d2tW^^lhe0V9|t>xbPLt<2RA%`BTB z7O@TcmR^f>%ISmNmOI3v;x;2R+8sZ2`K->0tHivZIcpe^=tZU^w4P@AK9JyZ3jyur z>=mTU1`{q?2fUTKK)$Z$doBBUSb3DLV9m|fk@ns+u<;E=-p|FGn0du1N(;Pwbvrbj zD#P{2IQ{yq1m8A}Jhc#ZR9@s`d^>RT#6aEEZey@@JLp&eOliBnWpKy7A&zjX{jBSn z{u_WS@8pzAazQV^-@!Cxa*XhuaXV=q615fq3u3oByVj-{PwPOosWhhmI5ROFTx?q9 zW9hn)604diTINiXob182cM`qBl*kEG)+YQbQ^L&)FJyv)4MR+A5^ZO1d7)M4hOGNd z!NxKp3;LRKMof4bp2P5DHsDJBmA1X-z&DF|A1W_P&BqOY%`<>CZl`bH#~UOaCD{tJ z7i`Jh&~Ie%jieVsLWLc_wtO&@J&80eIc-Q{mjS~#+e8RC6u0xxC7tms!cm1YjDXRK zk)}P=9&WIce$T|OV|{@Zm84oKN;!!VBPbx5D{R7aYYe})uBZ|Yx-XeGdw)&mKY*#I z(*B}X9yNYCk*Xry#44hC7PsS~ZiW}9Uokhj``$F;a35U0kgNw&pDTbCu^~Ha*c>h- zIt%a0QE^Y-Z0^@f)BW1DGeA(q<4pB|98tca&j|IaIIM(+22WJ$=b%UKph4Me}fp@=eB z!=P1<A>&>1Ikd}=eO0Q7M}7ZQB5&zLW_H>*mKP`m+y$YbR#Xp*YVz8Y{ed z_}}%=gtL(tmO)GZ}eK| zmX!`_98F`NuxS6-YJE`FTDugTwvX6xP?}pi>J3RJzlnB$k=<5p>KH_%1qVL6i{h+F zI;V?!TLL3{vIQ;G^)uf~Da`4FgH*0^UT+b4#|-6N@regP5&On%vCsnK^ydV>yFNgwArNft|-xYUp3(Y5MoZ*mah z$6Zz~{<|<@miA2fykAdu)<+ipW(13;KGi&CJ=4hMSg%FbO8p~9jS*`49xAR>Jl7P; zvz(Urj3MnjR8IG!;K71DBHnNy;`f`?flhJn;aXJ4yB!od=a8Y*Ir|lcR=aY7)kTZH z;FY=Y2>n7yjfl5J55Xv0!BK zqy+mt+gOmJV9-YS#OZdG4G|GIj*R!PiCEt?AYn2L#YDQS`#>HaB;@O(l2S)?MlGI7 zId*Vz9B1f+^MZf%?pPExv-m82>lL1NTvp0{U;EvwDds_EY#AwWq4Fm#w2-Rn*gk<8N7M21`z-6PNR8lQTweAV?Mbzm58bssBwB@Zb5rVl{$8sQ*0z 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 zcma*p_dnE+0|)T8Ldc#;_R3yIII|Eabove&HdrPwA%oHCh`(v+=c9nJ7q4I^Kh5@+h(|Ti`D7g{yPlH0NjYvy>mhpDj1=TZK*M-rFL){@@;=#O z_l{7Ot0`TkKGo6gg0BV@ml{|=B#F>2ZAYTuGH${6l9%dAC|R-!}l$- zBq>M9w3edc%>=oPqVI&^VJE*g`yn*+#X2_VxYamImzso1EuAiTifqJpJ417%g7DcD zot!v(vxJ_|Ksh*f8?{mR2JW#i?05MY z^^=2}y}J_cLyP@HQFGIjr=pnrmfw3Ib4Ca@K5~zSzEkfsCXf8B7wy8RmQS0zEtqt6 zhT(zzz20Baq-r6CBjRY6PwhCLoG?j6rfoi=QhZfZXYJx^UdFK{j6T#Q-QJ3Bo`24X zZlpekoN^MlMTH}4CB#2y-Z{|d%xd^p04&t7i%XEeKJu5Teg2jsl$n#L}glx4~<2FIy5$vc3qNFI>wqDmvQTCiZ*5B>X zi`btAF=bp$u6`FgkNt{fXEQ3lVTME|qXG(kcl&Q}*cwMNyPq9OJD5~Fk^RV#W|HH! zpp;;+(y7UmyAUbN+(SNWv_IYmM=%tT()K&%X}=iu*0cVnY<(UOD}axjWL;3Rzk%8t z*Z2KHF#Eu_&PL|L6%;Pk$mu|D`5~O$NUSXMh0!qHYU8(g25nf$;;$oXDhd;byr_{D z=I&_Zs`Tr|WaeN8uxJm|=!oGIIh7MZVR9JhASGm|B6*3})?$Nw1@V?q;SA<)9PewzrzDKGb=ayomM-!ns zdf6-^N`m>8VrocSkBXTa*$9w7|KjcJ{4ZsR1OGM&Std3W5yK`JJ91w%qeEF9*7Y zUeUe|X%o;*M&(vgX0x7`Kq9gozeF02oox#*Tz6~^4_f#;TZi9zMN1b6474u?Xv{UL zeYacFQGp|4sW-QJ^(Oc^D3qTaLXYG#)IYQ(*58RYntBA!Vr?d|PbNzXp|jQI<;}Fd`Ui1k_3^&7%68D|`aUE=<%B02YST&M zm&62zT>!EJ7s^J~$&0&dv{SpD#TE4@fJ_KgM=s}~&8YFS2RAxkZ>-By zjghh@^TU~*dEZz=vs|7RnDax#w|%00!TPntAm}=q(ymsWR*+FvsC;2|MH{~b3pD(I zUuEJ{o%@#@h$CF0@|DB}vBo?rl&$-$Rsvhb@9LW*To#>(dCaCGToUj_7tJ+)Y18P{ zr{?XskJGDPQS#i^w8cx?eJxrK6P?Yg7a|+aq5%g}E`4QRbzCyrc9pAuR|vgJa9XA4 z(GHO_BAzN`Kb-5D=3~BQfoi0rc2&OX@NxeH3mxw_oa|;;)@AxzD zGE*NZY44?8Av`*wEt4oUldTLO#{k3kGAgn{FO{r+cEh&FA<+IG9wGTM_CxQI%3W6y zrOfBABdPI%UZ%kqy@|*u78ui~z&q@L9;G1ii+%)OI&6Iz;c|L;l}%zL#e@4Ag*};S zBbKWpb&h8lEA_2##>`i}=qE4si8V5!2Mwb#P}Lyk32*n}cQ;SQOxQBH8=oUIE-CIX zY`z6@&u>4C#&VU*BH#yWD!Lu?FUEb&`&Y!wo4W9nGj4;Y)vK$fX1g7|M2^`dNY#)f^aUohI`lj- z?*otHNt3TnLl}oj-$(^RoDXG1?+$Jxxs)NbOe=+JQp<#fv|E2eUW>MW45rjut|b{P zGNXN3w%&bxKNE6-^=#R^O^8Yf>+QjlXqeYc1eL|(tHh9&nWh7QF9KPq1rO1h4f6lgYwTaJM%X4 z;vKKk7jU4j+|%jG)UBMGPb*$l4bpHK$8^4*Zwt;x;;eW|YutN>5zW1gn9$J+kuQCKm0sBDL*|o)~!;{~a4l=x0vxARBJ zwHHe}-n?G2(6rd>LE6RAKL_8gJe0Q4Kq4$*`+11y6MA1~e$7_iA$3Llmg=Q%#_fu` zGZW`~AHOb_Bgn>MU!k1x;ruqwU(J&IiH9fOpLXH*jX95F)_!c7vp|J2{{Hd1+^6~a ztI`i`iB0eJE%DmiR+L=#_SnNiGwYX6dho+9i~aDG>tVYmumni#nRKjZg?6Ow3i}ya zAFRcStmX$W83<25xJKHx*>bO5sP^w{6E2JT7iSsrr2h2xivRx_vCqmoeD}E={wvEh zx~o52TD7(`f8OK3FY0;;KLqzL)ZU}(A?P++cwXA4Umw|PUzGaGmmj0kuH2q3)^tRDcU`|0Tb 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 zcma)=RaX=YptXk>>0#)O0Rd_09!g5OyBmg-kPc~Sq#Y^gmd-)C8>Epg>F)16-~CzZ z?0xav>>se#qo#<0Dh@yffB+FzyIM&~$^&pP0C1B605Ado02@zdOAmV&XZH6T0vuc% zpIl(3)}LKn+&xUq-7W3xy{tJLKDjt!paKEL06;JRAQly6%k#wJmNz}#D1!67&)J>< zK^-2aK@O$)^QnWFo2GUtY+z+SV9&bu4wex_-fbo}b=}S7jMh-2<)NHf)pBPwe{HJq znam_p^AfQJqe&E9M$hhTUAL8CHK|$H#C{??3jb{}iP3!bEk@irQ{>W|=N-lD@t7GF z?0Gw2Pwl7Yv^zj)#376O=QWZ)sEr7$y<<{f#eY*0s$7aWF@gqsQODGq8hZOtBvB4g z7y+*ryz5}yLo$kE#h;m-&UqRv_ZNJ#w>RKf{zazk47}FK{HrB#$OyXO`$|W8bHtBA z@#rcjrmE8@%!q3KK6od>(*7sMQcn`XuJZ8RpBOS)gONlvFJuSG)vOc8H+fr{vOW0e z&@?%^nfuIdI42X(7|Dg*tg`n5!5$Apwf$VA_Z`tgK4DIE9v)H5^Hqi=jl7j3k*niJ zhzITM)WaC!$@WFxv&Mg<<1qA2?lTr&4eMNol}Nl>O)Qgt##3zjiOxLayHooqL>3iP zkmWDm)ebvpnIU>aKwQr&8?OLvB|c`n!RHsV4}UyH>`NpBI1rh$dI{}9d;49{6SL_T zoZ5X~u6>Yf3FdMC3PxVlWJcNt@|PD8u!QzVu+8#~G->8+Uctn@mXzh&@2`H)Y}J1~ zj@}QHc37+{dpUq4sm?LFZK&HyHh9t_MNDIh$b6Jg4pQ^OzqqD3w;bUK3Z`z9ZDbmR z)_i^;(KvmO&fvH6N@kku4X)h0!r{N>M$uo7H{S&AqyDaV+6*sI2OPjarRfCjGWCwO zX{U@TcP?&o7j3n4GKVSN$rU_Dt3wM1(QNsBk^-G3IIjc$UZx@|8>gLYBM8U`wjXB(ByZJBz}GJJ6F0;XfaJT-dt1>!#)v1`0=S>_+UF2{IK7s8ZCl-T@cMcDnRU~ z41zo)FN(244;26S#(w6C*C9?Raw8~s7Ewm`lX7iJ5up=}df&Qoa(m7g|7=W)m#6f= z98%DB==m9-FV!xfX?4+vv=;1dqHmUBeva~V`zzE~n#S<%A1u@lUnDc8@1H)8k>fSP zl0c0sReg>qIG%w{B?Z;V+I#U&dg|&P8?n{oKR#0fiy+RB_LgXvxhDLiXYzMeX!)Gb zQs$AP>xH3&=0RkM?2 zkAvMoK$Lk0rXkgJaaMOZ>{E+UO!!YRoD6L2aCb7}B$ZjCV{aF7I_P?umkgGv)pAkW zQXPh|p?bO&P{(-jIM+ynHHIBs${WpRP-%60#yxXCMdD_snfl}FtGi|ExA!S6+@t>T zinnT4ou|wRGfAg;Ujdi5{uVu`5wISP-17&8TNMwi^k0FkHb@}Cc5rl8^}V2$YT;4} zPI!abu4sa`J5{%{I>IL`ok``Z6aFutUZ*F652Y*M-Tx~&&aVB&`a%GJi_5)3;a|$r`Qj;tE%EI-Il^y=C|>xTtWw^YF9&F zl97uDAJ-@%Ki~zg0R5P01g~4l?>qfokvm!&FeAnis!xFRBxpwW7VjyJjx#mZwbuAP zmyQCLNK-W8tOZ4zT5+n@_;oH)mv-icFh<8cqqK(~v;A zRGe&M5ewK0>bnIf{T06c(#voOiTwAAX?T&3IAQ{lD=$pX@S&fe2-W1bN9>0ikSWi8 zdwfNm?CQC%l7!jJm~o!?{Th-GhSDi1dmqQZMWw=&r#j&|CGo6W2z@kVLt>BdUM@0J zD(JogL8OL|7pVGXc^T6k!6zp1^eC~E9E(CUdRNWzLHXOI7%7%8T~?r^;NExIwgln9 zH2eX2^Q#$-@1HvVP6xWOOa`);d#i<6Qz;MZ{82Vi4clS%N2iv<$#XBD#=+f1@duZo zQ1=^ThD7tn_ITuKIPLKGC}pje=mGjQIRK2dV-oU(4J$f&kTWvW!Mk zJPKs0mx~6-@n9&vG_nahpc%pz{}!U7q0o1UvQRzraZpD2C zC*z=41|NT5iP9a<@gmUsXF%QOpMnNJe#|12)AF@WtYPfpJ-tVX{@$E?q7C0jppq7e zG)T^?|BA_5c!OK_U%n=tev=;<(P^=gE}*O&6mFgR$!y=*+=ydsR}6c+8im_dQ$7{gnc(P+n+| z^A)-%D zGbi4ay-}Acl|t>P1jf@(=hC_byg?!U5)^RuUUBEEAeR8_W#CicSR{5%v&SblXfd;J z6%eI|3Wr+;P2Muj-geqIGQkD!iPGTRIp-^FH>y}}#;;LUn;O^NNT6>O(exRg7?K;u2*xw>M`c|nK2#q4Sws-IKn#?DOCJ&bz1%#4G=o0FMZk;?q3C?Ob&gqg~uP zJE|0t4)L$>`+I_wbk4Tq3^h>rvWA|ZF4RLe?wzVxO2-K;kmnk7$*9w12{o5o8X;5V z0#CD!+Xwz|vgPGwGsn*F6I&QebZt5(-*H&f%c!O;g%GeUwc7AzhoDU6$uLwh@7cuF z*ZZIe03pnFoRqMA)P9uOFYYLcMBVOf-LcFygryLySU_(tf6CkT* zOduo;dRz+iiMCM>|D@A^Z~#D@a~8t9>gF5}s=~>qXL*G&*J(Jylfk~^kESPgNC;JL z3-OJ4MF4=dd{CspY*?puzE;1&4u~#}{*;kJ(nU%ZY-`ZvER#o(iL#KqT@(Y|m@_02 z&NC=S=;JDtc+qIHo3*4U1 z%dtAgFAHyE=wA+4U^B1~JFCrX^!3a}(`w~y^I{4l{aZpPL4T55a7ZyJVl&2;Qf1d4@&lR=M*!YBAFy5$Cq(jMgeQf1o^{x#Gh+047P3VD!}e=DDcjS{ zR#~wXJDO0vsAA{WXA>tCd+NtAVt^!L@`+k!wKld++e%lIshA92m}epgjQNIaDgmHO zfUl$A_xX-Ml8^Z0b#+4PVr69-&!>kR+UaeN!Y>qDBxa+jY;*AC)#LVwm?Y~)bk?&) z(P9^I4EfP>Z4rfo=^Zeey>48aX)uYMeM2957``l~{kNX&6lF#JpxYY5Xgflcz25h? zbS%Gc+I9xT23(Hh`?+Di;S|giS9aGKI2LHG8*^NZobeTXv;MSD)7XIVgv~P1s#g=9*$LMuO)_2BHRF zbN4N4r0$U5P}t^fOm^ZcdqhC_DE+bf4;JlwF6Gn~Y3FY)yw4zLPbwa=yWmlPf(6!> z8|P|Lk>VB-n)qwhs&SlUsan1oD{Na3yU3nZio_{D0hOz&H)}0_zlU-h4>oo7Hy-+E z|Elr!XrGrzOPHK!b)TS~~UIEofpkXadn03swV=E`LStWNPN zVYD@GSDr_Jc!g7h{s>96s-HsIo5af}yjZKM|9uN~ZSI>w!h4C?k5Y@B&?95>vjwXT zA-R_aDoC}OA`-GV%Kxr7{<9qaKfy@Wz ziTl3y`+c5!&WH2m`~^QfZM;W{09*h$Aj$_&7fOk z$#TEHa{~3SBI6Ah71$QNy6D8%zF;DUR`(FQb^}<~%uvQYOZn-`KGAoC%?*a$FVpJV zu(k`Aa07oJEbH}o&resjB)Ju$oPqW=2Q_|J!_p?{EzKeFoAnfND>gMo(Qed|-b$R8 zY3_K!lEn3H8?mcb>NDdB&>3^i7Aw8P2`2BLr8L@smDoyNRla{&^>}iO5dU8PvB~rZ zmzHdjdQVwYUXv8Ii+>l#Jf5F=c5bHNcDN>3ieOjZyWeuMns*u(I)^@{kPzwEG3+4X z)6_s;H#YRH%;+T!Xv&^X5oU}fb!ImXQ{X)JKy$IPfjBAixf0IK){Qe?h@=)}o1PP~?zoKz(pbGJ3X zT5WvHf{pyJ`Am=1VCs2Rq4@M|-Sx ztF!$W=0e(8X7}ulo9%yX~Tg%$qn27qGUNeu}e+jgnChgX`PhOg@W;J zsSHy&D8?ZT{@7pQc5rMh6ju!@Xdk5JL5cE%x(Wu5kSMn3sI4vNop%`H5nUrd8iuG> zj}MYK%$HTZ%%rrhD%u2oV$wi#NdA6G>4yT8WnQoaPXMsX*jetiGN-Fcr1-^?b2~<^ zi%SL+gJJfhlfyu@Bc^S?X-lam#htdlg(Y%nxI(wzAl;Au&+GOSfd~FI?kK2m`_8E6 z3R*bDn2fI#5vh{JhZLWtS>jDqa+jH=epV?`t*aBjXg%L0JFhY-bOjMFwP7}k4M|&w zrwQo6n*VqVb_qDonVE4WG%lQZ%S7)g89+;M z=_i#3d;{UBm%I`$$c#Npb@{2y-olX+VcK#>HZPy8?VTC)>Lo)@MMnXjS20h8hfD#$KDJa1usGKHfXg7ZsGeO=FR(mKiI=cS<iw<9dP)VhjsaS2y!tc|Stb`|_PIIVhvGdxOTN0a) zj&iUuy4HfQuLOf5xMuc)fBt^<<)G4~_V!WJX9RDn#*6C1b-HmGIawhIB1c96d7t3p z(|2pm_>mMiH4!Qb&eY)OCcYr%HFS@dxo z&+eSXv~g~NZhXj4`!-xZM88wt8@-nkYQ8&YTg96cNIDnD5Q78A2x@c`=DDV#uo8vC!kCkZFNL8A|- z!pwhEDC)&R4wiq)1N(u2b}GE(%Yu__LU!OrtWMKQHw~2H?07D@&Sswh7 zy42^+_D$$7Wm8)zG=H-*$9K#09P`RO77Z%QQhJLkoiDZQUc_1Fh$rZIaHvOxhx65s z&c^1@6ICilprum;pp$@8RxBd(`3791iuaOL|1Tatnz&;>idJ}!F3pDRIKJcb-(pvl ziugKpYYEo$RjQ_Q2p9gocq7)X;RS(E^KDY`lLX@|( z@=wMr#H4mmLb*!VLsZyQ{_5Fua`8)~fcfC3Tz-pKMaPcfm)X;j2Vs7nW5CL`OP=`0 zFbef?WvSXmE!&JU!Rf=6(YqGQJ%z?y>7TRHtqY6h2nMXWUH1i~mBW12DnF}shQCic zD@B97{yjl*l!rf>U|Ibi%!V`C{e;l{#irF?8&9zV{sgFqmjZwOm}hmjK`-}Nc#DhP zm1ud-Gb&o$6i84J$!CBB@aM)(K6}k-(sP7EI%PyZgR+9@nun6*hmTdN;(*A;iG!8j zukG26M-E7BdPwWisjIEtF!=g)cf)nxZl;S%xpVd~jO^W--O$T#ZJJ^zU$; zkA>#Tb~Gf{YdBqT%d5Ah#7V?B2kUBngRbY61sgTqtdyj27cp%e&U;N_WazGry8OG9 zE(P;Auw{dvm74Piw$pg@u<fQlk2HVnUl--gF4#aBYp+ zOJX^qLm$dmVXGQL3$#49@bDMIPuM9%R|D9>^t60NA3}c}`Fv()`d(?kMmW~-+c2z@dy(1HiGaXayN*`~gM6ZxtLa~8 zRP)H$ltWBPvH$)`Bw2#wS6VQfUeML-IPz{wCvJB zEUBF?7Yunp?}~`!issKF!v!jWlIYYq$0%dM3{8V1?p-8D)`R%I-@1P|f4|{n{FuR$ z!LFe&g3uAAqB)WFI^Uayau~lm zEKZc>;hgVk0jAxk(TWU&B4xVj_r4t3V#G*UhK$FLc{5^qx&I%zIZ zK=|raV#@_VMr8|0hK~^g%+iB0XSA8k!9glI>Y-w%q5gRquAx8C1A}l&Z2@xuV;?s= zio~UlfOb7n^7wxCLxT*xHus%tKR;rPZ5fXUq}8$Po;~}fHX7G4Y4Q4{U!P0CI2j=xH8=3~}^()BRUcmta?mE9w=E4sph^x&7>*zB=` zJpC>#E*m{Z4tXdyU__IMuOQf#8!C*19o0X#U+i7+-{AGvIM&d@Q@*9-?%PnwXU?%5LfrAFeeRinjh9oQBu$r|Lpv{9maue6RKJhaI(il@O#er*v)NkZlc!DfEd}dl0fdP9s z15M@cl`%epnRh~&ZubSg303t89HhrY>@4sGqoI*a5=5$aFnssI(x|13`=nK3q=BwN z*|i93TAu?1Th5}bCb+hM>rr9u^JnUA^L8;I!;dL(DyU3-7FP%1eN>$g=1Ej(0j+@E zx9KvptJ|7TCK-*kn&aPSv$T_R#$P}pS#QN#mHDyLH#^Vq$u*Drcw2aj08nG|Awo)= zN2y*4{=dPcS5*FP{dpXgC#5zNKpZUM{wkMlo|Q>;;NURETTd~b#M+ayT|-kB%4%RJ ztX7Cfj?6v+^)&NBppUIpPK$9K$Ju99k7c>b@p_hO-F zOVI{ReG)Jg#qN=G5TTiskedn$%w~)|*7p|O?*uW!2ha51yBV2w@@5TNAdk+k_H%!* z2K>oYH>n5~NE?E%p0q7Tghq7beu`~pTBx4$nqmlQ)V?rWj#h3{6u#B`rkb(YvpJCPQ`{z5w;Lu$EUOa|_S$;0;|vl`o%FE!wyW!}FKmLgWS2OVzlMS$gdRgUS;RjMH=8U$&bqx_;?T>CIK=0v~V?O;( za?=xb2`41-AP)y+5=Fy?1ocRa6uVxV5RFLt5Gyy1N?z>Fyf3Bt{zP?(Xgo5Ri@m>Bga?OBuQp7-{&w^WUGf z&bu%6)xO^A-H(_v4G9U!-rLQ_%gNo%#>&No zlZQ)$i-*h8-34st2XXiC0$X|5I6C>*aXEXsyJ4XLkj#;gLXnUpV`ClopZGtOE&S*Z z$15Clb7K5X8|YJTI>;6+54(ocm2LONl3G1a=93G%s6BLdmh2`p4!rjB3D zdGio4F-n7K!{-u27*p=uX217R5XaJJQ-#Ai%W0gJ1+D&WnRSmN{i} zE$_;IQzbyQ^N@WY%$FrRhWAIiHly;GVXuvqIqj9av`i*Bb8SrjC@3Pr72wyqO{rgM z`Ebn1gdizwrsmZCHWRNzQGVL#^(oD)$JnbWPx`*rWN+1VT(_8ZmT%}_$!{)zg2=Ai zvD6Q?tvoXfHNBTFJCTBTOzGZ3i6f6FqzZ!phsSFt+>O z=W)(NHpggS`pv+Zt+Rjf#Vhsic-}0b>vcTpxt9M_6k6P;RLSlxuTzd3B_ZH|5Mc{$l%jLZ6eQsYf7%#v-g-5hC07Npwlpq<_q9=6D{aRsI?N%&Y{`mJ(g}>vz!0zgXqngk8ihax2m;H>v{x zACGK7Rz09|I6Pe%B%Jqw@QZBiLKo>9$o1^2F*=9)++}bDpR*kLJ=NED^rDKsOf9+j zbHL+aGmRq8@2u{(o@99ZH$gKViU_zgz zB_^pOuH9iqr><5UTTJ3thF(v>s$`Gj+o{CBW!hb&!PH-{hY)1NN@sU%ZC&Q9-ptq) zY(>eYT3kuE*`xQ)JBziG$@FW$+qu-C>iV1O`mlwPX?Tmp8dwbkZKfgfXdM*~a*SGn z)}XgEZc-x^I>@~j^Ha7-auq(Wb_fI5d~oqS7PrelCz#PG)1_km5EC!&OrNe6+IrD zFQ_pv-DajZ%=<2Pem$j7w=|~NRyi!stX02L8s1;4Tm>86)`n=_N#a9;I!AxlPd;u? z{|n5&{#t2y$l!Ugu-9;~3Xj!OD9A}z9cC`#Km)UItTvY$%#F9MlRvLZaw}Z8N0~x7 zwJksBI7Si$?MH``P}E1QHJba8hJM78F5&+ZXj(N}yHqP|LVrSl+AZSEkaU|G2wvy$NaCuFaPVI=;9!o}DaBS3mnhj~?>lPBy$n zPuRRA68QibhJog+JlkcZI;|vaA3t%u&^6zmz6UwGr=7QSS^CQuJ^3JYtdi#9p7zS= z%O{0y)^W|oyNK^6qVL?s`SYCnk5e6M`10tXkMAEfRcRl8)q!<3IGMG?m0+vqtzBOE z-z4_R(`tm6)voS_;y;lP{U$hR3h9i5Obf36(O8Z3Lmw%TD)@<;ui^K*;Hj^4bo)9x zz_qD-%vNb1=QvxLN|E%8Wr;Drn((RuCEkkJyiLH~t-&VYBdE=Z1h2b84mF7R5KZ*q z#|`bq2ar_)($OtR*0Pv_%E;fYJ+ACzvBdt4bNBxFo<;({s(d!SrHA!BOqUVSDcs|H9YN+D3jH5mo z8&SBAc70M>Hd|oBF;UPj%&I9lfQ^5x`=mKPwd|c`)Q9zsly9){1z1L!r+7!P#pSCU zR-SC>TNXtOn+?9Day?qsc(C}rQ$lE&=>wIWd9|u1;- zd)ss`PWpEQ*s_Hp-i|_ix(TznlWYZNO+;yjr0Ov8dVx9EN^*V8P~SFr*N%J%{ur598}KG z)6PBJH@W-?SPp*?wC^0Zei`<7%RqmiEx}wiLl62#vLmoYC-p*Ew74}4LEi>-RUiA9 z10kil&)DrZx{t}LrBd{6u)e%P`AF59drur*fuN8zWx%l%WHXIBknuIAvmrxR^c%VPzsbBO`#iB#*OKC?VC z7(5g~R7649jGPEN_fNgku-jjcCtyBNtID*0%X7!5RM(SdH%`T@s#fOXrbjN za@p`ObR0>uh}L|H7j}3hVED&sxW&0Lv95hV=6d|3)<;=v`$j=t5zhfbT$uRuSQ#4P zj~1A<1XC;CD)`*%QHheBE;u855B2il?tS z1w^hjijvp0$Ra;e3bP?DEz8R@>$Qc*r(YQ(C@x4nloKR(0?;|RhMqDxS2dQpw^4gv z1}y0Enzt?8JR7#m*R->#xLGW_Feh`457O0&-!WbfPXVhrR9tJYJofNpG?vQ=@Sx}0 zIU)^zi5r&g5@U>{WpF+>1>SKgr7(HH))x~S?F(?$-WMoFNrBu?jwnjeD6WLggF^@0 z=Voxk=oU-mT3y$rJg0J*Kj(z!5+PcGL4jCE6Mi196Se@JDPSD{F zCqJ4Jop6ulOGscsj!N z<{&QOJ>t#bV;!Cr)J?K zBnKim6!t2|JPz}T(`7zIAmHeInhy%1cA$!Facx%C#}9)!^)@pKFmUpNoJ&?$z3uoG zw0&cWLC2R3u&XYwo=Id&>gb zYuWO^US2U8>h|eQSc!+>mc>p7W#&9&arvwUn*JvLzID&wj0+-|Zd-=oEZ=H4v}gNL zqsK%9Y)0#uv%Qa^H&2sX=)$opX_Ta~`l@|@9(@AA1N(X2g&NJG!Sp8C@ zqQ`uJ)l=PI5C_(}I0Jl*bRPDk-Dp=(VWbKELHuXjm|ABnR@_WR?y_Nr8&og9iCMJ) zmC+x?Pa%)K3Z4&m0bB<$-sahSypxzqUt(CeJCof`PbLkWb-lcV=LQFDPgTIW2b{;_ zUTkC6&7&u>m`6=kHpm$CSyi%FY zg3s}<=*8C}-!9P9aI8EJCfYgs`$MZ=(T0`gb!P$BzuZuU(KIBpC1kAmC?E-M4~FHm zD0k<*L}9Cb&37TJuc$dg0RL?8!m;@l@YipeM6JeG?)-QI@Q8;zKnGMDs8CDPe0X?xK^MdHg&J-Wp;6dWksdy;>V%Ne zrfd=~N_V5L!}{vpPh<=26!RS_#g#65osC~YYZ|Btlmz}=&ssgL2?r0WP3J#FfAKS% zL=AP@*Wa7(LsCJhWKFe738a2@S62aV)72Gkb~- ziS`RxPC{`6j#7+2`_M@ydn=!mAdGkE;abSIDy_4=WPa&D}K!HEL1PK zoWrBHdccbWhaM<#nBJ5?%?GX2~$5 z@02qH@q1WNOvavPjgg9su>Z!2(wAE-ziVm;?XKYaZ{<%{MtdaqIP`T}qXgAzwnWn{ zOi{SVsam0dnpyzCy9S_%PnE@mFIK(j%0{uOwLWR&s?T5=ePp76M44CATzt=l?wxlmOBY59BT4Qu;bXj(}S3=-u|%@W_OxQLXhd@D5tQ#;TP={&rg zfPHkqLtUL;W%+2NB=8(lfi&|9_D6Hs#WNBW44;N!K8iJ|kL&x^534c?AVAcmXnK3@ z(}%(Q&$C9+{$6NNqCvmA$q)YfOWNeDeXy$eOA%_kg*pEwwHs+ZBlGPn)oxIzbHxpn zwRCQ143x4+##4GUOcve)-P$E24XD+n2-KyJqZex(4&_9%bNhWe2@!a=`-}4lXIsst z+GB|xE7*N!zVXpx5Pj2h=Y`m~80=jQ`^tc+fzprBOXmzZ0Jxv}ewpc5EfQFP>(1&p-`Uy&;qu#@wr z;Yy)rn<(xrVyeawt3=#F;rX~&MD=ooWlFIc$nS^K5ts0AM)?3{jM+yf#6uOI!7?jy zgnjrW2S%;q-jly7+jYGt{%BI=6ZX3UprOHj!YAgzp-+YNK2qEaV;kk^mUjN_gOgam z$>mS_{bv|?31^wXDpF-KuxD#17Z&G;>>!rKs+5yqh`+E7!99cT_{BS3hew;DmxdPC z(_k-)G4bq-A!%R+OP#IecBLMw329ysnD4Sv$)?`Z35-RFxUNfOvAj`;$vXI>j#IaJ z&H2Xd%doe^(}qFexhSdZS!GD+!E>+QL6n!r0bL7~Nv=Krd3W^0x9;eK)iy8{Yf70g z`#(;ZNQp;z`K*L6NEZ3Rpx79QjsBl0BJED9mWciYngCH}cvrsPdaNeK{L#eVl zt<JLdkt4iNnZWKT<7vEZ7xU= zu!i{sE+^?C;CaY|Shmx9=<&WtxLqO#E8r^w$$d7At@L)-6!j*fId} zJI$z)y2_kS39AI{w>CvKfce=3uTlF|HV_BLK&h~F z>O5_BUJ|zsf=(ca8VFD5WOo4s+?jX0+wa+aM7GKs7SEQi$(uAidGJ;!`tBHKt8(LY zh7WI+a9h-iz3O3+b4FCd;ugn4-0XI7waWX z$7pE2A@QF5Z6{a9Ja=_JJyKH!*`RCRjVknB^{Mw(atq+uC(S;a>W^q$ z^aDoUfmHk^;ZAynrdBQ~Oqr>RuU8yusPv_osGzY12L^-~3Wnb3D~|e?a`A4Ba{$fw z!$^Bopk}M$vq1I4 z^9ANPqNFt9#+m>2_}ad&HO&JPWZIh^ggquPNeQZ8O6oNPy%ilxJD2$@jTY?R!Umws z=w<9d4*eLz+)U#z;}jRg<;K|IF&Ui@;=zXcx1hSIu7>)kQ>yHX@)=tyEiKU>NGOQ% zb{U{Ig|-a|`A|n%sa88uW<4=gzN0>1RX$Qj8#ZYaBuaZad&<-GNX=?O07KU;W65t# zA~I>tOUhQ<=Ny|yuLXSYdM4fMUS9hoT2^QCmfaFnH-_`PQc2prk}t~j;rbH4j{K)w zuxL@y5v7)FN($rgqNnNaZ<*DiZmN!y;X*RcpQ@#1FL<0no!5;Kl=)> zBLUdk`2Q8X9Zhl5R})^AySba@x>dU%mrqWKxI*39I8Xq7rekQx)OI7Z10(6@vGM&w z7Em2Fh&52%6c{Sgj+izgz@yk)7Ewt0dTE%GAw3ev3D_^iwA)wv%gPLHrCcZ8 zpa`o-)_5kP98@x6SwuCX!LGYJOjep~|K*39gB#YDQ!qfx86EQsZ%e|N|K9ygR;8%? z{d)0WP=Oiq!}374qO>i~Rj|MDS7}#QCDA}#ldL{(1+GfOfpR)Q>wU!I!C~Y-J!Kgb z^>?Bph5cPGg~+&KKiq4+H7k8W4P+&MRp{a<&JI|K=t~!IUREP_pyR4>S4h3Dy9~=) zLKFBjGRi@eU%xZqVVh%LU7v!K9;w=?@_Mc#hjA!lylUe39b@3u_ zmHQ05x!CS{Z5qD~zW99x-IqG|N!vcR9?LGJ5c`?FATizGQil=%n%IxG(ji2gl+pF+ z>l@oZg_u||btdO^=n~V$#-gx2%vBUL+$D+S&KJFS{kY&-@CpIPqxZk*c&SBwFa54O z8l@jO5580_S3n*Hjl~yU2u@;x zEgYiPDs*a)!3CM&hv%ODQn@Gnob@AUTe_L{PH4{zWJ&yX_Cq-NG_WXLi$ctU>R@j| zn43Yof1$+@%Z89hjX`+mj=yyuRK0~s#`JY}PhUw(6&dBf{qBE7YX4ES|9_##|6~7m 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

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 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 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 zcmV;u1w#6O4!R5&P)h>@KL7#%4gg_ua8#Of*s_oX004Iskr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5d=o8{z4;bkGF+(cce6KpsA1Ug;}ep5!uXG>@QEed@+< z($6OaEqD{+RXb>ZT(>w7{>b?bx6~V@p)Jxu4^--qOCI0F37Znu<31kD_CuD*4#8S< zV$-xht-@y5UdM+=K*Q$aG##5_lLAbalj@=u5qY%|l?;}J+7U8AG-mM#JC1bE*p&=# zJ=1xHSrEg21d^jeAKobNMVr$^2!>X(`w{t3>;s1c8XY%(^eiTSW>E}1&f@}X)5p`I zNDz~Poo|*&Brj3_?DNkdI?qx}W=F|xBu}DvcW4f;4g#HW ztcD=+iBM#4@Zg4b;>bQ2m`ov^|4^AI|C$;UfBKr1TzixW6vUnE^()x|Ub0_gKoB0P z2T21YY!b?bZzoLTz)AJ?)c7n?E)fsYgwniAGv zYw?ZeZb7Ar%MU(OHvOossd9iJRKfm&{LSlH`b|MIghs(&P@2f&B`!iiI=BtcPCQF( zd@UH@_ECH%y{OjSLu(6a~jsQen`U?@&QAV)8vs4b&qC{sX*s? z%Fp`7mI@g}A$hdUgy2dtoOA$UHe)2CJ}yk06+_YEJLfIa=4nW)K@Ktk<$n7uVwU9^ zjqBUSZ>ea?8g68vT%_bF`<6~E_?!1bHTleuARHfe6ftR9(O9ZSf12gm!lXzG+%?;>EOpqXhW4$0 zNffseEakCRGBMIL^oRlu@>KQJZzOnX1l`x{i`O$Q#``1)wzu(#t9T{*bVO!3heCg} zjqr3v9i()ZFPQ;4?k?(8RZcJ`LL&+0aKhJJHO41LUe8n+` z_u%hwmk+c7fQq6xgMuT%D^(>UG*0gj<$0ZUmX#`L$x;z12B&hdr!q?e<+}oZT0~SC z0-G5-lAK$+{Wg#HWA;HF6g{nLonxH3VSF(m(B4`S;$%1=I=?Tqa@5oK2hTz@%*`$A z+UR)G+dW7Ec{Y+rIL&XD28dLnl+5l~S1lMM@ON(!QYnXRv#!=KWabW!hse|1yuvjV z#E`#K@c~m1K!~gjYtYu@KL7#%4gi~b=TuhZB7_MB004R{001PDy#*(cLL`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+$wxjypfF zq6e&ToWgV1&LEb)9_A7Hkn%Bc1#N5=xCty`$8WZ( zgHaKs!1*8R@#Z{BcXNNf1ooWZr)o9Rn_f~h+H{(w_B*TVKfkG8f}@5VsIpJ{1?TuuR^kczXf~?n5YUl%Yb?IXUA-D;EAwGqOQ%1 z^~tMb)teFxkbSe2o=gVA^+SA9piY|DVjMW^?v9102x`yv9Nm8~so~X|WDYaW)YnRL zLQ9j+FMo=K~&1S*ndB|&)VB!`WO*gc{A=ofeA>rvk z0LH|(4rpF$CtSb2oUAWAYK}Y`N|%VOKSC^OTz;R2Ck??%P8?XWm6{z865Wd2+g8cz z8<X>7%O(CoWR!lEw|7 zPlSGdwVd{~T*t~`EiEjW*uYIlc5Jn;EXPiF8wK%gQ0kYB zkOoP+=$qaT^+Q)gV7B8?;D#82HUm@r0$q20C9u3l854g8G)bp)830CS4kQs9R8ovJ zN}ZFH(CGj^i5yqiX&wFc;*R1vwScIg5R!TILUV3a$Vx5En1U#{KhXtWMPJPa-qpeT zYN8SK#b^#d5g2k8RHafoWnYh`{R<^umnF*>vxfYvh=O1V5kQu&ZpBQ~WJ3|iCW@B~ z$~sQ~Y*2rsm1Ri*Ou1^sY+$@w;3g`u3?hlqzgrLBo@>Gf09dq>wdKdA;x}IX9`# z;$(Cove7ZPJjzRCrvoc_P~0r8pVYS_+Sgr$5=&W(cNO}1!COe8lY^cfpn!AsOMF)z z8x((aR+~WnHZijpDk}r=>>W< z0PP$`%h# zlP%Akz{s7lXdF%ACq#V=7U3U-F0-0qQ&1leoBX~;#xJVD*Tazt9s4F!d!i!W{joOj zcSQs#0}#6vdyPN=RGMZMiQgcKwbrX`W2vovW!xQC3=MD|^kyfw1FU59xoS zhuO0<6a!c;Wz`)IO6D`Yk4RS5=^I!)z@h2Dwt%3Vw5~Xrpc_I9sZ4u;fqrL_)cs*q z`5NCV@=-B$@9|>j3~rGyqif-miAbr_)e@yB>II;=`9T$rES4yO(W+ZWmC-nSNhQp8 wYsmlex_2f}O928u13v%)01g0~d*=&OR^=ju2?hWFdMuNy1xN-<1^@s60NY;j6951J 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 zcmV;t1w;CT4!H~%P)h>@KL7#%4gg_ua8x!fZ#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5c~_YNB3ZC%ci)XK`x2Cb0BoB{Epb6azDRjbJAyc!`Rw=ENB zLgq75v_FTzb)WNpI(L%r7AidFp4@mz@ip=%#IaAlrjI{{*iHvP3*oSRLIb-Hw!l?; z1wPoi)T0CtMq%GoY2^t>{;4ywafzH%fXDE?Cewq#5=qz{Zm1a)yA-^#mX&}lYE@@8 zrxaE*nm-uW^-735%85j(?-CUp6>IGiw$wQVwfDkxSMnu)f(A=_V+_5e$BkvfG!!w1 zQ4BC{I^>e|pOv>(-Bf@G1a9qcyP9~lE2!J=;o)exbCLlHZFq&m067uw52>Azb6oSk z39gwqdc8SEj6;13l5^R};LpLEdrY#aUZ6gy$^Q;pDF)81g7J4~%z>D;3}L?=5c)E8 zk}fDqpL<4s^{HaPY|5m&KC;phSP6bou z%7(r5jxq{|!x^7Up$W)TLKG;%0{%%k6W*mU-Hp#4aRUmc*~e>G*6XeU?ZI;1?AH4) znZ;mpD>lasuwWF^?M^?ch=+Z=4uQYpzD*af`^77NT=jJb2{Y?*1>nQYIO2R^L_$bb zjpK=Ra)!~DC^nLu+ogJlJ^)-;U&orK$Mi+zy^cdLGFhnY*rhn18c6$9UI#tWECB8QrFoH*;Wi&I+Xv z2q6uBgpGnA1w1usMP@FAvad2Z9frMK3}flp&aNjBS;gzopJwBb>vu}tu9uP*jOg8J z>VXSLfG9&|1po;|R|?3o|J{g<62to7l zl?Z_p{KR>K2>54)INS{I=;^nrj+Q4Tky)63S3KPjW|^lkVEwG-y4T~R4^jd(u#0`& z@6v`4m@67w1l~Fm?F(b?Bm8n0>54IMQSHT*G1bUJR~$%Z3z8xP_-lfdfJp0cnk?fS zv)dg;g>!&-sLPnqWp-lhe=|Ldb^__J3k&|Q|GHh;^|4T)y2h+7E*vR; z&0pag^KMUsV?HbF%xVj=^yoZ9D2twgu)*#L$X?G~3G#+po;FFOIQFdUpbp6~r+%&v zL!eAEn^~3=ex4b|#;Ug$*(~qPHka112Vc3TgAU8$h~9};+2kuzjOv<@w$Y@8+$cbT zn-|Qh--&#C!=%U5I=$(-<+qgplvy`_d+JoNCiwH&)K|)B!5tfh_15ZxWR@M}<(YS5f65|O2DM$(I9`BTy#QN+{xN7K8)lQyFw0^yi|JqZ3`#3`> z*f5ksl6x5h0YU-(;ali1*x+l&Y+0H3yD6y)Z&dZ?-Cm5VdLI3hE9J;e8;qqK!;ARg zX_c|mHOcccw5!rfE^J ze*>X~F9k6KXcwb<-LvVGl#rq`DXhIbk=8hOVk9>o$p7gT+%1P{*K_W2h~y?6mdYPato4}Krva+{xUA*|0-+j}cWdos+6tobj|Mzcgd{9dP0zU&k00ICI4gg_ua8x!f W@KL7#%4gj2c=Tx&jN-bCh008JS001PD{skwILL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{wGjrIw?hr%CYobbbqDp36tPzj{mw1-KE;Jbl>D z#iZ#FA?2|3&S!jgDOfs<$0UDIw`=>!$LI|Qkls_9Xzq_UhCE2;SIAJF$1 z1>86G^OVJ*5ou^n{q&8(uc&bQ~HZImns%Xb(2>(06Y#RXn+d;Q5dmozF`W}D1Q9y8HLWFA# zXh2kNc61GCM&F@(kM26;E*GTi?f6yrc@(iLVU5N=*9j7bd60klPH7uVWc`2d**X(o zU6k-%I}3K2%}2{zTZ>5?>ql|_p+Q|AO3yf+Bd8sz`GT`q(P=1>qz3>|BUi`a!)W)@ zMrGVrgD5Xps%%R$_8@Tu=Z2XhqK(T>mm@tg>I5YY zoj~06TeZ1Jfd7+kk#!o-QX z^?2s;^>OB$k{LwP)&_no%qLS|il17+#$wBT_09N+r@ea93UGfg2ou9&{CK$_R)&#g zdJ)Ro15lei>X13Q^9d03Wf9a|<^WF;ZhJ%7lCcqYx46uw=y8VqScWL8KOsrAl{WE+0tpVz%<6vxPqF zKftLiMl^(=AQkK+MQ!d`!3+H4hMUgY5~ z^`<`;4}8HbkgjDv{dD@0XHX{&D)_)9v!0<1vy)#&TOp&h@}`$amO$g__ZRq|xzu_P4>snvFtRVm5eFLafQ;-1Uk|xKSz!leW(nVF7_? zJ`k)r*cE?WyUw@%|Ia%8HEJBwt0h|#9R#L-&Bn4AeblF5{0IuZXuG7;lp7uS&bkO} z^MoOxCIx>N!3-mO`?o2p@%$NTow%lPms5n*ZuQpL3OsCnx!`dHyN7->=&v@DT(@wq z5$XeSy|8gb5n4N*()NeNHPMID0h;hXqSI#QORcqvlD+kHjBUJN|kzitQME61qEfIlbNV@k7e#@}|;h$b>U4XGSmGnFgWrJjE| z3zqte1i$aKGCxWRS8&ZGC z8lzh(^h{@YUjM03EM-C#nhgU6XG4z8UkiZ^w;H#a1}bj^)C2}Ba}GR0L@FUrs};O3 z^8H{$I&c8c(j?RCmTc4_TvPV13#vjRQ!Qnz=Dz;$DZVt!+w5)^!!^9(U$c>4V>w*@ z-JyAvO0exG1Lv^VcB`0J=ars)Yt35V{6pG#XA4y+x_VOeZYYZa)PRU#wBgh`kZL6s zu^eVLl}9~bRgnx&!P$ZOfJ`#AIXz}$4A_`35o?G3hBp{cO928u13v%)01g10d*@WM 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 zcmV;n21)tK45|(rP)h>@KL7#%4gjEg=TxMQkLQ2}005^m001PD4F)HXLL`45*K@rV zG9R(pgvZ?IedlGw_-vSe8p2>b(e=VHZU?onRCG<1uDSSR*AhcIdveQhH1+H*5khr8 zC6!XJl}0}c>yKt(j3+d+k!+_it{wGjrIvlL02K1@GRA*%U!m=k(0stfbq3lYp(VwS z$W)VHb9E#f?!~r?r4@_lH4uLm@D5FVVU{r9W8+DW_x;<%E_&{m>@}^7x__QhnrOD`~m(_^Z!+idEn#rh2 zec+F{(r<_c{uj3QTxH2n=-vmW`knaIm{B})mTMN2XJ5JN4=4YV`<8!InTWT%LLAO= zwl)3tV5OH51|d}Cv8fyN{slK~hZ3bNB4~D{aw%AzfyTRm(-J^0!|X_V<^cZbH#jx9 zM^Y2|^=Z`|E+(QG<^ukMlcczu?Q35JrL6xTw01K-SbBMDRRpX$oK1EF44~kIiAQ%L zg`GkhRm=IWB2v?$^4@Cc449{x`T9sm0h>p8Vr;*BsSXy(XWG=?+5ex=Is?7QL z)BQsozmmHJXwodfuEX8>87^W^EB!%Q<|{-UpU@#{FAsIjS%DOtwjdOm|OM zMgrcA3H(W4IozvRXMbM`zvrIEg(<(+TD1GFo(OV8&~)<%LXUrV5iG5PeOiY~RJxV}J| z-mT0m*BRnP7AjB?4`KcruQjXxM!Sdd3O|{_?6}1eY`|o{RKUU!zE1cyd44}fJEBS< zyadrcl%7a)`n`Yu4+wI4_#sHm?o=sqpG_VFwO|GH8J^20NbU+J=cTR}lPYOmjdIbV zlN;MX)~PluXTfWkVcg9Z;ka#Wl3$o9glU%oU*^Ng;lA*)ZQ;804F zzw{0l)*P~T9}EbPwVigNH!}$tiJ6)l4`McAS2P{{0b5b@K$r8dEhOY7QjKEAK;*;? zaUbSSJIC7=#ylXxHwXLR^l)t{+rLXHD};%otLZ1)kMaAULT+hzbf=teJ`CAj4*6|?&L+*$)Kg@@kR*T|kn zQ0zy#N?H~1yQ$<8+<=O5M7*1PA#-sQZ8Rj-MSSh8PbrcmJUDg$1*apL_<-)&JNsd; zM&Nb<}isF=MEooz!B5r6aAiwN1wQ2Ti<|NaZN`}VIXAtcjk(5@mDZULQ6a&BD zThf31*LRu8&N0|j7t@Y^9XDn2js$^7$*#Csd0vKda*x5D56&5!9^9-1O8|Io%YMrz zd(20YzX3f?g@4MtWK{R`@$GkN_jr6=Rr7yFo0DQ}LeshcL;klqYp19?uoVJfX<;qM z%VoO^upNX%geY$IKI6zMJ*X}H)P&WyOe}g{U8w*>o;#=WVN$S;C<|Dt$PAvSkyTo5 z;p=v+UVA(*{uf$&Y-ac?8U+I}oD!v)O5{-6S`oO#0POJH2w=Lk`U|}ycj<2 zke#NI@suQ@KL7#%4gg|va8yxIDQKVt008I{001PD?FJ{2LL`4DuM4|1 zvFXEmrMFlE-|-EDfXu&DCTrwg=!ng=pik`hOPFV<3RM2%xr$gMTkCtB$VDN92(FoG zxWL+R>|{8Dtic2#_^yd^==KPiz4}-84jW?qd>+yv%Nz+Jq#1zLbrpY3w#D8(BI2=z zhB)Csz*N5CY1-D#^Nimimu-JCv)ki~SDk>FfQt&0QWZ-b)#GI&FE{8t5vhT`Awlk> zck|qf1%w)>gjOfSk>iW2JgWVFlsGIOr^BnBYi~#a6_uEiI^j$xnY7rWx9CM6-ib zsl{EIN^B6x|E+3GSE7ETB6H|?{;*9Y#3xTJIeBsC7QBZ|Se#8g8ZC^ykmZ&pB#MEAZ z!I7TA^9yPS>h^y-MwytEl$6?xc?7nE)zo97**7{?i?PsGT9EpmL{gBX(0*v&io}P4 z^TO#qEcyN=O+4yp&X4vPK6aX&X!}YThyqIUth1_w#xht9cfgk6#9oyhzh*w{*I*!D zJ5NVpN1Am+Ap*AE*=9wAi;b_e%x{OefGw2PQ_pM9xZ{5iT{^-run#&nOvbj3LxKmraSG2?IhFoEp?S&8KU@C2 z$-1y9eFW4w(~`Kc+t+@7E6gAb2(>%~3fZGrQ5~GOhXJ5~0^pw-V7+F%pze;MEdX)} zC>7P}o|1n-Fa83rm}gt*zj?Ruf{P@{_0v3>9l|5n&_@;s+vs=1*zn83+)L`SuPwre zOT5CToNhk&eGT!*WwdgPa(Ly_CfMnTag`9-OaLwBBr4ZXOgIB0PnL`Ftp#n()=T+F zbn;3_&Bin6gtpAGis)mbcJ|jxX~Nr|FuwBUCggvjiQhrVj~Y-ctSY$xG6kg2MWf#= zaeZd*%l`A8V?l{n(N`x;ywbsu=g0{3Q+=WhvMp;Qm7`E`Pm+YVn1@^qU-~%RILRd#cs5_nZjrmwy8Q2Rt**`Rp7GZENos?S z0M37sUYQ$qPXkRT+Fl@rDCz?wK<(7Rv2iZbhcOD1Y6JWbQPR6@HJqaE4(KUee@~eV zCk(;>_w-S6^3KM*{@Pd4^Su}b@rGSpNlbF3Dy_zSmVgsdQ0;rUM5`emKe%BGBdThH zjA{$0HN~q~Gzj|^I=^q4aV-{ zrohI`^~et&DP%Ynu2Opi)|-^A5T%50TL_%yPI)pxmH!@f;DGtY#)_b=HLEJisX3zJ z{{WtQ{bG>~cl^)^_R1cT5`Qi|246h6+dZ0AyA|N`S*HcQk1e!5Xi*Ol^_AG60H`6P uu>bK1>nc!70Rle*KL7#%4gg|va8yxIDQKVt008I{liUVK2I2((0001eY2w2G 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 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 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 zcmV;c22}ag45SViP)h>@KL7#%4gj5d=T!O5KZbe+006Tzkr+;YAJ=oe7BU~P+Jwj4 z=zZs9#Q1EOe;UGIJ<;{TF>VL7uvBzSm9Dw?WY-cyI(u@m99q?oI%5H8UeOE zPjD@vQ+gm(>ErZwjT8{P?@diTy=QSDuGqV*p|F46jDyR+76@FC3mCL&7x&R&Z-)$WbPBkZRr<6=ww64%&^7;KdLRtTKxRtT{-U{?UrBS(yymo2IbBb{~r=-}F1 zUEN}k%v{2nox_^DP0r2zqUwc>0f1-~Mu&cXG!L+5p|Xae@(IiEUVL$aBDSdL z0^+A`em*-66uTLrr_*6QNsJGX^)tk#;?51NX6m^NVGz>%F%*2X(yy6p&>&p@# z%UYz7Aaq4xeUERPJ#6dMT^OiFgk*17&TtU4dL6~FP1%HU{lE2tP#nc7Q7fr+*`XFV zAcs+ZkZUd>YuCogC!Sv}%i-V`V}imzgi`1NSza*FyvNXz;(+8JFc@a;8Jh89o}WUZ zz&Y;#Dvo*lK!I??^@2v9ooM?JhTj-E$k$My2*Z!9I z2czKBiaK>q%ey}Yy>9RvS$0Oi+BQY8Q2!=>5AlP2vOAozxJQ1%A!sEri8hri(3 zmz32Sz;j+8F=&-4H#x^Zx`pG?Ofs8SGC9)Mgd-il@;BwE%cQJ&&&ADwr7}{=ur1h* z`xA7?DnSX={9}CD0WS!2>&NIVm}4<6JhB=NDXv~C+)Uc}RJeA{1c;W%?`+9}5!@_) zDLrh^i^euawMgfNpJg6y6l~vY+TeMjFR9ue^mD9e>>Dgn2pX+5aW~}BO4z6%MSkCB zXf3@)4|<)?tFWCPst_(4R?jB&gVmW9XuT%+25g2V>i^SVdp@eUbjN;c4i(syP+CK( zy`eBk$^6OzaCA}(@Ua7%z4)Gk8k9w+gw0@Q*9T~<0W=fl$y3~f~|_$FJ_4Y6PKu9qNXjO#kX9*^x7qM|V4QVydmxz*%<5_i3Ba*bwf z9KNB6hvo8!Kre7YZkxIF1u6L})-o>=w|k=kmeE9h4Q*`xRVvImU#^p1YZi%ZhreD| zgr@Gf3IRgu3}n(^v8XZP#+|sLfJI~o4sn>mj17P5jRDzt4+xe{Oyleuz zMf8IvZyfCcr6*aQr&QK|;MAiyy9Q|ozPuTwKT5~H0?r@IUbV`|k(c-~r|!sCwnHsW zeD$>tue7YnTd7W2kdU*f>=lE!jzkdq|A0M?@c(-zr2GC5!~&?RXefUY0&Vrdq}Z-7 zmI@KL7#%4gg|va8!zjvf!%)007z)kr+;YC$9^;HL>Z#d!@Hn z1K;rtgMiGxRVHiXUg(I;wV+Sz_)C~)s0vj6>BKWR}a_II5nZ5c~_YNQ#0j)@f#dW>0Dg(jbf}5Xi>5}uf%vEcxHQvldF6mBy z5`Ha1u{U4ARs)QGqAgDbI#0Esp)2**Xd__M)ri&^kyI%)?rEtSXd34-TsXxRE#7@c z(Y|Fy{F=Q}y(>RCi7kZAc_EmD5Rx6xJ|&{}q&{Ib7D!;>TC(L75qsGn%=SWW=(TrV zUwGwBn&rld_Talz4(X9i>bxOW1?Vtfjck2l)f*Lvm-~T#+;PEctR=6fhMCtPd`F>> zjp_ox-D$R@>sP+4hWKP(R5|^>ATX_qlPsh-;*(2hGQ**rue^}|tgutaQ zolUt`Hm66P;V)p`OS~{IUDl4$TrXx2^_*W(-q$zVB zyZ7Y{{wl!~B~mrapY3~XEck^i6z1j)DpXY0vQ5>0^~GxXjdBi2)>(}O$h1~`V0B*` z2Zr*IH)maV`1JsZ#EQ%VO1_VUsvcnc+2yojjFB1nBQv>U0amkrO0x ze}%PwO|N5sCLU}d@_a<^k>8>u>+$`evh2&vz&(~ijz6O$-RDEdb5aw5EC~WAH>|l2 zJJ#nH^T{G@)s(^eGp5ecAK7*$qo4r3nw6p(Y{r4hOX@$a{Hid5)u|GX^9&$_pNLF< z^$R>_s@F^WBtk+n&!c9jmBx34|9}@J65GIkR))TCMS46yy0B4*m><>Q6&Ptt>O}2* z({DBi2R@T^jWC)$(3i|XAk!@-<3_Hg^{_)scP47C0!52^4dqtpuF&U8fl|`Qj}o9P zG>YaNBTJO?H=R0~qTH5-*RV=ujT%y#!=2`G*1ERr-7^O^#;x#kEr$QH4Ktt!)h zunMR5V5PA$U|488((NiktdgHHTjygcm~zxrI&Y=XPV!8WA0j?dF^BY!o9Rrk>&pP^42aLBsSmJi8(yH(AvdJy4z;bw<$k11Hqzy9XE%Q8tSB&^1KJxL~2d8Nx-n zda`kM?MTPKAI6mIuqRh3Xq(L7d2j}TZR8%BzcL4DRFv#Tpj}d zIN14Ua%0s__bd4MC$lyy5wR_JG}+Z~%qLMGZmWBG96L<6G9Ly(1z@Ar)U9M=kX8U- zHqXTE2U~CVC)ca`p$_iZ3Yq8x zDw(c+av;pkMu4s%B>nghxtONza@N9N((FDwSR^ZdZ(nI|g35FI@4d5_>M4**v4gCiVM yoysHT%>SHh{(w+R0Rle*KL7#%4gg|va8!zjvf!%)007z)lhy`E2JHm^0002{cGY75 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 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 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 22/29] 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 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 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 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 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 23/29] 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 24/29] 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 25/29] 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 26/29] 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 27/29] 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 28/29] 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 29/29] 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:

#$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 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 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 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 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 zcmb7`XE+;*0)``2Vg>{)tf zXdSerh*H!lYTTat|Ngk&_v3w@?|HueFVdWzK_37FfB`t)HT(AZ$0TPK03b~l0Du7i zfatJr1(YAg52X+k8XguIt)K)`hbhCN!cd-masLjU-jP0mK^Q++a8wu?#J~t}2LO@* z0Nsp?0F^V9h>GdSR&Dl@L3EH*k1#IRRzOc=E~*O(7ipYN9bTX%uKNufqn;)S^m*z2 zeb}drW^QS)kG3qR>p1o$KW3T?-Der`HB?dF0pE99n>+n@$JS!V;#6;5S=A)(gNhSj zF+3q3M2vo$&C%Z#^3xi?TrSEEKfJz#2^`Ti`!=$1mYUxGX;ZByj4~F3F?08vvHFAn z)>H)j zcp7R=xAITeZiuq@k)A&*S*LOJw~a}Orgfd}zt9o`KZXCTnUXWjE-A}^=M`IS{KGx2 zlm~e{8oqaY1y%_PVcF!2)+aNhJ@nGMc~~QSVpVRNU;JM6sMuhA`R^jeHxdt=6CaFe zPqz!jM`Vc0zlFiet3TVGk!9LX%X-hjX$vJqV}g`Tfe2cMRRFWU^*+0CDEDMu<`i=I z!fLxt@Ji}kbsJn~9sR{hLvXs{DC4l5zWts=#P(fa#A46i34zv_H&=vEx`IVEzbB{Q zBw|D~*?gPsV}Nd0kcE9&xs*D6^L1k>9QeXt=R9r?n6vMy~x_LR^YZ<|){ z09S9(GorNZpSaX(i!rM6056)iJj5FaB-iY|n8sfHO1aJpee8vF0Ze8Up;Tfw1e2EB z;0Wgmr|#WVG=w~2N$EksG6a@~a_IKxWgOvY&H8C-9ZJT3h})JO?VWxScA*sOS9lQ( zRoq33w*#^VcE)wYdvAD&j7WF8Ibhb4t(^-UUdBKKp(T+X;(5aj<5$uJyt=Ws=CrI0 zL;Shejx4rI3mQ=aLk%!cVGlxuuI3)zA}6d@olow)?TK8csL*t_&xi_|=ud~IO6>e7 z{ozCtEpPdT#l|b9wws=oBG0c*`PrL(mS0`_mctcjWac{;V}FfXldDX+1HQ!S^|aT$ zP$3a^t#d$gfBQ#S#<5*ra33uRVx34EXjs3%Dho)Afp2zcPrU}Z%})e;$wi45=CoT? zF^s?Us56<4n#+faf$8CCt7{D`4SNq461r)Rr2JK7lqI-T?vDc{*=lsaIr#RfnruK+rN5>oGn-veTP0sgqR|zI0K~Hi`hYB5(TLpIf#tJXX*S>GzIvl!#&S z84E|RiiW{Iec5-&#dLMfbs;AFxq?wUni7tdA<6eBeXUQLLnd1*bOk& zs#&FqoW?xm-gGqtkj^Ac$IfQ#5WhRr@e!y2ivmeyhjrB*vi2BfKu)lzSUSTT;}@cyaDa z{XI=Pe#~=?WV=}xD0pvSt&`G5oKXl_H4&W!9oJCF%BOq|+4eSmW0g(LJz2~pR;Z3b zx{;oOJz{Ms*Bz|aR3p~VsN&QkN#ohRr zcNK<;{xFP4p8XEKsh4@y=k&vTUp=4@BwlhBInWjFG|N;K-E4Hl%(_viEvdyoHUicB zv?}DSNm8IoA?vP5^$0Q)OmFJ;LI3PxCPQ7WM*k5Iwca2teE4wiLsr?xX3HEY88T6M z^Lxkgc5`kndiBEvx0suNpkgUOx<_?EZ_{x+$bH?=GT~$+&gm;&);~s%SD(A1z&m(I zpEQak-J9r`R0$z;uIXB@;n=Jv7&-1f4mLvMT@M*V$B{K6c7>@*jWVfjo9j2ZocR+E zDsZ=1mVYO-SLizPID@FH0%BvvdW2GZM3r6u!}-ouw;%4j>3hSL**hT~Ys~2RSz|2w zx-E%ye?N0~Xc1~W>ugp+>iOx%c|1<)kPsLWh}?XF?2@ zR?7z1<|0C6V#iB8Bl2GHmb&%?=9$6X6~Vfw&G9`jsp+(QX0^?t{v9QWcbP{T^>2Ezf+Q;<1kYB$6G zt)gkt;EWdi@hLlyJ`DV`%xe&lZTZz`;2W#rvAPQMcHs)I%91+c11mBIREd*nv6jX* z;bq5Emdqsim9)*jlM=@54hnpa;Z)ajeRPeI=PG%$8#vY0Hrc;okP&$TpKu)IUiarO z#&ddpHi#}>X<(Rq?&kmdo!@Q;$Y$}CrQD!qm)29^AJr|6>fw=i0t7e;SJI?nOPRrevhdxz7 z)`eVGuu><2m^7YTB*-TK>r$BlUqMGg?niQOcDr}k-D?P!U~YA6Ce`o~*0pGBfIsG|@lkIc9yTH&C3zSMd8nSpf zD6;fUx%QRn^o%aq4q67JNstF~E~9=TfQj*i#Rn@$#cv$*bxdM2hu?|5O;htI4!kkqn#V@VU1P)DAOqs?R0QAUpZvXeC5{Gc_Q zHgkr5uCUs{Km69Oi4L~n16yvg-8B$yoJYnLJGm_fg;wT;+CvD>8aLK;7{-_uGLlYC z6~nkyYgvW8zIa^Fuk(^>GtzWkZ+>~kPxMEc(*gDA|F@?8GS&YkneJcwf6|IHXJq>K 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 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 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 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 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 zcma);cQhLc1I0s7+M*GyN{x_cQG^&Zo{>_XtragcuZaWL0_HHXYd(@~Jt-W7q z?HW-tiag?(6{{#!JG{Q{|L>gd-aqcS=iI;V`B@kP*|Y(y03JXNfq};0lPxzn0RVnE z0N@q?0Pyv4aB*~ScO=Nl%c;uA%Xt$$@Q(hEi6kGq9m&DP)z4AR&70`O#l{YJ1OS8q z0Ge@e&WfjsPYT9{|J2~l>G5)vXcvhlKY(b7(!5)*Aw_Gaqxxo6gI6584?QwNAzikb z)E`|6UKbi`&_1SVRn3P4n)2N{k|o;uqrzD)Ek(A(E{|L3yy=FLh8j{MY0@_Oe#L@W z>>a85r$^lA!N9L7YB59C(wA=e9AtLUnld;^GNNbTxsqCbgGDQLxCfD{$qCtzB_P!} zkIAubR@~JaEWGBn9fi*crfF{R`Aikmkod*3QXyz+mTl<~)?)x3o> zktNOF&{ie)id6krjC3^GA<|b3qGI;r)m0gZktfx_tGZkC6O` zof(N`nbXQTd4G{CE8lx4Iy4LyrLG6c5QeN_9NNN)5gdDF2ZB0xlY~>j_mG#f79e%7 zO=Ozp(G{E|T=Au_W1@t40h{;V4Xqw{4969r75g-gehafm#Fly+`#O}6=ea2xuV6bp zE8+xDac;R*XYp5x@n#SIw$_$WnfWdTUg%zL!Mxuy-V?e3ly3@G*A_a6_ z_6J>jmvqeJUY7+E%xAcjM!qU(|76G3fx`LFBOP`opclFFI@`u%85tjV9SpwI+_h*- zzrg_`Dtjhw%aRm=?5Nj2Gh9U8hGMHxybjr0&FglwhofPEzEfeqXT)PMUCZh389%N8yMT9YG>b&e}T#!4H=4m(~wyWJZ z?p!aB58;O0X!l30>QY45nQ;ICIVjYap!_+n$WLtH0IWr^$j67L__65wHLyQ4M%GiiG?{5M2WhA|CirmNl3m06H% z%84}vnnat66AWdvmoH@3-hV$-8+&En-i5s|{Aul+5_3YJ@;S?l-S@-JJ38fr%9fr; z8}*vSx2LJATN^Hh)#Hvp7Lv%Edu6DK+7#I_%VMMA+lkUt&*XwF+QN>lvqRGC(QJd^ zA3_w0`qzn`%=?g%_1+#eg$=N^de;h{&AK1+!*n8p>qEbmA`mYjP`4X_{RqMvc)X1` z|AgCrMZuRdpT{fsx|=x{rq(rCrL3~ za=)EUtw-Ub+xSIg-+?*fh^S?!Z&wIKqID-QCywhE;H!EEmF&{F zGx2izctvhCv7*YqAA?uiNB6m`X%M3wb^1FIM*xp)VeiJ z`;cX;m+j(liIBt#dk>v5SP=52Pxr?ti}fkhCS}BuKEA8gF7G}#Rj6e)f?D7*8nxm5 zeHV&*B_TJ%yiZZoDW1}R)%uTXH~wlJ{?riKY$VF%9y0&jIz?XJfR$7EWZ#LwwI&TV zX@kL=R)tl#$IRzI*u++M#@#~feuq4#jb=~lh*g~mtl~evS-~>khOQ&JDm($$yi6&0 ztHG&xS&pivS-Si{=RlO@MA;J)DL)_~DW{j}TQPFaCDK(&<1h`}KV*4NW7GYW3uzZn zY-rTGHhK}J4iMn?c#<@VtJ>}u?o1>@1!vFod$iQ-e}M%DRZ9woU3KGCrdq$N+2@v0 zC2E@-VFWn@>Ac+{Eo%N~A^wbXj{slpUAn_d)Oq8<&qs2hWvbprgd9JL%zrUg&3uxO z-U;luBR!dt;?SCFgJ)#dtP2fpKw0tVxZLgSpcyvYp-Sl4=KDddNZ@-|c%y1kTkjqj zBwaU5RZad;*zKG)S$=mRWlWhRd3zj<+4bBB4dzK8R(V`j|C^1lf!MNlIu5G&M0_n+ z<*~HCS29rcIr^G)ibLf@;WHQ#Ui_GL5LnhVUcfWV%Qi@y?ap2HV$twZdYU6dG?E;qpP>rsVH;*9BEYXYjrxM#;+tf$7OV27v zWdGTj9Nz8wn!DrcIBQ#C7P~E&5$kt)lNgXdsiYU9qnW>B5Hh(-KTgPQ{pO!vsHbI^ zOqRz7Ew*7zw*M?Tk_t2!FwIG(*oX(zQQAsTyKTnO+ z&Is*3_XD9&RnW5utj;(FmT=I`w2IrmIbjQ$xTa|XMsF=;UwudqPW-G^#5(>pLyL2V>oZP>EUkH{7Zpptt9Azv)FGY@a*Bt2|-h$sVW2BuLuh6u{`OsK!hTjP+2kr zWF?d#q5%bzunn>TsbvVVWLw5--}iUUyZ6KI+;i?9@I%=Ooj?Et0g?a)ejbw)^SW(C z6abKe007zm03d{j^Yy|7c;PP?KujP8kYEzQ-7B0-qTF}CN5T2}g?d5!gGofO6F`6~ z06+x*;13`A7#$b|6%F?{nM*L<68$tgR1)ZD&}G%J;C2P5YW+lf_tfHp1+T6>LQXV@ z?ExR!W*ZVkSaq2Dc9}0)_V8mrUAd@JhOinuo15>TvZ{V+6l+o5rAFZ}GvdZ{ovcEi zDdhrRXY3s8OJI?duQ1a@jzZRF?fbhq?6Kx-QHq}Gk?c%ay`1%*SRj}{8iI?0mM`F; zrlQ~JN#zRxW=s@uX3gvDG2SlIKjrBm%#x#V@~HBRT1Ku%<-QBy12`tN^kwqb0ocb` z6jz3qx^-A5=&uMq)VHT)`A?Yy1lrvxJ9eRPBgCKWutq9Zn%8~wY0{RJU#xrR1vkL5 zDZdVUhX0Jgmf4pYQ>whRqxI9P{neB@+B;Mhz$}_8xxYY~e?F#nucOb3u8fpvl{NL8oz} z4gEy!&}%LJ>Y-S`h0bI^1O06dsTL%NBcm zNvQT$)Z)Mj@WsGZJ~pO{dOm09l`!LbyPtc6WP>()wSkdmJ>TWr*!tc=ZSCS6{~GibvD*CXmo$U3)?^ikn{{eCwl(LaN6%ESIF&dr z?pz^A>011?4(dHm{m{+UlKiobmaxLQyNlS66kOCZT41${eOq31FqKxFh+7QG!YDaI z=P|B_v)CV`s$Q)StsIx{$%Ng9>rI*k{h>?0x-#t6+5JIIRu%79nZIg5E(5Ffjtj9txIu^(M>xi4CLl9CZ?nnn?t*#Z ztK;jZs^-20^8J9z=w}&`xX?2+lqSLdT_V;!>*f-Dv*Yd=6R{naI?z zp*KQ5?#ovpO@A&4aUPBlR)vL~?V(7IZj+ePjmn^_qV#-zuGb1ewGb6~~F2 z){xNd{1H#B?svW)ltKoEw9ADG)nZKNuT@i1?lKrpdr4M04%NLPG@a z9@pT>d%BUPck6;9)t>zvR-SWJX~OxXVr5>WTbC`iO?;t|QsPVK-P5>lr-kV2f9;7Sq%ZH2P683s8lUw6PZmLP7Yz58as0SNG$k@!P2aVla+u%yPYV{jjMH(S zbK}A``)LrAj+hxs&vZ#{dyR;^4h6!E3D@a=|6$-_GK^)ZRz)e?9gl3S90W~8h2=gL zd|VD~C2ECBA+wV@8=cFlg7;7lp{K z)GnS@FkY~)i1B#6|c_iV6lR?~W8 zK$jUR?RVu>o?^$PG4E5aJ{^nClzfA6@{V@XxK~`sk}huT#`g<-Hp{*aRt75e)LE&o zdsyi@JL;}?{v;&GQ^9n}gQZilF!5UM5y;Tfl2Cf8Il{3%%yBmg@h?)i6J9BTRN_y9$0W{G`uK9q+KBDcIf35 zYN61_a7^5^0#Z6IBl@*+NJ4P_oxKKN^<#Zi#VQ?qnL_N~_-(S4DdQJ%!&)_VJvAxU zRUT!2Ov>jPjGV{t7*{nvp+=<+oizqvIA31)m4cINmGQl;mSVB$uxsabgiRUMnS7te zIz^=94#AS&ScZz6##)ld#sy^Avja=A8Nsw7>P}#@yb=2t>ZO1&gRo zR;Gi~OA|`fx}rZBH&>wp(vI4J^YuEN18QsSD`y*|<~qZq>tH&H#7a7(uyGnC z7VLy}aO;%*e7VYB_RISFPpSJ;uu3Xz>rc_?EeXnQxr9Yc zoXEm685@^6{fE_4KihC3iM9R1=&_RvM?KBjC|dzRgwX$Xrhl~Qzo82Ji~rN0P_{tf 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 zcma*p_dgU40|)SPwyesQ4rgVZ5m)BL8Aamma7uJWW_M;zGBUEGGCLW$$lf_4WL(*! zvJ=taa^F|>IqT{B{QkUN&*$^Q=ax@sWK*V!HKhYJXD#ss)}dOdVk^$x^gIayc%cL9JX06;$> z!9(*%)4yn9d!PlLj`hapFy9GhdKI(kheuo5Y$61apZV`ZsFEXICj-`-)` z#b0P`;0r5Z>h`CJYM&4*k7<$D-k;LtCaie4XEJn`u7~ikGce#oNX)U54(-P~`gyo) zMZx95OIOaya7MxzPf|*9l|%;37qwrTWV$?3tW!w45KT-nIke;urQTWY1M|JQIY)9d zQeo8A*-O@aNF^90!fY~>PZ9rQ^_xChD$OARYg<_T{zDq39JA1|~a z+{z`#IsygU8Yu2dljsvvw${ZlMV{YI?PZHegg^WRGB2fs3y0V@tSUvvye^f6_hN#B z;6xx2%WMDKTi}88K>mx}%&gLQ6!wEbsC-h=GYLcO0{kuHh1eC;SxI#Kx3jNhS0I}0 zWb$I}a_s)@rr73vyUQ7ddHezhVsk^AjbfpkW-lB)PVA@Z}Prt$K+xD5Jvoxj=tzJzP4}9Y|}6I%jHz{~m;) zjSR7^+jXdHO(o=@u6ad2Sz$x_HfenCjuk^(u!*DC0-t?k4UgO7W0+$Exw%UMWRSr% zoSe`T59d}kpl9LmpO>>{3iC1A0g7#^FH=_Qopkk-(4DT5^K$akXV1=k86-axTkPgx zKa#JBY_PAV>jp5h=a07@AU0?_X`P{;bY9;Lb{-W#+S1yN4=Fl*OHCR!#%o z*`hqlOv^{w0|y5z0XWk{%<8uNonEF~D~Z8MEhYyEd%IKT5(xhjkyosA7UDtrbu}EQ zWkf@YGs1`RP2}5C-U1d;pf^d`5L#<4JF`*PaV^dG@Mul2Q?_&vmmr@t$Zn#(!^T6^ z?slluxP2>=NAH+rxI(Hb@Qk~U2!#3=$TGZ)AG5E$$|@I^gD*6bCmtj&tEtt2na(FP z^z4CL{d3M~3(f6}ihD_~B;}gZ2~5^R_UL6rtJFZfwvn8K^}c2g%*EusnXT)fdXGEh zd_Xd((EFDMAv`{Ji7MIqtFjfmLm@boGxQ(M+nQ37Ze( z-7W4%gblTJC@PFbI-$HAta8uzZ0t1>sZsfh!m!^k>Lzi;UNE>upA5dvc&C z)4u-k-@enx24Wx=OKerKlI?HLHIp}*Ua}qSS-3*PKJ@)%d@WYQ1U6 z*8q`5TwPcUx#1$UUEb?oCws{XpJ^CCzPH)EsUDpMV`>?jYu-HoU*TzHo0nRx5dvy$ zG2P6q)>jU$KMIO0I{nJ~GoPz}?n-IL-P9Cc{*a!xqee(&;m{(f!Wf!NVz#4}h|;^n zAA42&>R|bodJ=MN@zD48TtOuo?e_3x_p4eu?c!%HH^n23aR)Z0lahDVNF}O(H~q9s z=niNv%0XqSWdF>?F~R4a9ChTg?~Rg--KE(a?dQSX5fLAUQp((9$U#JD#YP78 zKsfW#>I?LVJ@F*z&5Tl+Xh#+2D*WT)1y%`BtD(HL!9Rk(CP^t zzJ0;M2#-yfxNVb>W_hjmy=&I+A1B~1Zrv$4aS3z|m-nvWswcoLJEMchyZo;7Gx3pO ztku_uVjW;mV0obDsZF3jQr};NK~W(f2w;c(DZ|1*+#=j z^LALrRHRpTKPmE8dCCJ4yTtSuI(!GTDn(*}_PH?yWi{!65iQ9(z z>{t{yO&>R{+gQ^vn#wpKL_}?Tq`-Xmvx4c(b`g`<(L=lM3l#b=$NRD$=j;yMM+t8} zieZ{}-x@(Po!h(8b^hGKZBqBc{r;pE31G0tq_J~*?zEjMlurpIgjp@r2%>{lM0<%g zoV!$e#v}&u%Ld>PLSjIAgSSa>)s-R;iBgV2#JX0Sj0HHt<@GVMyW~E7zfgW~gfuNl z^`Fq_g7WixdGRbjIfq#j4I9WzUT|i11Uv*a^4EEG*Z5f~9bR(lxc}h$yZMPe0&Vn2 zF09Q_{bPYRZc$XAOZNTK3IN{1#cMfJq5!?OkWkI7(%~g~)Y;+>O?>yOf(x|ub*JN&k_0+rAdqCI4x*O6c z%a!(oaHguEaT*M-aeHe+!IZzoZbTJ!zLYlYo*eslRt!G4qJ;RwXXm&xufnLmSm5IH zxi}lyiHc2kJ@wq3Yi!|*0p7e|-d;8)CV!~TsPg@0ZNUUIWd7ft`AeGrCW`6b`9F1I 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 zcma*rAEI;6WsH_~{Egdh#V2$7VQZs`&jjWkHtC>ihl zyx*Vedd~T9zMQ|{r=yO6DFZ+U5Cc-}_6+*V^<=3@007Z^000O80Q{|C&ek?=_OC$v z5PlH9kEffJeV~^o%-6~qX6xkaZ_n@IJ-&^R+O`o6#PE(zMuVzNgk2^aA zgkuQU8>omX+&J{8e~J@kVOtM79I>qN?2%{$GbY(UX&&UI=ZO z-9z>Q?2}- zd`dM-v2m_)24mg4@7jApxz%0jI%Sqq`yXdeFFeN5l9>5+| zQU7ySpFtUoWV+pQDUKE9!ZyGwdgepM`?qUi1g5NX_x}A-)3pytg3FF5=UD)WP1u7xg)qEPR!Iu>lteLXgM++UcvQATP%)#e!D_HGad_ei*#l{@Se42@gVHTsp;iQruE8l{TswS5Hb(UTu zFVGy|rB##u-bj1{h%9?BAQC6d8~^UmA#%aqUr}aVoD9|n%PaALF-J4b$)M*icMeqGb3Sl zHu0%u(Y|Uc$3(VqwdyNg>oU;p>jgqVjspLrc%Gej@^d3^Y?ZTx&xODEHSWOLdU=3Y z(v7n2W<9bh)%Iy3qQOJUJ(x2%ZE|Ex@GF2bgI!IW`6;AMGgyldxX#jJdr&Z1ST|xx zUU2PIL%e+x?Krr3GcVQClF9I>P*pnhG1~&I5E{r1h}N*7Rw{xjn|C&=peS7e9DNFm z-{5QkLiE;rl(Bn-;n9{4&^N)Q-5C1!Vd8^Wj3fSF+^*hQ9j|W1$nMk2pjZAShnh%R z!0fkiQ{n97@Oadrh^!`_RJc=Lej|8gXsly#KDE)>+NuV>vRv)GW%9wB6k%hVv$&@D z@c}e-yn8C~DGtxKB7TN>G>OtHC5CXprAOh)_rJw44Ky+<`>>A?r^AY8Iu|ZsF15aw z!z58Aqh*Lwi%fDEWiw-ikp|ucF0~&1-j$8iX209HV9-pgG0+t?&v``KThKWLtbD>? z6-KO)@Kv(Iw_hZB8*1^$jtmG%HxhgGEWKhd1GP;ZbB1{s`CrZgU(E`2b8^$FaXqRV z{V8WIXfhfV$`+>zU->A{S{ooM!R|nLPlVaL=0EHIyuerc-aqL|@7oNeV7wZ*CCJo} z+Jk+Hu{9x6jzTb9{@DYNMz@i*gwNk*{j?-sgIk?#Ss?VnZ&`TfM8MNYRc`C}2$x2q zOYDbH>o;nO%JTjOg}ItU9{3Z_8Se|?(|S@Jw^IqY-zBwxu&mD^^Umv&eec6|65P^) zfPdoBu+f>>W3(;KT|yOz#2xs=^+*y0V@3sCV8rE`KV-gqx_wU)V95w=zFauF%`}`E zmQv&+`6jvBaaGdj6buBDrEnO~j%t|A9D;~7mddmv{lx1ao*4^|J0|5<1wXS0*;;$4 zAj`?PsUcRm;#6&S9T5&Whgq!!?u2-LEy6K9V#0jI=C)x`d3X4xTCTpwCC&0``!>8G}sO{^kl|z8k^6uLO%AOwS<0ot9PC;|a37-x+|rCwIK(nq2w( zU#>J;;zlQbRul$;0~}{+VyPJOu7w(}$n#&M#%4R``*}&Kn(&LSZ5T@K37}yq1ikz- z3K~mh?ulg7lBQ8hq^A8^x12b7pF`C#GuFF--GRlil1z!{x+ueOo9cJ0zL43gneJu} z9R}>JAl+7djFonXr)bM?0fe5j0+h{p%QNm<=?tRBqakH8;;gj09vgSxP;X+MP1YTa zY9fh#Ec2uzVw0BN3CnqIIH(qR)iZb`LAsd_d9dSjTjbk0gWiEwNl2g>=R&(k!aZ3n z9g7B=#E@D8a)^e6Xe*g>#Dod|o?$5BBxL3FhqQy+>X4Kcm+PiaX#3NCdmqjjz-fi~ zz{Mx7)nu{+HRa0F6isN$cKm9Hmjrir{ir4R`(d!k;q-Zgw`-_aaLOMNhAgK^`H8ym zW#5Ydo1U}F9sD0tI}NYF@g5A5yHrzCu9Zql#SW{xw$w@^V@C%pvbIue>m>;s8$O@; z@veY$4P*7^J&J|p;dSjPr#t!YS5n0#n}(bUjkbj7D9p}f<(gmkoZcsf)~qq>PbP6l zUQv7DA+*w6i@H3s*Q2VIF(Ou?C<$%DyYRTo{yrmfr{11 z(j=zRIQ@45#g>$XW3|a@OGk^6q#D;08o}z{fBhp!kZo3Rda^rO)_;a2X_GeEz=nuB zv%6mj6Qc9mB`0PnPOxdwiK3-ZitBuMD~$bm_`V;s;vre?Nb}>{3QRm|%afOF_%s%k z+gNF!69U><0vRq%n^+bzj}88;@vl-osxH#%LSsp4>AvHHaI3%`{(RURed0?__z8oi zMeXa9R{f2j*>^+bM}1Y`zUJUO4I%BOH7>(Vw<;loYnzIyV&jqrbl~rYS{%m0kWv%L zenU0tQyi{H&W1gzv8ussBd#7{<5VSbt~m+#cpptB9j>Mt9WWYcPOrSfnW(wZ>eYA3 z-q~GpjQ?a7K)DwKTbg_HJyrD)$5lE$GCrmuc68zuaB{ zoqP*##5X=2))D#N};gJUf`iI6y-m zQ!D-l86ma%d&+zTnHzzek2jN^1M`hxLDecl)}QG;&9ZvsTxqRv&}>FCXqBXwmdVBP zj8NLO+Kz?6TPB2E+_+Z87vn>9*#qa6ExxN|J7JW6Usn)+p1hZ%sXsV;@3=;ps z#FrZk&$TL?r}wPMcvvwcUg2xstmQY1MBite@1OMX&r8PY1)3# zFa|n1cwf7xnHD^Nt8E&Dfc7M7emmGY@ZFQYGZem!zCuKHGJz;J4Xc}=lhFax675ew zqCA{%w{`oEzZKTIMg|TjD~Jq)FOmIGI0x@m_d#k!8_&lse>x`jlzOQx^Rt6qUgwfW z=)NXp(-e@_phWYi%1F7gjbs_H-kDK$|5mb$$hoP6QM?6;q?NCIWR?A6_EGp&tpUBm z>m-Y18buCWBDueQF`nt}FJ*D}5O<8l!(9xSX{(4VIotJMnvisDYL|Sl{bzGB6gth} zPFgXyU$ljYV7D%Um;W-ctgrH|FwMp$(b2P#y5U?#s`+RoM>68#V}Yt}Pn?!;Py?~oWAz)4AyQ4+qiO%RM396&`}Sb;#B9R@m*Ixvhj@eD z`jk?q?UN1qdBacsp!RXb3YOce?<_@aZ%hrksVk3~&{ODePq$y~Wj%gxQBfSmf0(@l zXk(;!agfo|#h&ViH4>f&n()aBg7?G7K5nS=4+PgqOA+%;d}QZi%>s|>@x!ki^79ZS zUhs`Re9+D@+qFZIcdN+94dFzH2qA0#DSQ~&6DX;Yq=Jp~I`oU9j7&lj?)UskqQ?eM zHWOwFUfGkKrpI-}O_8d*9Iu40K98%e^H@5<9z~qQG1tMb-FJD;bMr-0+g2@^xuLo> zt)pnhO84p}Fp0fGXNBM0mq6DV875B#R)FYz5lJ1ldeo=|zBB>nyyb@^F<1m*?^Atm zM#A4cqj3%bB(t2=F#ppR$bz0jarsrriLVzxLG`=~(NygL<|P&+A&#%bL>2q|aVb2t zByT+Uh}jkx7CCys-9?RT#S}Qc5TWj4rFTPxxN24qfs$;1h|XsBJQZn`A0nv8Dv@Vh zGA_8A;j;epSYVFCWFcy(0I8t-J0K{+9>tQ%?NCxa56kHY2_Q*R+ta>Q0nt|A^UvCmEWH`Ulg( zX$lA>M}ID3VE|DJI&S}>*bz5>d>pi1cZt@-3bK&mmKQ5clgcqp6q-9frq{G`EZI^{_ zn{i@*HIMNtVWyt{0dc2*mah0`&=w=F6QF( zb9Gtpi-$?iW^4Nnx?k=T5j?iw-bwqjVA)7k06txx$!UNd#r~`a%n@ijPADr!2jZRE zkM|zRJaY-~v&@%@tJ8=)0~4c|JPzY%MN%c(2=j8vr&ojI=w{8L|TnE=z(2cdJ&<9BV@ zl66bVs@>uW(a1j2ov67J^tqhE!tAWa;w5Ao1v-g4%T!r}v9wT)or^_e9b({tm{9jv4-Sf}(7MEq_tNzN$L z7V}8ov(aOT4PawNH^3`h#PCvpxk12pVOpO(_HNnqD$SDIuxb1RG#6a9wDl<@ z!?zix18=henh{mM?8B{bd*bA6p8I(1_kxJ8OS=8uKekK6sft^a9C{vPsu=ldx2oQ-sd z<}RL~&hEfo8^|oQ6|<1I^P5NF4ty#i5Q*8Eg!k4@FNS`cj4s>tKlPe|7tQ>Zdp$j+ z#L1bMVmBlEZeb{s5ga2}AyOn{@(tikRbpL%K#g!9U0ktwMIiZetr;{qpEMUYv&lwRd}uoG-h63`aSd zBsBOnbRt9XbeLJ@hgc4q>KSjI& z#;(jBABK4zu3cCI?w~~&;yHcp^Vdh*O3XpGUNk&mbjkh`GWYI9$OKiCW2#uj95S3{5b&1DDovpI2x(*CcPH6Eql3$!vx6wkAIg7u66gBU5WD0~ z8yA0gw4;V}(w3@q7v)%9NGe_FeOM3L^KEBoau`I<*Y&pM#t_Zzy{_?%a8QGnNTdDp z)sJ7%@^ZtS?J)B!b}uLJdx{?Wl{V{U@Fl>4{Ontx{MA%iz-|>jedRZDZVEXQx3AO} z9;4Uvuj3~?)0T5#hem%bMchPpggy!!y=i=%$X;7C)}6?iJbVBQ)3xxO!$mhSQrRDB z3Kfx$e49DBvI&=zHs)5r9H8-x2Z1~gT$@NU?7~wZzV7|Eq326MG!%3x$B#_~p)-zq zH!&N^jzMFQ(RelDE`xZqh`uS5+DDrg(*Y0H)LlT6_)GJN4ywZH2R7;swm`o2#&mg| zQp0b((uIsv6|-(_&c!3mgec__XH%eXa|}J69-ik>1yneol>JXj2#l9@Yr#?k)zm8NcS$iwjoc{TnME9wP{svjG=>E>ik^DxaJp7;7*QX z3rkooL>h;43D{S5Mu8c=ZUi<*85dguolscK&aO)R#DmIeas5@@>8^I5u|BDYobsQP zs$l9^z-NBU!w6UE8dP00B@e$+JWwqkY4 z`!J`u8~rG;?EdfFF(Hj7k2IP+GZUK$%||)g(KwH^^7pVGoY|Jal;iKijSEyWh)m@2 z3jDE{DZd^h*L5OjIwh3UYb&@;vY(HhK=i}b``UjzSH3j^{S!F$ZX3f~-|%?^(BfWg zSq_-hwu-2f0@T^J}n=Xoz>rjxW#G| zD^B@s^?DZLCWpJci%DEA=Zy?$F!A6yuvI?=KIUZ9bw65|nb_o``{RSPp_CJYcX?-O zVX$%y*VJr>m{!Gng9XhJukq9Gzh73kItk1#KKE>=(^nU&6l zs~`n_f%&GR*HQ<^nFt+_msd=3c_W~+=;QX9og5j3pLqPBsj15QmNGoTk6hQgW~&;Q#rJZGI?9I^(;b_V1@uH#TLH&XLXA`BqlnSzZIy|kOZRsRw*n)s1K&57W9}* zI*!wx03T_MF z9)7PLK|UNu#!2SmLyumbJWGcb!cJh|VPT zpjQ22>4R_sbdVWy>Ta1OCDFC?ET4v^RXa_T@$^?5-AsMud(XSh~zBB zqo!Xax*6rf4sFm_(jfqI!o^QEgdYc z$^q-0-;pw6c)_`413L2jhZDkRbC~BR=VGY{0SN175<%xhD!2ma#}lonPDd)J=a zK6HZ0KReI{l#9Fwk04r5?i#g5LTNf~z>ZnJ!fv`r#jB0d#2;lI>(@`B48i#efjzt% z6XVq~+h^o&Fcg?|1TM?o&O{N!CA4q0l6Pw(SC?qCLvJc5|Iq`~-cTV2R>NIS%0V3u z-b@xF%{s3N3ndM%n2;k^b-umM~{YBC2-@0|vLyESK7;E zUxh-tAqg)EdA4MWK<%R>{+gv{TO$Y|8--{(ObViuhDTPu*S(_X)N85Jj;k7tPQ%sO2SzZ|luF4S=z_)uulF5XYgp621J*)( z8o@>3KdX2m2(cWEQtwx@ixL!xe)yMTSJY_~+19<#3JcZl!!?q#m^vbKh@yE6%^P~|YG<-(h3X>w(k z`G7?$_8!v9vt*r{PS_lk8m7L2B&~^kAW}!~pL=Uoaj8t-$A|6eG|BS(f3!dCPRx?N zy!V}KRnm={JK%v-Go|Txu9?SyOSA`c$AdXGXEe>@YXiaqMdkC|F@0D5wDqENV3AS= zL0q|YY}9ygfhUP4{7ZgGu(L)C$POGfmY?pF@ z0YFmPyCw%f+40Ig+03B+08eOOKEF``V(Gny9V1OTeB*- zqKIVja$b2Z5GwR8*t3or8ez}pVXpKeg~UV*STNkgwrC)hg){T7Z~pKNT(>?+^A{Lk z?2&|7hLNItVLGuAD#YQirm`WS-~rcM@M2Bhbm9M*J#S2wt;qpkKzt+^dNt zNujD9Eaz5bM7PKgHuo7*tDi~SW#Owia$qz&LpzqB!c_QN&wV2Z4ed&;T}%(mxPK_P zXVfM0gdH42%gD9Q^`_2?$QvfqaTw3~>3IE3wdPo#xE2Ld951H=o2FtQC{4kF! zcTjX*2tmBN3fLHyhU7Mw#c0P{H6v9`lT<5M1HAuA>M!G7q%rMvZI80zXBw&rqHs3f z#ph?RM_Kc-yDIC9^yYV4@al)xarw;mzX)5qQ6_CaYon8F*3o~8FY8)a- ze2iHN|M#jR=as~!yF|dSiuE+Xq5(0ZVenrq?`nXy8Vafu+JCo&e|h2m6N2)e`QM~L 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 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 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 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 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 zcmb7`XFL=R1IO>U;}9x2D=VDYk(Ir3_K3{Cy~9yt7BbIXXJl_8Gvut0b4cdNmX(n> zojuCa|9Stscz(YZ-&eo4zt7h|n-ru7AOX+-VjMS(mB+B5v6KLStu6rY0002^**$l& zv-favbaL>pdv53J=7qd30+)b`zk!D*zx2 z0FXzaT*R)#o)u4yw#riHVUcb;AK9W3A2Tbk&-ipfMcEtYBXNt{ueO}}&pfh2nfq+z zCyx6bAjw-AjD2-8>M&=HGg60Yut+tzkSQ#c8ZlJB`-VOh9(U|HTPthdg0 zGd!*L^t62{MT^|z>~k8#EaY42=fQJ2^}E-VzWRt_oHT@OKR}fExK1haz;BB|c%-D^ zuE3mLoX)F~RollJg@VQ1tm)HVL>Pua`uN(67Y#1c7lt&Sx3#)FUN6k6l0(6n1L2Mz z#du-+g;Vw^r@0^8G<5OH^nC;%8L^-6mX0dTy=8T zp_C5mER^zCKP)U;7Jmg^JUBF(iAi&r3Pq%*8@VjtixOF~U&zl9X_#LsA~A-*uh4?* zbJ|&Xjva6fC3^8bFmg4A>^hwHiYj~k2(kOKA(iQSe3)uHDoN4dfXi{==W1T{C`mAo zFm^%(qt)>1pG~OJDaYkjXLZOwJfaiRbH7k|vyP{cBQlFu^z-kZ-g^Rm{_&R5U6cGC zJL2ZoB?e1gbbX4Zy>k&U*rrN$fg}=5dv}CgK6V+RuDl6<&`n;s; zqAHz#(R&wb!zEgYmnyd*Y1k~MU~}%5@_tsByB5l==cO~BndKor;y^}uhYv%ZN>>y$$i?+R+9iALR31y2zFXdgv+76J& zUCWNIvBgW)7}-R_`j-8NpY+GtQ{@Sx3ljsBzev?muOIS}I&W42H6wx-Lq5?KO7OwX z=ZNNFoSPtenYIh#a~d}%!l1t_e%vwQ(X-w30MkWT+fBA8>h6m**)aAumEO*I5n+J9 z_(~tAHl3Avr~_EMu3?i=bR`O_vPXCiCo`$)n5!Pubj#E1Pn|#nugJ!sS{8xPB|{Egh#fepRBXbi-F4EB>HccAGxl#f~kVlUAZKuoG1 zR4RoQSAE)SXoE<>h3{1AJ>-2WR(MkUad>V$XEU2MU%Xg*xm&f7Q}B&^i0>8TsMg|0 zDk9y#15DM)%fREMIg)5SVEQ0$0#o!OKAePpW$kz7>Ivr6mKyzMn~fZ8=ss4_9)0|S z#rRw?b>mnK5`v%^GuQ~F8*iRH5WLQ*5h>v=G@tX2)s{q1^eA(pv*uUVTx^2H#boSNNR3RW5JM2Ze?^2R-i)k}Xbonu1+y zoLj8qKX@-IY~*+~&OH`0hx2V?{Sb#?x0t&rrdGf|fEi4%FS#-_Ze@MmGh zle)>%d_2_g$$*neXLFP7!{Zt}LFg8gyecth&DcE62AcY!*4O^ana~EQC|AHf=)TOr z48$&|x<5I}OQCp#-i%~=_d7M{3t3X9dktp(LWkugwztrVhMD`Sc1GyUXfya@D_4N% zk)gp*U5(0;k{w*{eECg844X-CcH>p^pPL1*_$e$o^-QVuNtk}D3auT|jmL%aN^HuG z>P?c}Z`hXe=mG7G)CVQZ#H8rv`T5{X<4pGH%VkD&6ryM9I6C<#dy}Y-(06=nI(bss zeN4TXto90!urF9BsTQaDbQ$5 zbGYIi*K%iRQo9x7y_i{$aJS>V*~#h-C#!Gh_m*6lkE94|8j^f4Ql#h5RGSrkkK{m) zmsrnOw5xupLFz(~$ZaC#doYyzNpnqb+fems4ti;Fr&~9ah7hdcpOfI<_G7Y-)rSkH zF|fEZ_>bUc1fGpsqkw5;>`)UftVhnG>(&IYTv2Qo>dbHvYOHHm0Yu^PQxu6$J?RM7D8#^1P=ZL z>SJZ(uKZA+Nj7OeInTLCOu6?BvdF54xmazaIDaTR@gI7swnJVuRvep_K;&v`b|RBr zB$4!-~y6sgTL6=ICJ*8tjCzx5~JJ{^+B8 zh30x?hE_+xfFH}#G&n@t1SkNtjcyya8e!i@F!$95uk2AR=~ z9`Z`E*hhRuqeH)N8wK=&l_T&DuuEjcNI|DHrDxJ}&mV!)nUv~M?$uR0Fq)V1oVA^O zYZOUz%JIpx;_sg!)`b+7Yy+V!6|bkMa@_@D zfZHWm8E!u}Q*yQ>{92VAP@dU?%1q=1bA~A>pmk1Fn7&1#HrT{0=RnZiGMvy|-TC^Y z!4dlv+I;9BH$1rRK~vLzrW=A4Gg>Dc!K54%Oa$Pqt6C$*SO2`_dDKaxVc*qez`Tf9to$URlN^r`|ctsugBarv$f12bDf>psH!K=AA* z>jB^SgKpBPuk_FYZH!-2d~b+q_+5Oo)=uHikQ{{rnNW%4X0%5nbl8`ov?Up1ZoV^f zWpGZ<4MQN!dN6MLbnIgn1co$$dN9rPwYMk(V49VOY$~91}L85HfSk-JD@)7;=~UjED@qm}@0h6hrQ_ zWGTlhNA8>W_x`{CKm4EP!}IC+{xd-_GHC*U05(93(?4c-hC`ny5CC9j1OUhZ0Du5{ zUpIRPPn;9Z(bL}7-rvm&FD(mIfXYJsygaeEAa5^Uf2_T)qpMp04(jgbg}=ze48Q;Y z;Q)YoY^=+zlUqJTBLh@b@bgZ*+l@AX=%l-R8iJF4EmvTIHB(Wv>7S1maUTynv%~m0 z?9_*MJLK@^8z^S}Mj2I&2Tqep+qz;=x|*XUvSQ8>!Y=)djABK$X`+!U>s^=xWuMk! zkZXJi-)r=3xGnBs75BX8%X*#{N23wSGxa1`t_aiM^1QB(g|@XkD}6i%2T9>aWL^BO ztr{*9t?U{0;lt*x);xDoV1ta4#XV&C{&Q$9QCerEUy&VrPHcfhmfkp!k*zIP$t4W+ zFdgShwk~ApyPHM|mb2I(oG;k_Iw{fndL~%~Da$dHav!_yTj@#?V{jeJ33}jz2+J^x zUdp{35E9^B8~r+{mTMu}@Udj+vYE}=D7vKE(ehU&g5UlOM$njtb&qPZ=DR`Rb<8nZ ze^EmA->#DCWoL^LQ}yP*_Db$QwJjt|sZf))eG7K}=@$HQ)vRzZyMV(X$_@#Opv(0z zB-B~2X$*p!$bM!sl!?4hXA_hR@6Kt*z#J1J8eUl#?#%XBNCR@I!p-39efcw@_A!@$ z<8(GY;=o2?lpT*JC=avre8X77JQMAv6%Q)!D*;WPf-OaGn9;!->kY=^gUPui4KbE} z)+c&5r>``xxhPFdJkcEy8IVX~sh{WkXsLNfjY~>wqzC577k{b*h-4@8B0>O6~9to&LEln}jSCM;1!eEz)x4h{X=*({9`ZzY_-dDGX0uib4wU7RXkS#efMKTsAc0BH8g@ zv4TPN{CMLhium-WQ8QNLT@Rkm6%YVdb^?6cNlA0w`6T(OvaQ;8rpsR(2UUi1RDUK>+N>w%bliFs6;I!C<*ogwvw?z3AtXnJMHqUxuzK-`AwSImptCH zTp$0{I9*%j$NhR;*%$gF$orh-(_dEn^%x;NPZL@PQ9Gfa(nP_(Bp+T`kys9nhqu|_ zblRM#FYoLzUfjvy-K6tWxG3A;uM<1B8R3_>4Kx?S490}7s>^vIpgG-&j8P#&S)#)j z5jdqFR-aNfB?KVLJ-a-2!Ayh8v9PR5Q{bvyhx|{CoAZugD6BwS6XfTUPVld+XPB)( zj>P55uVF1Rnfz=gG|OeY;ZP;doSaxl4Ees+^eb0@MRe5>8}VyZtIHV9&5(Gjxg3)R zb~qM1r`E2xJM{PM$Zx6};8yDKPM+JYR|Icg^yno_U(41F%{~$$G}N0r0kK-kY#_BG zqpj~eDu1xLPy=G9R7aL)Rc7!ohnm=u1%P|`@Xw;?d=w(L>dt2q(^Ip>+w_|*G}@5g zOw!bcE@=^~ zxQ0?WhW`5beVS_%nwB@eI=JR(=g&~7Ei*6~ZncZc?ZtPJo-+Z&+T=V;zkbd9P|i*@ zSiyr??4a4-t6p6A&7li8JXTKcINF*0axsasH}5n*YdKhcF9Su$&13E4WQZR)gP^Cs zTbpFr!>_FWlxvYgydS^+Rmy#0&S&}jNDQGDtg@7ZtkX@g?FaHfq?cq^No7g9or^lOaoLx-I`CHmwb$^`8fv3r|$%6xg3 zZr4gfnt4KP($!>MA)`r>U0iZ&Z(K%#J)ex+(=q>~Au&YVujrz$rY=1tmlKf@Z>h&x zyK`B?cT5Uve70)V&Q2=6aB{?p>R4p15(1_WW)ZylrX4z?bhf&Jias&ba|DS`dGB(|8R1jOke+RH(3YsK6wvMt;>NBLRmdV5xuwz4c)kbh@XO8)_N1G83 zO=d}I?62+FkU{b6iw2Igaq%3TTZy8P0Rz+s3&t`<#_Z5RADinE&NzW_0$GaHEp6SUVM^&H{cOYhTijOS-!c~xPrgejqCM0e^D-y|#X;2xJ!kdWK zttTe-D=T!)5pDuGgBIovZy39f-=z2*=t=aZNX^94N%>VNYW6W4)jE!2g@P5Wk3_B} z^31BO&}kgngSU6|aYkeOQIhVyUY-nK8o(9+A^<=&Hr7q{T-G~(eB`w< zb55@(2HwdV{nV68jgR8neocn2W;UvSZX~k^OV_F|J*+d2V0r>4z#|=>s zcUyd6|0yzhL~l(mxGtew#PZDXR=R`HYn0RID0{~IK376ka5-HIQD6L~;DSz(3KC~y z+MaJE6<3vU#Ybo8f+zyTTYCMTCPzHEFeN+Cv%83|A|71H8T7er<4U31OHA=lakF}z0X>nsWA(2+y0MtEJmuk6h)TM@jr{TMN z)Qdt#HWei#aqA<;IhJyH?`=Klj77R-Ow)7jIxb!sm87(0upGo4U~QK}10L-b8SJV^ zVUyxHx&{6upD#2hSg_(jCwrk0vrf=$g=^&Nfe=lz&JdMvn5f@wMWC$+UY#=^dI&HW{>Lvv>0B`cLF z8Z}nuwsj)}L|$_hesM7Q%!l<=B#hm`Atw-FjTu#XLZTJkcx-T&BTLRzS6cCN8Sx-W z;&H?j*Uk@U=VYQ5uLvxKU8~D*-9Q;?W~^5^B>Bv6M@x##oK!3F;5&T$Rt_H6398F9 zRv|eIxc4}8Ce@HU5{e;5F3>~pj(N*?sMx#c1Zoj7VYpamQ>U*n`pEj*S97@Q5^MrV zk`F#B;yC66WLy(}?!L1M(~f!pdQd#chroQ^(31MY~y{rHIJ|)2aBka@% zCB%UWkc$CO&DBg3ms)VXi*a$4ud_S$o59DykgiB!_n$21ewh#VOPTR-J$4ZEAC<;fcBZYG`ZO>-Y4N^PD z=N4e4d*vCyMr$#{(=!fMZz1nH_VOcanE&KdGm=GaVb5p#b_27k!y85}7w=3-xqQ{9 z^tw)ZJ&AjYe#Gyp<9h!>hj>(4peog}z)U;@Gn@CW2jyU_a zVreX~i^V}hT1pl*<@yBKs2bSvBk&&?1-6|X7@Wh!-=!DFSU5iEqxH7u%Oo`UZIQ!`Jv5O!x&6rE{zatSpyeWhu5@G}m!eqNmpb{07YQ z7u|`PmLOZ#d8>O&8)#hQh1<)>JmEC4lpA#uPEx*%ft4sN#83K=r5fKBIk&|CsAuE2 zKxpws9na}pnrD{aA9j>|ddS`Zu*2|K$tob)_RAT3LvbK=>a@(rWxs@wKOoWN?ftNU zaqPANLBM@&P#9i5_?@#gwLW;oDa}+qS@*FM%VnhT-*ca3erz(db-)ThDm{(QefQUi 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 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 18/29] 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 19/29] 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 20/29] 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 21/29] 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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