【发布时间】:2022-01-09 05:48:57
【问题描述】:
我在 C 项目上运行 Fortify SCA 和 Applications 21.1.1,我在以下行中收到“空指针取消引用”错误:
int parameter1 = 1;
char *parameter2;
int foo = 1;
sprintf(parameter2, "%d", foo);
pFunction(parameter1, parameter2, NULL);
在头文件中,pFunction 被声明为:
typedef int(*Function)(int a, char* b, char* c);
extern Function pFunction;
pFunction 定义位于我无权访问的外部文件中。
我很确定这是 Fortify 中的误报错误。有没有合适的解决方法?
【问题讨论】:
-
所提供的代码片段没有让我有任何理由断定 Fortify 是错误的。如果您提交 minimal reproducible example,情况可能会改变。
-
信息不足。请发帖minimal reproducible example。
-
很抱歉,但我不接受您有足够的时间关注其中一个超链接并阅读和消化链接页面上的材料。去做。如果你不明白那里的解释——而且你现在肯定不明白——那么你可以问一些具体的问题。
-
可能不相关,但这行
memset(b, "*", strlen(b));没有意义。如果你想用*字符填充缓冲区,它应该是'*',而不是"*"。如果b之前未初始化为有效字符串,strlen将不起作用。 -
问题中现在显示的代码不是 MRE,因为它不一致:
pFunction的两个声明声明了不同的、不兼容的类型。它们不相互配合,不清楚哪个应该与第一个片段中的函数调用配合使用。
标签: c initialization fortify function-call null-pointer