Skip to content

Commit 57a6a7a

Browse files
panjf2000neild
authored andcommitted
http2: prevent uninitialized pipe from being written
For golang/go#65927 Change-Id: I6f48706156384e026968cf9a6d9e0ec76b46fabf Reviewed-on: https://go-review.googlesource.com/c/net/+/566675 Reviewed-by: Damien Neil <dneil@google.com> Reviewed-by: Carlos Amedee <carlos@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
1 parent ea095bc commit 57a6a7a

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

http2/pipe.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ func (p *pipe) Read(d []byte) (n int, err error) {
7777
}
7878
}
7979

80-
var errClosedPipeWrite = errors.New("write on closed buffer")
80+
var (
81+
errClosedPipeWrite = errors.New("write on closed buffer")
82+
errUninitializedPipeWrite = errors.New("write on uninitialized buffer")
83+
)
8184

8285
// Write copies bytes from p into the buffer and wakes a reader.
8386
// It is an error to write more data than the buffer can hold.
@@ -91,6 +94,12 @@ func (p *pipe) Write(d []byte) (n int, err error) {
9194
if p.err != nil || p.breakErr != nil {
9295
return 0, errClosedPipeWrite
9396
}
97+
// pipe.setBuffer is never invoked, leaving the buffer uninitialized.
98+
// We shouldn't try to write to an uninitialized pipe,
99+
// but returning an error is better than panicking.
100+
if p.b == nil {
101+
return 0, errUninitializedPipeWrite
102+
}
94103
return p.b.Write(d)
95104
}
96105

0 commit comments

Comments
 (0)