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

外部指导