summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2018-12-03 12:27:46 -0500
committercjihrig <cjihrig@gmail.com>2018-12-20 09:31:52 -0500
commit632f2633249dc0f295e9d2abab33baaf0f75ce6f (patch)
tree6f6f6a4f51f31a50a18f390793d6e27ae7bb9456 /src
parent436f4de38f511508710eb1492f4d23a9f427e7f7 (diff)
downloadandroid-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.h18
-rw-r--r--src/node_options.cc4
-rw-r--r--src/node_options.h1
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;