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++; 
  }

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

相关检查器

安全培训

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