STRONG.TYPE.JOIN.CONST
比较强类型与常数
STRONG.TYPE 系列检查器会检测违反或忽略程序员强制实施的强类型指定(类型定义的抽象类型),从而导致基础 ANSI 类型语义占据主导地位的情况。
STRONG.TYPE.JOIN.CONST 检查器查找那些通过二进制运算符来比较强类型的值与常数的实例。在此规则中,常数可以是表单 &v 的整数常数、引用字符串或表达式(其中 v 是静态变量或自动变量)。
漏洞与风险
遵循 ANSI 标准的编译器不会针对此类问题生成警告,因为此编译器仅检查基础类型,不会检查表面类型(即程序员定义的类型)。所以可能会出现逻辑错误。
漏洞代码示例
复制
typedef int Weight;
int main() {
Weight w;
if (w == 321) ;
return 0;
}
Klocwork 标记了第 5 行,指出通过二进制运算符 == 来比较强类型的值 w 与常数。
修正代码示例
复制
typedef int Weight;
int main() {
Weight w;
if (w == (Weight) 321) ;
return 0;
}
在经修正的代码中,比较在两个强类型 Weight 的值之间进行。