UNINIT.STACK.MIGHT

初期化されていない変数の可能性があります

UNINIT.STACK.MIGHT チェッカーは、まだ初期化されていない可能性のあるときに非クラスタイプのローカル変数が読み取られるインスタンスを検出します。

脆弱性とリスク

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

軽減と防止

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

脆弱コード例

コピー
  int foo(int t) {
    int x;
    if (t > 16) {
      x = 1;
    } else if (t > 8) {
      x = 2;
    }
    return x + 1;
  }

Klocwork は、まだ初期化されていない可能性があるときに、変数 'x' の値が使用される可能性があることを示す 8 行目にフラグを立てます。