Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In this compliant example, the expression x=y is used in a function argument

 

Code Block
bgColor#ccccff
langc
if ( foo( x = y ) ) { /* ... */ } 

This is a non-compliant example because && is not a comparison or relational operator and the entire expression is not primary.

Code Block
bgColor#FFcccc
langc
if ( ( v = w ) && flag ) { /* ... */ }

When the assignment of v to w is not intended, this conditional block is now executed when v is equal to w.

Code Block
bgColor#ccccff
langc
if ( ( v == w ) && flag ) { /* ... */ }; 

When the assignment is intended, the following is an alternative compliant solution:

Code Block
bgColor#ccccff
langc
if ( ( (v = w) != 0 ) && flag ) { /* ... */ };

Risk Assessment

...

Tool

Version

Checker

Description

LDRA tool suite

Include Page
LDRA_V
LDRA_V

 

 

GCC

Include Page
GCC_V
GCC_V

 

Can detect violations of this recommendation when the -Wall flag is used.

Compass/ROSE

 

 

Could detect violations of this recommendation by identifying any assignment expression as the top-level expression in an if or while statement.

Klocwork

Include Page
Klocwork_V
Klocwork_V

ASSIGCOND.GEN
ASSIGCOND.CALL

 

ECLAIR

Include Page
ECLAIR_V
ECLAIR_V

exprctxt

Fully implemented.

PRQA QA-C
Include Page
PRQA_V
PRQA_V
3314Partially implemented.

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

...