首页 > 解决方案 > 任何 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

是否有任何静态分析器可以解决此类错误?还是我在寻找错误的工具?是否有任何工具/工具组可以看到此类错误并发出警告?

标签: cstatic-analysiscppcheck

解决方案


推荐阅读