Replies: 3 comments 2 replies
|
你的诊断完全正确——
补充家族背景:这是同一机制的第 8/9 次独立报告(#3188/#3279/#3291/#3442/#3419/#3505 确认 + #3463 候选),触发字符全是 U+XX00 形态(一/万/开/中/阀/销…)。家族内早已收敛出同一行修复 + 必须用 U+XX00 字符做回归 fixture 的结论(ASCII fixture 结构上测不出)。 但同一函数还残留第二个、更隐蔽的缺陷(#4330): const bytes = Buffer.from(koffi.view(address, 32768))而 Win32 小结:你的路径截断问题 → 升级即解;同函数越界崩溃 → 仍是待合入的 PR-ready 候选(上游 PR 通道目前不可用,供维护者取用)。 |
|
已修。目录名中特殊汉字 (U+9500 等) 被截断导致无法添加至工作区的问题, 根因与 #4330 相同: Win32 目录选择器用固定 32KiB view 读小堆指针, 非 ASCII 路径被错误解码。 commit 141d72d "fix(directory-picker-native): decode the Win32 picker path without a fixed 32KiB view" 将 readUtf16 重写为 koffi.decode(pointer, 'str16') (packages/host/directory-picker-native/src/win32-dialog-bindings.ts:39-43)。 更新到最新版 (npm latest=0.1.5-rc.1) 或拉取 master 重建后重试; 若仍复现, 请带复现路径回帖。 |
Uh oh!
There was an error while loading. Please reload this page.
在 win32-dialog-bindings.ts 的 readUtf16(第 37-42 行):
let end = 0
while (end + 1 < bytes.length && bytes[end] !== 0) end += 2
return bytes.toString('utf16le', 0, end)
它把路径当 UTF-16LE 扫描终止符时,只检查每个字符的第一个字节,遇到任何"低字节为 0"的合法字符就会提前截断——而 销 的 Unicode 码点正好是 U+9500(UTF-16LE 首字节为 0x00)!你的目录叫"营销XXXXXX",路径读到这里就断了,正好停在"营"后面——和报错"…\XXXX析\营"一字不差。任何含 销、一(U+4E00)、万(U+4E07)这类字符的目录都会踩中。
All reactions