mirror of https://github.com/crytic/slither
commit
fdf54f624d
@ -0,0 +1,40 @@ |
||||
name: Monthly issue metrics |
||||
on: |
||||
workflow_dispatch: |
||||
schedule: |
||||
- cron: '3 2 1 * *' |
||||
|
||||
permissions: |
||||
issues: write |
||||
pull-requests: read |
||||
|
||||
jobs: |
||||
build: |
||||
name: issue metrics |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- name: Get dates for last month |
||||
shell: bash |
||||
run: | |
||||
# Calculate the first day of the previous month |
||||
first_day=$(date -d "last month" +%Y-%m-01) |
||||
|
||||
# Calculate the last day of the previous month |
||||
last_day=$(date -d "$first_day +1 month -1 day" +%Y-%m-%d) |
||||
|
||||
#Set an environment variable with the date range |
||||
echo "$first_day..$last_day" |
||||
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV" |
||||
|
||||
- name: Run issue-metrics tool |
||||
uses: github/issue-metrics@v3 |
||||
env: |
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||
SEARCH_QUERY: 'repo:crytic/slither is:issue created:${{ env.last_month }} -reason:"not planned" -reason:"duplicate"' |
||||
|
||||
- name: Create issue |
||||
uses: peter-evans/create-issue-from-file@v5 |
||||
with: |
||||
title: Monthly issue metrics report |
||||
token: ${{ secrets.GITHUB_TOKEN }} |
||||
content-filepath: ./issue_metrics.md |
@ -0,0 +1,28 @@ |
||||
import json |
||||
from pathlib import Path |
||||
import urllib.request |
||||
|
||||
|
||||
def retrieve_json(url): |
||||
with urllib.request.urlopen(url) as response: |
||||
data = response.read().decode("utf-8") |
||||
return json.loads(data) |
||||
|
||||
|
||||
def organize_data(json_data): |
||||
version_bugs = {} |
||||
for version, info in json_data.items(): |
||||
version_bugs[version] = info["bugs"] |
||||
return version_bugs |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
bug_list_url = ( |
||||
"https://raw.githubusercontent.com/ethereum/solidity/develop/docs/bugs_by_version.json" |
||||
) |
||||
bug_data = retrieve_json(bug_list_url) |
||||
bugs_by_version = organize_data(bug_data) |
||||
|
||||
with open(Path.cwd() / Path("slither/utils/buggy_versions.py"), "w", encoding="utf-8") as file: |
||||
file.write("# pylint: disable=too-many-lines\n") |
||||
file.write(f"bugs_by_version = {bugs_by_version}") |
@ -0,0 +1,75 @@ |
||||
from typing import List |
||||
from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification, Output |
||||
|
||||
# pylint: disable=protected-access,too-many-nested-blocks |
||||
class UnusedImport(AbstractDetector): |
||||
""" |
||||
Detector unused imports. |
||||
""" |
||||
|
||||
ARGUMENT = "unused-import" |
||||
HELP = "Detects unused imports" |
||||
IMPACT = DetectorClassification.INFORMATIONAL |
||||
CONFIDENCE = DetectorClassification.HIGH |
||||
|
||||
WIKI = "https://github.com/crytic/slither/wiki/Detector-Documentation#unused-imports" |
||||
|
||||
WIKI_TITLE = "Unused Imports" |
||||
WIKI_DESCRIPTION = "Importing a file that is not used in the contract likely indicates a mistake. The import should be removed until it is needed." |
||||
|
||||
# region wiki_exploit_scenario |
||||
WIKI_EXPLOIT_SCENARIO = """ |
||||
```solidity |
||||
import {A} from "./A.sol"; |
||||
contract B {} |
||||
``` |
||||
B either should import from A and it was forgotten or the import is not needed and should be removed. |
||||
""" |
||||
# endregion wiki_exploit_scenario |
||||
WIKI_RECOMMENDATION = ( |
||||
"Remove the unused import. If the import is needed later, it can be added back." |
||||
) |
||||
|
||||
def _detect(self) -> List[Output]: |
||||
results: List[Output] = [] |
||||
# This is computed lazily and then memoized so we need to trigger the computation. |
||||
self.slither._compute_offsets_to_ref_impl_decl() |
||||
|
||||
for unit in self.slither.compilation_units: |
||||
for filename, scope in unit.scopes.items(): |
||||
unused = [] |
||||
for i in scope.imports: |
||||
# `scope.imports` contains all transitive imports so we need to filter out imports not explicitly imported in the file. |
||||
# Otherwise, we would recommend removing an import that is used by a leaf contract and cause compilation errors. |
||||
if i.scope != scope: |
||||
continue |
||||
|
||||
import_path = self.slither.crytic_compile.filename_lookup(i.filename) |
||||
|
||||
use_found = False |
||||
# Search through all references to the imported file |
||||
for _, refs in self.slither._offset_to_references[import_path].items(): |
||||
for ref in refs: |
||||
# If there is a reference in this file to the imported file, it is used. |
||||
if ref.filename == filename: |
||||
use_found = True |
||||
break |
||||
|
||||
if use_found: |
||||
break |
||||
|
||||
if not use_found: |
||||
unused.append(f"{i.source_mapping.content} ({i.source_mapping})") |
||||
|
||||
if len(unused) > 0: |
||||
unused_list = "\n\t-" + "\n\t-".join(unused) |
||||
|
||||
results.append( |
||||
self.generate_result( |
||||
[ |
||||
f"The following unused import(s) in {filename.used} should be removed: {unused_list}\n", |
||||
] |
||||
) |
||||
) |
||||
|
||||
return results |
@ -0,0 +1,75 @@ |
||||
""" |
||||
EventTopLevel module |
||||
""" |
||||
from typing import TYPE_CHECKING, Dict |
||||
|
||||
from slither.core.declarations.event_top_level import EventTopLevel |
||||
from slither.core.variables.event_variable import EventVariable |
||||
from slither.core.compilation_unit import SlitherCompilationUnit |
||||
from slither.solc_parsing.variables.event_variable import EventVariableSolc |
||||
from slither.solc_parsing.declarations.caller_context import CallerContextExpression |
||||
|
||||
if TYPE_CHECKING: |
||||
from slither.solc_parsing.slither_compilation_unit_solc import SlitherCompilationUnitSolc |
||||
|
||||
|
||||
class EventTopLevelSolc(CallerContextExpression): |
||||
""" |
||||
EventTopLevel class |
||||
""" |
||||
|
||||
def __init__( |
||||
self, event: EventTopLevel, event_data: Dict, slither_parser: "SlitherCompilationUnitSolc" |
||||
) -> None: |
||||
|
||||
self._event = event |
||||
self._slither_parser = slither_parser |
||||
|
||||
if self.is_compact_ast: |
||||
self._event.name = event_data["name"] |
||||
elems = event_data["parameters"] |
||||
assert elems["nodeType"] == "ParameterList" |
||||
self._elemsNotParsed = elems["parameters"] |
||||
else: |
||||
self._event.name = event_data["attributes"]["name"] |
||||
for elem in event_data["children"]: |
||||
# From Solidity 0.6.3 to 0.6.10 (included) |
||||
# Comment above a event might be added in the children |
||||
# of an event for the legacy ast |
||||
if elem["name"] == "ParameterList": |
||||
if "children" in elem: |
||||
self._elemsNotParsed = elem["children"] |
||||
else: |
||||
self._elemsNotParsed = [] |
||||
|
||||
def analyze(self) -> None: |
||||
for elem_to_parse in self._elemsNotParsed: |
||||
elem = EventVariable() |
||||
# Todo: check if the source offset is always here |
||||
if "src" in elem_to_parse: |
||||
elem.set_offset(elem_to_parse["src"], self._slither_parser.compilation_unit) |
||||
elem_parser = EventVariableSolc(elem, elem_to_parse) |
||||
elem_parser.analyze(self) |
||||
|
||||
self._event.elems.append(elem) |
||||
|
||||
self._elemsNotParsed = [] |
||||
|
||||
@property |
||||
def is_compact_ast(self) -> bool: |
||||
return self._slither_parser.is_compact_ast |
||||
|
||||
@property |
||||
def compilation_unit(self) -> SlitherCompilationUnit: |
||||
return self._slither_parser.compilation_unit |
||||
|
||||
def get_key(self) -> str: |
||||
return self._slither_parser.get_key() |
||||
|
||||
@property |
||||
def slither_parser(self) -> "SlitherCompilationUnitSolc": |
||||
return self._slither_parser |
||||
|
||||
@property |
||||
def underlying_event(self) -> EventTopLevel: |
||||
return self._event |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@ |
||||
from typing import Dict, List, TYPE_CHECKING, Union |
||||
from slither.core.solidity_types import Type, UserDefinedType |
||||
|
||||
if TYPE_CHECKING: |
||||
from slither.core.declarations import Function |
||||
|
||||
USING_FOR_KEY = Union[str, Type] # "*" is wildcard |
||||
USING_FOR_ITEM = List[Union[UserDefinedType, "Function"]] # UserDefinedType.type is a library |
||||
USING_FOR = Dict[USING_FOR_KEY, USING_FOR_ITEM] |
||||
|
||||
|
||||
def merge_using_for(uf1: USING_FOR, uf2: USING_FOR) -> USING_FOR: |
||||
result = {**uf1, **uf2} |
||||
for key, value in result.items(): |
||||
if key in uf1 and key in uf2: |
||||
result[key] = value + uf1[key] |
||||
return result |
@ -1,5 +1,6 @@ |
||||
Different versions of Solidity are used: |
||||
- Version used: ['^0.4.24', '^0.4.25'] |
||||
- ^0.4.24 (tests/e2e/detectors/test_data/pragma/0.4.25/pragma.0.4.24.sol#1) |
||||
- ^0.4.25 (tests/e2e/detectors/test_data/pragma/0.4.25/pragma.0.4.25.sol#1) |
||||
2 different versions of Solidity are used: |
||||
- Version constraint ^0.4.25 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.4.25/pragma.0.4.25.sol#1 |
||||
- Version constraint ^0.4.24 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.4.25/pragma.0.4.24.sol#1 |
||||
|
||||
|
@ -1,5 +1,6 @@ |
||||
Different versions of Solidity are used: |
||||
- Version used: ['^0.5.15', '^0.5.16'] |
||||
- ^0.5.15 (tests/e2e/detectors/test_data/pragma/0.5.16/pragma.0.5.15.sol#1) |
||||
- ^0.5.16 (tests/e2e/detectors/test_data/pragma/0.5.16/pragma.0.5.16.sol#1) |
||||
2 different versions of Solidity are used: |
||||
- Version constraint ^0.5.16 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.5.16/pragma.0.5.16.sol#1 |
||||
- Version constraint ^0.5.15 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.5.16/pragma.0.5.15.sol#1 |
||||
|
||||
|
@ -1,5 +1,6 @@ |
||||
Different versions of Solidity are used: |
||||
- Version used: ['^0.6.10', '^0.6.11'] |
||||
- ^0.6.10 (tests/e2e/detectors/test_data/pragma/0.6.11/pragma.0.6.10.sol#1) |
||||
- ^0.6.11 (tests/e2e/detectors/test_data/pragma/0.6.11/pragma.0.6.11.sol#1) |
||||
2 different versions of Solidity are used: |
||||
- Version constraint ^0.6.11 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.6.11/pragma.0.6.11.sol#1 |
||||
- Version constraint ^0.6.10 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.6.11/pragma.0.6.10.sol#1 |
||||
|
||||
|
@ -1,5 +1,6 @@ |
||||
Different versions of Solidity are used: |
||||
- Version used: ['^0.7.5', '^0.7.6'] |
||||
- ^0.7.5 (tests/e2e/detectors/test_data/pragma/0.7.6/pragma.0.7.5.sol#1) |
||||
- ^0.7.6 (tests/e2e/detectors/test_data/pragma/0.7.6/pragma.0.7.6.sol#1) |
||||
2 different versions of Solidity are used: |
||||
- Version constraint ^0.7.6 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.7.6/pragma.0.7.6.sol#1 |
||||
- Version constraint ^0.7.5 is used by: |
||||
- tests/e2e/detectors/test_data/pragma/0.7.6/pragma.0.7.5.sol#1 |
||||
|
||||
|
@ -1,4 +1,21 @@ |
||||
solc-0.4.25 is not recommended for deployment |
||||
solc-0.4.25 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
Pragma version0.4.25 (tests/e2e/detectors/test_data/solc-version/0.4.25/static.sol#1) allows old versions |
||||
Version constraint 0.4.25 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- DirtyBytesArrayToStorage |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup |
||||
- ImplicitConstructorCallvalueCheck |
||||
- TupleAssignmentMultiStackSlotComponents |
||||
- MemoryArrayCreationOverflow |
||||
- privateCanBeOverridden |
||||
- SignedArrayStorageCopy |
||||
- ABIEncoderV2StorageArrayWithMultiSlotElement |
||||
- DynamicConstructorArgumentsClippedABIV2 |
||||
- UninitializedFunctionPointerInConstructor_0.4.x |
||||
- IncorrectEventSignatureInLibraries_0.4.x |
||||
- ABIEncoderV2PackedStorage_0.4.x. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.4.25/static.sol#1 |
||||
|
||||
|
@ -1,4 +1,19 @@ |
||||
Pragma version^0.5.15 (tests/e2e/detectors/test_data/solc-version/0.5.16/dynamic_1.sol#1) allows old versions |
||||
Version constraint ^0.5.15 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup |
||||
- MissingEscapingInFormatting |
||||
- ImplicitConstructorCallvalueCheck |
||||
- TupleAssignmentMultiStackSlotComponents |
||||
- MemoryArrayCreationOverflow |
||||
- privateCanBeOverridden |
||||
- YulOptimizerRedundantAssignmentBreakContinue0.5. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.5.16/dynamic_1.sol#1 |
||||
|
||||
solc-0.5.16 is not recommended for deployment |
||||
solc-0.5.16 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,21 @@ |
||||
Pragma version>=0.5.0<0.6.0 (tests/e2e/detectors/test_data/solc-version/0.5.16/dynamic_2.sol#1) allows old versions |
||||
Version constraint >=0.5.0<0.6.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- DirtyBytesArrayToStorage |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup |
||||
- ImplicitConstructorCallvalueCheck |
||||
- TupleAssignmentMultiStackSlotComponents |
||||
- MemoryArrayCreationOverflow |
||||
- privateCanBeOverridden |
||||
- SignedArrayStorageCopy |
||||
- ABIEncoderV2StorageArrayWithMultiSlotElement |
||||
- DynamicConstructorArgumentsClippedABIV2 |
||||
- UninitializedFunctionPointerInConstructor |
||||
- IncorrectEventSignatureInLibraries |
||||
- ABIEncoderV2PackedStorage. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.5.16/dynamic_2.sol#1 |
||||
|
||||
solc-0.5.16 is not recommended for deployment |
||||
solc-0.5.16 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,18 @@ |
||||
solc-0.5.16 is not recommended for deployment |
||||
Version constraint 0.5.16 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup |
||||
- MissingEscapingInFormatting |
||||
- ImplicitConstructorCallvalueCheck |
||||
- TupleAssignmentMultiStackSlotComponents |
||||
- MemoryArrayCreationOverflow |
||||
- privateCanBeOverridden. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.5.16/static.sol#1 |
||||
|
||||
Pragma version0.5.16 (tests/e2e/detectors/test_data/solc-version/0.5.16/static.sol#1) allows old versions |
||||
solc-0.5.16 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,17 @@ |
||||
solc-0.6.10 is not recommended for deployment |
||||
solc-0.6.10 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
Pragma version0.6.10 (tests/e2e/detectors/test_data/solc-version/0.6.10/static.sol#1) allows old versions |
||||
Version constraint 0.6.10 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- FullInlinerNonExpressionSplitArgumentEvaluationOrder |
||||
- MissingSideEffectsOnSelectorAccess |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- DataLocationChangeInInternalOverride |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- SignedImmutables |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.6.10/static.sol#1 |
||||
|
||||
|
@ -1,4 +1,17 @@ |
||||
solc-0.6.11 is not recommended for deployment |
||||
Version constraint ^0.6.10 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- FullInlinerNonExpressionSplitArgumentEvaluationOrder |
||||
- MissingSideEffectsOnSelectorAccess |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- DataLocationChangeInInternalOverride |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- SignedImmutables |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.6.11/dynamic_1.sol#1 |
||||
|
||||
Pragma version^0.6.10 (tests/e2e/detectors/test_data/solc-version/0.6.11/dynamic_1.sol#1) allows old versions |
||||
solc-0.6.11 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,19 @@ |
||||
Pragma version>=0.6.0<0.7.0 (tests/e2e/detectors/test_data/solc-version/0.6.11/dynamic_2.sol#1) allows old versions |
||||
Version constraint >=0.6.0<0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup |
||||
- MissingEscapingInFormatting |
||||
- ArraySliceDynamicallyEncodedBaseType |
||||
- ImplicitConstructorCallvalueCheck |
||||
- TupleAssignmentMultiStackSlotComponents |
||||
- MemoryArrayCreationOverflow |
||||
- YulOptimizerRedundantAssignmentBreakContinue. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.6.11/dynamic_2.sol#1 |
||||
|
||||
solc-0.6.11 is not recommended for deployment |
||||
solc-0.6.11 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,17 @@ |
||||
Pragma version0.6.11 (tests/e2e/detectors/test_data/solc-version/0.6.11/static.sol#1) allows old versions |
||||
Version constraint 0.6.11 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- FullInlinerNonExpressionSplitArgumentEvaluationOrder |
||||
- MissingSideEffectsOnSelectorAccess |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- DataLocationChangeInInternalOverride |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- SignedImmutables |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching |
||||
- EmptyByteArrayCopy |
||||
- DynamicArrayCleanup. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.6.11/static.sol#1 |
||||
|
||||
solc-0.6.11 is not recommended for deployment |
||||
solc-0.6.11 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,15 @@ |
||||
Pragma version0.7.4 (tests/e2e/detectors/test_data/solc-version/0.7.4/static.sol#1) allows old versions |
||||
Version constraint 0.7.4 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- FullInlinerNonExpressionSplitArgumentEvaluationOrder |
||||
- MissingSideEffectsOnSelectorAccess |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- DataLocationChangeInInternalOverride |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- SignedImmutables |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.7.4/static.sol#1 |
||||
|
||||
solc-0.7.4 is not recommended for deployment |
||||
solc-0.7.4 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,15 @@ |
||||
Pragma version^0.7.4 (tests/e2e/detectors/test_data/solc-version/0.7.6/dynamic_1.sol#1) allows old versions |
||||
solc-0.7.6 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
solc-0.7.6 is not recommended for deployment |
||||
Version constraint ^0.7.4 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- FullInlinerNonExpressionSplitArgumentEvaluationOrder |
||||
- MissingSideEffectsOnSelectorAccess |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- DataLocationChangeInInternalOverride |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- SignedImmutables |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.7.6/dynamic_1.sol#1 |
||||
|
||||
|
@ -1,4 +1,6 @@ |
||||
Pragma version>=0.7.0<=0.7.6 (tests/e2e/detectors/test_data/solc-version/0.7.6/dynamic_2.sol#1) is too complex |
||||
Version constraint >=0.7.0<=0.7.6 is too complex. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.7.6/dynamic_2.sol#1 |
||||
|
||||
solc-0.7.6 is not recommended for deployment |
||||
solc-0.7.6 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
|
@ -1,4 +1,15 @@ |
||||
Pragma version0.7.6 (tests/e2e/detectors/test_data/solc-version/0.7.6/static.sol#1) allows old versions |
||||
solc-0.7.6 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. |
||||
|
||||
solc-0.7.6 is not recommended for deployment |
||||
Version constraint 0.7.6 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) |
||||
- FullInlinerNonExpressionSplitArgumentEvaluationOrder |
||||
- MissingSideEffectsOnSelectorAccess |
||||
- AbiReencodingHeadOverflowWithStaticArrayCleanup |
||||
- DirtyBytesArrayToStorage |
||||
- DataLocationChangeInInternalOverride |
||||
- NestedCalldataArrayAbiReencodingSizeValidation |
||||
- SignedImmutables |
||||
- ABIDecodeTwoDimensionalArrayMemory |
||||
- KeccakCaching. |
||||
It is used by: |
||||
- tests/e2e/detectors/test_data/solc-version/0.7.6/static.sol#1 |
||||
|
||||
|
@ -1,3 +1,6 @@ |
||||
Modifier Test.loopsNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.4.25/modifier_default.sol#30-41) does not always execute _; or revert |
||||
|
||||
Modifier Test.requireAssertNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.4.25/modifier_default.sol#18-22) does not always execute _; or revert |
||||
|
||||
Modifier Test.noResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.4.25/modifier_default.sol#2-6) does not always execute _; or revert |
||||
|
||||
|
@ -1,3 +1,6 @@ |
||||
Modifier Test.loopsNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.5.16/modifier_default.sol#30-41) does not always execute _; or revert |
||||
|
||||
Modifier Test.requireAssertNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.5.16/modifier_default.sol#18-22) does not always execute _; or revert |
||||
|
||||
Modifier Test.noResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.5.16/modifier_default.sol#2-6) does not always execute _; or revert |
||||
|
||||
|
@ -1,3 +1,6 @@ |
||||
Modifier Test.loopsNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.6.11/modifier_default.sol#30-41) does not always execute _; or revert |
||||
|
||||
Modifier Test.requireAssertNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.6.11/modifier_default.sol#18-22) does not always execute _; or revert |
||||
|
||||
Modifier Test.noResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.6.11/modifier_default.sol#2-6) does not always execute _; or revert |
||||
|
||||
|
@ -1,3 +1,6 @@ |
||||
Modifier Test.loopsNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.7.6/modifier_default.sol#30-41) does not always execute _; or revert |
||||
|
||||
Modifier Test.requireAssertNoResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.7.6/modifier_default.sol#18-22) does not always execute _; or revert |
||||
|
||||
Modifier Test.noResult() (tests/e2e/detectors/test_data/incorrect-modifier/0.7.6/modifier_default.sol#2-6) does not always execute _; or revert |
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue