Skip to content

Commit a681493

Browse files
committed
[fix minor] Prevent crashes from attempting to remove listeners more than once when proxying websocket requests.
1 parent 2055d0c commit a681493

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

lib/node-http-proxy/http-proxy.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,8 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
472472
// the appropriate events.
473473
//
474474
function onUpgrade (reverseProxy, proxySocket) {
475+
var detached;
476+
475477
if (!reverseProxy) {
476478
proxySocket.end();
477479
socket.end();
@@ -543,12 +545,15 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
543545
// from `reverseProxy` and `proxySocket`.
544546
//
545547
function detach() {
546-
proxySocket.destroySoon();
547-
proxySocket.removeListener('end', listeners.onIncomingClose);
548-
proxySocket.removeListener('data', listeners.onIncoming);
549-
reverseProxy.incoming.socket.destroySoon();
550-
reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose);
551-
reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing);
548+
if (!detached) {
549+
detached = true;
550+
proxySocket.destroySoon();
551+
proxySocket.removeListener('end', listeners.onIncomingClose);
552+
proxySocket.removeListener('data', listeners.onIncoming);
553+
reverseProxy.incoming.socket.destroySoon();
554+
reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose);
555+
reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing);
556+
}
552557
}
553558

554559
//

0 commit comments

Comments
 (0)