From a4c7e73e12157957e12a3f70b42e173b97374eec Mon Sep 17 00:00:00 2001 From: Shulhan Date: Sat, 4 Sep 2021 00:30:41 +0700 Subject: os/exec: fix escaped quote inside the same quote Shell quote is a hell of complex. For example, one can write shell that execute command that contains quote, sh -c "psql -c 'CREATE ... IDENTIFIED BY PASSWORD '\''pass'\'''" or to simplify, sh -c "psql -c \"CREATE ... IDENTIFIED BY PASSWORD 'pass'\"" --- lib/os/exec/exec_test.go | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'lib/os/exec/exec_test.go') diff --git a/lib/os/exec/exec_test.go b/lib/os/exec/exec_test.go index 38e089d0..d0da6e48 100644 --- a/lib/os/exec/exec_test.go +++ b/lib/os/exec/exec_test.go @@ -42,17 +42,33 @@ func TestParseCommandArg(t *testing.T) { expCmd: `a`, expArgs: []string{`b'c`}, }, { - in: `a\ b c\ d`, - expCmd: "a b", + in: `a\ b c\ d`, + expCmd: "a b", expArgs: []string{"c d"}, }, { - in: `a\\ b c\\ d`, - expCmd: `a\`, + in: `a\\ b c\\ d`, + expCmd: `a\`, expArgs: []string{"b", `c\`, "d"}, }, { - in: `a\\\ b c\\\ d`, - expCmd: `a\ b`, + in: `a\\\ b c\\\ d`, + expCmd: `a\ b`, expArgs: []string{`c\ d`}, + }, { + in: `sh -c "echo \"a\""`, + expCmd: "sh", + expArgs: []string{`-c`, `echo "a"`}, + }, { + in: `sh -c "sh -c \"echo 'a\x'\""`, + expCmd: "sh", + expArgs: []string{`-c`, `sh -c "echo 'a\x'"`}, + }, { + in: `sh -c "sh -c \"echo 'a'\'''\""`, + expCmd: "sh", + expArgs: []string{`-c`, `sh -c "echo 'a'\'''"`}, + }, { + in: `sh -c "sh -c \"echo 'a\\\"'\""`, + expCmd: "sh", + expArgs: []string{`-c`, `sh -c "echo 'a\"'"`}, }} for _, c := range cases { -- cgit v1.3-6-g1900