Skip to content

Commit 88861c2

Browse files
authored
Merge pull request #116 from tommyminds/bugfix/ws_malformed_package
Fix websocket malformed packet bug
2 parents c174cfd + 7ba6cf2 commit 88861c2

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

listeners/websocket.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package listeners
77
import (
88
"context"
99
"errors"
10+
"io"
1011
"net"
1112
"net/http"
1213
"sync"
@@ -137,25 +138,35 @@ type wsConn struct {
137138
}
138139

139140
// Read reads the next span of bytes from the websocket connection and returns the number of bytes read.
140-
func (ws *wsConn) Read(p []byte) (n int, err error) {
141+
func (ws *wsConn) Read(p []byte) (int, error) {
141142
op, r, err := ws.c.NextReader()
142143
if err != nil {
143-
return
144+
return 0, err
144145
}
145146

146147
if op != websocket.BinaryMessage {
147148
err = ErrInvalidMessage
148-
return
149+
return 0, err
149150
}
150151

151-
return r.Read(p)
152+
var n, br int
153+
for {
154+
br, err = r.Read(p[n:])
155+
n += br
156+
if err != nil {
157+
if err == io.EOF {
158+
err = nil
159+
}
160+
return n, err
161+
}
162+
}
152163
}
153164

154165
// Write writes bytes to the websocket connection.
155-
func (ws *wsConn) Write(p []byte) (n int, err error) {
156-
err = ws.c.WriteMessage(websocket.BinaryMessage, p)
166+
func (ws *wsConn) Write(p []byte) (int, error) {
167+
err := ws.c.WriteMessage(websocket.BinaryMessage, p)
157168
if err != nil {
158-
return
169+
return 0, err
159170
}
160171

161172
return len(p), nil

0 commit comments

Comments
 (0)