当使用Polyspace代码验证时,错误否定

4次浏览(最近30天)
HONGJUN崔
HONGJUN崔 2020年5月1日
评论道: HONGJUN崔2020年5月18日
你好。
我是一个对Polyspace工具感兴趣的初学者。
在Polyspace®代码验证器™入门指南的第63页,代码验证器说没有假阴性。
然而,通过使用Polyspace Code Prover对NIST Juliet Test Suite for C / c++的一部分进行静态分析,发现在以下CWE ID中存在假阴性。
  1. CWE 126(缓冲区过载)
  2. CWE 561(失效代码)
  3. CWE 674(非受控递归)
  4. CWE 835(无法到达退出条件的循环(“无限循环”))
我分析了代码,但我还是问了因为我不明白为什么会出现假阴性。
- CWE 561 True Positive(代码验证器检测到它)的示例。
空白CWE561_Dead_Code__return_before_code_01_bad ()
返回;
/ *缺陷:代码后的'return' * /
printLine(“Hello”);
- CWE 561假阴性(无法检测到代码验证器)的例子
static void helperBad ()
printLine(“helperBad () ");
任何地方都没有调用helperBad函数。
1评论
马特·罗兹
马特·罗兹 2020年5月11日
嗨Hongjun,
死代码是一个非常模棱两可的术语。您可以有逻辑上不可访问的代码(这是代码验证器的主要检查)和未调用的函数(代码库中没有被任何东西调用的函数)。代码验证器会找到两者,没有假阴性, 在为证明所提供的假设范围内
在第二个例子中 可能 如果它在代码库中没有被调用,则它是一个未被调用的函数。而且,这个实例可能指向一个不正确的行为,但是所提供的所有代码实际上在逻辑上是可访问的。
对于这类问题,如果它对您很重要,那么您最好使用启发式搜索,以字符串字面量查找所有函数调用的情况。这样做的困难之处在于,在不知道您的需求的情况下,就不可能知道是故意让一个字符串字面量引用一个函数,还是让返回的值包含在字符串中。背景也可能提供一些线索。在这个人为的例子中,我将质疑任何声称发现这是死代码的证明工具的有效性。

登录评论。

接受的答案

Anirban
Anirban 2020年5月7日
嗨Hongjun,
对于你给出的两个具体例子,你必须打开检查 函数不叫 函数不可以 .用户通常对这两种检查不感兴趣,例如,因为他们正在单元上运行代码验证程序,而一些函数可能在单元内未被调用,但最终会从另一个单元调用。这两个检查默认是禁用的。要启用它们,请使用它们 这个选项
有关调优代码验证器检查的所有选项,请参阅本节 检查行为 验证假设
4评论
HONGJUN崔
HONGJUN崔 2020年5月18日
嗨Anirban,
抱歉,我没有看到这是由于没有指定主函数入口点造成的。
谢谢您的解释!

登录评论。

更多的答案(0)

下载188bet金宝搏


释放

R2020a

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!