Skip to content

fix(windows): 沙盒准备时跳过无权读取的 PATH 条目 - #405

Merged
shanyuhai123 merged 2 commits into
useLexora:masterfrom
QAyong:codex/skip-unreadable-path-entries
Oct 21, 2026
Merged

shanyuhai123 merged 2 commits into
useLexora:masterfrom
QAyong:codex/skip-unreadable-path-entries

Conversation

@QAyong

@QAyong QAyong commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

背景与关联 / Context and related issue

  • 问题或目标 / Problem or goal: 沙盒准备(host.sandbox.prepare)会对 PATH 中的每个目录做 realpath,但只容忍目录不存在(ENOENT、ENOTDIR)。遇到当前用户无权读取的目录时会抛出 EPERM,整个沙盒准备随之失败,第一条命令还没执行就返回 “runtime request failed”。我们在“安装包后用标准用户验证沙盒”的验收里复现了:验证用的标准用户读不了另一个用户配置目录下的 PATH 条目 C:\Users\runneradmin\setup-pnpm\node_modules\.bin\bin,沙盒准备因此失败。该行为随 fix(buddy): 重构 Windows 沙盒并简化权限策略 #395(重构 Windows 沙盒)引入。
  • 关联 Issue / Related issue: N/A

主要改动 / Changes

  • 变更 / Change: createWindowsSandboxPolicy 对 PATH 条目逐个处理,遇到 EPERM 或 EACCES 的条目直接跳过,因为这类目录既无法被授权,也无法被搜索。仅跳过 PATH 条目:shell、系统、搜索目录,以及受保护和敏感路径出错时仍然失败,不放宽安全边界。新增两个测试:无权读取的 PATH 条目被跳过;无权读取的必要目录仍然失败。

验证 / Verification

  • 自动检查 / Automated checks: 在我们的分支上,sandboxPolicy.spec.ts 5 个用例通过,类型检查与 lint 通过;用同一改动重新跑“安装包 + 标准用户沙盒验证”,Windows x64 与 arm64 均通过(修复前两个架构都在这一步失败)。本分支未在本地重复运行,交由 CI 验证。
  • 手动验证 / Manual verification: 无。验证来自 CI 上的安装包验收。
  • 未执行 / Not run: 未在真实多用户的 Windows 机器上手动验证。

兼容与风险 / Compatibility and risks

不适用 / N/A。只影响沙盒准备时对 PATH 的处理:当前用户读不了的 PATH 目录不再出现在沙盒的搜索路径与授权里;其余路径的错误处理不变。

界面变更 / UI changes

不适用 / N/A。

🤖 Generated with Claude Code

沙盒准备会对 PATH 中的每个目录做 realpath,但只容忍目录不存在(ENOENT、ENOTDIR)。
遇到当前用户无权读取的目录(例如位于其他用户配置目录下的 PATH 条目)会抛出 EPERM,
导致整个沙盒准备失败,第一条命令还没执行就返回“runtime request failed”。

现在对 PATH 条目逐个处理,遇到 EPERM 或 EACCES 的条目直接跳过:这类目录既无法被授权,
也无法被搜索。仅跳过 PATH 条目,shell、系统与搜索目录,以及受保护和敏感路径出错时仍然失败。

新增两个测试:无权读取的 PATH 条目被跳过;无权读取的必要目录仍然失败。

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@QAyong

QAyong commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

这个要拉一下,我被这个沙盒问题,折磨了一下午

@shanyuhai123

Copy link
Copy Markdown
Contributor

优化了下候选检查过程 ...

@shanyuhai123
shanyuhai123 merged commit 415461b into useLexora:master Oct 21, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants