mirror of
https://github.com/golang/go
synced 2024-11-17 08:04:46 -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"),
|
||||
// but only if there is space or tab inside s.
|
||||
func EscapeArg(s string) string {
|
||||
if len(s) == 0 {
|
||||
return `""`
|
||||
}
|
||||
for i := 0; i < len(s); i++ {
|
||||
switch s[i] {
|
||||
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