PORTING.CAST.SIZE
サイズに互換性がない可能性がある型への式のキャスト
PORTING チェッカーは、異なるコンパイラ内で特定の実装詳細に依存する可能性があるコードを識別します。PORTING.CAST.SIZE チェッカーは、サイズが異なる可能性がある型に式がキャストされる状況を検出します。
脆弱性とリスク
特定のアーキテクチャのデータモデル用に作成されたコードは、新しいアーキテクチャで新しいデータモデルが使用される場合、移植が非常に困難になることがあります。たとえば、32 ビットと 64 ビットのデータモデル間でコードを移植する場合、新しいデータモデルでは、通常、'int' は 32 ビット値として使用されますが、'long' は 64 ビット値として使用されます。そのため、32 ビットデータモデルにおいて機能していたデータ型サイズで想定される等価性が実現されません。
軽減と防止
特定のコンパイラのデータモデルまたは基礎となるアーキテクチャ実装から抽象化されるコードベースのデータモデルを定義するのがベストプラクティスです。一般的な多くのコーディング基準では、すべての型でこのような抽象化が実現されます。
脆弱コード例
コピー
void foo()
{
int i = 32;
long l;
l = (long)i; // PORTING.CAST.SIZE
i = (int)l; // PORTING.CAST.SIZE
}
このコードは、PORTING.CAST.SIZE エラーが発生する 2 つの例を示しています。
関連チェッカー
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。