You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

The logical AND and logical OR operators (&&, ||) exhibit "short circuit" operation. That is, the second operand is not evaluated if the result can be deduced solely by evaluating the first operand. Consequently, the second operand should not contain side effects because, if it does, it is not apparent if the side effect occurs.

Non-Compliant Code Example

int i;
int max;

if ( (i >= 0 && (i++) <= max) ) {
  /* code */
}

It is unclear whether the value of i will be incremented as a result of evaluating the condition.

Compliant Solution

In this compliant solution, the behavior is much clearer.

int i;
int max;

if ( (i >= 0 && (i + 1) <= max) ) {
  i++;
  /* code */
}

Risk Assessment

Attempting to modify an object that is the second operand to the logical OR or AND operator may cause that object to take on an unexpected value. This can lead to unintended program behavior.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

EXP02-A

1 (low)

1 (unlikely)

3 (low)

P3

L3

Examples of vulnerabilities resulting from the violation of this recommendation can be found on the CERT website.

References

[[ISO/IEC 9899-1999]] Section 6.5.13, "Logical AND operator," and Section 6.5.14, "Logical OR operator"

  • No labels