3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-14 07:59:31 +01:00

Merge pull request #1226 from slingamn/websocket_dos

mitigate a potential DoS against websocket listeners
This commit is contained in:
Shivaram Lingamneni 2020-08-06 01:08:01 -07:00 committed by GitHub
commit 88b09e5919
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -124,16 +124,18 @@ func (wc IRCWSConn) WriteLines(buffers [][]byte) (err error) {
} }
func (wc IRCWSConn) ReadLine() (line []byte, err error) { func (wc IRCWSConn) ReadLine() (line []byte, err error) {
for { messageType, line, err := wc.conn.ReadMessage()
var messageType int if err == nil {
messageType, line, err = wc.conn.ReadMessage() if messageType == websocket.TextMessage {
// on empty message or non-text message, try again, block if necessary return line, nil
if err != nil || (messageType == websocket.TextMessage && len(line) != 0) { } else {
if err == websocket.ErrReadLimit { // for purposes of fakelag, treat non-text message as an empty line
err = errReadQ return nil, nil
}
return
} }
} else if err == websocket.ErrReadLimit {
return line, errReadQ
} else {
return line, err
} }
} }