CXX.BITOP.NON_CONST_OPERAND
位运算符只能应用于常数。
如果常数表达式未用作位运算符的操作数,此检查器就会报告缺陷。
漏洞与风险
在非常数表达式上执行位运算可能会导致意料之外的结果。
漏洞代码示例
复制
void func(int var1, int var2)
{
int var4 = var1 | var2;
int var5 = var1 & var2;
}
在以上示例中,第 3 行和第 4 行不符合要求,因为其将位运算符应用于非常数变量。Klocwork 在第 3 行和第 4 行报告 CXX.BITOP.NON_CONST_OPERAND 缺陷,指出“位运算符只能应用于常数。”
修正代码示例
复制
void func(int var1, int var2)
{
int var4 = 5 | 10;
int var5 = 1 & 3;
}
在修正代码示例中,Klocwork 不再于第 3 行和第 4 行报告 CXX.BITOP.NON_CONST_OPERAND 缺陷。