python / python/cpython

dtrace: debug abort importing module with lone surrogate unicode char in name while DTrace import probe is active

未关闭
#156,118 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

interpreter-core type-crash
主要语言
Python
星标
77.2k
派生
35.9k
PR 合并指标
PR 指标待抓取

描述

Crash report

What happened?

This one is a bit niche! It also needs a python compiled with --with-dtrace

probe.d:

python$target:::import-find-load-start
{
    printf("import probe fired\n");
}

test.py:

try:
  __import__('\ud800')
except:
  pass
> sudo dtrace -q -s probe.d -c './python.exe test.py'

Assertion failed: (!_PyErr_Occurred(tstate)), function _PyEval_EvalFrameDefault, file generated_cases.c.h, line 13858.
import probe fired
import probe fired
import probe fired
...

The import dtrace hooks pass call PyUnicode_AsUTF8 and pass the value to the probe without checking if the conversion succeeded, now dtrace doesn't seem to mind getting a null pointer (I don't know much about how that bit works tbh), but a stale exception is left around which triggers a debug assert:

https://github.com/python/cpython/blob/e8158d1a02d6e5e974d4dbc0633b6a3ad960d7a3/Python/import.c#L4106-L4107

[!CAUTION]
EDIT: I found some more cases of drace code doing the same, This isn't just limited to import machinery:
https://github.com/python/cpython/blob/91d71dd67074d4599b6bd49cc933f41f8bd57058/Python/ceval.c#L1198-L1225
If I find more, I'll add them

CPython versions tested on:

CPython main branch

Operating systems tested on:

macOS

Output from running 'python -VV' on the command line:

Python 3.16.0a0 (heads/main:e8158d1a02d, Aug 20 2026, 15:09:24) [Clang 21.0.0 (clang-2100.3.27.1)]

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

使用 --with-dtrace 构建 Python,并使用 probe.d 和 test.py 示例重现该 assertion。检查 Python/import.c 中的导入钩子,以及 Python/ceval.c 中的附加 DTrace 代码,包括链接的位置。完成标准是:probe 处于活动状态时,lone-surrogate 的导入不再留下陈旧异常,也不再触发调试断言。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
observability
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
50/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。