← 返回首页
Short-circuiting operator applied to flag — CodeQL query help documentation CodeQL docs
CodeQL documentation
CodeQL resources

Short-circuiting operator applied to flag

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

Click to see the query in the CodeQL repository

This rule finds a short-circuiting logical operator that is applied to what looks like a bit-mask. This may be a typo for a bitwise operator. Bit-masks are assumed to be constant operands whose value is a power of 2, except 1 and 0, since these could be legitimate truth values. Hexadecimal and octal literals are also considered bit masks.

Recommendation

Check if there should be a bitwise operator used instead of logical operator, or whether the constant should be compared to something.

Example

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

References