UNUSED.FUNC.WARN
潜在的未使用的函数定义
潜在的未使用的函数。
漏洞与风险
已定义但未使用的函数可能存在少量隐患。可能导致开发混淆,例如拥有与被调用的函数名称类似的函数。在极少数的情况下,未使用的函数可能还会找到其最终可执行文件(可能导致其他漏洞)的路径。如果函数被视为未使用的函数,则应将其从转换单元中移除。相反地,如果函数被认为是从其他转换单元调用的函数(非静态函数,例如自定义库函数),则其应在标头文件中具有声明。否则,该函数应被定义为静态函数并在当前转换单元的某些点处使用。
漏洞代码示例 1
复制
File: lib.h
void used();
File: driver.c
#include “lib.h”
void used() {
}
void unused() { //A non-static function without any declaration in a header file
}
int main() {
used();
return 0;
}
函数“unused()”未被调用也未在文件“lib.h”中具有声明。仍然可以通过“extern”声明从其他转换单元调用“unused()”(在此情况中,文件“lib.h”应包含对应的声明)。Klocwork 会在 driver.c 文件的第 5 行生成 UNUSED.FUNC.WARN。
修正代码示例 1
复制
File: lib.h
void used();
void unused();
File: driver.c
#include “lib.h”
void used() {
}
void unused() { //A non-static function without any declaration in a header file
}
int main() {
used();
return 0;
}
在上面的列表中,假设函数“unused()”可以从“driver.c”外部调用,从而将在“lib.h”文件中添加声明。
漏洞代码示例 2
复制
void foo(int x) {}
void foo(int x, int y) {}
int main() {
foo(0, 0);
return 0;
}
在上面的示例中,重载的“foo(int)”已定义但是从未在当前转换单元中使用。Klocwork 会在第 1 行生成 UNUSED.FUNC.WARN。