diff options
Diffstat (limited to 'libgo/go/net/http/cgi/host.go')
-rw-r--r-- | libgo/go/net/http/cgi/host.go | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/libgo/go/net/http/cgi/host.go b/libgo/go/net/http/cgi/host.go index 4efbe7a..9b4d875 100644 --- a/libgo/go/net/http/cgi/host.go +++ b/libgo/go/net/http/cgi/host.go @@ -77,15 +77,15 @@ type Handler struct { // Env: []string{"SCRIPT_FILENAME=foo.php"}, // } func removeLeadingDuplicates(env []string) (ret []string) { - n := len(env) - for i := 0; i < n; i++ { - e := env[i] - s := strings.SplitN(e, "=", 2)[0] + for i, e := range env { found := false - for j := i + 1; j < n; j++ { - if s == strings.SplitN(env[j], "=", 2)[0] { - found = true - break + if eq := strings.IndexByte(e, '='); eq != -1 { + keq := e[:eq+1] // "key=" + for _, e2 := range env[i+1:] { + if strings.HasPrefix(e2, keq) { + found = true + break + } } } if !found { @@ -159,10 +159,6 @@ func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) { env = append(env, "CONTENT_TYPE="+ctype) } - if h.Env != nil { - env = append(env, h.Env...) - } - envPath := os.Getenv("PATH") if envPath == "" { envPath = "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin" @@ -181,6 +177,10 @@ func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) { } } + if h.Env != nil { + env = append(env, h.Env...) + } + env = removeLeadingDuplicates(env) var cwd, path string |