UNUSED.FUNC.STL_EMPTY
忽略 STL 对象 empty() 方法的返回值
如果忽略调用返回的值,则 UNUSED.FUNC.STL_EMPTY 检查器会对调用实例进行检测,并向标准 C++ 容器类的 empty() 方法报告。
漏洞与风险
标准库中的 C++ 容器通常会实施两种不同的方法:clear() 和 empty()。clear() 方法可清除容器的内容;empty() 方法可检查容器中是否至少包含一个元素。如果意外混淆这两种方法,则可能会导致严重且难以发现的算法 bug。empty() 方法会返回一个布尔值,用来存储检查的结果。忽略此值的做法很可疑,并且表明在选择要调用的方法名称时可能存在错误。
漏洞代码示例
在以下代码中,程序员原本想要清除容器的内容。然而,他们调用了 empty() 方法来检查容器是否为空。
复制
void foo(std::vector<MyType>& v)
{
/* ...*/
v.empty(); // return value is ignored, indicating a logical mistake
}
在此示例中,Klocwork 将表达式 v.empty() 报告为 UNUSED.FUNC.STL_EMPTY 缺陷。