CodeQL 文档

短路运算符应用于标志

ID: cpp/logical-operator-applied-to-flag
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - reliability
   - correctness
   - external/cwe/cwe-480
Query suites:
   - cpp-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

此规则查找应用于看起来像位掩码的短路逻辑运算符。这可能是位运算符的笔误。假定位掩码是常量操作数,其值为 2 的幂,除了 1 和 0,因为它们可能是合法的真值。十六进制和八进制字面量也被视为位掩码。

建议

检查是否应该使用位运算符而不是逻辑运算符,或者常量是否应该与某些东西进行比较。

示例

unsigned int new_mask = old_mask || 0x0100; //wrong, || logical operator just returns 1 or 0

unsigned int new_mask = old_mask | 0x0100; //right, | is a bit-mask operator

参考文献

  • B. Stroustrup,《C++ 编程语言 特别版》,第 123 页 短路运算符。Addison-Wesley,2000 年。

  • 常见漏洞枚举:CWE-480.

  • ©GitHub, Inc.
  • 条款
  • 隐私