UNINIT.STACK.ARRAY.MUST

初期化されていない配列

UNINIT.STACK.ARRAY.MUST チェッカーは、メモリがまだ初期化されていないときにローカル配列のメモリが読み取られるインスタンスを検出します。

脆弱性とリスク

C++ では、スタック変数はデフォルトで初期化されていません。通常、スタックメモリの現在の内容の、ランダムなジャンクデータがスタック変数に含まれます。初期化されていないデータには、プログラムフローを意図しない方法で変更し、セキュリティに影響を及ぼす可能性のある値が含まれていることがあります。

軽減と防止

初期化の問題を回避するには、最初に使用する前に、すべての変数およびリソースが明示的に初期化されていることを確認します。複雑な条件の状況についてはメモをとり、すべてのパスに初期化が含まれていることを確認します。

脆弱コード例

コピー
  extern void ifoo(int);
  
  void uninit_array_must() {
      int a[10];
      ifoo(a[1]);
  }

Klocwork は、初期化されていない配列 'a' のメモリが使用されることを示す 5 行目にフラグを立てます。