]> Cypherpunks repositories - gostls13.git/commitdiff
os: make ExpandEnv recognize '-' as a special shell parameter
authorLE Manh Cuong <cuong.manhle.vn@gmail.com>
Sun, 31 Jul 2016 16:10:35 +0000 (23:10 +0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sun, 21 Aug 2016 18:32:57 +0000 (18:32 +0000)
'-' 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>
src/os/env.go
src/os/env_unix_test.go

index aa83ee3a97c99df8a8f97662d17ad0389cffde3e..a03b8f68f50b7883eec664a9e306b71347db9f0a 100644 (file)
@@ -37,7 +37,7 @@ func ExpandEnv(s string) string {
 // shell variable such as $*.
 func isShellSpecialVar(c uint8) bool {
        switch c {
-       case '*', '#', '$', '@', '!', '?', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
+       case '*', '#', '$', '@', '!', '?', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
                return true
        }
        return false
index 5ec07ee1b1b68d369c1798b6be27382bc2e9ebb1..f7b67ebbb80d6a77d609ab141e60e8f8551929f1 100644 (file)
@@ -7,6 +7,7 @@
 package os_test
 
 import (
+       "fmt"
        . "os"
        "testing"
 )
@@ -28,3 +29,28 @@ func TestSetenvUnixEinval(t *testing.T) {
                }
        }
 }
+
+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)
+               }
+       }
+}