PRECISION.LOSS.INIT

初期化中の精度の損失

PRECISION.LOSS.INIT 欠陥は、初期化中により小さいデータ型への暗黙的なキャストによって精度 (データ) の損失が引き起こされる可能性がある場合に報告されます。

脆弱性とリスク

詳細な環境によっては、インスタンスのこの状況は、バッファオーバーフローになる場合、悪用される可能性があります。

軽減と防止

精度の損失キャストが意図的なら、キャスト元を適切なビットマスクでマスクする必要があります。例:

コピー
char c = (i & 0xFF);

脆弱コード例

コピー
void foo(int i) {
    char c = i; // PRECISION.LOSS.INIT
}

Klocwork は、int が char に変換される 2 行目で PRECISION.LOSS.INIT 欠陥のフラグを立てます。

修正コード例

コピー
void foo(int i) {
    char c = (i & 0xFF);
}

キャストのソースが適切なビットマスクでマスクされているため、Klocwork は 2 行目で PRECISION.LOSS.INIT 欠陥のフラグを立てなくなります。

関連チェッカー

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。