UNUSED.FUNC.WARN

潜在的未使用関数の定義

潜在的未使用関数。

脆弱性とリスク

定義されているが、使用されていない関数はいくつかの影響を及ぼす可能性があります。類似した名前を持つ誤った関数が呼び出されるなど、開発において混乱を招く可能性があります。まれに、使用されない関数が最終的な実行可能ファイルに挿入され、その他の脆弱性をもたらす可能性もあります。関数が使用されないと判断された場合は、その関数を翻訳単位から削除してください。反対に、関数が他の翻訳単位から呼び出されるとわかった場合 (非スタティック関数、カスタムライブラリ関数など)、その関数のヘッダーファイルに宣言が含まれる必要があります。それ以外の場合、関数は静的関数として定義され、現在の翻訳単位内の一部のポイントで使用される必要があります。

脆弱コード例 1

コピー
  File: lib.h
  void used();
  
  File: driver.c
  #include “lib.h”
  void used() {
  }
  void unused() { //A non-static function without any declaration in a header file
  }
  int main() {
    used();
    return 0;
  }

関数 "unused()" は、呼び出されることも "lib.h" ファイルに宣言が含まれることもありません。"extern" 宣言を介して他の翻訳単位から "unused()" が呼び出される可能性は残っています。その場合、"lib.h" ファイルには対応する宣言が含まれる必要があります。Klocwork は、driver.c ファイルの 5 行目に UNUSED.FUNC.WARN を生成します。

修正コード例 1

コピー
  File: lib.h
  void used();
  void unused();
  
  File: driver.c
  #include “lib.h”
  void used() {
  }
  void unused() { //A non-static function without any declaration in a header file
  }
  int main() {
    used();
    return 0;
  }

上記のリストで、関数 "unused()" は "driver.c" 以外のファイルから呼び出される可能性を想定しているため、宣言は "lib.h" ファイルに追加されます。

脆弱コード例 2

コピー
  void foo(int x) {}
  void foo(int x, int y) {}
  
  int main() {
    foo(0, 0);
    return 0;
  }

上記で、多重定義された "foo(int)" は定義されますが、現在の翻訳単位内で使用されることはありません。Klocwork は、1 行目に UNUSED.FUNC.WARN を生成します。

修正コード例 2

コピー
  void foo(int x, int y) {}
  
  int main() {
    foo(0, 0);
    return 0;
  }

未使用関数が削除されます。

関連チェッカー