Versions Compared

Key

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

In C89 (and historical K&R implementations), the meaning of the remainder operator for negative operands was implementation-defined. This behavior was changed in C99, and the change remains in C11.

Because not all C compilers are strictly C-conforming, you cannot rely on the behavior of the % operator if you need to run on a wide range of platforms with many different compilers.

The C Standard, Section section 6.5.5 [ISO/IEC 9899:2011], states:

...

Tool

Version

Checker

Description

Compass/ROSE

 

 

Could detect the specific noncompliant code example. It could identify when the result of a % operation might be negative and flag usage of that result in an array index. It could conceivably flag usage of any such result without first checking that the result is positive, but it would likely introduce many false positives.

Fortify SCA

5.0

 

Can detect violations of this recommendation with the CERT C Rule Pack.

LDRA tool suite

Include Page
LDRA_V
LDRA_V

584 S

Fully implemented.

PRQA QA-C
Include Page
PRQA_V
PRQA_V
3103Fully implemented.

Related Vulnerabilities

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

Related Guidelines

Bibliography

...