Skip to content

Commit 6cec2ca

Browse files
committed
close.go: Fix mid read close
Closes #355
1 parent 28c6709 commit 6cec2ca

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

close.go

+7
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,13 @@ func (c *Conn) waitCloseHandshake() error {
182182
return c.readCloseFrameErr
183183
}
184184

185+
for i := int64(0); i < c.msgReader.payloadLength; i++ {
186+
_, err := c.br.ReadByte()
187+
if err != nil {
188+
return err
189+
}
190+
}
191+
185192
for {
186193
h, err := c.readLoop(ctx)
187194
if err != nil {

conn_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,27 @@ func TestConn(t *testing.T) {
308308
assert.ErrorIs(t, websocket.ErrClosed, err1)
309309
assert.ErrorIs(t, websocket.ErrClosed, err2)
310310
})
311+
312+
t.Run("MidReadClose", func(t *testing.T) {
313+
tt, c1, c2 := newConnTest(t, nil, nil)
314+
315+
tt.goEchoLoop(c2)
316+
317+
c1.SetReadLimit(131072)
318+
319+
for i := 0; i < 5; i++ {
320+
err := wstest.Echo(tt.ctx, c1, 131072)
321+
assert.Success(t, err)
322+
}
323+
324+
err := wsjson.Write(tt.ctx, c1, "four")
325+
assert.Success(t, err)
326+
_, _, err = c1.Reader(tt.ctx)
327+
assert.Success(t, err)
328+
329+
err = c1.Close(websocket.StatusNormalClosure, "")
330+
assert.Success(t, err)
331+
})
311332
}
312333

313334
func TestWasm(t *testing.T) {

0 commit comments

Comments
 (0)