"os"
        "path/filepath"
        "regexp"
+       "runtime"
        "strconv"
        "strings"
 )
 
 var trailingPort = regexp.MustCompile(`:([0-9]+)$`)
 
+var osDefaultInheritEnv = map[string][]string{
+       "darwin":  []string{"DYLD_LIBRARY_PATH"},
+       "freebsd": []string{"LD_LIBRARY_PATH"},
+       "hpux":    []string{"LD_LIBRARY_PATH", "SHLIB_PATH"},
+       "linux":   []string{"LD_LIBRARY_PATH"},
+       "windows": []string{"SystemRoot", "COMSPEC", "PATHEXT", "WINDIR"},
+}
+
 // Handler runs an executable in a subprocess with a CGI environment.
 type Handler struct {
        Path string // path to the CGI executable
                env = append(env, h.Env...)
        }
 
+       path := os.Getenv("PATH")
+       if path == "" {
+               path = "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin"
+       }
+       env = append(env, "PATH="+path)
+
        for _, e := range h.InheritEnv {
                if v := os.Getenv(e); v != "" {
                        env = append(env, e+"="+v)
                }
        }
 
+       for _, e := range osDefaultInheritEnv[runtime.GOOS] {
+               if v := os.Getenv(e); v != "" {
+                       env = append(env, e+"="+v)
+               }
+       }
+
        cwd, pathBase := filepath.Split(h.Path)
        if cwd == "" {
                cwd = "."
 
                Path: os.Args[0],
                Root: "/test.go",
                Args: []string{"-test.run=TestBeChildCGIProcess"},
-               // When using a shared library with gccgo, make sure
-               // we can still find the library when we exec
-               // ourselves.
-               InheritEnv: []string{
-                       "LD_LIBRARY_PATH",
-                       "SHLIB_PATH",
-                       "DYLD_LIBRARY_PATH",
-               },
        }
        expectedMap := map[string]string{
                "test":                  "Hello CGI-in-CGI",