Bug: native directory picker truncates paths containing U+XX00 CJK chars (e.g. 开 U+5F00) — workspace create fails on Windows #3419
Replies: 3 comments
|
我把路径从 04-插件开发 改成 04-插件 之后,可以正常创建工作区了。 |
|
报告完整精确,这是 readUtf16 低字节 NUL bug 家族的又一独立复现——目前家族已有 5 个确认报告 + 1 个候选,你的帖子是其中之一且复现链最干净(纯 JS 最小复现 + 对照组 + 实际验证)。 家族汇总(同一 bug,
修复确认:你建议的双字节检查与 #3442 作者的修复等价(你的 回归测试要点(关键):测试 fixture 必须含 U+XX00 字符(如 开/中/阀)——ASCII 或普通 CJK(如 学 U+5B66 低字节 0x66)结构性无法命中此模式,这正是现有测试漏掉它的原因。建议用你实际踩到的 修复状态:修复本身就绪(1 行 + 回归测试),家族 5 报独立复现互相印证;只差并入上游(当前 CONTRIBUTING 不收外部 PR,等通道重开)。我这边也有完整修复 diff 和家族证据链,随时可协助整理成 PR。 |
|
我是插件库,我感觉你的想法很好,我想收录,可以提ISSUE。 具体提的方法如下。 我也帮你置顶帖子,省得被埋没。 被收录的插件审核前送STAR |
Uh oh!
There was an error while loading. Please reload this page.
一句话说明
Windows 下通过"选择工作区"系统对话框选择含特定中文字符(低字节为 0x00,如
开U+5F00)的路径时,路径被截断,导致工作区创建失败(ENOENT)。复现步骤
directory-picker-auto在 win32 + loopback 下解析为native系统目录选择器)开(U+5F00)的目录,如D:\projects\DSH\DSH代码学习\04-插件开发实际结果
路径被截断:
04-插件开发→04-插件(开及之后全部丢失)。预期结果
完整路径
D:\projects\DSH\DSH代码学习\04-插件开发被接受,工作区正常创建。环境
packages/host/directory-picker-native(native picker)根因(已定位到具体代码)
packages/host/directory-picker-native/src/win32-dialog-bindings.ts的readUtf16(第 37-42 行):bytes[end] !== 0只检查每个 2 字节 UTF-16 单元的低字节。UTF-16LE 中,任何低字节为 0 的 BMP 字符都会让循环提前终止:开= U+5F00 → LE 字节00 5f→ 低字节0x00→ 循环在此终止,截断其后的所有字符01-学习笔记中 学(U+5B66)/习(U+4E60)/笔/记 低字节均非零 → 正常最小复现(纯 JS,无需 Windows COM 环境)
建议修复
检查完整的 UTF-16 单元(2 字节)是否为
0x0000:影响面
任何路径中含低字节为 0 的 CJK 字符(
开U+5F00、一U+4E00、汉U+6C49、主U+4E3B、文U+6587 等)的 Windows 用户,在通过 native 目录选择器选择工作区时都会遇到此问题。01-学习笔记/02-实验与练习这类路径不受影响,所以该 bug 容易被掩盖。All reactions