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