STRONG.TYPE.JOIN.OTHER

使用算术运算符组合不同的强类型

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

STRONG.TYPE.JOIN.OTHER 检查器查找那些通过二进制运算符来比较两个强类型值的实例。在此规则中,二进制运算符定义为:

  • +、-、*、/ 和 % 这五个算术运算符之一
  • |、& 和 ^ 这三个按位运算符之一

漏洞与风险

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

漏洞代码示例

复制
 typedef int Count;
 typedef int Weight;

 int main() {
   Weight w, w1;
   Count c;
   w1 = w + c ; 
   return 0;
 }

Klocwork 标记了第 7 行,指出使用 + 运算符将不同的强类型 w 和 c 的值合并。