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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions