From 425e833ab13373edf1dd5a0706f07100db14e3c6 Mon Sep 17 00:00:00 2001 From: Jonathan Neve Date: Thu, 17 Nov 2022 10:48:55 -0500 Subject: [PATCH] fix: catch errors when destroying invalid upgrades (#658) Before this change, receiving an HTTP2 upgrade would make the server crash: > Error: read ECONNRESET > at TCP.onStreamRead (node:internal/stream_base_commons:217:20) { > errno: -104, > code: 'ECONNRESET', > syscall: 'read' > } This can be reproduced with Node.js v14.15.3, v16.18.1 and v18.12.1. --- lib/server.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/server.ts b/lib/server.ts index 58371c9c..c99f8ef8 100644 --- a/lib/server.ts +++ b/lib/server.ts @@ -678,6 +678,9 @@ export class Server extends BaseServer { setTimeout(function() { // @ts-ignore if (socket.writable && socket.bytesWritten <= 0) { + socket.on("error", e => { + debug("error while destroying upgrade: %s", e.message); + }); return socket.end(); } }, destroyUpgradeTimeout);