Add Slither reentrancy check in CI (#3047)

Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
This commit is contained in:
JulissaDantes
2022-01-20 20:15:54 -04:00
committed by GitHub
parent 783ac759a9
commit b3b83b558e
5 changed files with 35 additions and 2 deletions

View File

@ -54,3 +54,26 @@ jobs:
env: env:
NODE_OPTIONS: --max_old_space_size=4096 NODE_OPTIONS: --max_old_space_size=4096
- uses: codecov/codecov-action@v2 - uses: codecov/codecov-action@v2
slither:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12.x
- uses: actions/cache@v2
id: cache
with:
path: '**/node_modules'
key: npm-v2-${{ hashFiles('**/package-lock.json') }}
restore-keys: npm-v2-
- run: npm ci
if: steps.cache.outputs.cache-hit != 'true'
- name: Set up Python
uses: actions/setup-python@v2
- name: Install dependencies
run: pip3 install slither-analyzer
- name: Summary of static analysis
run: npm run slither

View File

@ -261,6 +261,9 @@ contract TimelockController is AccessControl {
* *
* - the caller must have the 'executor' role. * - the caller must have the 'executor' role.
*/ */
// This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending,
// thus any modifications to the operation during reentrancy should be caught.
// slither-disable-next-line reentrancy-eth
function execute( function execute(
address target, address target,
uint256 value, uint256 value,

View File

@ -122,6 +122,9 @@ abstract contract GovernorTimelockControl is IGovernorTimelock, Governor {
* @dev Overriden version of the {Governor-_cancel} function to cancel the timelocked proposal if it as already * @dev Overriden version of the {Governor-_cancel} function to cancel the timelocked proposal if it as already
* been queued. * been queued.
*/ */
// This function can reenter through the external call to the timelock, but we assume the timelock is trusted and
// well behaved (according to TimelockController) and this will not happen.
// slither-disable-next-line reentrancy-no-eth
function _cancel( function _cancel(
address[] memory targets, address[] memory targets,
uint256[] memory values, uint256[] memory values,

View File

@ -56,6 +56,9 @@ abstract contract ERC20FlashMint is ERC20, IERC3156FlashLender {
* @param data An arbitrary datafield that is passed to the receiver. * @param data An arbitrary datafield that is passed to the receiver.
* @return `true` is the flash loan was successful. * @return `true` is the flash loan was successful.
*/ */
// This function can reenter, but it doesn't pose a risk because it always preserves the property that the amount
// minted at the beginning is always recovered and burned at the end, or else the entire function will revert.
// slither-disable-next-line reentrancy-no-eth
function flashLoan( function flashLoan(
IERC3156FlashBorrower receiver, IERC3156FlashBorrower receiver,
address token, address token,

View File

@ -29,7 +29,8 @@
"version": "scripts/release/version.sh", "version": "scripts/release/version.sh",
"test": "hardhat test", "test": "hardhat test",
"test:inheritance": "node scripts/inheritanceOrdering artifacts/build-info/*", "test:inheritance": "node scripts/inheritanceOrdering artifacts/build-info/*",
"gas-report": "env ENABLE_GAS_REPORT=true npm run test" "gas-report": "env ENABLE_GAS_REPORT=true npm run test",
"slither": "npm run clean && slither . --detect reentrancy-eth,reentrancy-no-eth,reentrancy-unlimited-gas"
}, },
"repository": { "repository": {
"type": "git", "type": "git",