CWARN.FUNCADDR
関数の呼び出しの代わりに、関数アドレスが使用されます
CWARN.FUNCADDR チェッカーは、関数アドレスが、論理条件として、または、算術演算または論理演算のオペランドとして、想定外の方法で使用されているインスタンスを検出します。通常、このような状況は、設計者が関数の呼び出しで、丸括弧を忘れた場合に発生します。
脆弱性とリスク
このような場合、コンパイラは関数を呼び出す代わりにアドレスを使用します。アドレスは決してゼロではないため、常に true となり、予期しないプログラム動作が発生します。
脆弱コード例
コピー
int get0() { return 0; }
void test(Boolean b) {
if (get0)
return;
}
この例では、Klocwork は、get0() の意図した呼び出しが条件として使用される関数アドレスになる 3 行目にフラグを立てます。