Pull Request已成功合入, 合并人@ascend-robot
(感谢 zhaishangzhao 的贡献)Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-Ascend/mstx | ✅ wiyr0, zzzsss1234 (2/2) | ✅ wiyr0 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
zsz_wlf, thanks for your pull request. All authors of the commits have signed the CLA. 👍


compile


ascend docs pipeline is running...


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


变更摘要
此PR修复了重明安全排查发现的漏洞:PyLong_AsVoidPtr 在转换 Python 对象时缺少类型校验,可能导致非法指针解引用与进程崩溃。主要改动集中在 python/mstx_api.cpp 文件,对 WrapMstxMarkA 和 WrapMstxRangeStartA 两个函数中的 py_stream 参数处理逻辑进行了加固,增加了类型检查与错误处理,同时伴随部分代码格式调整。
主要改动
PyLong_AsVoidPtr替换为安全的类型校验与转换流程:在WrapMstxMarkA和WrapMstxRangeStartA中,将原来直接调用PyLong_AsVoidPtr(py_stream)的无校验转换,改为先用PyLong_Check校验对象是否为整数类型,再通过PyLong_AsUnsignedLongLong获取unsigned long long值并检查PyErr_Occurred()错误状态,最后才转换为void*指针。- 新增类型错误提示:当
py_stream不是PyLong类型时,通过PyErr_SetString设置PyExc_TypeError异常,提示"stream must be an integer (aclrtStream handle) or None",提升调用方的调试体验。 - 代码风格统一:对
GILCtrl类、ParseArgs函数签名以及多个函数定义的指针声明风格(Type*→Type *)、大括号换行位置、kwlist数组初始化格式进行了统一调整。


✅ 跳过 docs ci 检查,没有需要检查的文档文件


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_mstx_arm | ✅ | >>> |
| Build_mstx_x86 | ✅ | >>> | |
| 恶意代码检查 | Antipoison_mstx | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck_mstx | ✅ | >>> |
| PreCommit_gitcode | ✅ | >>> | |
| 开源片段检查 | SCA_mstx | ✅ | >>> |
| 开发者测试 | UT_mstx | ✅ | >>> |
| PreSmoke_mstx | ✅ | >>> | |
| 流水线 | PR-pipeline_mstx | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_mstx_arm | ✅ | >>> |
| Build_mstx_x86 | ✅ | >>> | |
| 恶意代码检查 | Antipoison_mstx | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck_mstx | ✅ | >>> |
| PreCommit_gitcode | ✅ | >>> | |
| 开源片段检查 | SCA_mstx | ✅ | >>> |
| 开发者测试 | UT_mstx | ✅ | >>> |
| PreSmoke_mstx | ✅ | >>> | |
| 流水线 | PR-pipeline_mstx | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


代码审查
我已经仔细审查了整个 diff 文件和相关的周围代码。让我总结分析:
变更分析
这个 PR 将 py_stream 的指针转换从直接使用 PyLong_AsVoidPtr(无验证)改为:
- 先用
PyLong_Check()做类型校验 - 再用
PyLong_AsUnsignedLongLong()做值域转换 - 最后通过
PyErr_Occurred()检查溢出错误 reinterpret_cast<void*>转为指针
同时还有大量纯格式变更(括号位置、空格、指针声明的 * 位置)。
详细排查结果
正确性审查
aclrtStream定义为typedef void*(ms_tools_ext.h:43),unsigned long long→void*的reinterpret_cast在 64 位平台上正确保持位模式PyLong_Check后再调用PyLong_AsUnsignedLongLong不会因非整数类型失败PyErr_Occurred()检查可正确捕获负数和超大值导致的OverflowError- 错误路径正确返回
nullptr并保持 Python 异常状态
安全性审查
- 旧代码
PyLong_AsVoidPtr无指针验证,传入非整数或非法值可能导致未定义行为 → 已修复 - 新增的
PyLong_Check和PyErr_Occurred检查构成完整输入校验链
已注意但确认为非问题的点
PyLong_Check对bool返回 true(Python 中bool是int子类),此为 Python 语言特性,且旧代码行为一致message变量在WrapMstxMarkA中未显式初始化即传入ParseArgs,但ParseArgs首行即设为nullptr,无 UB,且为已有行为- 代码块在
WrapMstxMarkA和WrapMstxRangeStartA中重复,属于可维护性问题但非正确性缺陷,不报告
检查结论:本次变更未发现任何正确性、安全性、可靠性或破坏性变更问题。 这是一次纯粹的防御性安全加固,改动逻辑正确。
Closing Summary
- 审查文件:
python/mstx_api.cpp— 已审查,无问题 - 发现数量:P0: 0, P1: 0, P2: 0, P3: 0
- 整体风险评估:低风险。变更引入了对
py_stream参数的类型校验和错误检查,将之前无保护的PyLong_AsVoidPtr调用替换为三阶段安全转换(类型检查 → 值域转换 → 错误检查),有效杜绝了非法指针解引用风险。格式变更无语义影响。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


/lgtm


/approve


1. 修改描述
2. 功能验证
3. 代码检视
4. 资料修改自检