1
0
mirror of https://github.com/golang/go synced 2024-10-03 22:31:21 -06:00

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
This commit is contained in:
Brad Fitzpatrick 2012-09-14 13:40:22 -07:00
parent cc06593c68
commit 5c5c2c8112

View File

@ -143,6 +143,9 @@ func (c *Cmd) argv() []string {
func (c *Cmd) stdin() (f *os.File, err error) { func (c *Cmd) stdin() (f *os.File, err error) {
if c.Stdin == nil { if c.Stdin == nil {
f, err = os.Open(os.DevNull) f, err = os.Open(os.DevNull)
if err != nil {
return
}
c.closeAfterStart = append(c.closeAfterStart, f) c.closeAfterStart = append(c.closeAfterStart, f)
return 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) { func (c *Cmd) writerDescriptor(w io.Writer) (f *os.File, err error) {
if w == nil { if w == nil {
f, err = os.OpenFile(os.DevNull, os.O_WRONLY, 0) f, err = os.OpenFile(os.DevNull, os.O_WRONLY, 0)
if err != nil {
return
}
c.closeAfterStart = append(c.closeAfterStart, f) c.closeAfterStart = append(c.closeAfterStart, f)
return return
} }