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) {} 
  }

在此修正代码中,为使赋值语法清楚明了,已使用括号。

相关检查器

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。