mirror of
https://github.com/golang/go
synced 2024-11-19 11:34:49 -07:00
1756b66598
'-' is one of shell special parameters. The existing implementation of isShellSpecialVar missed '-' from the list, causing "$-" and "${-}" expand differently. Fixes #16554 Change-Id: Iafc7984692cc83cff58f7c1e01267bf78b3a20a9 Reviewed-on: https://go-review.googlesource.com/25352 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
// Copyright 2013 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.
|
|
|
|
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
|
|
package os_test
|
|
|
|
import (
|
|
"fmt"
|
|
. "os"
|
|
"testing"
|
|
)
|
|
|
|
var setenvEinvalTests = []struct {
|
|
k, v string
|
|
}{
|
|
{"", ""}, // empty key
|
|
{"k=v", ""}, // '=' in key
|
|
{"\x00", ""}, // '\x00' in key
|
|
{"k", "\x00"}, // '\x00' in value
|
|
}
|
|
|
|
func TestSetenvUnixEinval(t *testing.T) {
|
|
for _, tt := range setenvEinvalTests {
|
|
err := Setenv(tt.k, tt.v)
|
|
if err == nil {
|
|
t.Errorf(`Setenv(%q, %q) == nil, want error`, tt.k, tt.v)
|
|
}
|
|
}
|
|
}
|
|
|
|
var shellSpecialVarTests = []struct {
|
|
k, v string
|
|
}{
|
|
{"*", "asterisk"},
|
|
{"#", "pound"},
|
|
{"$", "dollar"},
|
|
{"@", "at"},
|
|
{"!", "exclamation mark"},
|
|
{"?", "question mark"},
|
|
{"-", "dash"},
|
|
}
|
|
|
|
func TestExpandEnvShellSpecialVar(t *testing.T) {
|
|
for _, tt := range shellSpecialVarTests {
|
|
Setenv(tt.k, tt.v)
|
|
defer Unsetenv(tt.k)
|
|
|
|
argRaw := fmt.Sprintf("$%s", tt.k)
|
|
argWithBrace := fmt.Sprintf("${%s}", tt.k)
|
|
if gotRaw, gotBrace := ExpandEnv(argRaw), ExpandEnv(argWithBrace); gotRaw != gotBrace {
|
|
t.Errorf("ExpandEnv(%q) = %q, ExpandEnv(%q) = %q; expect them to be equal", argRaw, gotRaw, argWithBrace, gotBrace)
|
|
}
|
|
}
|
|
}
|