CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN

CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN チェッカーは、グローバル変数が 1 つの関数のみで使用される場合に、欠陥を報告します。

脆弱性とリスク

変数を必要以上に広い可視性で定義すると、変数が誤って使用される機会が増えます。

軽減と防止

必要なすべての参照が可能である範囲で、変数のスコープまたは可視性をできる限り制限します。たとえば、変数が 1 つの関数のみに使用されている場合、その変数をローカル変数として宣言できます。

脆弱コード例

コピー
  unsigned int a = 0;      // CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN //
  void f0()
  {
      if (a++ > 10) return;
      /* … */
  }
  void f1()
  {
      /* … */
 }

この例では、変数 'a' はグローバル変数として宣言されていますが、関数 f0() のみで使用されています。

修正コード例

コピー
  void f0()
  {
      static unsigned int a = 0; 
      if (a++ > 10) return;
      /* … */
  }
  void f1()
  {
      /* … */
 }

修正された例では、関数のスコープ内で変数 'a' を宣言しています。static キーワードを追加することで、f0() が呼び出されるたびに変数はリセットされません。

関連チェッカー