mirror of
https://github.com/golang/go.git
synced 2025-05-29 11:25:43 +00:00
internal/poll: better panic for invalid write return value
For #61060 Change-Id: I13cd73b4062cb7bd248d2a4afae06dfa29ac0203 Reviewed-on: https://go-review.googlesource.com/c/go/+/577955 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Commit-Queue: Ian Lance Taylor <iant@google.com> Reviewed-by: Damien Neil <dneil@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
7b3c38045b
commit
b6778c5230
@ -7,6 +7,7 @@
|
|||||||
package poll
|
package poll
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"internal/itoa"
|
||||||
"internal/syscall/unix"
|
"internal/syscall/unix"
|
||||||
"io"
|
"io"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
@ -379,6 +380,14 @@ func (fd *FD) Write(p []byte) (int, error) {
|
|||||||
}
|
}
|
||||||
n, err := ignoringEINTRIO(syscall.Write, fd.Sysfd, p[nn:max])
|
n, err := ignoringEINTRIO(syscall.Write, fd.Sysfd, p[nn:max])
|
||||||
if n > 0 {
|
if n > 0 {
|
||||||
|
if n > max-nn {
|
||||||
|
// This can reportedly happen when using
|
||||||
|
// some VPN software. Issue #61060.
|
||||||
|
// If we don't check this we will panic
|
||||||
|
// with slice bounds out of range.
|
||||||
|
// Use a more informative panic.
|
||||||
|
panic("invalid return from write: got " + itoa.Itoa(n) + " from a write of " + itoa.Itoa(max-nn))
|
||||||
|
}
|
||||||
nn += n
|
nn += n
|
||||||
}
|
}
|
||||||
if nn == len(p) {
|
if nn == len(p) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user