UNREACH.RETURN
无法访问的 return 语句
UNREACH.RETURN 检查器会查找代码中无法访问的 return 语句(所有不能使用的 return)。UNREACH.RETURN 的一般用途是将无法访问的 return 与其他类型的无法访问的代码相分离。当您知道不重要的代码(特别是生成的代码)中存在无法访问的 return 语句,但仍想使用“UNREACH.GEN”检查更普遍的无法访问的代码时,关闭 UNREACH.RETURN 检查器将有所帮助。
漏洞与风险
无法访问的 return 语句会在代码维护和/或代码评审时引起混淆。在某些边界情况下,无法访问的 return 语句也会导致意外的程序行为。
漏洞代码示例
复制
void foo(int *p)
{
switch (*p) {
case 0:
case 1:
if (*p == 0) {
++(*p);
return;
} else if (*p == 1){
--(*p);
return;
}
return;
default:
(*p) = 1 - (*p);
}
}
Klocwork 生成关于无法访问的 void return 语句的报告,指出无法访问第 13 行的 return 语句。显然,在这种情况下,该行为是良性的,一般会导致审阅者关闭该检查器(特别是当模式由代码生成器系统发出时)。
相关检查器
扩展
此检查器可进行扩展。有关详情,请参阅调整 C/C++ 分析。