From 5b3819073f1936c27003b2fddb51929157fd03e0 Mon Sep 17 00:00:00 2001 From: "MD. MOHIBUR RAHMAN" <35300157+mrpmohiburrahman@users.noreply.github.com> Date: Tue, 24 Feb 2026 04:14:54 +0600 Subject: [PATCH] fix(cli): add missing shell metacharacters (\n, \r, \t, \\) to escape regex --- packages/cli/src/ui/hooks/useShellCompletion.test.ts | 7 +++++++ packages/cli/src/ui/hooks/useShellCompletion.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/ui/hooks/useShellCompletion.test.ts b/packages/cli/src/ui/hooks/useShellCompletion.test.ts index 8cb5487683..93f7187c0e 100644 --- a/packages/cli/src/ui/hooks/useShellCompletion.test.ts +++ b/packages/cli/src/ui/hooks/useShellCompletion.test.ts @@ -156,6 +156,13 @@ describe('useShellCompletion utilities', () => { expect(escapeShellPath('normal-file.txt')).toBe('normal-file.txt'); }); + it('should escape tabs, newlines, carriage returns, and backslashes', () => { + expect(escapeShellPath('a\tb')).toBe('a\\\tb'); + expect(escapeShellPath('a\nb')).toBe('a\\\nb'); + expect(escapeShellPath('a\rb')).toBe('a\\\rb'); + expect(escapeShellPath('a\\b')).toBe('a\\\\b'); + }); + it('should handle empty string', () => { expect(escapeShellPath('')).toBe(''); }); diff --git a/packages/cli/src/ui/hooks/useShellCompletion.ts b/packages/cli/src/ui/hooks/useShellCompletion.ts index ff9796e496..2329f0d67c 100644 --- a/packages/cli/src/ui/hooks/useShellCompletion.ts +++ b/packages/cli/src/ui/hooks/useShellCompletion.ts @@ -27,7 +27,7 @@ const FS_COMPLETION_DEBOUNCE_MS = 50; // On Unix, backslash-quote shell metacharacters (spaces, parens, etc.). // On Windows, cmd.exe doesn't use backslash-quoting and `\` is the path // separator, so we leave the path as-is. -const UNIX_SHELL_SPECIAL_CHARS = /[ '"()&|;<>!#$`{}[\]*?]/g; +const UNIX_SHELL_SPECIAL_CHARS = /[ \t\n\r'"()&|;<>!#$`{}[\]*?\\]/g; /** * Escapes special shell characters in a path segment.