Skip to content

Commit f294ac0

Browse files
author
SqlRush
committed
Guard PowerShell file read expressions
1 parent d7ec017 commit f294ac0

4 files changed

Lines changed: 9 additions & 0 deletions

File tree

docs/cc-100-roadmap.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,8 @@ M5 补充:PowerShell read-only classifier 收紧 `Get-Acl`,继续允许安
247247

248248
M5 补充:PowerShell read-only classifier 收紧 `Get-ChildItem`,继续允许安全相对路径、literal wildcard filter/include/exclude 和常见 attributes/depth 参数,但拒绝动态表达式参数和越界路径。
249249

250+
M5 补充:PowerShell read-only classifier 收紧 `Get-Content`/`Get-Item`,继续允许安全相对路径和普通 literal encoding/read-count/stream 参数,但拒绝动态表达式参数和越界路径。
251+
250252
M5 补充:Bash 前台输出和 `BashOutput` 现在都走统一 tool-result budget 截断/落盘路径;`BashOutput` 增加 100k 最大结果限制,大后台输出会保存完整内容并返回 `full_output_path` 元数据。
251253

252254
M5 补充:Bash/PowerShell 后台任务现在会发 `*_background_started``*_background_finished` tool progress 事件,包含后台 ID、shell/status、exit/timed_out/cancelled、duration、时间戳和输出字节数,不携带 command 文本;completed、timed_out、cancelled 终态均已覆盖测试。

docs/claude-code-go-rewrite-plan.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ test/parity/ # golden tests against TS/official behavior
234234
- 本轮补充:PowerShell read-only classifier 收紧 `Test-Path`,继续允许安全相对路径和普通 literal 过滤/类型参数,但拒绝动态表达式、hashtable 参数和越界路径。
235235
- 本轮补充:PowerShell read-only classifier 收紧 `Get-Acl`,继续允许安全相对路径和普通 literal filter/include/exclude 参数,但拒绝动态表达式参数和越界路径。
236236
- 本轮补充:PowerShell read-only classifier 收紧 `Get-ChildItem`,继续允许安全相对路径、literal wildcard filter/include/exclude 和常见 attributes/depth 参数,但拒绝动态表达式参数和越界路径。
237+
- 本轮补充:PowerShell read-only classifier 收紧 `Get-Content`/`Get-Item`,继续允许安全相对路径和普通 literal encoding/read-count/stream 参数,但拒绝动态表达式参数和越界路径。
237238
- 本轮补充:`BashOutput` 现在设置 100k 最大结果大小,和前台 `Bash` 一起覆盖大输出 tool-result preview 截断、完整输出落盘及 `full_output_path` 元数据。
238239
- 本轮补充:Bash/PowerShell 后台命令现在会通过 tool progress 通道发 started/finished 事件,记录后台 ID、shell/status、exit/timed_out/cancelled、duration、时间戳和 stdout/stderr byte count,且 completed、timed_out、cancelled 终态测试确保 progress 不携带 command 文本。
239240
- 本轮补充:WebSearch domain filters 现在在 schema 层声明 array `items:string`,通用 tool schema validator 同步支持 `items` 校验;`allowed_domains`/`blocked_domains` 会拒绝空字符串、URL/port、非法 wildcard 和非域名 label。

internal/tools/powershell/tools.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,12 +1231,14 @@ var powerShellReadOnlyCmdlets = map[string]powerShellReadOnlyConfig{
12311231
pathFlags: stringSet("path", "literalpath"),
12321232
valueFlags: stringSet("totalcount", "head", "first", "tail", "encoding", "delimiter", "readcount"),
12331233
validatePositionalsAsPaths: true,
1234+
rejectExpressionValues: true,
12341235
},
12351236
"get-item": {
12361237
allowedFlags: stringSet("path", "literalpath", "force", "stream"),
12371238
pathFlags: stringSet("path", "literalpath"),
12381239
valueFlags: stringSet("stream"),
12391240
validatePositionalsAsPaths: true,
1241+
rejectExpressionValues: true,
12401242
},
12411243
"test-path": {
12421244
allowedFlags: stringSet("path", "literalpath", "pathtype", "filter", "include", "exclude", "isvalid", "newerthan", "olderthan"),

internal/tools/powershell/tools_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ func TestPowerShellCommandClassification(t *testing.T) {
117117
`Get-Content .\README.md`,
118118
"type README.md",
119119
"gi README.md",
120+
"Get-Item -Stream Zone.Identifier README.md",
120121
"gp . -Name Mode",
121122
"Select-String TODO README.md",
122123
"Select-String -Pattern TODO -Path README.md",
@@ -320,6 +321,9 @@ func TestPowerShellCommandClassification(t *testing.T) {
320321
"Get-Content -First",
321322
"Get-Content -First 5 /etc/passwd",
322323
"Get-Content -OV x README.md",
324+
"Get-Content -Encoding $env:ENC README.md",
325+
"Get-Content -ReadCount @{N=1} README.md",
326+
"Get-Item -Stream $env:STREAM README.md",
323327
"Get-Process -PV p",
324328
"Get-Process -Infa",
325329
"Get-Process -Proga",

0 commit comments

Comments
 (0)