From fe7dbea00e36d649f072d38070630c53c4efab17 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A9ter=20Sur=C3=A1nyi?= Date: Thu, 7 Feb 2013 06:41:35 -0800 Subject: [PATCH] os/exec: LookPath on Unix shouldn't look in cwd when PATH is empty R=golang-dev, dave, bradfitz CC=golang-dev https://golang.org/cl/7305053 --- src/pkg/os/exec/lp_unix.go | 3 ++ src/pkg/os/exec/lp_unix_test.go | 52 +++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/pkg/os/exec/lp_unix_test.go diff --git a/src/pkg/os/exec/lp_unix.go b/src/pkg/os/exec/lp_unix.go index 2163221997..1d1ec07da4 100644 --- a/src/pkg/os/exec/lp_unix.go +++ b/src/pkg/os/exec/lp_unix.go @@ -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 index 0000000000..3cba13e427 --- /dev/null +++ b/src/pkg/os/exec/lp_unix_test.go @@ -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) + } +} -- 2.48.1