Skip to content

Slither: incorrect-equality error in #18  #21

@mhchia

Description

@mhchia

#18slither failed。在這 PR 中,我們在 gulp 中對 IERC20(token).balanceOf(address(this)) 的結果運算,在看似無關的地方觸發了 slither 的 incorrect-equality 錯誤。

Error message

$ slither . --filter-paths "test" --exclude=naming-convention,unused-state,solc-version,constable-states,external-function,reentrancy-events

...
INFO:Detectors:
BNum.bdiv(uint256,uint256) (BNum.sol#75-86) uses a dangerous strict equality:
        - require(bool)(a == 0 || c0 / a == BONE) (BNum.sol#81)
BNum.bmul(uint256,uint256) (BNum.sol#63-73) uses a dangerous strict equality:
        - require(bool)(a == 0 || c0 / a == b) (BNum.sol#68)
BNum.bpow(uint256,uint256) (BNum.sol#108-126) uses a dangerous strict equality:
        - remain == 0 (BNum.sol#120)
BNum.bpowApprox(uint256,uint256,uint256) (BNum.sol#128-161) uses a dangerous strict equality:
        - term == 0 (BNum.sol#149)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities
INFO:Slither:. analyzed (16 contracts with 40 detectors), 4 result(s) found
INFO:Slither:Use https://crytic.io/ to get access to additional detectors and Github integration
...

試著 debug 後發現 slither 會偵測「有沒有 balance 在 require 中被用 == 比較」,因此我猜測有被丟到 BNum.bdivBNum.bmulBNum.bpow 、及 BNum.bpowApprox 的參數,在這 PR 後被標記為是 balance。因為這些函數會對這些參數做像是 BNum.bmulrequire(a == 0 || c0 / a == b) 這種違反 incorrect-equality 的行為。

目前我傾向先讓 slither 忽略 incorrect-equality 不檢查,因為要 debug 需要滿多時間的,然後感覺問題很可能是在 slither。

Reference

  • slither 中做標記 balance 的 code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions