CXX.ID_VIS.GLOBAL_VARIABLE.STATIC

CXX.ID_VIS.GLOBAL_VARIABLE.STATIC チェッカーは、静的グローバル変数が 1 つの関数のみで使用されるか、読み取られるか、作成込まれる場合に、欠陥を報告します。

脆弱性とリスク

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

軽減と防止

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

脆弱コード例

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

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

修正コード例

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

関連チェッカー