]> Cypherpunks repositories - gostls13.git/commitdiff
os/exec: LookPath on Unix shouldn't look in cwd when PATH is empty
authorPéter Surányi <speter.go1@gmail.com>
Thu, 7 Feb 2013 14:41:35 +0000 (06:41 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 7 Feb 2013 14:41:35 +0000 (06:41 -0800)
R=golang-dev, dave, bradfitz
CC=golang-dev
https://golang.org/cl/7305053

src/pkg/os/exec/lp_unix.go
src/pkg/os/exec/lp_unix_test.go [new file with mode: 0644]

index 21632219972b365fd60af78674e2797dc38d3dec..1d1ec07da4deeef06ae98907b534692959fe3d01 100644 (file)
@@ -42,6 +42,9 @@ func LookPath(file string) (string, error) {
                return "", &Error{file, err}
        }
        pathenv := os.Getenv("PATH")
+       if pathenv == "" {
+               return "", &Error{file, ErrNotFound}
+       }
        for _, dir := range strings.Split(pathenv, ":") {
                if dir == "" {
                        // Unix shell semantics: path element "" means "."
diff --git a/src/pkg/os/exec/lp_unix_test.go b/src/pkg/os/exec/lp_unix_test.go
new file mode 100644 (file)
index 0000000..3cba13e
--- /dev/null
@@ -0,0 +1,52 @@
+// 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 freebsd linux netbsd openbsd
+
+package exec
+
+import (
+       "io/ioutil"
+       "os"
+       "testing"
+)
+
+func TestLookPathUnixEmptyPath(t *testing.T) {
+       tmp, err := ioutil.TempDir("", "TestLookPathUnixEmptyPath")
+       if err != nil {
+               t.Fatal("TempDir failed: ", err)
+       }
+       defer os.RemoveAll(tmp)
+       wd, err := os.Getwd()
+       if err != nil {
+               t.Fatal("Getwd failed: ", err)
+       }
+       err = os.Chdir(tmp)
+       if err != nil {
+               t.Fatal("Chdir failed: ", err)
+       }
+       defer os.Chdir(wd)
+
+       f, err := os.OpenFile("exec_me", os.O_CREATE|os.O_EXCL, 0700)
+       if err != nil {
+               t.Fatal("OpenFile failed: ", err)
+       }
+       defer f.Close()
+
+       pathenv := os.Getenv("PATH")
+       defer os.Setenv("PATH", pathenv)
+
+       err = os.Setenv("PATH", "")
+       if err != nil {
+               t.Fatal("Setenv failed: ", err)
+       }
+
+       path, err := LookPath("exec_me")
+       if err == nil {
+               t.Fatal("LookPath found exec_me in empty $PATH")
+       }
+       if path != "" {
+               t.Fatalf("LookPath path == %q when err != nil", path)
+       }
+}