EN JP CN

PRECISION.LOSS.CALL

PRECISION.LOSS.CALL

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

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

脆弱性とリスク

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

軽減と防止

精度の損失キャストが意図的なら、キャスト元を適切なビットマスクでマスクする必要があります。たとえば、次のようになります。

char c = (i & 0xFF);

脆弱コード例

1  void foo(unsigned char v);
2  void test(unsigned long data){
3    foo(data);   
4  }

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

関連チェッカー