STRONG.TYPE.ASSIGN.ZERO

将零值赋予强类型变量

STRONG.TYPE 系列检查器会检测违反或忽略程序员强制实施的强类型指定(类型定义的抽象类型),从而导致基础 ANSI 类型语义占据主导地位的情况。

STRONG.TYPE.ASSIGN.ZERO 查找为强类型的变量赋予零值的情况。在此规则中,零值被定义为任何没有转换为强类型的零常数。例如,检查器将以下内容视为零值:

  • 0L
  • (int)0

检查器不会将以下示例视为零值:

  • (SPEED)0
  • (SPEED*)0

漏洞与风险

遵循 ANSI 标准的编译器不会针对此类问题生成警告,因为此编译器仅检查基础类型,不会检查表面类型(即程序员定义的类型)。所以可能会出现逻辑错误。

漏洞代码示例

复制
 typedef int Weight;
 
 int main() {
   Weight ElephantW;
   ElephantW = 0; 
   return 0;
 }

Klocwork 标记了第 5 行,该行将零值赋予强类型 ElephantW。