EN JP CN

STRONG.TYPE.ASSIGN.ZERO

STRONG.TYPE.ASSIGN.ZERO

強い型の変数へのゼロの割り当て

チェッカーの STRONG.TYPE ファミリーは、プログラマーが行う強い型指定 (型が定義された抽象型) が違反または無視され、基礎となる ANSI 型セマンティックスが優先される状況を検出します。

STRONG.TYPE.ASSIGN.ZERO チェッカーは、強い型の変数へのゼロの代入を検出します。この規則では、ゼロは、強い型にキャストされたことがない任意のゼロ定数と定義されます。たとえば、チェッカーは次のものをゼロとみなします。

  • 0L
  • (int)0

チェッカーは、次の例はゼロとみなしません。

  • (SPEED)0
  • (SPEED*)0

脆弱性とリスク

ANSI 規格対応のコンパイラは、表面の (プログラマーが定義する) 型ではなく、基底型をチェックするだけであるため、このような指摘に関する警告を報告しません。この結果、論理エラーが発生する可能性があります。

脆弱コード例

1 typedef int Weight;
2 
3 int main() {
4   Weight ElephantW;
5   ElephantW = 0; 
6   return 0;
7 }

Klocwork 強い型 ElephantW にゼロが代入される 5 行目にフラグを立てます。