PRECISION.LOSS.CALL

関数呼び出し中の精度の損失

PRECISION.LOSS チェッカーは、関数呼び出し中のもっと小さいデータ型に対する暗黙的なキャストによってデータ精度の損失が起こる可能性のあるインスタンスを検出します。

脆弱性とリスク

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

軽減と防止

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

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

脆弱コード例

コピー
  void foo(unsigned char v);
  void test(unsigned long data){
    foo(data);   
  }

Klocwork は、unsigned long が unsigned char に変換されている 3 行目にフラグを立てます。

関連チェッカー

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

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