From: Heschi Kreinick Date: Wed, 8 Mar 2023 21:48:06 +0000 (-0500) Subject: [release-branch.go1.19] os/signal/internal/pty: fix error handling X-Git-Tag: go1.19.8~15 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=20c96a7ddcd913e7fe627a30c91bcc73b655944c;p=gostls13.git [release-branch.go1.19] os/signal/internal/pty: fix error handling When calling a c library function, you discover that an error has occurred, typically by looking at the return value of the function. Only after that can you use errno to figure out the cause of the error. Nothing about cgo changes that story -- you still have to look at the result before checking the error that represents errno. If not you can get false errors if the function happens to leak a non-zero errno. Fix testpty to check errors correctly. Fixes #58941 Change-Id: I4009e10b344e43fec291b941a63bcf4548937d44 Reviewed-on: https://go-review.googlesource.com/c/go/+/474619 Run-TryBot: Heschi Kreinick Reviewed-by: Carlos Amedee Auto-Submit: Heschi Kreinick TryBot-Result: Gopher Robot --- diff --git a/src/os/signal/internal/pty/pty.go b/src/os/signal/internal/pty/pty.go index 537febba55..92f738ddb9 100644 --- a/src/os/signal/internal/pty/pty.go +++ b/src/os/signal/internal/pty/pty.go @@ -42,14 +42,14 @@ func (e *PtyError) Unwrap() error { return e.Errno } // Open returns a control pty and the name of the linked process tty. func Open() (pty *os.File, processTTY string, err error) { m, err := C.posix_openpt(C.O_RDWR) - if err != nil { + if m < 0 { return nil, "", ptyError("posix_openpt", err) } - if _, err := C.grantpt(m); err != nil { + if res, err := C.grantpt(m); res < 0 { C.close(m) return nil, "", ptyError("grantpt", err) } - if _, err := C.unlockpt(m); err != nil { + if res, err := C.unlockpt(m); res < 0 { C.close(m) return nil, "", ptyError("unlockpt", err) }