summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-11-21 00:00:43 +0100
committerAnna Henningsen <anna@addaleax.net>2019-12-01 03:00:46 +0100
commit6bf5a1d691291cdfcc4941e68f00d0003e565476 (patch)
tree9cc41f5c66cf6ac67b9392c06619125cc33585e9 /lib
parent2205f85b2caadee425a0a86bd8cc3bcb889e4bfe (diff)
downloadandroid-node-v8-6bf5a1d691291cdfcc4941e68f00d0003e565476.tar.gz
android-node-v8-6bf5a1d691291cdfcc4941e68f00d0003e565476.tar.bz2
android-node-v8-6bf5a1d691291cdfcc4941e68f00d0003e565476.zip
http: make maximum header size configurable per-stream or per-server
Make `maxHeaderSize` a.k.a. `--max-header-size` configurable now that the legacy parser is gone (which only supported a single global value). Refs: https://github.com/nodejs/node/pull/30567 PR-URL: https://github.com/nodejs/node/pull/30570 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/_http_client.js9
-rw-r--r--lib/_http_server.js9
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/_http_client.js b/lib/_http_client.js
index 6d8cb8fc8e..ece93d14e0 100644
--- a/lib/_http_client.js
+++ b/lib/_http_client.js
@@ -55,6 +55,7 @@ const {
ERR_INVALID_PROTOCOL,
ERR_UNESCAPED_CHARACTERS
} = codes;
+const { validateInteger } = require('internal/validators');
const { getTimerDuration } = require('internal/timers');
const {
DTRACE_HTTP_CLIENT_REQUEST,
@@ -179,6 +180,11 @@ function ClientRequest(input, options, cb) {
method = this.method = 'GET';
}
+ const maxHeaderSize = options.maxHeaderSize;
+ if (maxHeaderSize !== undefined)
+ validateInteger(maxHeaderSize, 'maxHeaderSize', 0);
+ this.maxHeaderSize = maxHeaderSize;
+
this.path = options.path || '/';
if (cb) {
this.once('response', cb);
@@ -669,7 +675,8 @@ function tickOnSocket(req, socket) {
const parser = parsers.alloc();
req.socket = socket;
parser.initialize(HTTPParser.RESPONSE,
- new HTTPClientAsyncResource('HTTPINCOMINGMESSAGE', req));
+ new HTTPClientAsyncResource('HTTPINCOMINGMESSAGE', req),
+ req.maxHeaderSize || 0);
parser.socket = socket;
parser.outgoing = req;
req.parser = parser;
diff --git a/lib/_http_server.js b/lib/_http_server.js
index 3d114d8711..6c52f7adbc 100644
--- a/lib/_http_server.js
+++ b/lib/_http_server.js
@@ -58,6 +58,7 @@ const {
ERR_INVALID_ARG_TYPE,
ERR_INVALID_CHAR
} = require('internal/errors').codes;
+const { validateInteger } = require('internal/validators');
const Buffer = require('buffer').Buffer;
const {
DTRACE_HTTP_SERVER_REQUEST,
@@ -322,6 +323,11 @@ function Server(options, requestListener) {
this[kIncomingMessage] = options.IncomingMessage || IncomingMessage;
this[kServerResponse] = options.ServerResponse || ServerResponse;
+ const maxHeaderSize = options.maxHeaderSize;
+ if (maxHeaderSize !== undefined)
+ validateInteger(maxHeaderSize, 'maxHeaderSize', 0);
+ this.maxHeaderSize = maxHeaderSize;
+
net.Server.call(this, { allowHalfOpen: true });
if (requestListener) {
@@ -379,7 +385,8 @@ function connectionListenerInternal(server, socket) {
// https://github.com/nodejs/node/pull/21313
parser.initialize(
HTTPParser.REQUEST,
- new HTTPServerAsyncResource('HTTPINCOMINGMESSAGE', socket)
+ new HTTPServerAsyncResource('HTTPINCOMINGMESSAGE', socket),
+ server.maxHeaderSize || 0
);
parser.socket = socket;