Skip to content

Commit ea87744

Browse files
committed
netconn: Disable read limit on WebSocket
Closes #245
1 parent 085d46c commit ea87744

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

Diff for: netconn.go

+4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ import (
3838
//
3939
// A received StatusNormalClosure or StatusGoingAway close frame will be translated to
4040
// io.EOF when reading.
41+
//
42+
// Furthermore, the ReadLimit is set to -1 to disable it.
4143
func NetConn(ctx context.Context, c *Conn, msgType MessageType) net.Conn {
44+
c.SetReadLimit(-1)
45+
4246
nc := &netConn{
4347
c: c,
4448
msgType: msgType,

Diff for: read.go

+17-4
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,16 @@ func (c *Conn) CloseRead(ctx context.Context) context.Context {
7474
// By default, the connection has a message read limit of 32768 bytes.
7575
//
7676
// When the limit is hit, the connection will be closed with StatusMessageTooBig.
77+
//
78+
// Set to -1 to disable.
7779
func (c *Conn) SetReadLimit(n int64) {
78-
// We add read one more byte than the limit in case
79-
// there is a fin frame that needs to be read.
80-
c.msgReader.limitReader.limit.Store(n + 1)
80+
if n >= 0 {
81+
// We read one more byte than the limit in case
82+
// there is a fin frame that needs to be read.
83+
n++
84+
}
85+
86+
c.msgReader.limitReader.limit.Store(n)
8187
}
8288

8389
const defaultReadLimit = 32768
@@ -455,7 +461,11 @@ func (lr *limitReader) reset(r io.Reader) {
455461
}
456462

457463
func (lr *limitReader) Read(p []byte) (int, error) {
458-
if lr.n <= 0 {
464+
if lr.n < 0 {
465+
return lr.r.Read(p)
466+
}
467+
468+
if lr.n == 0 {
459469
err := fmt.Errorf("read limited at %v bytes", lr.limit.Load())
460470
lr.c.writeError(StatusMessageTooBig, err)
461471
return 0, err
@@ -466,6 +476,9 @@ func (lr *limitReader) Read(p []byte) (int, error) {
466476
}
467477
n, err := lr.r.Read(p)
468478
lr.n -= int64(n)
479+
if lr.n < 0 {
480+
lr.n = 0
481+
}
469482
return n, err
470483
}
471484

0 commit comments

Comments
 (0)