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() が呼び出されるたびに変数はリセットされません。
関連チェッカー
- CXX.ID_VIS.GLOBAL_VARIABLE.STATIC
- MISRA.VAR.MIN.VIS