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