CodeQL documentation

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

  • B. Stroustrup, The C++ Programming Language special ed, p 123 Short-circuit operators. Addison-Wesley, 2000.

  • Common Weakness Enumeration: CWE-480.

  • © GitHub, Inc.
  • Terms
  • Privacy
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy