已关闭
【缺陷报告】容器访问越界 - 文件masked_scatter_with_position_infershape.cpp - 函数InferShapeMaskedScatterWithPosition - 行号41 #5018
zhangjunkai9创建于 15 天前关闭于 11 天前
14 天前 将 sunchun 设为负责人
yuning_chen
14 天前 评论:
14 天前 评论:
您好,感谢反馈,问题已收到,当前 @wang-shilong32 正在跟踪处理。


14 天前 将 wang-shilong32 设为负责人
14 天前 移除了负责人 sunchun
ideal_
11 天前 评论:
11 天前 评论:
感谢反馈,该算子是MaskedScatter的内部算子,仅开放L0接口供broadcast场景下MaskedScatter调用,因此并无geir通路,该部分属于无效代码,后续会清除。


11 天前 关闭了 issue
11 天前 添加了label:resolved
缺陷信息
缺陷描述
函数 InferShapeMaskedScatterWithPosition 在第34行使用 xShape->GetShapeSize()(返回张量元素总数,即各维度大小的乘积)作为 SetDimNum 的参数和循环上界,而非 GetDimNum()(返回维度数/秩)。当元素总数大于实际维度数时(例如 shape 为 [2,3,4] 时 GetShapeSize()=24 但 GetDimNum()=3),第41行 xShape->GetDim(i) 对 i>=3 的访问越界,导致容器访问越界。即使是 1 维张量 [N](N>1),GetShapeSize()=N 也会导致 GetDim(1) 到 GetDim(N-1) 越界。该函数通过 IMPL_OP_INFERSHAPE 注册为入口函数,直接被框架调用,可达性确认。
事实核查
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:ops::InferShapeMaskedScatterWithPosition深度:0修复建议
auto xShapeDimNum = xShape->GetDimNum(); if (xShapeDimNum < 0) { return ge::GRAPH_FAILED; } size_t dimNum = static_cast<size_t>(xShapeDimNum); yShape->SetDimNum(dimNum); for (size_t i = 0U; i < dimNum; i++) { int64_t dim = xShape->GetDim(i); yShape->SetDim(i, dim); }