Replies: 3 comments
|
跟进(2026-08-20):0.1.0-rc.8 已发布,但该修复未被合入。 已核实:
本地已对 rc.8 全局安装的 请官方评估将此修复纳入后续版本(rc.9 / 1.0)。修复分支仍在:https://github.com/vbcssc/deepseek-harness/tree/mydev-fix-utf16 —— vbcssc |
|
这条 Windows 中文路径截断(UTF-16 终止符按单字节扫)非常实锤,而且你已经对到 补充一个用户侧临时规避:尽量把工作区放在纯 ASCII 路径下做验证;含「开/发」这类低字节可能为 0 的汉字路径,目录选择器现在确实不可信。 希望下一 rc 把 |
|
#3505 是 readUtf16 家族的第 6 个独立确认报告(#3188 = #3279 = #3291 同根 + #3442 + #3419 + 本贴),另有 #3463 待作者补路径信息确认为第 7 例。借你这个干净的自带修复,补上家族闭环的三块拼图: 1. 修复形式等价确认 —— 5 个独立报告者收敛到同一行 你的
五个互不知情的报告者各自独立推导出同一行修复,本身就是正确性的强交叉验证。rc.8 未合入不影响修复本身的有效性。 2. 防御性全库扫描完成 —— 唯一脆弱点,无扩散(此前我在 #3442 回复中预告过这个 sweep) 对 rc.8 全库所有手写 UTF-16 解码路径过了一遍:
结论:单行修复 = 整个家族闭合,不存在第二处同型 bug 等着补。 3. 回归测试选型正确 —— 恰好命中家族 fixture 要求
给官方的信号:6 个独立确认 + 1 个候选、同一单行修复、Windows 中文路径高影响面(开/一/中/阀/汉/主 都是常用字)、作者已对构建产物验证——建议 rc.9 优先合入,成本远低于再漏一个 rc。 一个非阻塞的轻量边界(可留作后续 hardening): |
Uh oh!
There was an error while loading. Please reload this page.
问题现象
Windows 上通过 Web UI 添加目录到工作区时,只要路径里含有低字节为 0 的汉字,目录选择器返回的路径就会被截断:
D:\...\开源仓库-分析区\llm-as-a-verifier→ 实际注册的是D:\...(ASCII 前缀,目录存在则静默注册成功)D:\...\skills-开发-工作区\skill-judge→ 报workspace create failed: workspace-invalid-path: cannot create a workspace at "D:\...\skills-": ENOENT根因
packages/host/directory-picker-native/src/win32-dialog-bindings.ts的readUtf16用单字节判断 UTF-16 字符串的结尾:但 UTF-16LE 字符串的终止符是双字节 0x0000。U+xx00 平面的汉字(一 U+4E00、开 U+5F00、退 U+9000 …)编码为
00 xx,低字节就是 0x00,被误判为字符串终止符 → 路径在第一个这样的汉字处被截断。为什么以前有的中文路径"正常"?纯属侥幸:像
期货量化交易项目这类路径(期 671F、货 8D27、量 91CF …)的汉字低字节恰好都不为 0,不触发。这是数据相关的缺陷,与时间线无关。修复
终止符判定改为完整双字节单元:
已验证:
开U+5F00,断言完整往返;旧代码会截成C:\),包内 47 个测试全绿一退刀最)koffi.decode(addr, 'str16')等):裸地址解码段错误、as()报expected pointer、Buffer 直传段错误 —— 手写view+ Buffer 读取是唯一可行路径,因此修复落在扫描逻辑上请求
修复已放在 fork 分支:https://github.com/vbcssc/deepseek-harness/tree/mydev-fix-utf16
包含:
win32-dialog-bindings.ts/win32-dialog-bindings.spec.ts)2026-08-20-win32-dialog-cjk-zero-low-byte-truncation.md(含字节级证据与备选方案分析)由于仓库关闭了 Pull Request,通过 Discussion 提交。请官方团队评估合并 —— 此缺陷对 Windows 中文路径用户影响较大,建议随 rc.8 或后续版本带上。
—— vbcssc
All reactions