Cppcheck 静态代码分析器实际上可以检测到不太常见的警告(如 "Relative Path Traversal (CWE-23)" 或"Buffer Under-read(CWE-127)")吗



我正在研究Juliet Test Suite,我正在对这些代码应用一些静态分析器来生成警告。运行cppcheck后,我发现它无法检测到manifest.xml文件(元数据)中提到的许多错误。我是否未能正常运行此软件或cppcheck无法检测到这些警告/错误?你以前面对过他们吗?

到目前为止,我在Juliet Test Suite上使用cppchecker。我将在上面使用Clang,Veracode和Flawfinder,因为我第一次尝试失败了。

这是我使用的命令。

cppcheck --enable=all -q --xml -I testcasesupport/ testcases/ 2>out.xml

在给定的元数据manifest.xml文件中,一些示例错误是 -

<?xml version="1.0" encoding="utf-8"?>
<container>
<testcase>
<file path="CWE127_Buffer_Underread__CWE839_connect_socket_01.c">
<flaw line="111" name="CWE-127: Buffer Under-read"/>
</file>
</testcase>
<testcase>
<file path="CWE114_Process_Control__w32_char_connect_socket_03.c">
<flaw line="124" name="CWE-114: Process Control"/>
</file>
</testcase>
.
.
.
</container>

但是我由cppchecker生成的output.xml文件没有大多数这些错误。output.xml文件中的大多数错误属于"CWE-398"错误,这是一个样式错误。但是 cppcheck 可以检测常见错误,例如"数组越界"或类似错误。

是不是cppcheck没有涵盖Juliet Test Suite的这些不常见错误?如果是,其他静态分析器可以正确检测它们吗?

我是 Cppcheck 开发人员。

我是否未能正常运行此软件或cppcheck无法检测到这些警告/错误?你以前面对过他们吗?

要了解 CWE Cppcheck 可以检测到的内容,您可以使用以下命令:

./cppcheck --errorlist

在输出中查找"cwe"。

是不是cppcheck没有涵盖Juliet Test Suite的这些不常见错误?如果是,其他静态分析器可以正确检测它们吗?

我不记得朱丽叶测试套件涵盖哪些 CWE,但 Cppcheck 并未涵盖所有 CWE。而且我认为没有任何工具可以涵盖所有CWE。

CPPCoect相当简单,远非完美。

我同意。我相信KISS原则。Cppcheck远非完美。

但是,除了cppcheck之外,还可以尝试叮当声和各种消毒剂(asan,tsan,ubsan等)。

我同意。最佳做法是使用多种工具。即使您使用最昂贵的工具,这也是最佳实践(例如,NASA使用各种昂贵的工具以及Cppcheck,因为Cppcheck检测到一些未检测到的问题,反之亦然)。

我正在研究朱丽叶测试套件

在我看来,朱丽叶测试套件制作精良。代码很奇怪且不切实际。您的结论仅具有学术意义。在实际代码上运行该工具。

我建议你扫描一些重要的开源项目。Cppcheck 可以在 Debian 中找到成百上千的错误(未定义的行为),该软件安装在数百万台计算机上。最新的稳定 Linux 的状态不是那么好。:-(

cpipcheck 相当简单,远非完美。它有时可以检测到一些问题。但并非所有问题都存在。这或多或少适用于任何工具。但是,除了cppcheck之外,还可以尝试叮当声和各种消毒剂(asan,tsan,ubsan等)。

叮叮当当整洁非常好且免费(请参阅检查列表)。

Coverity是我用过的最好的,但它相当昂贵。

对于运行时检查,地址清理器,线程清理器和未定义行为清理器都很棒。

当然,始终从编译器启用尽可能多的警告,并在启用和不使用优化的情况下进行构建以捕获不同的错误。

相关内容

最新更新