PORTING.CAST.PTR
指针和非指针类型之间的转换
PORTING 检查器会标识那些可能依赖于不同编译器中特定实施细则的代码。PORTING.CAST.PTR 检查器会搜索指针到非指针或相反方向的类型转换。
漏洞与风险
取决于平台和使用的体系结构,指针与整型(比如无符号整数)可能代表同样数目的位数,也可能代表不同的数目,因此,指针类型到非指针类型的转换被视为是不安全的操作,反之亦然。
缓解与预防
请勿尝试在整型中存储指针值。如果指针指向的类型确实必须隐藏,请使用虚值指针来代替。
漏洞代码示例
复制
extern char* getData();
void foo()
{
char* ptr = getData();
unsigned int ptrValue = (unsigned int)ptr;
printf("Got data from: %d\n", ptrValue);
}
这种指针类型与整型的交换在某些平台上肯定会失败,因此应在所有平台上都将其视为不安全。
修正代码示例
复制
extern char* getData();
void foo()
{
char* ptr = getData();
void* ptrValue = (void*)ptr;
printf("Got data from: %p\n", ptrValue);
}
在经修复的示例中,使用了虚值指针来代替不安全的表达式。