mirror of
https://github.com/golang/go
synced 2024-11-17 10:04:43 -07:00
syscall: restore EscapeArg behavior for empty string
Accidentally broken by CL 259978. For #41825 Change-Id: Id663514e6eefa325faccdb66493d0bb2b3281046 Reviewed-on: https://go-review.googlesource.com/c/go/+/260397 Trust: Ian Lance Taylor <iant@golang.org> Trust: Alex Brainman <alex.brainman@gmail.com> Trust: Emmanuel Odeke <emm.odeke@gmail.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
a4b95cd092
commit
9e0837f2e9
@ -24,6 +24,9 @@ var ForkLock sync.RWMutex
|
|||||||
// - finally, s is wrapped with double quotes (arg -> "arg"),
|
// - finally, s is wrapped with double quotes (arg -> "arg"),
|
||||||
// but only if there is space or tab inside s.
|
// but only if there is space or tab inside s.
|
||||||
func EscapeArg(s string) string {
|
func EscapeArg(s string) string {
|
||||||
|
if len(s) == 0 {
|
||||||
|
return `""`
|
||||||
|
}
|
||||||
for i := 0; i < len(s); i++ {
|
for i := 0; i < len(s); i++ {
|
||||||
switch s[i] {
|
switch s[i] {
|
||||||
case '"', '\\', ' ', '\t':
|
case '"', '\\', ' ', '\t':
|
||||||
|
43
src/syscall/exec_windows_test.go
Normal file
43
src/syscall/exec_windows_test.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package syscall_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestEscapeArg(t *testing.T) {
|
||||||
|
var tests = []struct {
|
||||||
|
input, output string
|
||||||
|
}{
|
||||||
|
{``, `""`},
|
||||||
|
{`a`, `a`},
|
||||||
|
{` `, `" "`},
|
||||||
|
{`\`, `\`},
|
||||||
|
{`"`, `\"`},
|
||||||
|
{`\"`, `\\\"`},
|
||||||
|
{`\\"`, `\\\\\"`},
|
||||||
|
{`\\ `, `"\\ "`},
|
||||||
|
{` \\`, `" \\\\"`},
|
||||||
|
{`a `, `"a "`},
|
||||||
|
{`C:\`, `C:\`},
|
||||||
|
{`C:\Program Files (x32)\Common\`, `"C:\Program Files (x32)\Common\\"`},
|
||||||
|
{`C:\Users\Игорь\`, `C:\Users\Игорь\`},
|
||||||
|
{`Андрей\file`, `Андрей\file`},
|
||||||
|
{`C:\Windows\temp`, `C:\Windows\temp`},
|
||||||
|
{`c:\temp\newfile`, `c:\temp\newfile`},
|
||||||
|
{`\\?\C:\Windows`, `\\?\C:\Windows`},
|
||||||
|
{`\\?\`, `\\?\`},
|
||||||
|
{`\\.\C:\Windows\`, `\\.\C:\Windows\`},
|
||||||
|
{`\\server\share\file`, `\\server\share\file`},
|
||||||
|
{`\\newserver\tempshare\really.txt`, `\\newserver\tempshare\really.txt`},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
if got := syscall.EscapeArg(test.input); got != test.output {
|
||||||
|
t.Errorf("EscapeArg(%#q) = %#q, want %#q", test.input, got, test.output)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user