STRONG.TYPE.ASSIGN.ZERO

Assignment of zero to strong type variable

The STRONG.TYPE family of checkers detects situations in which programmer-enforced strong typing (type-defined abstract types) is broken or ignored, allowing the underlying ANSI type semantics to dominate.

The STRONG.TYPE.ASSIGN.ZERO checker finds assignments of zero to a variable of a strong type. In this rule, zero is defined as any zero constant that has not been cast to a strong type. For example, the checker considers the following to be zero:

  • 0L
  • (int)0

The checker considers the following examples not to be zero:

  • (SPEED)0
  • (SPEED*)0

Vulnerability and risk

A compiler following the ANSI standard won't report a warning for this sort of issue, as it checks only the underlying types, not the surface, or programmer-defined, types. As a result, it's possible that a logic error can occur.

Vulnerable code example

1 typedef int Weight;
2 
3 int main() {
4   Weight ElephantW;
5   ElephantW = 0; 
6   return 0;
7 }

Klocwork flags line 5, in which zero is assigned to strong type ElephantW.