don't wrap args unnecessarily (#26599)

This commit is contained in:
Tommaso Sciortino
2026-05-06 16:20:47 -07:00
committed by GitHub
parent 90304b279c
commit a809bc7c51
3 changed files with 20 additions and 6 deletions
@@ -181,8 +181,9 @@ describe('<SessionSummaryDisplay />', () => {
); );
const output = lastFrame(); const output = lastFrame();
// PowerShell wraps strings in single quotes // PowerShell doesn't wraps UUID in single quotes because
expect(output).toContain("gemini --resume '1234-abcd-5678-efgh'"); // it contains no special characters.
expect(output).toContain('gemini --resume 1234-abcd-5678-efgh');
unmount(); unmount();
}); });
+8 -3
View File
@@ -418,8 +418,8 @@ describe('escapeShellArg', () => {
}); });
it('should escape internal double quotes by doubling them', () => { it('should escape internal double quotes by doubling them', () => {
const result = escapeShellArg('He said "Hello"', 'cmd'); const result = escapeShellArg('hello "world"', 'cmd');
expect(result).toBe('"He said ""Hello"""'); expect(result).toBe('"hello ""world"""');
}); });
it('should handle empty strings', () => { it('should handle empty strings', () => {
@@ -429,7 +429,12 @@ describe('escapeShellArg', () => {
}); });
describe('when shell is PowerShell', () => { describe('when shell is PowerShell', () => {
it('should wrap simple arguments in single quotes', () => { it('should return simple alphanumeric arguments without quotes', () => {
const result = escapeShellArg('my-argument-123.txt', 'powershell');
expect(result).toBe('my-argument-123.txt');
});
it('should wrap arguments with spaces in single quotes', () => {
const result = escapeShellArg('search term', 'powershell'); const result = escapeShellArg('search term', 'powershell');
expect(result).toBe("'search term'"); expect(result).toBe("'search term'");
}); });
+9 -1
View File
@@ -695,9 +695,17 @@ export function escapeShellArg(arg: string, shell: ShellType): string {
switch (shell) { switch (shell) {
case 'powershell': case 'powershell':
// For PowerShell, wrap in single quotes and escape internal single quotes by doubling them. // For PowerShell, avoid quoting simple alphanumeric strings (like UUIDs).
if (/^[a-zA-Z0-9\-_.]+$/.test(arg)) {
return arg;
}
// Otherwise, wrap in single quotes and escape internal single quotes by doubling them.
return `'${arg.replace(/'/g, "''")}'`; return `'${arg.replace(/'/g, "''")}'`;
case 'cmd': case 'cmd':
// Avoid quoting simple strings for cmd.exe as well.
if (/^[a-zA-Z0-9\-_.]+$/.test(arg)) {
return arg;
}
// Simple Windows escaping for cmd.exe: wrap in double quotes and escape inner double quotes. // Simple Windows escaping for cmd.exe: wrap in double quotes and escape inner double quotes.
return `"${arg.replace(/"/g, '""')}"`; return `"${arg.replace(/"/g, '""')}"`;
case 'bash': case 'bash':