CWARN.FUNCADDR

使用函数地址替代函数调用

CWARN.FUNCADDR 查找器可查找实例,在这种实例中,函数地址在算数或逻辑运算中意外作为逻辑条件或操作数使用。通常,在设计人员打算调用函数并且圆括号丢失时,会发生这种情况。

漏洞与风险

在这种情况下,编译器将获取地址而不是调用函数。该地址永不为 0,因此始终为 true,并会导致意外的程序行为。

漏洞代码示例

复制
  int get0() { return 0; }
   void test(Boolean b) {
      if (get0)                                
          return;
  }

在此示例中,Klocwork 标记了第 3 行,该行中对 get0() 的预期调用成为一个用作条件的函数地址。