From 22d4bdf00d1a03885dc0171125faddfaef730066 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sun, 26 Jun 2022 08:35:42 +0200 Subject: [PATCH] fix: ignore packet received after disconnection Related: https://github.com/socketio/socket.io/issues/3095 Backported from https://github.com/socketio/socket.io/commit/494c64e44f645cbd24c645f1186d203789e84af0 --- lib/socket.js | 6 +++++- test/socket.io.js | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/socket.js b/lib/socket.js index 4e97eb55dd..33ad8ba4a6 100644 --- a/lib/socket.js +++ b/lib/socket.js @@ -525,7 +525,11 @@ Socket.prototype.dispatch = function(event){ if (err) { return self.error(err.data || err.message); } - emit.apply(self, event); + if (self.connected) { + emit.apply(self, event); + } else { + debug("ignore packet received after disconnection"); + } }); } this.run(event, dispatchSocket); diff --git a/test/socket.io.js b/test/socket.io.js index 6cc085b798..b75f0c259d 100644 --- a/test/socket.io.js +++ b/test/socket.io.js @@ -1838,6 +1838,33 @@ describe('socket.io', function(){ }); }); + it("should ignore a packet received after disconnection", (done) => { + const srv = http(); + const sio = io(srv); + + srv.listen(() => { + const clientSocket = client(srv); + + const success = () => { + clientSocket.close(); + sio.close(); + done(); + }; + + sio.on("connection", (socket) => { + socket.on("test", () => { + done(new Error("should not happen")); + }); + socket.on("disconnect", success); + }); + + clientSocket.on("connect", () => { + clientSocket.emit("test", Buffer.alloc(10)); + clientSocket.disconnect(); + }); + }); + }); + it('should always trigger the callback (if provided) when joining a room', function(done){ var srv = http(); var sio = io(srv);