]> Cypherpunks.ru repositories - gostls13.git/commitdiff
net/http/cgi: make provided Env override even system env vars
authorSteven Hartland <steven.hartland@multiplay.co.uk>
Fri, 25 Sep 2015 08:51:50 +0000 (08:51 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 14 Oct 2015 15:10:09 +0000 (15:10 +0000)
Allow all CGI environment settings from the inherited set and default
inherited set to be overridden including PATH by Env.

Change-Id: Ief8d33247b879fa87a8bfd6416d4813116db98de
Reviewed-on: https://go-review.googlesource.com/14959
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>

src/net/http/cgi/host.go
src/net/http/cgi/host_test.go

index 4efbe7abeec001395c6cec764a081299b4a0031f..1ae66e097ce5835b300de20e3a2533b955fa939e 100644 (file)
@@ -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
index 4aa67e4e5f3835881b6af37ffddaac6c9678bb29..8a82789fd34eeae36c8cb2dae85e442bbb36a103 100644 (file)
@@ -487,12 +487,14 @@ func TestEnvOverride(t *testing.T) {
                Args: []string{cgifile},
                Env: []string{
                        "SCRIPT_FILENAME=" + cgifile,
-                       "REQUEST_URI=/foo/bar"},
+                       "REQUEST_URI=/foo/bar",
+                       "PATH=/wibble"},
        }
        expectedMap := map[string]string{
                "cwd": cwd,
                "env-SCRIPT_FILENAME": cgifile,
                "env-REQUEST_URI":     "/foo/bar",
+               "env-PATH":            "/wibble",
        }
        runCgiTest(t, h, "GET /test.cgi HTTP/1.0\nHost: example.com\n\n", expectedMap)
 }