From 0e86f3d3045fd3669e19824ff950b160438c26c1 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Fri, 23 Jun 2023 11:23:22 -0500 Subject: [PATCH 01/10] 0.9.4 --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 70d4f71fd4..798d439369 100644 --- a/setup.py +++ b/setup.py @@ -8,15 +8,15 @@ description="Slither is a Solidity static analysis framework written in Python 3.", url="https://github.com/crytic/slither", author="Trail of Bits", - version="0.9.3", + version="0.9.4", packages=find_packages(), python_requires=">=3.8", install_requires=[ "packaging", "prettytable>=3.3.0", "pycryptodome>=3.4.6", - # "crytic-compile>=0.3.1,<0.4.0", - "crytic-compile@git+https://github.com/crytic/crytic-compile.git@dev#egg=crytic-compile", + "crytic-compile>=0.3.2,<0.4.0", + # "crytic-compile@git+https://github.com/crytic/crytic-compile.git@dev#egg=crytic-compile", "web3>=6.0.0", "eth-abi>=4.0.0", "eth-typing>=3.0.0", From 6cb36a2efdf820ca143f9c371b274659271a9889 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Mon, 26 Jun 2023 13:23:53 -0500 Subject: [PATCH 02/10] use published release of solc-select --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 798d439369..9695a8fc01 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ "coverage[toml]", "filelock", "pytest-insta", - "solc-select@git+https://github.com/crytic/solc-select.git@query-artifact-path#egg=solc-select", + "solc-select>=1.0.4", ], "doc": [ "pdoc", From 1f40e9269b0c3dc23d45ad2ee8e86237d266c4f9 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Tue, 27 Jun 2023 08:20:54 -0500 Subject: [PATCH 03/10] 0.9.5 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9695a8fc01..e7019b1aac 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ description="Slither is a Solidity static analysis framework written in Python 3.", url="https://github.com/crytic/slither", author="Trail of Bits", - version="0.9.4", + version="0.9.5", packages=find_packages(), python_requires=">=3.8", install_requires=[ From f3be9efad61672ba5e97189f73b055f7734d455a Mon Sep 17 00:00:00 2001 From: sam bacha Date: Thu, 6 Jul 2023 07:51:56 -0700 Subject: [PATCH 04/10] docs(readme): add new docs link (#2010) * docs(readme): add new docs link Fix the status badges and include a link to the documentation page that is now generated * docs(citation): create CITATION.cff This creates a `CITATION.cff` file. The information is taken from arXiv's bibtex for the whitepaper: ```bibtex @inproceedings{Feist_2019, doi = {10.1109/wetseb.2019.00008}, url = {https://doi.org/10.1109%2Fwetseb.2019.00008}, year = 2019, month = {may}, publisher = {{IEEE} }, author = {Josselin Feist and Gustavo Grieco and Alex Groce}, title = {Slither: A Static Analysis Framework for Smart Contracts}, booktitle = {2019 {IEEE}/{ACM} 2nd International Workshop on Emerging Trends in Software Engineering for Blockchain ({WETSEB})} } ``` --- CITATION.cff | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 60 +++++++++++++++++++++++++++++++----------------- 2 files changed, 103 insertions(+), 21 deletions(-) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..605bd60e5f --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,64 @@ +cff-version: 1.2.0 +title: Slither Analyzer +message: >- + If you use this software, please cite it using the + metadata from this file. +type: software +authors: + - given-names: Josselin + family-names: Feist + - given-names: Gustavo + family-names: Grieco + - given-names: Alex + family-names: Groce +identifiers: + - type: doi + value: 10.48550/arXiv.1908.09878 + description: arXiv.1908.09878 + - type: url + value: 'https://arxiv.org/abs/1908.09878' + description: arxiv + - type: doi + value: 10.1109/wetseb.2019.00008 +repository-code: 'https://github.com/crytic/slither' +url: 'https://www.trailofbits.com/' +repository-artifact: 'https://github.com/crytic/slither/releases' +abstract: >- + Slither is a static analysis framework designed to provide + rich information about Ethereum smart contracts. + + It works by converting Solidity smart contracts into an + intermediate representation called SlithIR. + + SlithIR uses Static Single Assignment (SSA) form and a + reduced instruction set to ease implementation of analyses + while preserving semantic information that would be lost + in transforming Solidity to bytecode. + + Slither allows for the application of commonly used + program analysis techniques like dataflow and taint + tracking. + + + Our framework has four main use cases: + + (1) automated detection of vulnerabilities, + + (2) automated detection of code optimization + opportunities, + + (3) improvement of the user's understanding of the + contracts, and + + (4) assistance with code review. +keywords: + - Ethereum + - Static Analysis + - Smart contracts + - EVM + - bug detection + - Software Engineering +license: AGPL-3.0-only +commit: 3d4f934d3228f072b7df2c5e7252c64df4601bc8 +version: 0.9.5 +date-released: '2023-06-28' diff --git a/README.md b/README.md index cb815561e8..18c1c62268 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,40 @@ -# Slither, the Solidity source analyzer +Slither Static Analysis Framework Logo -Logo +# [Slither, the Solidity source analyzer](https://crytic.github.io/slither/slither.html) [![Build Status](https://img.shields.io/github/actions/workflow/status/crytic/slither/ci.yml?branch=master)](https://github.com/crytic/slither/actions?query=workflow%3ACI) -[![Slack Status](https://empireslacking.herokuapp.com/badge.svg)](https://empireslacking.herokuapp.com) -[![PyPI version](https://badge.fury.io/py/slither-analyzer.svg)](https://badge.fury.io/py/slither-analyzer) - -Slither is a Solidity static analysis framework written in Python3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses. - -- [Features](#features) -- [Usage](#usage) -- [How to Install](#how-to-install) -- [Detectors](#detectors) -- [Printers](#printers) -- [Tools](#tools) -- [API Documentation](#api-documentation) -- [Getting Help](#getting-help) -- [FAQ](#faq) -- [Publications](#publications) +![PyPI](https://img.shields.io/pypi/v/slither-analyzer?logo=python&logoColor=white&label=slither-analyzer) +[![Slither - Read the Docs](https://img.shields.io/badge/Slither-Read_the_Docs-2ea44f)](https://crytic.github.io/slither/slither.html) +[![Slither - Wiki](https://img.shields.io/badge/Slither-Wiki-2ea44f)](https://github.com/crytic/slither/wiki/SlithIR) + +> Join the Empire Hacking Slack +> +> [![Slack Status](https://slack.empirehacking.nyc/badge.svg)](https://slack.empirehacking.nyc/) +> > - Discussions and Support + + +**Slither** is a Solidity static analysis framework written in Python3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses. + + * [Features](#features) + * [Usage](#usage) + * [How to install](#how-to-install) + + [Using Pip](#using-pip) + + [Using Git](#using-git) + + [Using Docker](#using-docker) + + [Integration](#integration) + * [Detectors](#detectors) + * [Printers](#printers) + + [Quick Review Printers](#quick-review-printers) + + [In-Depth Review Printers](#in-depth-review-printers) + * [Tools](#tools) + * [API Documentation](#api-documentation) + * [Getting Help](#getting-help) + * [FAQ](#faq) + * [License](#license) + * [Publications](#publications) + + [Trail of Bits publication](#trail-of-bits-publication) + + [External publications](#external-publications) + ## Features @@ -36,7 +53,7 @@ Slither is a Solidity static analysis framework written in Python3. It runs a su Run Slither on a Hardhat/Foundry/Dapp/Brownie application: -```bash +```console slither . ``` @@ -44,18 +61,19 @@ This is the preferred option if your project has dependencies as Slither relies However, you can run Slither on a single file that does not import dependencies: -```bash +```console slither tests/uninitialized.sol ``` ## How to install -Slither requires Python 3.8+. +> **Note**
+> Slither requires Python 3.8+. If you're **not** going to use one of the [supported compilation frameworks](https://github.com/crytic/crytic-compile), you need [solc](https://github.com/ethereum/solidity/), the Solidity compiler; we recommend using [solc-select](https://github.com/crytic/solc-select) to conveniently switch between solc versions. ### Using Pip -```bash +```console pip3 install slither-analyzer ``` From e5f2a86f0906fd62c6c4eccb9dbfa5ab30671a78 Mon Sep 17 00:00:00 2001 From: alpharush <0xalpharush@protonmail.com> Date: Thu, 6 Jul 2023 11:05:58 -0500 Subject: [PATCH 05/10] 0.9.6 (#2031) * 0.9.6 * lint readme --- README.md | 125 +++++++++++++++++++++++++++--------------------------- setup.py | 5 +-- 2 files changed, 64 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 18c1c62268..1a0d203c7d 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,51 @@ -Slither Static Analysis Framework Logo - # [Slither, the Solidity source analyzer](https://crytic.github.io/slither/slither.html) +Slither Static Analysis Framework Logo + [![Build Status](https://img.shields.io/github/actions/workflow/status/crytic/slither/ci.yml?branch=master)](https://github.com/crytic/slither/actions?query=workflow%3ACI) ![PyPI](https://img.shields.io/pypi/v/slither-analyzer?logo=python&logoColor=white&label=slither-analyzer) [![Slither - Read the Docs](https://img.shields.io/badge/Slither-Read_the_Docs-2ea44f)](https://crytic.github.io/slither/slither.html) [![Slither - Wiki](https://img.shields.io/badge/Slither-Wiki-2ea44f)](https://github.com/crytic/slither/wiki/SlithIR) > Join the Empire Hacking Slack -> +> > [![Slack Status](https://slack.empirehacking.nyc/badge.svg)](https://slack.empirehacking.nyc/) > > - Discussions and Support - **Slither** is a Solidity static analysis framework written in Python3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses. - * [Features](#features) - * [Usage](#usage) - * [How to install](#how-to-install) - + [Using Pip](#using-pip) - + [Using Git](#using-git) - + [Using Docker](#using-docker) - + [Integration](#integration) - * [Detectors](#detectors) - * [Printers](#printers) - + [Quick Review Printers](#quick-review-printers) - + [In-Depth Review Printers](#in-depth-review-printers) - * [Tools](#tools) - * [API Documentation](#api-documentation) - * [Getting Help](#getting-help) - * [FAQ](#faq) - * [License](#license) - * [Publications](#publications) - + [Trail of Bits publication](#trail-of-bits-publication) - + [External publications](#external-publications) - +* [Features](#features) +* [Usage](#usage) +* [How to install](#how-to-install) + * [Using Pip](#using-pip) + * [Using Git](#using-git) + * [Using Docker](#using-docker) + * [Integration](#integration) +* [Detectors](#detectors) +* [Printers](#printers) + * [Quick Review Printers](#quick-review-printers) + * [In-Depth Review Printers](#in-depth-review-printers) +* [Tools](#tools) +* [API Documentation](#api-documentation) +* [Getting Help](#getting-help) +* [FAQ](#faq) +* [License](#license) +* [Publications](#publications) + * [Trail of Bits publication](#trail-of-bits-publication) + * [External publications](#external-publications) ## Features -- Detects vulnerable Solidity code with low false positives (see the list of [trophies](./trophies.md)) -- Identifies where the error condition occurs in the source code -- Easily integrates into continuous integration and Hardhat/Foundry builds -- Built-in 'printers' quickly report crucial contract information -- Detector API to write custom analyses in Python -- Ability to analyze contracts written with Solidity >= 0.4 -- Intermediate representation ([SlithIR](https://github.com/trailofbits/slither/wiki/SlithIR)) enables simple, high-precision analyses -- Correctly parses 99.9% of all public Solidity code -- Average execution time of less than 1 second per contract -- Integrates with Github's code scanning in [CI](https://github.com/marketplace/actions/slither-action) +* Detects vulnerable Solidity code with low false positives (see the list of [trophies](./trophies.md)) +* Identifies where the error condition occurs in the source code +* Easily integrates into continuous integration and Hardhat/Foundry builds +* Built-in 'printers' quickly report crucial contract information +* Detector API to write custom analyses in Python +* Ability to analyze contracts written with Solidity >= 0.4 +* Intermediate representation ([SlithIR](https://github.com/trailofbits/slither/wiki/SlithIR)) enables simple, high-precision analyses +* Correctly parses 99.9% of all public Solidity code +* Average execution time of less than 1 second per contract +* Integrates with Github's code scanning in [CI](https://github.com/marketplace/actions/slither-action) ## Usage @@ -102,9 +100,9 @@ docker run -it -v /home/share:/share trailofbits/eth-security-toolbox ### 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`) +* 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`) ## Detectors @@ -200,23 +198,24 @@ Num | Detector | What it Detects | Impact | Confidence For more information, see -- The [Detector Documentation](https://github.com/crytic/slither/wiki/Detector-Documentation) for details on each detector -- The [Detection Selection](https://github.com/crytic/slither/wiki/Usage#detector-selection) to run only selected detectors. By default, all the detectors are run. -- The [Triage Mode](https://github.com/crytic/slither/wiki/Usage#triage-mode) to filter individual results +* The [Detector Documentation](https://github.com/crytic/slither/wiki/Detector-Documentation) for details on each detector +* The [Detection Selection](https://github.com/crytic/slither/wiki/Usage#detector-selection) to run only selected detectors. By default, all the detectors are run. +* The [Triage Mode](https://github.com/crytic/slither/wiki/Usage#triage-mode) to filter individual results ## Printers + ### Quick Review Printers -- `human-summary`: [Print a human-readable summary of the contracts](https://github.com/trailofbits/slither/wiki/Printer-documentation#human-summary) -- `inheritance-graph`: [Export the inheritance graph of each contract to a dot file](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) -- `contract-summary`: [Print a summary of the contracts](https://github.com/trailofbits/slither/wiki/Printer-documentation#contract-summary) -- `loc`: [Count the total number lines of code (LOC), source lines of code (SLOC), and comment lines of code (CLOC) found in source files (SRC), dependencies (DEP), and test files (TEST).](https://github.com/trailofbits/slither/wiki/Printer-documentation#loc) +* `human-summary`: [Print a human-readable summary of the contracts](https://github.com/trailofbits/slither/wiki/Printer-documentation#human-summary) +* `inheritance-graph`: [Export the inheritance graph of each contract to a dot file](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) +* `contract-summary`: [Print a summary of the contracts](https://github.com/trailofbits/slither/wiki/Printer-documentation#contract-summary) +* `loc`: [Count the total number lines of code (LOC), source lines of code (SLOC), and comment lines of code (CLOC) found in source files (SRC), dependencies (DEP), and test files (TEST).](https://github.com/trailofbits/slither/wiki/Printer-documentation#loc) ### In-Depth Review Printers -- `call-graph`: [Export the call-graph of the contracts to a dot file](https://github.com/trailofbits/slither/wiki/Printer-documentation#call-graph) -- `cfg`: [Export the CFG of each functions](https://github.com/trailofbits/slither/wiki/Printer-documentation#cfg) -- `function-summary`: [Print a summary of the functions](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) -- `vars-and-auth`: [Print the state variables written and the authorization of the functions](https://github.com/crytic/slither/wiki/Printer-documentation#variables-written-and-authorization) -- `not-pausable`: [Print functions that do not use `whenNotPaused` modifier](https://github.com/trailofbits/slither/wiki/Printer-documentation#when-not-paused). +* `call-graph`: [Export the call-graph of the contracts to a dot file](https://github.com/trailofbits/slither/wiki/Printer-documentation#call-graph) +* `cfg`: [Export the CFG of each functions](https://github.com/trailofbits/slither/wiki/Printer-documentation#cfg) +* `function-summary`: [Print a summary of the functions](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) +* `vars-and-auth`: [Print the state variables written and the authorization of the functions](https://github.com/crytic/slither/wiki/Printer-documentation#variables-written-and-authorization) +* `not-pausable`: [Print functions that do not use `whenNotPaused` modifier](https://github.com/trailofbits/slither/wiki/Printer-documentation#when-not-paused). To run a printer, use `--print` and a comma-separated list of printers. @@ -224,13 +223,13 @@ See the [Printer documentation](https://github.com/crytic/slither/wiki/Printer-d ## Tools -- `slither-check-upgradeability`: [Review `delegatecall`-based upgradeability](https://github.com/crytic/slither/wiki/Upgradeability-Checks) -- `slither-prop`: [Automatic unit test and property generation](https://github.com/crytic/slither/wiki/Property-generation) -- `slither-flat`: [Flatten a codebase](https://github.com/crytic/slither/wiki/Contract-Flattening) -- `slither-check-erc`: [Check the ERC's conformance](https://github.com/crytic/slither/wiki/ERC-Conformance) -- `slither-format`: [Automatic patch generation](https://github.com/crytic/slither/wiki/Slither-format) -- `slither-read-storage`: [Read storage values from contracts](./slither/tools/read_storage/README.md) -- `slither-interface`: [Generate an interface for a contract](./slither/tools/interface/README.md) +* `slither-check-upgradeability`: [Review `delegatecall`-based upgradeability](https://github.com/crytic/slither/wiki/Upgradeability-Checks) +* `slither-prop`: [Automatic unit test and property generation](https://github.com/crytic/slither/wiki/Property-generation) +* `slither-flat`: [Flatten a codebase](https://github.com/crytic/slither/wiki/Contract-Flattening) +* `slither-check-erc`: [Check the ERC's conformance](https://github.com/crytic/slither/wiki/ERC-Conformance) +* `slither-format`: [Automatic patch generation](https://github.com/crytic/slither/wiki/Slither-format) +* `slither-read-storage`: [Read storage values from contracts](./slither/tools/read_storage/README.md) +* `slither-interface`: [Generate an interface for a contract](./slither/tools/interface/README.md) See the [Tool documentation](https://github.com/crytic/slither/wiki/Tool-Documentation) for additional tools. @@ -244,23 +243,23 @@ Documentation on Slither's internals is available [here](https://crytic.github.i Feel free to stop by our [Slack channel](https://empireslacking.herokuapp.com) (#ethereum) for help using or extending Slither. -- The [Printer documentation](https://github.com/trailofbits/slither/wiki/Printer-documentation) describes the information Slither is capable of visualizing for each contract. +* The [Printer documentation](https://github.com/trailofbits/slither/wiki/Printer-documentation) describes the information Slither is capable of visualizing for each contract. -- The [Detector documentation](https://github.com/trailofbits/slither/wiki/Adding-a-new-detector) describes how to write a new vulnerability analyses. +* The [Detector documentation](https://github.com/trailofbits/slither/wiki/Adding-a-new-detector) describes how to write a new vulnerability analyses. -- The [API documentation](https://github.com/crytic/slither/wiki/Python-API) describes the methods and objects available for custom analyses. +* The [API documentation](https://github.com/crytic/slither/wiki/Python-API) describes the methods and objects available for custom analyses. -- The [SlithIR documentation](https://github.com/trailofbits/slither/wiki/SlithIR) describes the SlithIR intermediate representation. +* The [SlithIR documentation](https://github.com/trailofbits/slither/wiki/SlithIR) describes the SlithIR intermediate representation. ## FAQ How do I exclude mocks or tests? -- View our documentation on [path filtering](https://github.com/crytic/slither/wiki/Usage#path-filtering). +* View our documentation on [path filtering](https://github.com/crytic/slither/wiki/Usage#path-filtering). How do I fix "unknown file" or compilation issues? -- Because slither requires the solc AST, it must have all dependencies available. +* Because slither requires the solc AST, it must have all dependencies available. If a contract has dependencies, `slither contract.sol` will fail. Instead, use `slither .` in the parent directory of `contracts/` (you should see `contracts/` when you run `ls`). If you have a `node_modules/` folder, it must be in the same directory as `contracts/`. To verify that this issue is related to slither, @@ -275,7 +274,7 @@ Slither is licensed and distributed under the AGPLv3 license. [Contact us](mailt ### Trail of Bits publication -- [Slither: A Static Analysis Framework For Smart Contracts](https://arxiv.org/abs/1908.09878), Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19 +* [Slither: A Static Analysis Framework For Smart Contracts](https://arxiv.org/abs/1908.09878), Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19 ### External publications diff --git a/setup.py b/setup.py index e7019b1aac..182b91d35b 100644 --- a/setup.py +++ b/setup.py @@ -8,14 +8,14 @@ description="Slither is a Solidity static analysis framework written in Python 3.", url="https://github.com/crytic/slither", author="Trail of Bits", - version="0.9.5", + version="0.9.6", packages=find_packages(), python_requires=">=3.8", install_requires=[ "packaging", "prettytable>=3.3.0", "pycryptodome>=3.4.6", - "crytic-compile>=0.3.2,<0.4.0", + "crytic-compile>=0.3.3,<0.4.0", # "crytic-compile@git+https://github.com/crytic/crytic-compile.git@dev#egg=crytic-compile", "web3>=6.0.0", "eth-abi>=4.0.0", @@ -36,7 +36,6 @@ "coverage[toml]", "filelock", "pytest-insta", - "solc-select>=1.0.4", ], "doc": [ "pdoc", From 2bc6a0f1a4349e2cb6a45bf7a078f65e050d7e28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 22:22:08 +0000 Subject: [PATCH 06/10] Bump pypa/gh-action-pypi-publish from 1.8.8 to 1.8.10 Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.8 to 1.8.10. - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.8...v1.8.10) --- updated-dependencies: - dependency-name: pypa/gh-action-pypi-publish dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 977a92ab21..ed11178e37 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -44,7 +44,7 @@ jobs: path: dist/ - name: publish - uses: pypa/gh-action-pypi-publish@v1.8.8 + uses: pypa/gh-action-pypi-publish@v1.8.10 - name: sign uses: sigstore/gh-action-sigstore-python@v2.0.0 From 81c0c8cd88a437f39fa6aece06470f7e8c1b1a31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 22:22:13 +0000 Subject: [PATCH 07/10] Bump sigstore/gh-action-sigstore-python from 2.0.0 to 2.0.1 Bumps [sigstore/gh-action-sigstore-python](https://github.com/sigstore/gh-action-sigstore-python) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/sigstore/gh-action-sigstore-python/releases) - [Commits](https://github.com/sigstore/gh-action-sigstore-python/compare/v2.0.0...v2.0.1) --- updated-dependencies: - dependency-name: sigstore/gh-action-sigstore-python dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 977a92ab21..cd6feacceb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -47,7 +47,7 @@ jobs: uses: pypa/gh-action-pypi-publish@v1.8.8 - name: sign - uses: sigstore/gh-action-sigstore-python@v2.0.0 + uses: sigstore/gh-action-sigstore-python@v2.0.1 with: inputs: ./dist/*.tar.gz ./dist/*.whl release-signing-artifacts: true From ff52901e6d1240fcd6633e5cee59577226adde66 Mon Sep 17 00:00:00 2001 From: joodiewoodo <38355190+dokzai@users.noreply.github.com> Date: Thu, 7 Sep 2023 23:03:56 -0400 Subject: [PATCH 08/10] Allow underscore in variable naming convention for internal state variables (#2110) * fix: allow underscore in variable naming convention for internal state variables and update test_detector tests snapshot * change set visibility of _myPublic to public, update test snapshots --- .../naming_convention/naming_convention.py | 2 +- ...ention_0_4_25_naming_convention_sol__0.txt | 14 +++++++------- ...ention_0_5_16_naming_convention_sol__0.txt | 14 +++++++------- ...ention_0_6_11_naming_convention_sol__0.txt | 14 +++++++------- ...vention_0_7_6_naming_convention_sol__0.txt | 14 +++++++------- .../0.4.25/naming_convention.sol | 3 ++- .../0.4.25/naming_convention.sol-0.4.25.zip | Bin 3545 -> 3659 bytes ...arning_for_public_constants.sol-0.4.25.zip | Bin 1377 -> 1380 bytes .../0.5.16/naming_convention.sol | 3 ++- .../0.5.16/naming_convention.sol-0.5.16.zip | Bin 3563 -> 3671 bytes ...arning_for_public_constants.sol-0.5.16.zip | Bin 1382 -> 1387 bytes .../0.6.11/naming_convention.sol | 3 ++- .../0.6.11/naming_convention.sol-0.6.11.zip | Bin 3566 -> 3688 bytes ...arning_for_public_constants.sol-0.6.11.zip | Bin 1402 -> 1409 bytes .../0.7.6/naming_convention.sol | 3 ++- .../0.7.6/naming_convention.sol-0.7.6.zip | Bin 3481 -> 3605 bytes ...warning_for_public_constants.sol-0.7.6.zip | Bin 1357 -> 1367 bytes 17 files changed, 37 insertions(+), 33 deletions(-) diff --git a/slither/detectors/naming_convention/naming_convention.py b/slither/detectors/naming_convention/naming_convention.py index 02deb719e7..0633799e56 100644 --- a/slither/detectors/naming_convention/naming_convention.py +++ b/slither/detectors/naming_convention/naming_convention.py @@ -167,7 +167,7 @@ def _detect(self) -> List[Output]: results.append(res) else: - if var.visibility == "private": + if var.visibility in ["private", "internal"]: correct_naming = self.is_mixed_case_with_underscore(var.name) else: correct_naming = self.is_mixed_case(var.name) diff --git a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_4_25_naming_convention_sol__0.txt b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_4_25_naming_convention_sol__0.txt index ed4177ca17..e4a643678d 100644 --- a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_4_25_naming_convention_sol__0.txt +++ b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_4_25_naming_convention_sol__0.txt @@ -1,10 +1,10 @@ Struct naming.test (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#14-16) is not in CapWords -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#69) is not in mixedCase +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#70) is not in mixedCase -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#69) is single letter l, O, or I, which should not be used +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#70) is single letter l, O, or I, which should not be used -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#68) is not in mixedCase +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#69) is not in mixedCase Variable naming.Var_One (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#11) is not in mixedCase @@ -14,11 +14,11 @@ Contract naming (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_c Enum naming.numbers (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#6) is not in CapWords -Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#59) is not in mixedCase +Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#60) is not in mixedCase -Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#56) is not in mixedCase +Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#57) is not in mixedCase -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#68) is single letter l, O, or I, which should not be used +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#69) is single letter l, O, or I, which should not be used Event naming.event_(uint256) (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#23) is not in CapWords @@ -26,7 +26,7 @@ Modifier naming.CantDo() (tests/e2e/detectors/test_data/naming-convention/0.4.25 Function naming.GetOne() (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#30-33) is not in mixedCase -Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#67) is single letter l, O, or I, which should not be used +Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#68) is single letter l, O, or I, which should not be used Parameter naming.setInt(uint256,uint256).Number2 (tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol#35) is not in mixedCase diff --git a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_5_16_naming_convention_sol__0.txt b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_5_16_naming_convention_sol__0.txt index 35c11193f5..96f6aab3c6 100644 --- a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_5_16_naming_convention_sol__0.txt +++ b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_5_16_naming_convention_sol__0.txt @@ -1,10 +1,10 @@ Struct naming.test (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#14-16) is not in CapWords -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#69) is not in mixedCase +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#70) is not in mixedCase -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#69) is single letter l, O, or I, which should not be used +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#70) is single letter l, O, or I, which should not be used -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#68) is not in mixedCase +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#69) is not in mixedCase Variable naming.Var_One (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#11) is not in mixedCase @@ -14,11 +14,11 @@ Contract naming (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_c Enum naming.numbers (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#6) is not in CapWords -Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#59) is not in mixedCase +Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#60) is not in mixedCase -Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#56) is not in mixedCase +Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#57) is not in mixedCase -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#68) is single letter l, O, or I, which should not be used +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#69) is single letter l, O, or I, which should not be used Event naming.event_(uint256) (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#23) is not in CapWords @@ -26,7 +26,7 @@ Modifier naming.CantDo() (tests/e2e/detectors/test_data/naming-convention/0.5.16 Function naming.GetOne() (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#30-33) is not in mixedCase -Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#67) is single letter l, O, or I, which should not be used +Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#68) is single letter l, O, or I, which should not be used Parameter naming.setInt(uint256,uint256).Number2 (tests/e2e/detectors/test_data/naming-convention/0.5.16/naming_convention.sol#35) is not in mixedCase diff --git a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_6_11_naming_convention_sol__0.txt b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_6_11_naming_convention_sol__0.txt index f692e211b8..f1986fb781 100644 --- a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_6_11_naming_convention_sol__0.txt +++ b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_6_11_naming_convention_sol__0.txt @@ -1,10 +1,10 @@ Struct naming.test (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#14-16) is not in CapWords -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#69) is not in mixedCase +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#70) is not in mixedCase -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#69) is single letter l, O, or I, which should not be used +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#70) is single letter l, O, or I, which should not be used -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#68) is not in mixedCase +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#69) is not in mixedCase Variable naming.Var_One (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#11) is not in mixedCase @@ -14,11 +14,11 @@ Contract naming (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_c Enum naming.numbers (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#6) is not in CapWords -Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#59) is not in mixedCase +Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#60) is not in mixedCase -Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#56) is not in mixedCase +Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#57) is not in mixedCase -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#68) is single letter l, O, or I, which should not be used +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#69) is single letter l, O, or I, which should not be used Event naming.event_(uint256) (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#23) is not in CapWords @@ -26,7 +26,7 @@ Modifier naming.CantDo() (tests/e2e/detectors/test_data/naming-convention/0.6.11 Function naming.GetOne() (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#30-33) is not in mixedCase -Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#67) is single letter l, O, or I, which should not be used +Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#68) is single letter l, O, or I, which should not be used Parameter naming.setInt(uint256,uint256).Number2 (tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol#35) is not in mixedCase diff --git a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_7_6_naming_convention_sol__0.txt b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_7_6_naming_convention_sol__0.txt index af17cabe8f..b471cbfa2f 100644 --- a/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_7_6_naming_convention_sol__0.txt +++ b/tests/e2e/detectors/snapshots/detectors__detector_NamingConvention_0_7_6_naming_convention_sol__0.txt @@ -1,10 +1,10 @@ Struct naming.test (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#14-16) is not in CapWords -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#69) is not in mixedCase +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#70) is not in mixedCase -Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#69) is single letter l, O, or I, which should not be used +Variable T.I (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#70) is single letter l, O, or I, which should not be used -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#68) is not in mixedCase +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#69) is not in mixedCase Variable naming.Var_One (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#11) is not in mixedCase @@ -14,11 +14,11 @@ Contract naming (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_co Enum naming.numbers (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#6) is not in CapWords -Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#59) is not in mixedCase +Parameter T.test(uint256,uint256)._used (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#60) is not in mixedCase -Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#56) is not in mixedCase +Variable T._myPublicVar (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#57) is not in mixedCase -Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#68) is single letter l, O, or I, which should not be used +Variable T.O (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#69) is single letter l, O, or I, which should not be used Event naming.event_(uint256) (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#23) is not in CapWords @@ -26,7 +26,7 @@ Modifier naming.CantDo() (tests/e2e/detectors/test_data/naming-convention/0.7.6/ Function naming.GetOne() (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#30-33) is not in mixedCase -Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#67) is single letter l, O, or I, which should not be used +Variable T.l (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#68) is single letter l, O, or I, which should not be used Parameter naming.setInt(uint256,uint256).Number2 (tests/e2e/detectors/test_data/naming-convention/0.7.6/naming_convention.sol#35) is not in mixedCase diff --git a/tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol b/tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol index 7181ca9110..add7867e07 100644 --- a/tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol +++ b/tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol @@ -53,7 +53,8 @@ contract Test { contract T { uint private _myPrivateVar; - uint _myPublicVar; + uint internal _myInternalVar; + uint public _myPublicVar; function test(uint _unused, uint _used) public returns(uint){ diff --git a/tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol-0.4.25.zip b/tests/e2e/detectors/test_data/naming-convention/0.4.25/naming_convention.sol-0.4.25.zip index c7aaae071dbf8633c6c3ccd451a16b70b9ddd938..fe35f0c006f2a1526c143d8def79ef54a25e15c3 100644 GIT binary patch delta 3541 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 delta 1213 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 delta 3444 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 diff --git a/tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol b/tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol index 7181ca9110..add7867e07 100644 --- a/tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol +++ b/tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol @@ -53,7 +53,8 @@ contract Test { contract T { uint private _myPrivateVar; - uint _myPublicVar; + uint internal _myInternalVar; + uint public _myPublicVar; function test(uint _unused, uint _used) public returns(uint){ diff --git a/tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol-0.6.11.zip b/tests/e2e/detectors/test_data/naming-convention/0.6.11/naming_convention.sol-0.6.11.zip index 3e6277ac1b0975ae85638b853cbde20646ccd7d2..b91697087411d7fed7effcb98875fdbf53f7a74f 100644 GIT binary patch delta 3577 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 ZR_r<*r#cM)0BC)a6%I`Xfeiov0078)u@wLS diff --git a/tests/e2e/detectors/test_data/naming-convention/0.6.11/no_warning_for_public_constants.sol-0.6.11.zip b/tests/e2e/detectors/test_data/naming-convention/0.6.11/no_warning_for_public_constants.sol-0.6.11.zip index 67f8eff7ee737a57bf2ee1036db7d482c4926445..ed813d07b9be8e890dcdba4f865b432c1a77860b 100644 GIT binary patch delta 1245 zcmV<31S0$T3V{n4P)h>@KL7#%4ghJHCs+1C%$%_V006iTkr-fqO_*8QcqqqPRb~nJ zWXL2H807psVK9!fD&p|6=0Ku$knG4&vYB3y^^P$vjeL2gg{xK7S=SBtKOl888a$}y z?7meBGBj`~m&-#p=E9&=Y#IZ!d=kIw6mvH2#t-Bf3L+x|hA9LYtG{(*ZO9he`Pt%@ z99+AjzSX&+R+e}~Xj(A3cl383y=mPAtt?kF!S3%I z%x>Iof-%-1gqi30R7jx=7s^%4s@M{t*PZ_xP0M7F4PG z$!m5QoXiRjj)H&uA{a$6bX|c_&6y`Ox#Tc{!Qd|)H#t~;eF>ONb4~ju`Zz&?pRDj8i|yex+5G`u4?t)Lpd~j9^S}rh9Cp#k;jGJ=b_f z_)qqQ?E!RuMDQ$$Wj=608lsSFpFu*}Cmk+?qv~{lu>s>ST}?DCvf{ns3R&${S;Opk zaI50}CpU47&(DSJMXyygN@c`0&}jO~HN|7%tOPX5Xj{=caw1qO(jRGxlugKS|a+h^9SH*e8%p80gO6 z{|tYB&Ad&-m=TpI)$G!%ERM4mZi?038GgP_Z>ArmSEw>nF!?nMFwvgCx{)F;i^sd7 zFrWp&_P4Uf={&* z-vteL16V!4rhf?{1wB9TN4kswUJ-yW^7}FJK>~p3MfhVdB-H{+>TCKGInZ1H2_Ijx|D*!IiJA6vAfSJ575h_&=kFY zxYUpF`V6GD=sf$=Heix76~07<21Gc?gCyE+jRcCjsG%ypjKe12u_@*1-XT|K+$SUc zjGXF60_xFe3BoBJxQ|7m25TY03U&{B0>KZ*0oJ-_RZ6HtZZW_h%&td>yi^9d&;aFP zvHb@yHuxR!`CtkHMawIYCKBEjZJZv`=bWm@3yXr+0M0 zY007Z2F}?WoA10_DMIJ`gPkZ)O928u06zc%01g0YnI~8FLCl=71ONcI50e=MTLuON H00000LXc6v delta 1245 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 ZDF6Tf000000001!Qw=}{s0{!B008*kzpnrQ delta 3371 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 Bn=b$W diff --git a/tests/e2e/detectors/test_data/naming-convention/0.7.6/no_warning_for_public_constants.sol-0.7.6.zip b/tests/e2e/detectors/test_data/naming-convention/0.7.6/no_warning_for_public_constants.sol-0.7.6.zip index 7b304b5c0c51361e8d7eb38abb0c614fcc9b6015..9f2c1a1a7d5a108a3277c3cdde3a8e3958a51c5d 100644 GIT binary patch delta 1210 zcmV;r1V#JJ3fBr7P)h>@KL7#%4ghJHCs#WZb_|CE002S{001|W{RBFZRU>~*m|5C* zD92k>W(oLY$RrgQ3gjxjEce0ipYt5wxm?mMg1 z!?aES#YRK*y$&n>uC}UR(=!r7N~MGhMaQF&CtYP=swZ=xV(;-?C)ok`oa6^%<{q}9 zP1E2tL&?33pTFiG9aPi!NlJeN;~-U1_3Xxy;Q=5dfq7MNZmxntGvFysyGS4jq8GQbT$C;ac%IIn^W51f+T>z{X}0 zMbwD*2^_!yJ?!-W2&iy3y#Zox(S+HZ!fAM|BJdCoaom6xSFsWEw?BW$W+Z4$y4dDV zujTrnr}Rf7tWuhG9c$O{ccThSHO$`0Ke(L&dp7=<)MEFJBTPE4BLW!Tw4W; z!)qdAj-o|9rOVTcO3~(j`lx+q0PRdocTr#Hy@)QU+7$bA`o%Awa5(FnpNsrrFuhyt$CWCv zVv+M$dg{x)yBU8zG85pE@w48F-}y;?Yt_7M*LCv}T0YHqh%RHqOHp-CV7AVG642)X zqW!`dtQHIkx4o+Loj8=RzTal$o1*Uen{#i9YmE#eA7I=qOXpRkO|NwmM9xQ(^L5o{Ml?U)J4?+&K&42j z1!J)8I_=DF6S50Xlk6O928u06zc%01g0YnI~5} Y6m|y;hXeosLJyPd1X~8&1ONa40C4q9J^%m! delta 1195 zcmV;c1XTOi3e5@_P)h>@KL7#%4gfoicUC(~IvITg002D^kr-fqJ|EX}y%sU?M-PRi zm0nlZdjJq|?-l5q5W}VAK!X$~yhYNz{x3$S;g((ndY>|}t(Qr6=UkA>bk%pZW|Xyk zrQe*weOeB`)1lL#N+Lu>=!z=sQlS87o3+&huXYgLmwM+m3uP)To~Hn zL@5p8M8E0G-izgbkV^<^EJ&Bdy>q@3k5lY(P;?^K+u39yKr$~9q%p%E<7|9U9=e%1 znE=A7qeF=B!WF2b_=b%V6mKS701A(sQ|0>pC2ohLaAEO@SC%p3GA}1*?YF}wCV@>i zVx$qli}G^$P?gpI2BC ztFxNQgyU1chQb@n>%uM@I2veB^Qdl7bgpFO=57sw3Hg%DO;I!J25Aypkzd_5f9qTg zljpR6@j(amrZ1S^O4&Vk)FF|l?@D_xt>Bf*ctae^08V?8YRSo<)vK!X6MVZ4v+!hE ze|L7=ZR5ays2dYNOXbH7{5ui~ID-U|Fl+L68*f-s(}((dFK#DLlO`C}!AuP(haP5CRbj5S>X+9d+&VH`LpnKEsG7b7jQ5$^P%c<)gl52 zve}2r{en?{Vi5Wd_a9a2q+?&2E)a_gixd>OV?%R5938z!K0&agXiaUM*T^|GKp9h0 zq6fr(DL{O;>|$fDOj4JcV*(UH$2Z(p$~^-4)D?bY!IPruOR8{x>9d$YJnIFIYsd1M296&xdvxpTCmHnv z-%#A?dPY5=0nj}mcXv@}W z#yKuZrqNkkcK`4YWgOjj8!hpVNtt!Jhd8G(5(Y)zaJOZvhqhM-h5P3wwv|`uq-cD9 zaY)D83{b{@g+&hl#o7E)tyzkYA{*YBBa*olsTr|PFje)qwL#0da5gSZZ%8fXWm)FAe=yt;5 z`yF~RpTc#Qs@qD=!=xYaE3Pp!xf$tyiL^fF9Qaw166x4#tB=Nl#~KCejk)0 Date: Fri, 8 Sep 2023 05:16:54 +0200 Subject: [PATCH 09/10] Make the results deterministic (#2114) --- slither/detectors/statements/divide_before_multiply.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/slither/detectors/statements/divide_before_multiply.py b/slither/detectors/statements/divide_before_multiply.py index 6f199db414..334da592c0 100644 --- a/slither/detectors/statements/divide_before_multiply.py +++ b/slither/detectors/statements/divide_before_multiply.py @@ -2,7 +2,7 @@ Module detecting possible loss of precision due to divide before multiple """ from collections import defaultdict -from typing import DefaultDict, List, Set, Tuple +from typing import DefaultDict, List, Tuple from slither.core.cfg.node import Node from slither.core.declarations.contract import Contract @@ -63,7 +63,7 @@ def is_assert(node: Node) -> bool: # pylint: disable=too-many-branches def _explore( - to_explore: Set[Node], f_results: List[List[Node]], divisions: DefaultDict[LVALUE, List[Node]] + to_explore: List[Node], f_results: List[List[Node]], divisions: DefaultDict[LVALUE, List[Node]] ) -> None: explored = set() while to_explore: # pylint: disable=too-many-nested-blocks @@ -114,7 +114,7 @@ def _explore( f_results.append(node_results) for son in node.sons: - to_explore.add(son) + to_explore.append(son) def detect_divide_before_multiply( @@ -145,7 +145,7 @@ def detect_divide_before_multiply( # track all the division results (and the assignment of the division results) divisions: DefaultDict[LVALUE, List[Node]] = defaultdict(list) - _explore({function.entry_point}, f_results, divisions) + _explore([function.entry_point], f_results, divisions) for f_result in f_results: results.append((function, f_result)) From 9da51fff3b5b16c04f44370fddcfe1aba48edd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20L=C3=B3pez?= <2642849+elopez@users.noreply.github.com> Date: Fri, 8 Sep 2023 00:32:32 -0300 Subject: [PATCH 10/10] detectors: cache_array_length: include source mapping in finding (#2076) * detectors: cache_array_length: include source mapping in finding The detector was manually string-interpolating the code and line information, which left the finding without source mapping metadata and broke filtering. Include the node directly on the finding info so that the metadata is preserved. --------- Co-authored-by: alpharush <0xalpharush@protonmail.com> --- .../operations/cache_array_length.py | 5 ++--- ...yLength_0_8_17_CacheArrayLength_sol__0.txt | 20 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/slither/detectors/operations/cache_array_length.py b/slither/detectors/operations/cache_array_length.py index e4d8cf2c69..59289ed0f7 100644 --- a/slither/detectors/operations/cache_array_length.py +++ b/slither/detectors/operations/cache_array_length.py @@ -216,9 +216,8 @@ def _detect(self): for usage in non_optimal_array_len_usages: info = [ "Loop condition ", - f"`{usage.source_mapping.content}` ", - f"({usage.source_mapping}) ", - "should use cached array length instead of referencing `length` member " + usage, + " should use cached array length instead of referencing `length` member " "of the storage array.\n ", ] res = self.generate_result(info) diff --git a/tests/e2e/detectors/snapshots/detectors__detector_CacheArrayLength_0_8_17_CacheArrayLength_sol__0.txt b/tests/e2e/detectors/snapshots/detectors__detector_CacheArrayLength_0_8_17_CacheArrayLength_sol__0.txt index 456c702a58..c2a5023a6f 100644 --- a/tests/e2e/detectors/snapshots/detectors__detector_CacheArrayLength_0_8_17_CacheArrayLength_sol__0.txt +++ b/tests/e2e/detectors/snapshots/detectors__detector_CacheArrayLength_0_8_17_CacheArrayLength_sol__0.txt @@ -1,20 +1,20 @@ -Loop condition `j < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#109) should use cached array length instead of referencing `length` member of the storage array. +Loop condition k_scope_17 < array2.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#133) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `i < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#161) should use cached array length instead of referencing `length` member of the storage array. +Loop condition i_scope_23 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#172) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `i < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#172) should use cached array length instead of referencing `length` member of the storage array. +Loop condition i < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#37) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `j < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#126) should use cached array length instead of referencing `length` member of the storage array. +Loop condition j_scope_11 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#109) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `k < array2.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#133) should use cached array length instead of referencing `length` member of the storage array. +Loop condition i_scope_4 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#68) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `i < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#68) should use cached array length instead of referencing `length` member of the storage array. +Loop condition i_scope_22 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#167) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `k < array2.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#99) should use cached array length instead of referencing `length` member of the storage array. +Loop condition k_scope_9 < array2.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#99) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `i < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#167) should use cached array length instead of referencing `length` member of the storage array. +Loop condition i_scope_6 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#80) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `i < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#37) should use cached array length instead of referencing `length` member of the storage array. +Loop condition j_scope_15 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#126) should use cached array length instead of referencing `length` member of the storage array. -Loop condition `i < array.length` (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#80) should use cached array length instead of referencing `length` member of the storage array. +Loop condition i_scope_21 < array.length (tests/e2e/detectors/test_data/cache-array-length/0.8.17/CacheArrayLength.sol#161) should use cached array length instead of referencing `length` member of the storage array.