CERT.FILE_PTR.DEREF.RETURN

不应取消引用(由函数返回的)指向 FILE 对象的指针。

漏洞与风险

取消引用由函数返回的指向 FILE 对象的指针,可能会导致意外的行为。

缓解与预防

不要取消引用由函数返回的指向 FILE 对象的指针。

漏洞代码示例

复制
   #include <cstring>
  
   typedef struct __sFILE {
       int pos;
   } FILE;
  
   FILE *getFile() {
       FILE *p;
       return p;
  }
  
  static int i = 1;
  int *getInt() {
      return &i;
  }
  
  void func9_function_return ( void )
  {
      int x = getFile()->pos;           
      FILE file1 = *getFile();          
      char chr = *((char*)getFile());   
  }

在此不符合要求的示例中,Klocwork 在第 19 行、第 20 行和第 21 行报告了 CERT.FILE_PTR.DEREF.RETURN 缺陷,因为取消引用指向函数返回的 FILE 对象的指针,可能会导致意外的行为。

修正代码示例

复制
#include <cstring>

typedef struct __sFILE {
    int pos;
} FILE;

FILE *getFile() {
    FILE *p;
    return p;
}

static int i = 1;
int *getInt() {
    return &i;
}

void func9_function_return ( void )
{
       FILE file2 = *((FILE*)getInt());           
}

以上示例符合要求,因为所有代码都未取消引用由函数返回的指向 FILE 对象的指针。

相关检查器

  • MISRA.FILE_PTR.DEREF.RETURN.2012

外部指导