diff --git a/lib/_http_server.js b/lib/_http_server.js index 0f5865126689d3..dd127f5ed3ef13 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -739,11 +739,18 @@ assignFunctionName(EE.captureRejectionSymbol, function(err, event, ...args) { }); function checkConnections() { - if (this.headersTimeout === 0 && this.requestTimeout === 0) { + const headersTimeout = + NumberIsFinite(this.headersTimeout) && this.headersTimeout >= 0 ? + this.headersTimeout : 0; + const requestTimeout = + NumberIsFinite(this.requestTimeout) && this.requestTimeout >= 0 ? + this.requestTimeout : 0; + + if (headersTimeout === 0 && requestTimeout === 0) { return; } - const expired = this[kConnections].expired(this.headersTimeout, this.requestTimeout); + const expired = this[kConnections].expired(headersTimeout, requestTimeout); for (let i = 0; i < expired.length; i++) { const socket = expired[i].socket; diff --git a/test/parallel/test-http-server-invalid-headers-timeout-no-abort.js b/test/parallel/test-http-server-invalid-headers-timeout-no-abort.js new file mode 100644 index 00000000000000..fc0a7041be9350 --- /dev/null +++ b/test/parallel/test-http-server-invalid-headers-timeout-no-abort.js @@ -0,0 +1,19 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { createServer } = require('http'); + +const server = createServer({ + connectionsCheckingInterval: 1, +}, common.mustNotCall()); + +// Invalid headersTimeout should not crash the server +server.headersTimeout = 'im-not-a-number'; +assert.strictEqual(server.headersTimeout, 'im-not-a-number'); + +server.listen(0, '127.0.0.1', common.mustCall(() => { + setTimeout(common.mustCall(() => { + server.close(common.mustCall()); + }), common.platformTimeout(50)); +}));