Do not use the bitwise AND (&, ampersand) or bitwise OR (|, pipe) operator in a conditional expression because this typically indicates programmer error and can result in unexpected behavior. Use & or | only for bitwise operations and use && or || only for logical operations.
Noncompliant Code Example
In this noncompliant code example, a bitwise expression is used in a conditional expression.
| Code Block | ||||
|---|---|---|---|---|
| ||||
if (!(getuid() & geteuid() == 0)) {
/* ... */
}
|
Compliant Solution
This compliant solution uses the && operator for the logical operation within the conditional expression.
| Code Block | ||||
|---|---|---|---|---|
| ||||
if (!(getuid() && geteuid() == 0)) {
/* ... */
}
|
Automated Detection
Tool | Version | Checker | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
Related Guidelines
ISO/IEC TR 24772 "KOA Likely Incorrect Expressions"
MITRE CWE: CWE-480, "Use of Incorrect Operator"
Bibliography
| Wiki Markup |
|---|
\[Hatton 1995\] Section 2.7.2, "Errors of omission and addition" |
03. Expressions (EXP) EXP18-C. Do not perform assignments in selection statements