EN JP CN

CWARN.FUNCADDR

CWARN.FUNCADDR

関数の呼び出しの代わりに、関数アドレスが使用されます

CWARN.FUNCADDR チェッカーは、関数アドレスが、論理条件として、または、算術演算または論理演算のオペランドとして、想定外の方法で使用されているインスタンスを検出します。通常、このような状況は、設計者が関数の呼び出しで、丸括弧を忘れた場合に発生します。

脆弱性とリスク

このような場合、コンパイラは関数を呼び出す代わりにアドレスを使用します。アドレスは決してゼロではないため、常に true となり、予期しないプログラム動作が発生します。

脆弱コード例

1  int get0() { return 0; }
 
2  void test(Boolean b) {
3      if (get0)                                
4          return;
5  }

この例では、Klocwork は、get0() の意図した呼び出しが条件として使用される関数アドレスになる 3 行目にフラグを立てます。