CodeQL 文档

恒等比较

ID: cs/constant-comparison
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - correctness
Query suites:
   - csharp-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

始终产生相同结果的比较是不必要的,并且可能表明逻辑中存在错误。当其中一个操作数的数据类型的值范围有限时,就会发生这种情况。例如,无符号整数始终大于或等于零,而 byte 值始终小于 256。

以下表达式的结果始终相同

  • Unsigned < 0 始终为 false,

  • 0 > Unsigned 始终为 false,

  • 0 &le; Unsigned 始终为 true,

  • Unsigned &ge; 0 始终为 true,

  • Unsigned == -1 始终为 false,

  • Byte < 512 始终为 true。

建议

检查程序逻辑,以确定是否需要进行比较。可以更改数据类型,也可以删除不必要的代码。

示例

以下示例尝试从 numberOfOrders 倒计时到 0,但是循环永远不会终止,因为 order 是一个无符号整数,因此条件 order >= 0 始终为 true。

    for (uint order = numberOfOrders; order >= 0; order--)
      ProcessOrder(order);

解决方案是更改变量 order 的类型。

参考

  • ©GitHub 公司
  • 条款
  • 隐私