c - 任何 C 的静态分析器会发现 sprintf 的潜在缓冲区溢出?
问题描述
我正在尝试对以下代码运行静态代码分析器:
//cppcheck_test.c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 5
int func(const char* x)
{
char key[MAX_LEN + 1] = {0};
sprintf(key, "%s ", x);
return strlen(key);
}
int main()
{
func("12345admin12345");
return 0;
}
我尝试infer
了(来自 fb)、cppcheck 和更多。他们都没有对上面的代码给出任何错误。但是如果你运行上面的代码,它会崩溃(它应该):
$ ./a.out
*** stack smashing detected ***: terminated
Aborted
是否有任何静态分析器可以解决此类错误?还是我在寻找错误的工具?是否有任何工具/工具组可以看到此类错误并发出警告?
解决方案
推荐阅读
- ios - 获取 SwiftUI 图像视图的大小
- php - 我无法居中引导 svg 图标
- javascript - 使用纯 JavaScript 将对象数组转换为 CSV
- python - 如何舍入“浮动”对象?
- javascript - 根据 id 删除特定对象,但它从 json 中删除所有对象
- visual-studio - Gulp 错误缺少脚本:在 MVC 项目中构建
- java - 在使用 Spring Boot 进行集成测试期间使用测试数据填充数据库
- assembly - 编写 Microsoft Fastcall 64 位汇编函数
- c++ - 如何用 0x00 覆盖所有可用磁盘空间?
- google-sheets - 试图将“增长率”添加到谷歌表格