Bug:Windows 原生目录选择器在 UTF-16LE 低字节为 0x00 的字符(如 耀 U+8000)处截断所选路径,导致 workspace create failed: workspace-invalid-path / ENOENT #210
huguangyu666
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
标题:Windows 原生目录选择器在 UTF-16LE 低字节为 0x00 的字符(如 耀 U+8000)处截断所选路径,导致
workspace create failed: workspace-invalid-path/ ENOENT环境:dsh 0.1.0-rc.6(全局 npm 安装)、Windows 10 22H2、Node v24.14.1、
directory-picker-auto解析为 native 后端复现步骤:
dsh webC:\Users\www13\Documents\AAA项目集\ai王者荣耀——"耀" 是 U+8000)路径在 "耀"(U+8000)处被静默截断——正好少最后一个字。
根本原因:
dsh-host-directory-picker-native的lib/worker.cjs:循环把偶数偏移处的第一个
0x00字节当作字符串 NUL 终止符——这只对 ASCII 成立(ASCII 高字节恒为 0x00)。对任何码点为 U+XX00 的非 ASCII 字符(耀 U+8000、一 U+4E00、言 U+8A00 等),其 UTF-16LE 编码为00 XX——低字节0x00恰好落在偶数偏移,被误判为字符串结束。对话框返回完整路径,但 worker 在此截断。最小复现:
修复方法——改为查找完整的 NUL 字(0x0000),而不是单个 0x00 字节:
验证:应用修复后,同一缓冲区可完整还原
C:\Users\www13\Documents\AAA项目集\ai王者荣耀,工作区创建成功。已确认路径管道的其余环节(worker IPC → 客户端 → workspace.create → realpath)均为 Unicode 安全。影响范围:仅 Windows 原生选择器 worker 受影响(browse / macOS osascript / Linux zenity-kdialog 均原样传递路径)。注意:与 issue #151 是同一个 bug,建议关联/合并。
All reactions