CWARN.FUNCADDR
使用函数地址替代函数调用
CWARN.FUNCADDR 查找器可查找实例,在这种实例中,函数地址在算数或逻辑运算中意外作为逻辑条件或操作数使用。通常,在设计人员打算调用函数并且圆括号丢失时,会发生这种情况。
漏洞与风险
在这种情况下,编译器将获取地址而不是调用函数。该地址永不为 0,因此始终为 true,并会导致意外的程序行为。
漏洞代码示例
复制
int get0() { return 0; }
void test(Boolean b) {
if (get0)
return;
}
在此示例中,Klocwork 标记了第 3 行,该行中对 get0() 的预期调用成为一个用作条件的函数地址。