ASSIGCOND.GEN
条件表达式中的赋值
ASSIGCOND.GEN 检查器可查找包含赋值表达式的条件语句。
漏洞与风险
通常,在错误地使用赋值运算符替代比较运算符的情况下,此检查器将查找语法错误。如果未更正错误,可能发生意外的程序行为。
漏洞代码示例
复制
class A{
void foo();
};
void A::foo()
{
int i = 1;
int j = 0;
if(i = j) j++;
}
在该代码示例中,Klocwork 标记了第 8 行,因为 if 语句似乎包含一个赋值。
修正代码示例 1
复制
class A{
void foo();
};
void A::foo()
{
int i = 1;
int j = 0;
if((i == j)) j++;
}
在此修正代码中,赋值运算符已由预计的比较运算符替代。
修正代码示例 2
复制
class A{
void foo();
};
void A::foo()
{
int i = 1;
int j = 0;
if((i=qq()) !=0) j++;
}
在此修正代码示例中,为使赋值语法清楚明了,已使用括号。