You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:06:03