使用Polyspace代码验证程序时为假阴性

4个视图(过去30天)
蔡红军
蔡红军 2020年5月1日
评论: 蔡红军2020年5月18日
你好
我是一个对PolySpace工具感兴趣的初学者。
在Polyspace®代码验证程序的第63页™ 《入门指南》中,代码验证者说没有错误否定。
然而,由于使用Polyspace代码验证程序对NIST Juliet C/C++测试套件的一部分进行静态分析,以下CWE ID中存在误报。
  1. CWE 126(缓冲区超读)
  2. CWE 561(死人代码)
  3. CWE 674(非受控递归)
  4. CWE 835(循环与无法访问的退出条件('无限循环'))
我已经分析了代码,但我问是因为我不明白为什么会出现误报。
-CWE 561真阳性示例(代码验证程序检测到。)
无效CWE561\u失效\u代码\u返回\u之前\u代码\u 01\u错误()
{
回来
/*漏洞:“返回”后的代码*/
打印行(“你好”);
}
- CWE 561假阴性(无法检测到代码先报)的示例
静止void升降机()
{
printline(“Helperbad()”);
}
任何地方都没有对helperBad函数的调用。
1评论
马特·罗德斯
马特·罗德斯 2020年5月11日
嗨,红军,
死代码是一个非常含糊的术语。您可以在逻辑上不可与代码(用于代码谚语的主要检查)和未经配置的函数(任何不调用的代码库中的函数)。代码箴言将找到两个,没有假底片, 在为证明提供的假设范围内 .
在第二个示例中,您拥有什么 可能 如果在代码库的其他地方没有调用它,那么它可能是一个未调用的函数。而且,这个实例可能指向一个错误的行为,但是所有提供的代码实际上在逻辑上都是可访问的。
对于这种问题,如果对您很重要,您可以使用启发式搜索更好,以查找字符串文字中的所有功能调用案例。这一点的困难方面是,在不了解您的要求的情况下,不可能知道是否有意只有具有引用函数的字符串文字,或者返回要包含在字符串中的值。上下文也可能提供一些线索。在这个创意的例子中,我会质疑任何证明工具的有效性,声称它发现这是死者的代码。

登录以发表评论。

公认的答案

anirban.
anirban. 20月7日
嗨,红军,
对于您给出的两个具体示例,您必须打开检查 功能未调用 功能无法到达 .例如,用户通常对这两个检查不感兴趣,因为它们正在单位运行代码抄本,某些功能可能在一个单元中未被揭示,但最终将从另一个单元调用。因此,默认情况下会禁用这两个检查。启用它们,使用 此选项 .
有关与调优代码验证程序检查相关的所有选项,请参阅章节 检查行为 验证假设 .
4评论
蔡红军
蔡红军 2020年5月18日
你好,阿尼尔班,
对不起,我没有看到它是由未指定主要函数入口点引起的。
谢谢你善意的解释!

登录以发表评论。

更多答案(0)

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始打猎吧!