diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2012-09-14 13:40:22 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2012-09-14 13:40:22 -0700 |
| commit | 5c5c2c8112f774b118b9251eb15c2df529ad454c (patch) | |
| tree | 57f1bd49993cea6c86cb7c3bc68958ad64faa531 /src/pkg/os/exec/exec.go | |
| parent | cc06593c681878a2a87f3612aa024e69a1ac074b (diff) | |
| download | go-5c5c2c8112f774b118b9251eb15c2df529ad454c.tar.xz | |
os/exec: don't crash when out of fds
Command.Start could crash before if no fds were available
because a nil *os.File of /dev/null was added to the cleanup
list, which crashed before returning the proper error.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/6514043
Diffstat (limited to 'src/pkg/os/exec/exec.go')
| -rw-r--r-- | src/pkg/os/exec/exec.go | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/os/exec/exec.go b/src/pkg/os/exec/exec.go index 3db3ab095d..c4907cd7d7 100644 --- a/src/pkg/os/exec/exec.go +++ b/src/pkg/os/exec/exec.go @@ -143,6 +143,9 @@ func (c *Cmd) argv() []string { func (c *Cmd) stdin() (f *os.File, err error) { if c.Stdin == nil { f, err = os.Open(os.DevNull) + if err != nil { + return + } c.closeAfterStart = append(c.closeAfterStart, f) return } @@ -182,6 +185,9 @@ func (c *Cmd) stderr() (f *os.File, err error) { func (c *Cmd) writerDescriptor(w io.Writer) (f *os.File, err error) { if w == nil { f, err = os.OpenFile(os.DevNull, os.O_WRONLY, 0) + if err != nil { + return + } c.closeAfterStart = append(c.closeAfterStart, f) return } |
