Fortify扫描C项目出现Null Dereference误报的可行解决方案咨询
Fortify SCA 空指针解引用误报处理方案
告警触发原因
Fortify 21.1.1扫描时检测到代码中parameter2未显式初始化就传入sprintf执行写入操作,默认判定存在空指针解引用风险。你已确认该告警为误报,可参考以下处理方案:
方案1:添加Fortify专用屏蔽注释
在触发告警的代码行上方添加Fortify可识别的注释直接屏蔽该条误报,不会影响业务逻辑运行:/* FORTIFY_FALSE_POSITIVE: parameter2已在外部逻辑完成合法内存分配,无空指针风险 */ sprintf(parameter2, "%d", foo);也可替换为对应扫描规则的ID注释,实现更精准的单条告警屏蔽。
方案2:新增防御性校验逻辑
不改动核心业务逻辑的前提下,增加空指针校验分支,消除Fortify的检测判定,同时提升代码健壮性:char *parameter2; // 此处可添加注释说明parameter2的合法赋值逻辑由外部模块保证 if (parameter2 == NULL) { // 按需添加容错逻辑,比如返回错误码、走异常分支即可 return -1; } sprintf(parameter2, "%d", foo);方案3:在扫描审计端标记误报
无需修改业务代码,直接在Fortify审计控制台中将该条告警标记为「False Positive(误报)」并填写说明,后续扫描时该条记录会被自动过滤。方案4:显式分配内存(业务逻辑允许的前提下)
如果业务逻辑允许自行管理parameter2的内存,直接分配足够空间从根源消除告警:// int类型转字符串最长占用11字节+1位结束符 char *parameter2 = malloc(12); if (parameter2 == NULL) { // 处理内存分配失败逻辑 return -1; } sprintf(parameter2, "%d", foo); // 后续业务逻辑执行完成后记得释放内存避免泄漏 free(parameter2);
内容的提问来源于stack exchange,提问作者Leonardo Araujo
相关产品推荐
相关产品推荐

