Bläddra i källkod

mitigate a potential DoS against websocket listeners

Websocket listeners would process an arbitrary number of invalid
(non-text or blank) messages without throttling. This imposes fakelag
on such messages by treating them as blank lines.
tags/v2.3.0-rc1
Shivaram Lingamneni 3 år sedan
förälder
incheckning
aad39024b9
1 ändrade filer med 11 tillägg och 9 borttagningar
  1. 11
    9
      irc/ircconn.go

+ 11
- 9
irc/ircconn.go Visa fil

@@ -124,16 +124,18 @@ func (wc IRCWSConn) WriteLines(buffers [][]byte) (err error) {
124 124
 }
125 125
 
126 126
 func (wc IRCWSConn) ReadLine() (line []byte, err error) {
127
-	for {
128
-		var messageType int
129
-		messageType, line, err = wc.conn.ReadMessage()
130
-		// on empty message or non-text message, try again, block if necessary
131
-		if err != nil || (messageType == websocket.TextMessage && len(line) != 0) {
132
-			if err == websocket.ErrReadLimit {
133
-				err = errReadQ
134
-			}
135
-			return
127
+	messageType, line, err := wc.conn.ReadMessage()
128
+	if err == nil {
129
+		if messageType == websocket.TextMessage {
130
+			return line, nil
131
+		} else {
132
+			// for purposes of fakelag, treat non-text message as an empty line
133
+			return nil, nil
136 134
 		}
135
+	} else if err == websocket.ErrReadLimit {
136
+		return line, errReadQ
137
+	} else {
138
+		return line, err
137 139
 	}
138 140
 }
139 141
 

Laddar…
Avbryt
Spara