已关闭
【缺陷报告】空指针解引用 - 文件vector_func_partitioner.cpp - 函数FixCompareClusterConnections - 行号697 #273
zhangjunkai9创建于 15 天前关闭于 10 天前
15 天前 将 gcw_V3YyYBt1 设为负责人
wangmingming
15 天前 评论:
15 天前 评论:
你好,感谢建议, 后续分析处理


10 天前 关闭了 issue
10 天前 添加了label:resolved
你好,感谢建议, 后续分析处理


缺陷信息
缺陷描述
函数 FixCompareClusterConnections 在第696行通过 cluster_dict_.GetNodeCluster(in_node) 获取 in_cluster 指针。GetNodeCluster 在节点未建立 cluster 映射时明确返回 nullptr(cluster_dict.cpp:24)。但第697行直接调用 in_cluster->Id() 解引用,无空指针校验。同一文件中的 EstablishClusterConnections 函数(第659-668行)对相同模式做了空指针检查(if (in_cluster == nullptr) continue),证明 in_nodes_ 中确实可能存在未映射到 cluster 的节点。FixCompareClusterConnections 缺失此检查,导致空指针解引用崩溃。该函数从 FixAllCompareClusterConnections(第682行)调用,可达性确认。
事实核查
数据流证据
传播路径:
修复建议
void VectorFuncPartitioner::FixCompareClusterConnections(const ClusterPtr &cluster, const af::AscNodePtr &compare_node) { std::unordered_set<Cluster *> missing_input_clusters; missing_input_clusters.reserve(cluster->in_nodes_.size()); for (const auto &in_node : cluster->in_nodes_) { // 跳过Compare节点自己的输入 if (in_node == compare_node) { continue; } const auto &in_cluster = cluster_dict_.GetNodeCluster(in_node); if (in_cluster == nullptr) { GELOGD("The in cluster of the node [%s] is nullptr, skip in FixCompareClusterConnections.", in_node->GetNamePtr()); continue; } if (in_cluster->Id() == cluster->Id()) {