UNREACH.SIZEOF

'sizeof' に対する条件が原因の到達不能コード

UNREACH.SIZEOF チェッカーは、コードのコンパイル時に対象のアーキテクチャで常に false になるデータ型 ('sizeof' キーワードによって計算される) のサイズに対する条件によって保護されるため、決して実行されないコードを探します。UNREACH.SIZEOF の一般的な使用法は、アーキテクチャ依存の 'sizeof' に対する条件が原因の到達不能なコードを他のタイプの到達不能コードから切り離すことです。使用されるデータ型のサイズに依存する到達不能コードになると予想される場合でも、一般に到達不能コードをさらに UNREACH.GEN でチェックするときは、UNREACH.SIZEOF チェッカーを無効にできると便利です。

脆弱性とリスク

'sizeof' に対する条件が原因の到達不能コードは、コードのメンテナンスやレビュー時に混乱を招く可能性があります。

脆弱コード例

コピー
 int get_ptr_size(void* ptr)
 {
   int x = 0;
   switch (sizeof(ptr)) {
   case 4
     x = 4;
     break;
   case 8
     x = 8;
    break;
  default
    x = 16;
    break;
  }
  return x;
 }

Klocwork は一部のケースでは決して到達しない場合もあることを示す到達不能コードのレポートを生成します。このレポートで報告されるケースは、対象のアーキテクチャによって異なります。たとえば、対象のアーキテクチャのポインターサイズが 32 ビット (4 バイト) である場合、case 4 のみが到達可能なケースとなります。この場合、case 8 (9 行目) の欠陥が報告されます。このシナリオでは明らかに、動作は良性であるため、レビュー担当者はこのチェッカーを無効にするのが一般的です (特に、異なるアーキテクチャにコンパイルされることを意図したコードの場合)。

関連チェッカー

拡張機能

このチェッカーは機能を拡張できません。