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.
In this noncompliant code example, a bitwise expression is used in a conditional expression.
if (!(getuid() & geteuid() == 0)) {
/* ... */
}
|
This compliant solution uses the && operator for the logical operation within the conditional expression.
if (!(getuid() && geteuid() == 0)) {
/* ... */
}
|
\[Hatton 95\] Section 2.7.2, "Errors of omission and addition" \[ISO/IEC PDTR 24772\] "KOA Likely Incorrect Expressions" \[[MITRE 07|AA. References#MITRE 07]\] [CWE ID 480|http://cwe.mitre.org/data/definitions/480.html], "Use of Incorrect Operator" |