UNREACH.SIZEOF
因“sizeof”上的条件造成的不可访问的代码
UNREACH.SIZEOF 检查器会查找永远不会执行的代码,因为该代码由数据类型大小(通过 sizeof 关键字计算得出)上的条件保护,当编译代码时,该条件在目标体系结构上始终为 false。通常,UNREACH.SIZEOF 用于将因体系结构相关的 sizeof 上的条件导致的无法访问代码与其他类型的无法访问代码分离。如果预期存在依赖于所使用的数据类型大小的不可访问代码,但是您仍然想要使用 UNREACH.GEN 检查更普遍的无法访问代码,则关闭 UNREACH.SIZEOF 检查器将有帮助。
漏洞与风险
因 sizeof 上的条件导致的不可访问代码会在代码维护和/或代码评审时引起混淆。
漏洞代码示例
复制
int get_ptr_size(void* ptr)
{
int x = 0;
switch (sizeof(ptr)) {
case 4:
x = 4;
break;
case 8:
x = 8;
break;
default:
x = 16;
break;
}
return x;
}
Klocwork 会生成无法访问的代码报告,指明某些情况从未实现过。报告的情况取决于目标体系结构。例如,如果目标体系结构中的指针大小为 32 位(4 个字节),则情况 4 仅为可实现的情况。之后,将针对情况 8(第 9 行)报告缺陷。显然,在此场景中,该行为是良性的,一般会导致审阅者关闭该检查器(特别是当打算针对不同体系结构编译代码时)。
相关检查器
扩展
此检查器无法进行扩展。