From 58e0800b81f6867690d571820e73df6d3ec2ce55 Mon Sep 17 00:00:00 2001 From: Anatoli Papirovski Date: Wed, 18 Apr 2018 10:17:06 +0200 Subject: [PATCH] http: cleanup parser properties Cleanup constructor and freeParser to manage all existing parser properties, not just some. PR-URL: https://github.com/nodejs/node/pull/20126 Reviewed-By: Luigi Pinca Reviewed-By: Daniel Bevenius Reviewed-By: Matteo Collina --- lib/_http_client.js | 4 ---- lib/_http_common.js | 7 +++++++ lib/_http_server.js | 4 ---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/_http_client.js b/lib/_http_client.js index c3ef9de2049..22ae85c9278 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -606,7 +606,6 @@ function tickOnSocket(req, socket) { req.connection = socket; parser.reinitialize(HTTPParser.RESPONSE); parser.socket = socket; - parser.incoming = null; parser.outgoing = req; req.parser = parser; @@ -619,9 +618,6 @@ function tickOnSocket(req, socket) { // Propagate headers limit from request object to parser if (typeof req.maxHeadersCount === 'number') { parser.maxHeaderPairs = req.maxHeadersCount << 1; - } else { - // Set default value because parser may be reused from FreeList - parser.maxHeaderPairs = 2000; } parser.onIncoming = parserOnIncomingClient; diff --git a/lib/_http_common.js b/lib/_http_common.js index c8998f4d85a..7eb37511bd1 100644 --- a/lib/_http_common.js +++ b/lib/_http_common.js @@ -41,6 +41,8 @@ const kOnBody = HTTPParser.kOnBody | 0; const kOnMessageComplete = HTTPParser.kOnMessageComplete | 0; const kOnExecute = HTTPParser.kOnExecute | 0; +const MAX_HEADER_PAIRS = 2000; + // Only called in the slow case where slow means // that the request headers were either fragmented // across multiple TCP packets or too large to be @@ -159,6 +161,9 @@ const parsers = new FreeList('parsers', 1000, function() { parser.incoming = null; parser.outgoing = null; + parser.maxHeaderPairs = MAX_HEADER_PAIRS; + + parser.onIncoming = null; parser[kOnHeaders] = parserOnHeaders; parser[kOnHeadersComplete] = parserOnHeadersComplete; parser[kOnBody] = parserOnBody; @@ -180,6 +185,8 @@ function closeParserInstance(parser) { parser.close(); } function freeParser(parser, req, socket) { if (parser) { parser._headers = []; + parser._url = ''; + parser.maxHeaderPairs = MAX_HEADER_PAIRS; parser.onIncoming = null; if (parser._consumed) parser.unconsume(); diff --git a/lib/_http_server.js b/lib/_http_server.js index c3abfd37bb5..1d6cada3270 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -342,14 +342,10 @@ function connectionListenerInternal(server, socket) { parser.reinitialize(HTTPParser.REQUEST); parser.socket = socket; socket.parser = parser; - parser.incoming = null; // Propagate headers limit from server instance to parser if (typeof server.maxHeadersCount === 'number') { parser.maxHeaderPairs = server.maxHeadersCount << 1; - } else { - // Set default value because parser may be reused from FreeList - parser.maxHeaderPairs = 2000; } var state = {