Skip to content

Commit d5095fe

Browse files
fix(eio): prevent the client from upgrading twice (uws)
Related: #5066
1 parent da61381 commit d5095fe

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

packages/engine.io/lib/userver.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,13 @@ export class uServer extends BaseServer {
185185
const client = this.clients[id];
186186
if (!client) {
187187
debug("upgrade attempt for closed client");
188-
res.close();
188+
return res.close();
189189
} else if (client.upgrading) {
190190
debug("transport has already been trying to upgrade");
191-
res.close();
191+
return res.close();
192192
} else if (client.upgraded) {
193193
debug("transport had already been upgraded");
194-
res.close();
194+
return res.close();
195195
} else {
196196
debug("upgrading existing transport");
197197
transport = this.createTransport(req._query.transport, req);

packages/engine.io/test/server.js

+20
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,26 @@ describe("server", () => {
205205
});
206206
});
207207

208+
it("should prevent the client from upgrading twice", (done) => {
209+
engine = listen((port) => {
210+
const client = new ClientSocket(`ws://localhost:${port}`);
211+
212+
client.on("upgrade", () => {
213+
const socket = new WebSocket(
214+
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket&sid=${client.id}`,
215+
);
216+
217+
socket.on("error", () => {});
218+
219+
socket.on("close", () => {
220+
client.close();
221+
222+
done();
223+
});
224+
});
225+
});
226+
});
227+
208228
it("should disallow `__proto__` as transport (polling)", (done) => {
209229
const partialDone = createPartialDone(done, 2);
210230

0 commit comments

Comments
 (0)