Skip to content

fix: 拒绝非普通 iOS 预检文件并避免读取阻塞 - #113

Merged
kairowan merged 4 commits into
mainfrom
fix/mcp-nonregular-ios-20261113
Nov 13, 2026
Merged

kairowan merged 4 commits into
mainfrom
fix/mcp-nonregular-ios-20261113

Conversation

@kairowan

Copy link
Copy Markdown
Owner

来源

修复第七轮复审补充问题:iOS 预检在读取 project.pbxproj 前只校验路径范围,没有校验目标类型;把文件替换为命名管道后,读取会阻塞,检查和保护预检都可能卡住且无法拿到取消任务 ID。

修复内容

  • validate_ios_cocoapods_paths 在读取用于判断 CocoaPods 的 project.pbxproj 前:
    • 先 canonicalize 并校验 --allow-root
    • 再校验目标必须是普通文件
    • 校验通过后读取规范化后的实际路径
  • 覆盖内部 Host.xcodeproj/project.xcworkspace 的父工程 pbx
  • 同类 MCP 预检测试也补上:
    • iOS 配置文件读取前要求普通文件
    • shellsmith_read_report 读取前要求普通文件
  • 文件缺失时保持原行为,不增加误拦截

验证

  • cargo fmt --all --check
  • 全量 clippy -D warnings
  • cargo test -p shellsmith-mcp:3 个单元测试 + 41 个集成测试通过
  • cargo test -p shield-cli:22 passed
  • cargo test -p shield-core:263 passed, 8 ignored
  • python3 -m unittest discover -s scripts/tests:48 passed
  • 真实 CLI FIFO 探针:
    • 父工程 project.pbxproj 为命名管道时,check_ios 约 0.3 秒返回“不是普通文件”,不再阻塞
    • protect_ios dry-run 在创建任务前返回同样错误
    • 配置文件和报告 FIFO 的回归测试通过
    • 前几轮别名、锁文件、内部 workspace、compat、JSON 报告回归继续通过

合并说明

按仓库维护者要求,本 PR 只提交,不自动合并到 main,等待后续统一合并。

未实机验证

  • 未新增 Windows、APK 安装启动、真实 Xcode Archive 或 16KB 运行验证

haonan added 4 commits November 13, 2026 13:45
- CocoaPods 判定读取 project.pbxproj 前校验目标是普通文件
- iOS 配置与保护报告读取前同样校验普通文件,避免 FIFO 等阻塞
- 保留缺失文件原有行为,不引入额外误拦截
- 增加父工程 pbx、配置和报告 FIFO 回归测试
- Podfile.lock 和 Pods/Manifest.lock 在解析路径后要求普通文件
- bundle 扫描对 project.pbxproj/contents.xcworkspacedata 检查普通文件类型
- 覆盖 workspace 发现的子工程 pbx 及其链接目标
- 增加锁文件与子工程 FIFO 阻塞回归测试
- bundle 扫描直接按 CLI 打开的小写路径检查 project.pbxproj/contents.xcworkspacedata
- 大小写不敏感文件系统上大写目录项会被同一路径命中并校验普通文件类型
- 增加大写 FIFO pbx 回归测试,普通同名文件恢复后通过
- 必需文件按 CLI 打开路径使用 symlink_metadata 检查
- 大小写不敏感文件系统可命中大写目录项
- 失效的必需文件链接明确报错,非必需失效链接继续忽略
@kairowan
kairowan merged commit 4249b7e into main Nov 13, 2026
13 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.

1 participant