diff options
author | cjihrig <cjihrig@gmail.com> | 2018-12-03 12:27:46 -0500 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2018-12-20 09:31:52 -0500 |
commit | 632f2633249dc0f295e9d2abab33baaf0f75ce6f (patch) | |
tree | 6f6f6a4f51f31a50a18f390793d6e27ae7bb9456 /src | |
parent | 436f4de38f511508710eb1492f4d23a9f427e7f7 (diff) | |
download | android-node-v8-632f2633249dc0f295e9d2abab33baaf0f75ce6f.tar.gz android-node-v8-632f2633249dc0f295e9d2abab33baaf0f75ce6f.tar.bz2 android-node-v8-632f2633249dc0f295e9d2abab33baaf0f75ce6f.zip |
cli: add --max-http-header-size flag
Allow the maximum size of HTTP headers to be overridden from
the command line.
co-authored-by: Matteo Collina <hello@matteocollina.com>
PR-URL: https://github.com/nodejs/node/pull/24811
Fixes: https://github.com/nodejs/node/issues/24692
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Myles Borins <myles.borins@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/node_http_parser_impl.h | 18 | ||||
-rw-r--r-- | src/node_options.cc | 4 | ||||
-rw-r--r-- | src/node_options.h | 1 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/node_http_parser_impl.h b/src/node_http_parser_impl.h index 4233ccbfca..9274f9dae0 100644 --- a/src/node_http_parser_impl.h +++ b/src/node_http_parser_impl.h @@ -830,7 +830,7 @@ class Parser : public AsyncWrap, public StreamListener { int TrackHeader(size_t len) { #ifdef NODE_EXPERIMENTAL_HTTP header_nread_ += len; - if (header_nread_ >= kMaxHeaderSize) { + if (header_nread_ >= per_process_opts->max_http_header_size) { llhttp_set_error_reason(&parser_, "HPE_HEADER_OVERFLOW:Header overflow"); return HPE_USER; } @@ -892,9 +892,6 @@ class Parser : public AsyncWrap, public StreamListener { typedef int (Parser::*DataCall)(const char* at, size_t length); static const parser_settings_t settings; -#ifdef NODE_EXPERIMENTAL_HTTP - static const uint64_t kMaxHeaderSize = 8 * 1024; -#endif /* NODE_EXPERIMENTAL_HTTP */ }; const parser_settings_t Parser::settings = { @@ -916,6 +913,14 @@ const parser_settings_t Parser::settings = { }; +#ifndef NODE_EXPERIMENTAL_HTTP +void InitMaxHttpHeaderSizeOnce() { + const uint32_t max_http_header_size = per_process_opts->max_http_header_size; + http_parser_set_max_header_size(max_http_header_size); +} +#endif /* NODE_EXPERIMENTAL_HTTP */ + + void InitializeHttpParser(Local<Object> target, Local<Value> unused, Local<Context> context, @@ -965,6 +970,11 @@ void InitializeHttpParser(Local<Object> target, target->Set(env->context(), FIXED_ONE_BYTE_STRING(env->isolate(), "HTTPParser"), t->GetFunction(env->context()).ToLocalChecked()).FromJust(); + +#ifndef NODE_EXPERIMENTAL_HTTP + static uv_once_t init_once = UV_ONCE_INIT; + uv_once(&init_once, InitMaxHttpHeaderSizeOnce); +#endif /* NODE_EXPERIMENTAL_HTTP */ } } // anonymous namespace diff --git a/src/node_options.cc b/src/node_options.cc index d4cc19eb02..117bff4a94 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -259,6 +259,10 @@ PerProcessOptionsParser::PerProcessOptionsParser() { kAllowedInEnvironment); AddAlias("--trace-events-enabled", { "--trace-event-categories", "v8,node,node.async_hooks" }); + AddOption("--max-http-header-size", + "set the maximum size of HTTP headers (default: 8KB)", + &PerProcessOptions::max_http_header_size, + kAllowedInEnvironment); AddOption("--v8-pool-size", "set V8's thread pool size", &PerProcessOptions::v8_thread_pool_size, diff --git a/src/node_options.h b/src/node_options.h index f5489900b4..ae7d7a4be5 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -151,6 +151,7 @@ class PerProcessOptions : public Options { std::string title; std::string trace_event_categories; std::string trace_event_file_pattern = "node_trace.${rotation}.log"; + uint64_t max_http_header_size = 8 * 1024; int64_t v8_thread_pool_size = 4; bool zero_fill_all_buffers = false; |