已关闭
【缺陷报告】空指针解引用 - 文件test_geir_ffn_worker_batching.cpp - 函数WriteDataToFile - 行号138 #4773
zhangjunkai9创建于  8月31日关闭于  19 天前
zhangjunkai9
8月31日 创建

缺陷信息

缺陷类型nullptrDeref (空指针解引用)
函数WriteDataToFile
文件ffn/ffn_worker_batching/examples/test_geir_ffn_worker_batching.cpp
行号138
置信度90%
分析模型maas-glm-5.1-zhipu

缺陷描述

函数 WriteDataToFile 在第 137 行调用 fopen 打开文件,fopen 在失败时(如路径不存在、权限不足)返回 NULL。代码未对 fp 做空指针校验,第 138 行 fwrite(inputData, ..., fp) 使用空 fp 指针,导致空指针解引用(未定义行为/崩溃)。

同类问题

        {
          "file": "ffn/swin_attention_ffn/examples/test_geir_swin_attention_ffn.cpp",
          "func": "WriteDataToFile",
          "line": 177,
          "description": "函数 WriteDataToFile 在第 176 行调用 fopen 打开文件,fopen 失败时返回 NULL。代码未对 fp 做空指针校验,第 177 行 fwrite(inputData, ..., fp) 使用空 fp 指针,导致空指针解引用。"
        }

事实核查

核查1(模式成立):第137行 fp = fopen(bin_file.c_str(), "w") 调用 fopen,fopen 失败时返回 NULL;

第138行 fwrite(inputData, sizeof(uint8_t), data_size, fp) 直接使用未校验的 fp 指针,空指针解引用模式属实。

核查2(无有效防护):第137-138行之间无任何空指针校验。

核查3(函数可达):WriteDataToFile 在同文件 main 函数中被调用(第266行和第277行,分别在输入/输出循环中),函数可达。

核查4(触发可满足):fopen 失败是现实场景——路径不可写、权限不足、磁盘满等均可导致 fopen 返回 NULL;

文件路径为相对路径(如 ./tc_ge_irrun_test_0008_npu_input_0.bin),当当前目录不可写时 fopen 即失败,触发条件可满足。

数据流证据

Source(问题源头)

ffn/ffn_worker_batching/examples/test_geir_ffn_worker_batching.cpp:137 行 fp = fopen(bin_file.c_str(), "w") 调用 fopen(失败时返回 NULL)

Sink(问题爆发点)

ffn/ffn_worker_batching/examples/test_geir_ffn_worker_batching.cpp:138 行 fwrite(inputData, sizeof(uint8_t), data_size, fp) 使用未校验的 fp 指针(空指针解引用 sink)

传播路径:

# 文件 行号 说明
1 ffn/ffn_worker_batching/examples/test_geir_ffn_worker_batching.cpp 137 fp = fopen(bin_file.c_str(), "w") 接收 fopen 返回值(可能为 NULL,无空指针校验)
2 ffn/ffn_worker_batching/examples/test_geir_ffn_worker_batching.cpp 138 fwrite(inputData, sizeof(uint8_t), data_size, fp) 使用 fp 传入 fwrite(sink)

调用链

可达调用链1 起点:(entry functions) → 终点:WriteDataToFile 深度:1

# 文件 函数 函数起始行 调用点行
1 attention/attention_worker_combine/examples/test_geir_attention_worker_combine.cpp main 176 252
2 attention/attention_worker_combine/examples/test_geir_attention_worker_combine.cpp WriteDataToFile 134 —

可达调用链2 起点:(entry functions) → 终点:WriteDataToFile 深度:1

# 文件 函数 函数起始行 调用点行
1 attention/attention_worker_combine/examples/test_geir_attention_worker_combine.cpp main 176 263
2 attention/attention_worker_combine/examples/test_geir_attention_worker_combine.cpp WriteDataToFile 134 —

修复建议

fp = fopen(bin_file.c_str(), "w");
if (fp == nullptr) {
    return FAILED;
}
fwrite(inputData, sizeof(uint8_t), data_size, fp);
fclose(fp);
likedislike
Zzhangjunkai9
8月31日 修改了issue 的描述
weihao18成员
9月1日 评论:

你好,建议汇总到具体算子进行集中处理

likedislike
游震成员
9月3日 评论:

/assign @chaotang233

likedislike
CANN-robotCANN-robot成员
9月3日 将 chaotang233 设为负责人
唐唐超成员
23 天前 将 ww-blue 设为负责人
唐唐超成员
23 天前 移除了负责人 ww-blue
唐唐超成员
23 天前 将 ww-blue 设为负责人
唐唐超成员
23 天前 移除了负责人 chaotang233
唐唐超成员
23 天前 将 chaotang233 设为负责人
唐唐超成员
23 天前 移除了负责人 chaotang233
ww-blueww-blue成员
22 天前 关联了pull request:修复mla_preprocess使用__has_include && 修复test_geir_ffn_worker_batching.cpp空指针解引用
CANN-robotCANN-robot成员
19 天前 关闭了 issue
CANN-robotCANN-robot成员
19 天前 添加了label:resolved