From 91e2c0c4e476bb5bdd17e587bd97ff75f412602e Mon Sep 17 00:00:00 2001 From: Gemini Date: Tue, 30 Jun 2026 01:47:47 -0400 Subject: [PATCH] fix: handle revert modifiers in incorrect-modifier --- slither/detectors/functions/modifier.py | 3 +- ...etection_0_8_4_modifier_reverts_sol__0.txt | 0 .../0.8.4/modifier_reverts.sol | 31 ++++++++++++++++++ .../0.8.4/modifier_reverts.sol-0.8.4.zip | Bin 0 -> 3148 bytes tests/e2e/detectors/test_detectors.py | 5 +++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/detectors/snapshots/detectors__detector_ModifierDefaultDetection_0_8_4_modifier_reverts_sol__0.txt create mode 100644 tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol create mode 100644 tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol-0.8.4.zip diff --git a/slither/detectors/functions/modifier.py b/slither/detectors/functions/modifier.py index cfafecda43..80e0f0f443 100644 --- a/slither/detectors/functions/modifier.py +++ b/slither/detectors/functions/modifier.py @@ -17,7 +17,8 @@ def is_revert(node: Node) -> bool: return node.type == NodeType.THROW or any( - ir.function.name in ["revert()", "revert(string"] for ir in node.internal_calls + ir.function.name in ["revert()", "revert(string)"] or ir.function.name.startswith("revert ") + for ir in node.internal_calls ) diff --git a/tests/e2e/detectors/snapshots/detectors__detector_ModifierDefaultDetection_0_8_4_modifier_reverts_sol__0.txt b/tests/e2e/detectors/snapshots/detectors__detector_ModifierDefaultDetection_0_8_4_modifier_reverts_sol__0.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol b/tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol new file mode 100644 index 0000000000..479b186296 --- /dev/null +++ b/tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol @@ -0,0 +1,31 @@ +pragma solidity ^0.8.4; + +contract Test { + address owner; + + error NotOwner(); + + modifier onlyOwnerStr() { + if (msg.sender == owner) { + _; + } else { + revert("not owner"); + } + } + + modifier onlyOwnerErr() { + if (msg.sender == owner) { + _; + } else { + revert NotOwner(); + } + } + + function f() external onlyOwnerStr returns (uint256) { + return 1; + } + + function g() external onlyOwnerErr returns (uint256) { + return 2; + } +} diff --git a/tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol-0.8.4.zip b/tests/e2e/detectors/test_data/incorrect-modifier/0.8.4/modifier_reverts.sol-0.8.4.zip new file mode 100644 index 0000000000000000000000000000000000000000..a1609ff545ceb5bc2a127fcc0c8d72f74adfdd63 GIT binary patch literal 3148 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 azw!U_zO@At^S^z%Keqpq)IXmA0Qe7uH}wes literal 0 HcmV?d00001 diff --git a/tests/e2e/detectors/test_detectors.py b/tests/e2e/detectors/test_detectors.py index 7bd6e34600..bd0cb02847 100644 --- a/tests/e2e/detectors/test_detectors.py +++ b/tests/e2e/detectors/test_detectors.py @@ -1326,6 +1326,11 @@ def id_test(test_item: Test): "modifier_default.sol", "0.7.6", ), + Test( + all_detectors.ModifierDefaultDetection, + "modifier_reverts.sol", + "0.8.4", + ), Test( all_detectors.IncorrectUnaryExpressionDetection, "invalid_unary_expression.sol",