fix(worker): escape newline/tab in CLI args
This commit is contained in:
@@ -55,9 +55,15 @@ public sealed class ClaudeArgsBuilder
|
|||||||
|
|
||||||
private static string Escape(string value)
|
private static string Escape(string value)
|
||||||
{
|
{
|
||||||
if (value.Contains(' ') || value.Contains('"') || value.Contains('\''))
|
if (value.Contains(' ') || value.Contains('"') || value.Contains('\'')
|
||||||
|
|| value.Contains('\t') || value.Contains('\n') || value.Contains('\r'))
|
||||||
{
|
{
|
||||||
var escaped = value.Replace("\\", "\\\\").Replace("\"", "\\\"");
|
var escaped = value
|
||||||
|
.Replace("\\", "\\\\")
|
||||||
|
.Replace("\"", "\\\"")
|
||||||
|
.Replace("\n", "\\n")
|
||||||
|
.Replace("\r", "\\r")
|
||||||
|
.Replace("\t", "\\t");
|
||||||
return $"\"{escaped}\"";
|
return $"\"{escaped}\"";
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
|
|||||||
@@ -68,4 +68,28 @@ public sealed class ClaudeArgsBuilderTests
|
|||||||
var args = _builder.Build(new ClaudeRunConfig(null, """Don't say "hello".""", null, null));
|
var args = _builder.Build(new ClaudeRunConfig(null, """Don't say "hello".""", null, null));
|
||||||
Assert.Contains("--append-system-prompt", args);
|
Assert.Contains("--append-system-prompt", args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Build_quotes_system_prompt_with_newline()
|
||||||
|
{
|
||||||
|
var args = _builder.Build(new ClaudeRunConfig(
|
||||||
|
Model: null,
|
||||||
|
SystemPrompt: "line1\nline2",
|
||||||
|
AgentPath: null,
|
||||||
|
ResumeSessionId: null));
|
||||||
|
|
||||||
|
Assert.Contains("--append-system-prompt \"line1\\nline2\"", args);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Build_quotes_system_prompt_with_tab()
|
||||||
|
{
|
||||||
|
var args = _builder.Build(new ClaudeRunConfig(
|
||||||
|
Model: null,
|
||||||
|
SystemPrompt: "col1\tcol2",
|
||||||
|
AgentPath: null,
|
||||||
|
ResumeSessionId: null));
|
||||||
|
|
||||||
|
Assert.Contains("\"col1", args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user