已关闭
[Bug-Report|缺陷反馈]: TheTensor 未删除拷贝构造/拷贝赋值,隐式浅拷贝存在 double-free 隐患 #103
syy_3597创建于  14 天前关闭于  14 天前
syy_3597
14 天前 创建

Describe the current behavior / 问题描述

core/utils/include/utils/the_tensor.h 的 TheTensor<T>:

  • 定义了移动构造(:30)与移动赋值(:38),二者正确处理了 data_ 所有权转移(源指针置空);
  • 但未将拷贝构造/拷贝赋值声明为 = delete

C++ 规则:声明了移动构造/移动赋值后,拷贝构造/拷贝赋值不会被自动生成,但也不会被自动禁止——若代码中(当前或将来)出现按值传参、按值捕获、auto t2 = t1; 等拷贝场景,将触发编译错误或调用隐式生成的拷贝行为,导致两个对象在析构时对同一 data_ 各执行一次 delete[](double-free),进程崩溃。

这是典型的 Rule of Five 不完整问题。

Impact / 影响

当前代码若从不发生拷贝,= delete 后编译通过即证明零行为变化(编译即验证,最安全的一类修改);若存在隐藏拷贝,编译报错恰好提前暴露 double-free 地雷,属于将运行期崩溃提前到编译期。

Suggested fix / 修复建议

    TheTensor(const TheTensor &) = delete;
    TheTensor &operator=(const TheTensor &) = delete;

Environment / 环境信息

  • 位置: core/utils/include/utils/the_tensor.h:22
likedislike
east_yang成员
14 天前 评论:

感谢您的反馈,当前@east_yang跟踪处理中。

likedislike
Ssyy_3597
14 天前 关联了pull request:fix: 修复代码审查发现的健壮性与文档问题(#96-#105)
CANN-robotCANN-robot成员
14 天前 关闭了 issue
CANN-robotCANN-robot成员
14 天前 添加了label:resolved