Versions Compared

Key

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

...

Tool

Version

Checker

Description

Compass/ROSE

  

Could be configured to catch violations of this rule. The way to catch the noncompliant code example is to first hunt for example code that follows this pattern:

   for (LPWSTR pwszTemp = pwszPath + 2; *pwszTemp != L'\\';
*pwszTemp++;)

In particular, the iteration variable is a pointer, it gets incremented, and the loop condition does not set an upper bound on the pointer. Once this case is handled, we can handle cases like the real noncompliant code example, which is effectively the same semantics, just different syntax. 

Coverity

Include Page
Coverity_V
Coverity_V

ARRAY_VS_SINGLETON

NEGATIVE_RETURNS

OVERRUN_STATIC OVERRUN_DYNAMIC

Can detect the access of memory past the end of a memory buffer/array.

Coverity

include

Coverity_VCoverity_V

NEGATIVE_RETURNS

Can detect when the loop bound may become negative.Coverity

Include Page
Coverity_VCoverity_V

OVERRUN_STATIC
OVERRUN_DYNAMIC

Can detect the out-of-bound read/write to array allocated statically or dynamically.

Klocwork

Include Page
Klocwork_V
Klocwork_V

ABV.ITERATOR SV.TAINTED.LOOP_BOUND

 
 LDRA tool suite 
Include Page
LDRA_V
LDRA_V
 

47 S
476 S
64 X
68 X
69 X

 Partially implemented.
PRQA QA-C
Include Page
PRQA_V
PRQA_V
3680
3681
3682
3683
3685 (U)
3686
3688
3689 (U)
3690
3692
Partially implemented.

...

ISO/IEC TR 24772Boundary beginning violation [XYX]
Wrap-around error [XYY]
Unchecked array indexing [XYZ]
ISO/IEC TS 17961 (Draft)Forming or using out-of-bounds pointers or array subscripts [invptr]
MITRE CWECWE-119, Failure to constrain operations within the bounds of a memory buffer
CWE-121, Stack-based buffer overflow
CWE-122, Heap-based buffer overflow
CWE-129, Unchecked array indexing
CWE-788, Access of memory location after end of buffer
CWE-805, Buffer access with incorrect length value

...