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