Skip to content

test(analyzer): 宿主机低完整性令牌初始化限制的显式 opt-in 跳过 - #65

Merged
Qiyuanqiii merged 2 commits into
mainfrom
codex/analyzer-isolation-conformance-skip
Aug 15, 2026
Merged

Qiyuanqiii merged 2 commits into
mainfrom
codex/analyzer-isolation-conformance-skip

Conversation

@Qiyuanqiii

Copy link
Copy Markdown
Member

背景

internal/analyzer 的两个 OS 级隔离边界一致性测试(TestAnalyzerDedicatedLowPrivilegeIdentityConformance、TestAnalyzerReadOnlyFilesystemPrivateStagingConformance)会用 CreateRestrictedToken + 禁用 Administrators SID + Low IL 构造受限低完整性主令牌,再以该令牌启动 helper 进程验证身份/文件系统边界。在某些本地 Windows 主机上,安全软件或系统策略注入的 DLL 在低完整性受限令牌下无法初始化,helper 在 main 之前就以 STATUS_DLL_INIT_FAILED(0xc0000142)退出、输出为空。

仓库此前已为 GitHub-hosted Windows runner 内置了精确的逃生门(skipHostedWindowsServiceInitialization),本地宿主机则保持大声失败。本 PR 为本地宿主机补一个显式 opt-in 的同类逃生门。

本次改动

  • 提取 analyzerIsolationHostLimitationSkip(exitCode, output, getenv) 决策函数:只有「helper 空输出 + 退出码恰为 0xc0000142」这一精确失败类别才进入跳过判定;其他任何失败仍然大声失败。
  • GitHub-hosted 逃生门行为不变;新增环境变量 CYBERAGENT_ANALYZER_ISOLATION_CONFORMANCE_ACCEPT_HOST_LIMITATION=1(仅 _test.go 读取、只接受精确值 1)把同一失败转为带原因的 t.Skip,原因字符串包含环境变量名并重申 "product authority remains closed"。
  • 决策函数单元测试覆盖:GitHub 组合、opt-in 精确匹配(1/空/0/true/带空格均不跳过)、非 0xc0000142 不可放宽、有输出不可跳过、未确认保持大声失败。
  • ADR 0087 追加一段记录该 opt-in 的语义与边界。

测试覆盖

  • TestAnalyzerIsolationHostLimitationSkip:决策函数的全部分支。
  • 本机验证:不设环境变量时两个一致性测试仍然大声失败(行为不变);设 ...=1 后转为 SKIP 且打印原因;go test ./internal/analyzer/ 在 opt-in 下全部通过。
  • 全仓 go test -timeout 30m ./...(opt-in 下)无 FAIL;go build ./...、go vet ./... 通过。

验证结果

  • 全量 Go 测试(CYBERAGENT_ANALYZER_ISOLATION_CONFORMANCE_ACCEPT_HOST_LIMITATION=1)通过。
  • 未设置 opt-in 时行为与现状一致(本机仍大声失败,CI 仍按 GitHub-hosted 逃生门跳过)。

安全边界与非目标

  • 该变量只被 _test.go 读取,产品代码零引用;跳过不代表子进程或产品证据,产品 analyzer 权威保持关闭。
  • 跳过条件严格限定为精确的 0xc0000142 + 空输出;不做任何放宽(无通配、无其他退出码、无模糊匹配)。
  • 不改变 GitHub Actions 上的既有跳过语义,也不改变本地无 opt-in 时的大声失败语义。

- 提取 analyzerIsolationHostLimitationSkip 决策函数:仅当 helper 空输出且退出码恰为 0xc0000142(STATUS_DLL_INIT_FAILED)时才考虑跳过
- GitHub-hosted Windows runner 逃生门不变;新增 CYBERAGENT_ANALYZER_ISOLATION_CONFORMANCE_ACCEPT_HOST_LIMITATION=1(仅 _test.go 读取、只接受精确值 1)将同一失败转为带原因的 t.Skip
- 其他退出码/有输出/未显式确认一律保持大声失败,产品权威保持关闭
- 新增决策函数单元测试覆盖 GitHub 逃生门、opt-in 精确匹配与不可放宽条件
@Qiyuanqiii
Qiyuanqiii merged commit 4041789 into main Aug 15, 2026
5 checks passed
@NanaseInori
NanaseInori deleted the codex/analyzer-isolation-conformance-skip branch September 16, 2026 09:09
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