短路运算符应用于标志¶
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
此规则查找应用于看起来像位掩码的短路逻辑运算符。这可能是位运算符的笔误。假定位掩码是常量操作数,其值为 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.