CERT.FILE_PTR.DEREF.CAST

オブジェクトは FILE ポインターにキャストされており、これを逆参照してはなりません。

脆弱性とリスク

FILE ポインターにキャストされているオブジェクトを逆参照すると、予期しない動作が発生する可能性があります。

軽減と防止

FILE ポインターにキャストされているオブジェクトを逆参照しないでください。

脆弱コード例

コピー
   #include <iostream>

   typedef FILE file4;
   typedef file4 file3;
   typedef file3 file2;
   typedef file2 file;
  
   #define FILE_ALIAS FILE
  
  void func13_cast_to_file_pointer(void *p)
  {
     FILE file_a;
     file_a = *((FILE *) p);        
     file_a = *((file *) p);        
     file_a = *((FILE_ALIAS *) p);
  }

この非準拠の例では、Klocwork は 13、14、15 行目で CERT.FILE_PTR.DEREF.CAST の欠陥を報告します。これは、FILE ポインターにキャストされているオブジェクトを逆参照しており、予期しない動作が発生する可能性があるためです。

修正コード例

コピー
   #include <iostream>
  
   typedef FILE file4;
   typedef file4 file3;
   typedef file3 file2;
   typedef file2 file;
  
   #define FILE_ALIAS FILE

  void func13_cast_to_file_pointer (void *p)
  {
      FILE *file_a;
      file_a = ((FILE *) p);                 
      file_a = ((file *) p);                   
      file_a = ((FILE_ALIAS *) p);     
  }

上記の例は、File ポインターにキャストされているオブジェクトのアドレスを使用しているため、準拠の例となっています。

関連チェッカー

  • MISRA.FILE_PTR.DEREF.CAST.2012

外部参考資料