已关闭
【缺陷报告】空指针解引用 - 文件PvModelFactory.cpp - 函数PvModelFactory::CreateDyn - 行号34 #3011
zhangjunkai9创建于 8月18日关闭于 8月18日
杨旭
8月18日 评论:
8月18日 评论:
感谢参与 PyPTO 生态~,相关问题涉及具体模块代码实现细节,我将联系具体模块负责人,进行进一步确认处理~


8月18日 将 zhiweiyuan 设为负责人
杨旭
8月18日 评论:
8月18日 评论:
@zhiweiyuan 请协助看下对应实现,是否确实有问题,是否需要修改。


8月18日 添加了label:Simulation
8月18日 issue类型由 任务 改变为 缺陷
zhiweiyuan
8月18日 评论:
8月18日 评论:
已解决,感谢您的问题反馈


8月18日 issue状态由 待办的 改变为 已完成
8月18日 关闭了 issue
8月18日 添加了label:resolved
缺陷信息
缺陷描述
PvModelFactory::CreateDyn 函数在第31行通过 dlsym(handle, "CreateDynPvModelImpl") 获取函数指针 createFunc,但未对其返回值做 NULL 校验,第34行直接以 createFunc() 形式调用。dlsym 在符号未找到时返回 NULL,此时调用空函数指针导致未定义行为(崩溃)。dlopen 的返回值 handle 已在第24行做了非空检查,但 dlsym 的返回值 createFunc 未做任何校验。该函数通过 Python 绑定入口经 CostModelLauncher::RunPvModel 可达(entry_callchain 深度7),实际触发概率高。
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:CostModel::PvModelFactory::CreateDyn深度:7修复建议
auto createFunc = (CreateFunc)(dlsym(handle, funcName.c_str())); if (createFunc == nullptr) { const char* err = dlerror(); throw std::runtime_error(std::string("can not find symbol: ") + funcName + ": " + (err ? err : "unknown")); } // 创建对象并返回 return createFunc();