Cppcheck 静态代码分析器实际上可以检测到不太常见的警告(如 "Relative Path Traversal (CWE-23)" 或"Buffer Under-read(CWE-127)")吗
Can Cppcheck static code analyzer actually detect not very common warnings like "Relative Path Traversal (CWE-23)" or "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是我用过的最好的,但它相当昂贵。
对于运行时检查,地址清理器,线程清理器和未定义行为清理器都很棒。
当然,始终从编译器启用尽可能多的警告,并在启用和不使用优化的情况下进行构建以捕获不同的错误。
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何强制嵌入式python使用与命令行相同的sys.path?
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- [LLVM-9 clang-9 OSX]: std::filesystem::path unrecognized
- 我可以对"int 文件 = open(path, flag);"做点什么吗?
- "#include <path/to/header>"指令的含义(如"#include <loki/Functor.h>")
- Cppcheck 静态代码分析器实际上可以检测到不太常见的警告(如 "Relative Path Traversal (CWE-23)" 或"Buffer Under-read(CWE-127)")吗
- 如何处理异步函数中的异常UWP应用程序getFileFrompathAsync(path);
- 使用std :: filesystem :: path中的double
- 使用谷歌测试编译程序时"g++ is not a full path"
- c++ std::bad_alloc on std::filesystem::path append
- CodeLite opencv path
- 安装 gRPC : ld: 警告: 找不到选项 '-L/<path>/grpc/libs/opt/c-ares' 的目录
- 构建 vcxproj 文件给我一个无信息的错误"The system cannot find the path specified"
- 如何解决访问不同功能的"nonstatic member reference must be relative to a specific object"
- 如何将 g++ 从 MinGW 添加到 PATH
- 如何从 C++ 中的系统 PATH 获取绝对文件路径
- Orocos LTTng 符号查找错误:/path/to/liborocos-rtt-traces-gnulinux.s
- 更改狭窄的字符串编码或丢失std :: filesystem :: path :: imbue
- C++ ofstream write_to_log.open ( " relative path + array" );