Skip to content

fix: 校验 iOS bundle 内部路径并修复配置与 JSON 解析 - #108

Merged
kairowan merged 1 commit into
mainfrom
fix/mcp-fourth-audit-20261112
Nov 12, 2026
Merged

kairowan merged 1 commit into
mainfrom
fix/mcp-fourth-audit-20261112

Conversation

@kairowan

Copy link
Copy Markdown
Owner

来源

修复 2026-11-12/MCP第三轮复审/复审报告.md 中的 3 项问题。

修复内容

P1 工程内部文件符号链接越界

  • 新增 .xcodeproj/.xcworkspace bundle 递归校验:所有内部符号链接 canonicalize 后必须位于 --allow-root 内
  • .xcworkspace 同时校验 CLI 会扫描的同级 .xcodeproj(深度 2,跳过 Pods/.git/.build/DerivedData)
  • shellsmith_check_ios 与 shellsmith_protect_ios 共用同一工程路径校验
  • 真实探针确认 project.pbxproj -> 外部文件 在直接检查和保护预检中都被拒绝

P2 compat 可选配置被误拒绝

  • MCP 根据实际 profile 判断路径是否会被消费:
    • compat 不再校验 entrypoint 和 confidential.config
    • balanced/strict 才校验 confidential.config
    • entrypoint 仅在非 dry_run 且非 compat 时校验
  • 与核心 confidential_enabled() / integrate_runtime 的启用语义保持一致
  • 真实 CLI 探针确认 compat + 缺失 confidential/entrypoint 在 CLI 和 MCP 下均成功

P2 多行 iOS 报告被截断

  • parse_json_output 先尝试解析完整 stdout,再回退到逐行 JSON 事件
  • 保留对单行 JSON、逐行事件和普通文本的兼容
  • 真实 check-ios 探针确认 MCP 返回完整对象,包含 project_path、schemes、targets、xcode、checks

验证

  • cargo fmt --all --check
  • 全量 clippy -D warnings
  • cargo test -p shellsmith-mcp:3 个解析单元测试 + 29 个集成测试通过
  • 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
  • 真实第三轮探针:
    • 内部 project.pbxproj 外链被 protect_ios 和 check_ios 同时拒绝
    • compat 缺失 confidential/entrypoint 时 MCP 任务成功
    • check-ios 多行报告保留全部字段
    • 相对 CLI、PATH 程序名、同步超时/退出回收继续通过

未实机验证

  • 未新增 Windows 实机、APK 安装启动、真实 Xcode Archive 或 16KB 运行验证
  • iOS 工程 bundle 扫描限制为 50,000 条目/32 层;超限会安全失败

- 扫描 .xcodeproj/.xcworkspace 内部符号链接,拒绝读取允许目录外文件
- check_ios 与 protect_ios 共用工程 bundle 路径约束
- compat 配置跳过实际不会使用的 entrypoint 与 Swift Confidential 路径
- 多行 JSON 报告优先整体解析,再回退到逐行事件解析
- 补充内部符号链接、compat 可选路径和完整 iOS 报告回归测试
@kairowan
kairowan merged commit 37bead1 into main Nov 12, 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