diff --git a/SOURCES/0001-Disable-running-gyp-on-shared-deps.patch b/SOURCES/0001-Disable-running-gyp-on-shared-deps.patch index 33c2db1..9d3f51d 100644 --- a/SOURCES/0001-Disable-running-gyp-on-shared-deps.patch +++ b/SOURCES/0001-Disable-running-gyp-on-shared-deps.patch @@ -1,4 +1,4 @@ -From 39f761838b5fc10af995642bd44e6bb4c79085f1 Mon Sep 17 00:00:00 2001 +From 6c80c1956373978489a297a630f4f50222c47775 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Tue, 30 May 2023 13:12:35 +0200 Subject: [PATCH] Disable running gyp on shared deps @@ -22,5 +22,5 @@ index ef3eda2..8b52a4f 100644 tools/v8_gypfiles/inspector.gypi tools/v8_gypfiles/v8.gyp $(PYTHON) tools/gyp_node.py -f make -- -2.41.0 +2.44.0 diff --git a/SOURCES/0002-disable-fips-options.patch b/SOURCES/0002-disable-fips-options.patch index 67eeb96..ba8d2e8 100644 --- a/SOURCES/0002-disable-fips-options.patch +++ b/SOURCES/0002-disable-fips-options.patch @@ -1,4 +1,4 @@ -From b9370dcfba759c63e894f12abcf49699f1e8f0dc Mon Sep 17 00:00:00 2001 +From b7d979b5f7d28114050d1cdc43f39e6e83bd80d5 Mon Sep 17 00:00:00 2001 From: Honza Horak Date: Thu, 12 Oct 2023 13:52:59 +0200 Subject: [PATCH] disable fips options @@ -22,5 +22,5 @@ index 59ae7f8..7343396 100644 OSSL_PROVIDER* fips_provider = OSSL_PROVIDER_load(nullptr, "fips"); if (fips_provider == nullptr) -- -2.41.0 +2.44.0 diff --git a/SOURCES/0003-deps-nghttp2-update-to-1.57.0.patch b/SOURCES/0003-deps-nghttp2-update-to-1.57.0.patch index 758caad..713d05a 100644 --- a/SOURCES/0003-deps-nghttp2-update-to-1.57.0.patch +++ b/SOURCES/0003-deps-nghttp2-update-to-1.57.0.patch @@ -1,4 +1,4 @@ -From 3cdb8a61ff25e4d299d9d47284da5134bc5f1072 Mon Sep 17 00:00:00 2001 +From de21a714db98bade7a0438af0a0351a9f53f2fb8 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Thu, 12 Oct 2023 14:18:12 +0200 Subject: [PATCH] deps(nghttp2): update to 1.57.0 @@ -5798,5 +5798,5 @@ index 0dcd034..7b02f39 100644 } ] -- -2.41.0 +2.44.0 diff --git a/SOURCES/nodejs-CVE-2024-22019.patch b/SOURCES/0004-Fix-CVE-2024-22019.patch similarity index 94% rename from SOURCES/nodejs-CVE-2024-22019.patch rename to SOURCES/0004-Fix-CVE-2024-22019.patch index 40e8804..500134c 100644 --- a/SOURCES/nodejs-CVE-2024-22019.patch +++ b/SOURCES/0004-Fix-CVE-2024-22019.patch @@ -1,4 +1,7 @@ -Fix CVE-2024-22019 +From fb8b050abf63459eb83cad4d4bf695c56db2790a Mon Sep 17 00:00:00 2001 +From: Honza Horak +Date: Mon, 15 Apr 2024 15:21:35 +0200 +Subject: [PATCH] Fix CVE-2024-22019 Resolves: RHEL-28064 @@ -8,17 +11,20 @@ https://github.com/nodejs/node/commit/911cb33cdadab57a75f97186290ea8f3903a6171 and necessary rebase of llhttp from 6.0.11 to 6.1.0 that has the needed chunk features. -From 11bd886e0a4eadd7e55502758fff6486a3fa3a4e Mon Sep 17 00:00:00 2001 -From: Paolo Insogna -Date: Tue, 9 Jan 2024 18:10:04 +0100 -Subject: [PATCH] http: add maximum chunk extension size +Original patch: +> From 11bd886e0a4eadd7e55502758fff6486a3fa3a4e Mon Sep 17 00:00:00 2001 +> From: Paolo Insogna +> Date: Tue, 9 Jan 2024 18:10:04 +0100 +> Subject: [PATCH] http: add maximum chunk extension size +> +> Cherry-picked from v18 patch: +> https://github.com/nodejs/node/commit/911cb33cdadab57a75f97186290ea8f3903a6171 +> +> PR-URL: https://github.com/nodejs-private/node-private/pull/520 +> Refs: https://github.com/nodejs-private/node-private/pull/518 +> CVE-ID: CVE-2024-22019 -Cherry-picked from v18 patch: -https://github.com/nodejs/node/commit/911cb33cdadab57a75f97186290ea8f3903a6171 - -PR-URL: https://github.com/nodejs-private/node-private/pull/520 -Refs: https://github.com/nodejs-private/node-private/pull/518 -CVE-ID: CVE-2024-22019 +Signed-off-by: rpm-build --- deps/llhttp/.gitignore | 1 + deps/llhttp/CMakeLists.txt | 2 +- @@ -36,13 +42,13 @@ CVE-ID: CVE-2024-22019 diff --git a/deps/llhttp/.gitignore b/deps/llhttp/.gitignore new file mode 100644 -index 0000000000..98438a2cd3 +index 0000000..98438a2 --- /dev/null +++ b/deps/llhttp/.gitignore @@ -0,0 +1 @@ +libllhttp.pc diff --git a/deps/llhttp/CMakeLists.txt b/deps/llhttp/CMakeLists.txt -index d0382038b9..747564a76f 100644 +index d038203..747564a 100644 --- a/deps/llhttp/CMakeLists.txt +++ b/deps/llhttp/CMakeLists.txt @@ -1,7 +1,7 @@ @@ -55,7 +61,7 @@ index d0382038b9..747564a76f 100644 set(CMAKE_C_STANDARD 99) diff --git a/deps/llhttp/include/llhttp.h b/deps/llhttp/include/llhttp.h -index 2da66f15e6..78f27abc03 100644 +index 2da66f1..78f27ab 100644 --- a/deps/llhttp/include/llhttp.h +++ b/deps/llhttp/include/llhttp.h @@ -2,8 +2,8 @@ @@ -80,7 +86,7 @@ index 2da66f15e6..78f27abc03 100644 llhttp_data_cb on_body; diff --git a/deps/llhttp/src/api.c b/deps/llhttp/src/api.c -index c4ce197c58..d3065b3664 100644 +index c4ce197..d3065b3 100644 --- a/deps/llhttp/src/api.c +++ b/deps/llhttp/src/api.c @@ -355,6 +355,13 @@ int llhttp__on_chunk_header(llhttp_t* s, const char* p, const char* endp) { @@ -98,7 +104,7 @@ index c4ce197c58..d3065b3664 100644 int err; CALLBACK_MAYBE(s, on_chunk_complete); diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c -index 5e7c5d1093..e6db6e3188 100644 +index 5e7c5d1..46f86a0 100644 --- a/deps/llhttp/src/llhttp.c +++ b/deps/llhttp/src/llhttp.c @@ -340,6 +340,8 @@ enum llparse_state_e { @@ -188,7 +194,7 @@ index 5e7c5d1093..e6db6e3188 100644 + s_n_llhttp__internal__n_span_end_llhttp__on_chunk_parameters: { + const unsigned char* start; + int err; -+ ++ + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_chunk_parameters(state, start, p); @@ -293,7 +299,7 @@ index 5e7c5d1093..e6db6e3188 100644 + s_n_llhttp__internal__n_span_end_llhttp__on_chunk_parameters: { + const unsigned char* start; + int err; -+ ++ + start = state->_span_pos0; + state->_span_pos0 = NULL; + err = llhttp__on_chunk_parameters(state, start, p); @@ -312,7 +318,7 @@ index 5e7c5d1093..e6db6e3188 100644 state->error = 0x2; state->reason = "Invalid character in chunk parameters"; diff --git a/doc/api/errors.md b/doc/api/errors.md -index dcf8744d8b..a76bfe528d 100644 +index dcf8744..a76bfe5 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -3043,6 +3043,18 @@ malconfigured clients, if more than 8 KiB of HTTP header data is received then @@ -335,7 +341,7 @@ index dcf8744d8b..a76bfe528d 100644 ### `HPE_UNEXPECTED_CONTENT_LENGTH` diff --git a/lib/_http_server.js b/lib/_http_server.js -index 4e23266f63..325bce6f54 100644 +index 4e23266..325bce6 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -706,6 +706,12 @@ const requestHeaderFieldsTooLargeResponse = Buffer.from( @@ -362,7 +368,7 @@ index 4e23266f63..325bce6f54 100644 response = requestTimeoutResponse; break; diff --git a/src/node_http_parser.cc b/src/node_http_parser.cc -index 74f32480b9..b92e8486ae 100644 +index 74f3248..b92e848 100644 --- a/src/node_http_parser.cc +++ b/src/node_http_parser.cc @@ -79,6 +79,8 @@ const uint32_t kOnExecute = 5; @@ -424,7 +430,7 @@ index 74f32480b9..b92e8486ae 100644 Proxy::Raw, diff --git a/test/parallel/test-http-chunk-extensions-limit.js b/test/parallel/test-http-chunk-extensions-limit.js new file mode 100644 -index 0000000000..6868b3da6c +index 0000000..6868b3d --- /dev/null +++ b/test/parallel/test-http-chunk-extensions-limit.js @@ -0,0 +1,131 @@ @@ -560,7 +566,7 @@ index 0000000000..6868b3da6c + }); +} diff --git a/tools/update-llhttp.sh b/tools/update-llhttp.sh -index 12e2f465d7..a95eef1237 100755 +index 12e2f46..a95eef1 100755 --- a/tools/update-llhttp.sh +++ b/tools/update-llhttp.sh @@ -59,5 +59,5 @@ echo "" @@ -571,5 +577,5 @@ index 12e2f465d7..a95eef1237 100755 +echo "$ git commit -m \"deps: update llhttp to $LLHTTP_VERSION\"" echo "" -- -2.41.0 +2.44.0 diff --git a/SOURCES/0005-src-ensure-to-close-stream-when-destroying-session.patch b/SOURCES/0005-src-ensure-to-close-stream-when-destroying-session.patch new file mode 100644 index 0000000..6cc3588 --- /dev/null +++ b/SOURCES/0005-src-ensure-to-close-stream-when-destroying-session.patch @@ -0,0 +1,42 @@ +From 2df9af7073929ab94b6dda040df08bc3ff7d8ab1 Mon Sep 17 00:00:00 2001 +From: RafaelGSS +Date: Tue, 26 Mar 2024 15:55:13 -0300 +Subject: [PATCH] src: ensure to close stream when destroying session +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-Authored-By: Anna Henningsen +PR-URL: https://github.com/nodejs-private/node-private/pull/561 +Fixes: https://hackerone.com/reports/2319584 +Reviewed-By: Michael Dawson +Reviewed-By: Marco Ippolito +Reviewed-By: Matteo Collina +Reviewed-By: Benjamin Gruenbaum +CVE-ID: CVE-2024-27983 +Signed-off-by: Jan Staněk +Signed-off-by: rpm-build +--- + src/node_http2.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/node_http2.cc b/src/node_http2.cc +index 53216dc..9a6d63d 100644 +--- a/src/node_http2.cc ++++ b/src/node_http2.cc +@@ -529,6 +529,12 @@ Http2Session::Http2Session(Http2State* http2_state, + Http2Session::~Http2Session() { + CHECK(!is_in_scope()); + Debug(this, "freeing nghttp2 session"); ++ // Ensure that all `Http2Stream` instances and the memory they hold ++ // on to are destroyed before the nghttp2 session is. ++ for (const auto& [id, stream] : streams_) { ++ stream->Detach(); ++ } ++ streams_.clear(); + // Explicitly reset session_ so the subsequent + // current_nghttp2_memory_ check passes. + session_.reset(); +-- +2.44.0 + diff --git a/SOURCES/0006-Limit-CONTINUATION-frames-following-an-incoming-HEAD.patch b/SOURCES/0006-Limit-CONTINUATION-frames-following-an-incoming-HEAD.patch new file mode 100644 index 0000000..4d34a5f --- /dev/null +++ b/SOURCES/0006-Limit-CONTINUATION-frames-following-an-incoming-HEAD.patch @@ -0,0 +1,112 @@ +From 132ad9e8a8f8e246e59744a7fed995ed396f6cb4 Mon Sep 17 00:00:00 2001 +From: Tatsuhiro Tsujikawa +Date: Sat, 9 Mar 2024 16:26:42 +0900 +Subject: [PATCH] Limit CONTINUATION frames following an incoming HEADER frame +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jan Staněk +Fixes: CVE-2024-28182 +Signed-off-by: rpm-build +--- + deps/nghttp2/lib/includes/nghttp2/nghttp2.h | 7 ++++++- + deps/nghttp2/lib/nghttp2_helper.c | 2 ++ + deps/nghttp2/lib/nghttp2_session.c | 7 +++++++ + deps/nghttp2/lib/nghttp2_session.h | 10 ++++++++++ + 4 files changed, 25 insertions(+), 1 deletion(-) + +diff --git a/deps/nghttp2/lib/includes/nghttp2/nghttp2.h b/deps/nghttp2/lib/includes/nghttp2/nghttp2.h +index fa22081..b394bde 100644 +--- a/deps/nghttp2/lib/includes/nghttp2/nghttp2.h ++++ b/deps/nghttp2/lib/includes/nghttp2/nghttp2.h +@@ -440,7 +440,12 @@ typedef enum { + * exhaustion on server side to send these frames forever and does + * not read network. + */ +- NGHTTP2_ERR_FLOODED = -904 ++ NGHTTP2_ERR_FLOODED = -904, ++ /** ++ * When a local endpoint receives too many CONTINUATION frames ++ * following a HEADER frame. ++ */ ++ NGHTTP2_ERR_TOO_MANY_CONTINUATIONS = -905, + } nghttp2_error; + + /** +diff --git a/deps/nghttp2/lib/nghttp2_helper.c b/deps/nghttp2/lib/nghttp2_helper.c +index 93dd475..b3563d9 100644 +--- a/deps/nghttp2/lib/nghttp2_helper.c ++++ b/deps/nghttp2/lib/nghttp2_helper.c +@@ -336,6 +336,8 @@ const char *nghttp2_strerror(int error_code) { + "closed"; + case NGHTTP2_ERR_TOO_MANY_SETTINGS: + return "SETTINGS frame contained more than the maximum allowed entries"; ++ case NGHTTP2_ERR_TOO_MANY_CONTINUATIONS: ++ return "Too many CONTINUATION frames following a HEADER frame"; + default: + return "Unknown error code"; + } +diff --git a/deps/nghttp2/lib/nghttp2_session.c b/deps/nghttp2/lib/nghttp2_session.c +index ec5024d..8e4d2e7 100644 +--- a/deps/nghttp2/lib/nghttp2_session.c ++++ b/deps/nghttp2/lib/nghttp2_session.c +@@ -496,6 +496,7 @@ static int session_new(nghttp2_session **session_ptr, + (*session_ptr)->max_send_header_block_length = NGHTTP2_MAX_HEADERSLEN; + (*session_ptr)->max_outbound_ack = NGHTTP2_DEFAULT_MAX_OBQ_FLOOD_ITEM; + (*session_ptr)->max_settings = NGHTTP2_DEFAULT_MAX_SETTINGS; ++ (*session_ptr)->max_continuations = NGHTTP2_DEFAULT_MAX_CONTINUATIONS; + + if (option) { + if ((option->opt_set_mask & NGHTTP2_OPT_NO_AUTO_WINDOW_UPDATE) && +@@ -6778,6 +6779,8 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in, + } + } + session_inbound_frame_reset(session); ++ ++ session->num_continuations = 0; + } + break; + } +@@ -6899,6 +6902,10 @@ ssize_t nghttp2_session_mem_recv(nghttp2_session *session, const uint8_t *in, + } + #endif /* DEBUGBUILD */ + ++ if (++session->num_continuations > session->max_continuations) { ++ return NGHTTP2_ERR_TOO_MANY_CONTINUATIONS; ++ } ++ + readlen = inbound_frame_buf_read(iframe, in, last); + in += readlen; + +diff --git a/deps/nghttp2/lib/nghttp2_session.h b/deps/nghttp2/lib/nghttp2_session.h +index b119329..ef8f7b2 100644 +--- a/deps/nghttp2/lib/nghttp2_session.h ++++ b/deps/nghttp2/lib/nghttp2_session.h +@@ -110,6 +110,10 @@ typedef struct { + #define NGHTTP2_DEFAULT_STREAM_RESET_BURST 1000 + #define NGHTTP2_DEFAULT_STREAM_RESET_RATE 33 + ++/* The default max number of CONTINUATION frames following an incoming ++ HEADER frame. */ ++#define NGHTTP2_DEFAULT_MAX_CONTINUATIONS 8 ++ + /* Internal state when receiving incoming frame */ + typedef enum { + /* Receiving frame header */ +@@ -290,6 +294,12 @@ struct nghttp2_session { + size_t max_send_header_block_length; + /* The maximum number of settings accepted per SETTINGS frame. */ + size_t max_settings; ++ /* The maximum number of CONTINUATION frames following an incoming ++ HEADER frame. */ ++ size_t max_continuations; ++ /* The number of CONTINUATION frames following an incoming HEADER ++ frame. This variable is reset when END_HEADERS flag is seen. */ ++ size_t num_continuations; + /* Next Stream ID. Made unsigned int to detect >= (1 << 31). */ + uint32_t next_stream_id; + /* The last stream ID this session initiated. For client session, +-- +2.44.0 + diff --git a/SOURCES/0007-Add-nghttp2_option_set_max_continuations.patch b/SOURCES/0007-Add-nghttp2_option_set_max_continuations.patch new file mode 100644 index 0000000..f4e62bc --- /dev/null +++ b/SOURCES/0007-Add-nghttp2_option_set_max_continuations.patch @@ -0,0 +1,94 @@ +From 625b03149d2ec68cdbcfe3f2801d6f0420d917cb Mon Sep 17 00:00:00 2001 +From: Tatsuhiro Tsujikawa +Date: Sat, 9 Mar 2024 16:48:10 +0900 +Subject: [PATCH] Add nghttp2_option_set_max_continuations +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jan Staněk +Related: CVE-2024-28182 +Signed-off-by: rpm-build +--- + deps/nghttp2/lib/includes/nghttp2/nghttp2.h | 11 +++++++++++ + deps/nghttp2/lib/nghttp2_option.c | 5 +++++ + deps/nghttp2/lib/nghttp2_option.h | 5 +++++ + deps/nghttp2/lib/nghttp2_session.c | 4 ++++ + 4 files changed, 25 insertions(+) + +diff --git a/deps/nghttp2/lib/includes/nghttp2/nghttp2.h b/deps/nghttp2/lib/includes/nghttp2/nghttp2.h +index b394bde..4d3339b 100644 +--- a/deps/nghttp2/lib/includes/nghttp2/nghttp2.h ++++ b/deps/nghttp2/lib/includes/nghttp2/nghttp2.h +@@ -2778,6 +2778,17 @@ NGHTTP2_EXTERN void + nghttp2_option_set_stream_reset_rate_limit(nghttp2_option *option, + uint64_t burst, uint64_t rate); + ++/** ++ * @function ++ * ++ * This function sets the maximum number of CONTINUATION frames ++ * following an incoming HEADER frame. If more than those frames are ++ * received, the remote endpoint is considered to be misbehaving and ++ * session will be closed. The default value is 8. ++ */ ++NGHTTP2_EXTERN void nghttp2_option_set_max_continuations(nghttp2_option *option, ++ size_t val); ++ + /** + * @function + * +diff --git a/deps/nghttp2/lib/nghttp2_option.c b/deps/nghttp2/lib/nghttp2_option.c +index 43d4e95..53144b9 100644 +--- a/deps/nghttp2/lib/nghttp2_option.c ++++ b/deps/nghttp2/lib/nghttp2_option.c +@@ -150,3 +150,8 @@ void nghttp2_option_set_stream_reset_rate_limit(nghttp2_option *option, + option->stream_reset_burst = burst; + option->stream_reset_rate = rate; + } ++ ++void nghttp2_option_set_max_continuations(nghttp2_option *option, size_t val) { ++ option->opt_set_mask |= NGHTTP2_OPT_MAX_CONTINUATIONS; ++ option->max_continuations = val; ++} +diff --git a/deps/nghttp2/lib/nghttp2_option.h b/deps/nghttp2/lib/nghttp2_option.h +index 2259e18..c89cb97 100644 +--- a/deps/nghttp2/lib/nghttp2_option.h ++++ b/deps/nghttp2/lib/nghttp2_option.h +@@ -71,6 +71,7 @@ typedef enum { + NGHTTP2_OPT_SERVER_FALLBACK_RFC7540_PRIORITIES = 1 << 13, + NGHTTP2_OPT_NO_RFC9113_LEADING_AND_TRAILING_WS_VALIDATION = 1 << 14, + NGHTTP2_OPT_STREAM_RESET_RATE_LIMIT = 1 << 15, ++ NGHTTP2_OPT_MAX_CONTINUATIONS = 1 << 16, + } nghttp2_option_flag; + + /** +@@ -98,6 +99,10 @@ struct nghttp2_option { + * NGHTTP2_OPT_MAX_SETTINGS + */ + size_t max_settings; ++ /** ++ * NGHTTP2_OPT_MAX_CONTINUATIONS ++ */ ++ size_t max_continuations; + /** + * Bitwise OR of nghttp2_option_flag to determine that which fields + * are specified. +diff --git a/deps/nghttp2/lib/nghttp2_session.c b/deps/nghttp2/lib/nghttp2_session.c +index 8e4d2e7..ced7517 100644 +--- a/deps/nghttp2/lib/nghttp2_session.c ++++ b/deps/nghttp2/lib/nghttp2_session.c +@@ -585,6 +585,10 @@ static int session_new(nghttp2_session **session_ptr, + option->stream_reset_burst, + option->stream_reset_rate); + } ++ ++ if (option->opt_set_mask & NGHTTP2_OPT_MAX_CONTINUATIONS) { ++ (*session_ptr)->max_continuations = option->max_continuations; ++ } + } + + rv = nghttp2_hd_deflate_init2(&(*session_ptr)->hd_deflater, +-- +2.44.0 + diff --git a/SOURCES/0008-zlib-pause-stream-if-outgoing-buffer-is-full.patch b/SOURCES/0008-zlib-pause-stream-if-outgoing-buffer-is-full.patch new file mode 100644 index 0000000..5fe8fd9 --- /dev/null +++ b/SOURCES/0008-zlib-pause-stream-if-outgoing-buffer-is-full.patch @@ -0,0 +1,150 @@ +From 58a980141be5d4323cd8ba18f1e285cb25c9d547 Mon Sep 17 00:00:00 2001 +From: Matteo Collina +Date: Tue, 6 Feb 2024 16:47:20 +0100 +Subject: [PATCH] zlib: pause stream if outgoing buffer is full +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Matteo Collina +PR-URL: https://github.com/nodejs-private/node-private/pull/540 +Reviewed-By: Robert Nagy +Ref: https://hackerone.com/reports/2284065 +CVE-ID: CVE-2024-22025 +Signed-off-by: Jan Staněk +Signed-off-by: rpm-build +--- + lib/zlib.js | 33 +++++++++++++++++++------- + test/parallel/test-zlib-brotli-16GB.js | 22 +++++++++++++++++ + test/parallel/test-zlib-params.js | 24 ++++++++++++------- + 3 files changed, 62 insertions(+), 17 deletions(-) + create mode 100644 test/parallel/test-zlib-brotli-16GB.js + +diff --git a/lib/zlib.js b/lib/zlib.js +index 9bde199..efe77bc 100644 +--- a/lib/zlib.js ++++ b/lib/zlib.js +@@ -560,10 +560,11 @@ function processCallback() { + self.bytesWritten += inDelta; + + const have = handle.availOutBefore - availOutAfter; ++ let streamBufferIsFull = false; + if (have > 0) { + const out = self._outBuffer.slice(self._outOffset, self._outOffset + have); + self._outOffset += have; +- self.push(out); ++ streamBufferIsFull = !self.push(out); + } else { + assert(have === 0, 'have should not go down'); + } +@@ -588,13 +589,29 @@ function processCallback() { + handle.inOff += inDelta; + handle.availInBefore = availInAfter; + +- this.write(handle.flushFlag, +- this.buffer, // in +- handle.inOff, // in_off +- handle.availInBefore, // in_len +- self._outBuffer, // out +- self._outOffset, // out_off +- self._chunkSize); // out_len ++ ++ if (!streamBufferIsFull) { ++ this.write(handle.flushFlag, ++ this.buffer, // in ++ handle.inOff, // in_off ++ handle.availInBefore, // in_len ++ self._outBuffer, // out ++ self._outOffset, // out_off ++ self._chunkSize); // out_len ++ } else { ++ const oldRead = self._read; ++ self._read = (n) => { ++ self._read = oldRead; ++ this.write(handle.flushFlag, ++ this.buffer, // in ++ handle.inOff, // in_off ++ handle.availInBefore, // in_len ++ self._outBuffer, // out ++ self._outOffset, // out_off ++ self._chunkSize); // out_len ++ self._read(n); ++ }; ++ } + return; + } + +diff --git a/test/parallel/test-zlib-brotli-16GB.js b/test/parallel/test-zlib-brotli-16GB.js +new file mode 100644 +index 0000000..ba4f7ef +--- /dev/null ++++ b/test/parallel/test-zlib-brotli-16GB.js +@@ -0,0 +1,22 @@ ++'use strict'; ++ ++const common = require('../common'); ++const { createBrotliDecompress } = require('node:zlib'); ++const strictEqual = require('node:assert').strictEqual; ++ ++// This tiny HEX string is a 16GB file. ++// This test verifies that the stream actually stops. ++/* eslint-disable max-len */ ++const content = 'cfffff7ff82700e2b14020f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c32200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bffcfffff7ff82700e2b00040f7fe9ffffffff04f00c4610180eefd3fffffffe19f0088c30200ddfb7ffeffffc33f0110870500baf7fffcffff877f02200e0b0074effff9ffff0fff04401c1600e8defff3ffff1ffe0980382c00d0bdffe7ffff3ffc1300715800a07bff3f'; ++ ++const buf = Buffer.from(content, 'hex'); ++ ++const decoder = createBrotliDecompress(); ++decoder.end(buf); ++ ++// We need to wait to verify that the libuv thread pool had time ++// to process the data and the buffer is not empty. ++setTimeout(common.mustCall(() => { ++ // There is only one chunk in the buffer ++ strictEqual(decoder._readableState.buffer.length, 1); ++}), common.platformTimeout(100)); +diff --git a/test/parallel/test-zlib-params.js b/test/parallel/test-zlib-params.js +index 30d4f13..18271fe 100644 +--- a/test/parallel/test-zlib-params.js ++++ b/test/parallel/test-zlib-params.js +@@ -12,23 +12,29 @@ const deflater = zlib.createDeflate(opts); + const chunk1 = file.slice(0, chunkSize); + const chunk2 = file.slice(chunkSize); + const blkhdr = Buffer.from([0x00, 0x5a, 0x82, 0xa5, 0x7d]); +-const expected = Buffer.concat([blkhdr, chunk2]); +-let actual; ++const blkftr = Buffer.from('010000ffff7dac3072', 'hex'); ++const expected = Buffer.concat([blkhdr, chunk2, blkftr]); ++const bufs = []; ++ ++function read() { ++ let buf; ++ while ((buf = deflater.read()) !== null) { ++ bufs.push(buf); ++ } ++} + + deflater.write(chunk1, function() { + deflater.params(0, zlib.constants.Z_DEFAULT_STRATEGY, function() { + while (deflater.read()); +- deflater.end(chunk2, function() { +- const bufs = []; +- let buf; +- while ((buf = deflater.read()) !== null) +- bufs.push(buf); +- actual = Buffer.concat(bufs); +- }); ++ ++ deflater.on('readable', read); ++ ++ deflater.end(chunk2); + }); + while (deflater.read()); + }); + + process.once('exit', function() { ++ const actual = Buffer.concat(bufs); + assert.deepStrictEqual(actual, expected); + }); +-- +2.44.0 + diff --git a/SOURCES/0009-Address-CVE-2024-25629.patch b/SOURCES/0009-Address-CVE-2024-25629.patch new file mode 100644 index 0000000..3d7b367 --- /dev/null +++ b/SOURCES/0009-Address-CVE-2024-25629.patch @@ -0,0 +1,39 @@ +From ec80a9196e2aedfd617d05964725f113000a41ea Mon Sep 17 00:00:00 2001 +From: Brad House +Date: Thu, 22 Feb 2024 16:23:33 -0500 +Subject: [PATCH] Address CVE-2024-25629 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Original commit title: Merge pull request from GHSA-mg26-v6qh-x48q + +Signed-off-by: Jan Staněk +Fixes: CVE-2024-25629 +Signed-off-by: rpm-build +--- + deps/cares/src/lib/ares__read_line.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/deps/cares/src/lib/ares__read_line.c b/deps/cares/src/lib/ares__read_line.c +index c62ad2a..16627e4 100644 +--- a/deps/cares/src/lib/ares__read_line.c ++++ b/deps/cares/src/lib/ares__read_line.c +@@ -49,6 +49,14 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize) + if (!fgets(*buf + offset, bytestoread, fp)) + return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; + len = offset + strlen(*buf + offset); ++ ++ /* Probably means there was an embedded NULL as the first character in ++ * the line, throw away line */ ++ if (len == 0) { ++ offset = 0; ++ continue; ++ } ++ + if ((*buf)[len - 1] == '\n') + { + (*buf)[len - 1] = 0; +-- +2.44.0 + diff --git a/SOURCES/0010-http-do-not-allow-OBS-fold-in-headers-by-default.patch b/SOURCES/0010-http-do-not-allow-OBS-fold-in-headers-by-default.patch new file mode 100644 index 0000000..ce8de37 --- /dev/null +++ b/SOURCES/0010-http-do-not-allow-OBS-fold-in-headers-by-default.patch @@ -0,0 +1,3538 @@ +From acdc9f2870c4855a1d8bafd7ea01f7d51c0aad64 Mon Sep 17 00:00:00 2001 +From: Paolo Insogna +Date: Fri, 15 Mar 2024 11:35:51 +0100 +Subject: [PATCH] http: do not allow OBS fold in headers by default + +PR-URL: https://github.com/nodejs-private/node-private/pull/558 +Refs: https://github.com/nodejs-private/node-private/pull/556 +Reviewed-By: Matteo Collina +Reviewed-By: Rafael Gonzaga +CVE-ID: CVE-2024-27982 +Signed-off-by: rpm-build +--- + deps/llhttp/CMakeLists.txt | 2 +- + deps/llhttp/include/llhttp.h | 2 +- + deps/llhttp/src/llhttp.c | 864 +++++++++--------- + test/parallel/test-http-multi-line-headers.js | 3 +- + .../test-http-transfer-encoding-smuggling.js | 5 +- + 5 files changed, 456 insertions(+), 420 deletions(-) + +diff --git a/deps/llhttp/CMakeLists.txt b/deps/llhttp/CMakeLists.txt +index 747564a..fd07388 100644 +--- a/deps/llhttp/CMakeLists.txt ++++ b/deps/llhttp/CMakeLists.txt +@@ -1,7 +1,7 @@ + cmake_minimum_required(VERSION 3.5.1) + cmake_policy(SET CMP0069 NEW) + +-project(llhttp VERSION 6.1.0) ++project(llhttp VERSION 6.1.1) + include(GNUInstallDirs) + + set(CMAKE_C_STANDARD 99) +diff --git a/deps/llhttp/include/llhttp.h b/deps/llhttp/include/llhttp.h +index 78f27ab..29979b4 100644 +--- a/deps/llhttp/include/llhttp.h ++++ b/deps/llhttp/include/llhttp.h +@@ -3,7 +3,7 @@ + + #define LLHTTP_VERSION_MAJOR 6 + #define LLHTTP_VERSION_MINOR 1 +-#define LLHTTP_VERSION_PATCH 0 ++#define LLHTTP_VERSION_PATCH 1 + + #ifndef LLHTTP_STRICT_MODE + # define LLHTTP_STRICT_MODE 0 +diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c +index 46f86a0..7dc598b 100644 +--- a/deps/llhttp/src/llhttp.c ++++ b/deps/llhttp/src/llhttp.c +@@ -361,7 +361,7 @@ enum llparse_state_e { + s_n_llhttp__internal__n_header_value_lws, + s_n_llhttp__internal__n_header_value_almost_done, + s_n_llhttp__internal__n_header_value_lenient, +- s_n_llhttp__internal__n_error_25, ++ s_n_llhttp__internal__n_error_26, + s_n_llhttp__internal__n_header_value_otherwise, + s_n_llhttp__internal__n_header_value_connection_token, + s_n_llhttp__internal__n_header_value_connection_ws, +@@ -369,12 +369,12 @@ enum llparse_state_e { + s_n_llhttp__internal__n_header_value_connection_2, + s_n_llhttp__internal__n_header_value_connection_3, + s_n_llhttp__internal__n_header_value_connection, +- s_n_llhttp__internal__n_error_27, + s_n_llhttp__internal__n_error_28, ++ s_n_llhttp__internal__n_error_29, + s_n_llhttp__internal__n_header_value_content_length_ws, + s_n_llhttp__internal__n_header_value_content_length, ++ s_n_llhttp__internal__n_error_31, + s_n_llhttp__internal__n_error_30, +- s_n_llhttp__internal__n_error_29, + s_n_llhttp__internal__n_header_value_te_token_ows, + s_n_llhttp__internal__n_header_value, + s_n_llhttp__internal__n_header_value_te_token, +@@ -899,7 +899,7 @@ int llhttp__internal__c_test_flags_3( + return (state->flags & 8) == 8; + } + +-int llhttp__internal__c_test_lenient_flags_7( ++int llhttp__internal__c_test_lenient_flags_8( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -963,7 +963,7 @@ int llhttp__internal__c_store_http_minor( + return 0; + } + +-int llhttp__internal__c_test_lenient_flags_9( ++int llhttp__internal__c_test_lenient_flags_10( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -1723,10 +1723,10 @@ static llparse_state_t llhttp__internal__run( + } + switch (*p) { + case 9: { +- goto s_n_llhttp__internal__n_invoke_load_header_state_3; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + } + case ' ': { +- goto s_n_llhttp__internal__n_invoke_load_header_state_3; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + } + default: { + goto s_n_llhttp__internal__n_invoke_load_header_state_4; +@@ -1746,7 +1746,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_header_value_lws; + } + default: { +- goto s_n_llhttp__internal__n_error_24; ++ goto s_n_llhttp__internal__n_error_25; + } + } + /* UNREACHABLE */; +@@ -1772,8 +1772,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_25: +- s_n_llhttp__internal__n_error_25: { ++ case s_n_llhttp__internal__n_error_26: ++ s_n_llhttp__internal__n_error_26: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; +@@ -1792,7 +1792,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; + } + default: { +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; + } + } + /* UNREACHABLE */; +@@ -1969,8 +1969,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_27: +- s_n_llhttp__internal__n_error_27: { ++ case s_n_llhttp__internal__n_error_28: ++ s_n_llhttp__internal__n_error_28: { + state->error = 0xb; + state->reason = "Content-Length overflow"; + state->error_pos = (const char*) p; +@@ -1979,8 +1979,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_28: +- s_n_llhttp__internal__n_error_28: { ++ case s_n_llhttp__internal__n_error_29: ++ s_n_llhttp__internal__n_error_29: { + state->error = 0xb; + state->reason = "Invalid character in Content-Length"; + state->error_pos = (const char*) p; +@@ -2075,8 +2075,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_30: +- s_n_llhttp__internal__n_error_30: { ++ case s_n_llhttp__internal__n_error_31: ++ s_n_llhttp__internal__n_error_31: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -2085,8 +2085,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_29: +- s_n_llhttp__internal__n_error_29: { ++ case s_n_llhttp__internal__n_error_30: ++ s_n_llhttp__internal__n_error_30: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -2323,7 +2323,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_2; + } + default: { +- goto s_n_llhttp__internal__n_error_31; ++ goto s_n_llhttp__internal__n_error_32; + } + } + /* UNREACHABLE */; +@@ -2703,7 +2703,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_to_http_09; + } + default: { +- goto s_n_llhttp__internal__n_error_32; ++ goto s_n_llhttp__internal__n_error_33; + } + } + /* UNREACHABLE */; +@@ -2728,7 +2728,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_skip_lf_to_http09_1; + } + default: { +- goto s_n_llhttp__internal__n_error_32; ++ goto s_n_llhttp__internal__n_error_33; + } + } + /* UNREACHABLE */; +@@ -2746,13 +2746,13 @@ static llparse_state_t llhttp__internal__run( + switch (match_seq.status) { + case kMatchComplete: { + p++; +- goto s_n_llhttp__internal__n_error_37; ++ goto s_n_llhttp__internal__n_error_38; + } + case kMatchPause: { + return s_n_llhttp__internal__n_req_pri_upgrade; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_38; ++ goto s_n_llhttp__internal__n_error_39; + } + } + /* UNREACHABLE */; +@@ -2769,7 +2769,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_header_field_start; + } + default: { +- goto s_n_llhttp__internal__n_error_36; ++ goto s_n_llhttp__internal__n_error_37; + } + } + /* UNREACHABLE */; +@@ -2790,7 +2790,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_http_complete_1; + } + default: { +- goto s_n_llhttp__internal__n_error_36; ++ goto s_n_llhttp__internal__n_error_37; + } + } + /* UNREACHABLE */; +@@ -2853,7 +2853,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_minor; + } + default: { +- goto s_n_llhttp__internal__n_error_41; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -2870,7 +2870,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_http_minor; + } + default: { +- goto s_n_llhttp__internal__n_error_42; ++ goto s_n_llhttp__internal__n_error_43; + } + } + /* UNREACHABLE */; +@@ -2933,7 +2933,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_major; + } + default: { +- goto s_n_llhttp__internal__n_error_43; ++ goto s_n_llhttp__internal__n_error_44; + } + } + /* UNREACHABLE */; +@@ -2957,7 +2957,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_http_start_1; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -2981,7 +2981,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_http_start_2; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -3005,7 +3005,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_http_start_3; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -3034,7 +3034,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_http_start_3; + } + default: { +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -3125,7 +3125,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_fragment; + } + default: { +- goto s_n_llhttp__internal__n_error_47; ++ goto s_n_llhttp__internal__n_error_48; + } + } + /* UNREACHABLE */; +@@ -3186,7 +3186,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_stub_query_3; + } + default: { +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + } + /* UNREACHABLE */; +@@ -3224,7 +3224,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_query; + } + default: { +- goto s_n_llhttp__internal__n_error_49; ++ goto s_n_llhttp__internal__n_error_50; + } + } + /* UNREACHABLE */; +@@ -3349,10 +3349,10 @@ static llparse_state_t llhttp__internal__run( + } + case 8: { + p++; +- goto s_n_llhttp__internal__n_error_50; ++ goto s_n_llhttp__internal__n_error_51; + } + default: { +- goto s_n_llhttp__internal__n_error_51; ++ goto s_n_llhttp__internal__n_error_52; + } + } + /* UNREACHABLE */; +@@ -3411,7 +3411,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_server_with_at; + } + default: { +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + } + /* UNREACHABLE */; +@@ -3428,7 +3428,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_server; + } + default: { +- goto s_n_llhttp__internal__n_error_54; ++ goto s_n_llhttp__internal__n_error_55; + } + } + /* UNREACHABLE */; +@@ -3446,7 +3446,7 @@ static llparse_state_t llhttp__internal__run( + } + case 10: { + p++; +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + case 12: { + p++; +@@ -3454,18 +3454,18 @@ static llparse_state_t llhttp__internal__run( + } + case 13: { + p++; +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + case ' ': { + p++; +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + case '/': { + p++; + goto s_n_llhttp__internal__n_url_schema_delim_1; + } + default: { +- goto s_n_llhttp__internal__n_error_54; ++ goto s_n_llhttp__internal__n_error_55; + } + } + /* UNREACHABLE */; +@@ -3511,7 +3511,7 @@ static llparse_state_t llhttp__internal__run( + } + case 2: { + p++; +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + case 3: { + goto s_n_llhttp__internal__n_span_end_stub_schema; +@@ -3521,7 +3521,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_55; ++ goto s_n_llhttp__internal__n_error_56; + } + } + /* UNREACHABLE */; +@@ -3557,7 +3557,7 @@ static llparse_state_t llhttp__internal__run( + } + case 2: { + p++; +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + case 3: { + goto s_n_llhttp__internal__n_span_start_stub_path_2; +@@ -3566,7 +3566,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_56; ++ goto s_n_llhttp__internal__n_error_57; + } + } + /* UNREACHABLE */; +@@ -3664,7 +3664,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_spaces_before_url; + } + default: { +- goto s_n_llhttp__internal__n_error_57; ++ goto s_n_llhttp__internal__n_error_58; + } + } + /* UNREACHABLE */; +@@ -3682,7 +3682,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3707,7 +3707,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_3; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3728,7 +3728,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_3; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3753,7 +3753,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_4; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3778,7 +3778,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_6; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3803,7 +3803,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_8; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3821,7 +3821,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3842,7 +3842,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_9; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3863,7 +3863,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_7; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3888,7 +3888,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_12; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3913,7 +3913,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_13; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3934,7 +3934,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_13; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3951,7 +3951,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_11; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -3976,7 +3976,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_14; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4001,7 +4001,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_17; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4043,7 +4043,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_15; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4068,7 +4068,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_18; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4093,7 +4093,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_20; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4118,7 +4118,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_21; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4139,7 +4139,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_21; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4164,7 +4164,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_23; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4189,7 +4189,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_24; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4214,7 +4214,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_26; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4239,7 +4239,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_28; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4257,7 +4257,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4278,7 +4278,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_29; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4299,7 +4299,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_27; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4324,7 +4324,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_30; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4353,7 +4353,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_30; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4378,7 +4378,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_31; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4403,7 +4403,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_32; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4428,7 +4428,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_35; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4453,7 +4453,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_36; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4474,7 +4474,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_36; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4499,7 +4499,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_37; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4524,7 +4524,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_38; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4549,7 +4549,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_42; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4574,7 +4574,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_43; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4595,7 +4595,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_43; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4612,7 +4612,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_41; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4634,7 +4634,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_40; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4659,7 +4659,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_45; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4681,7 +4681,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4714,7 +4714,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_44; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4739,7 +4739,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_48; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4764,7 +4764,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_49; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4789,7 +4789,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_50; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4814,7 +4814,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_51; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4843,7 +4843,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_51; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4860,7 +4860,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_47; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4885,7 +4885,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_54; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4903,7 +4903,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4928,7 +4928,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_57; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4949,7 +4949,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_57; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4970,7 +4970,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_55; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -4995,7 +4995,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_58; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5020,7 +5020,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_59; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5045,7 +5045,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_59; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5070,7 +5070,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_61; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5095,7 +5095,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_62; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5116,7 +5116,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_62; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5141,7 +5141,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_65; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5166,7 +5166,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_67; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5191,7 +5191,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_68; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5212,7 +5212,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_68; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5237,7 +5237,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_69; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5262,7 +5262,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_69; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5279,7 +5279,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_64; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5356,7 +5356,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_63; + } + default: { +- goto s_n_llhttp__internal__n_error_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5382,7 +5382,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_llhttp__on_status_complete; + } + default: { +- goto s_n_llhttp__internal__n_error_61; ++ goto s_n_llhttp__internal__n_error_62; + } + } + /* UNREACHABLE */; +@@ -5457,7 +5457,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_res_status_start; + } + default: { +- goto s_n_llhttp__internal__n_error_62; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -5537,7 +5537,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_update_status_code; + } + default: { +- goto s_n_llhttp__internal__n_error_63; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -5600,7 +5600,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_minor_1; + } + default: { +- goto s_n_llhttp__internal__n_error_66; ++ goto s_n_llhttp__internal__n_error_67; + } + } + /* UNREACHABLE */; +@@ -5617,7 +5617,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_res_http_minor; + } + default: { +- goto s_n_llhttp__internal__n_error_67; ++ goto s_n_llhttp__internal__n_error_68; + } + } + /* UNREACHABLE */; +@@ -5680,7 +5680,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_major_1; + } + default: { +- goto s_n_llhttp__internal__n_error_68; ++ goto s_n_llhttp__internal__n_error_69; + } + } + /* UNREACHABLE */; +@@ -5704,7 +5704,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_res; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_71; ++ goto s_n_llhttp__internal__n_error_72; + } + } + /* UNREACHABLE */; +@@ -5729,7 +5729,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_or_res_method_2; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5753,7 +5753,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_or_res_method_3; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5774,7 +5774,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_or_res_method_3; + } + default: { +- goto s_n_llhttp__internal__n_error_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5791,7 +5791,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_or_res_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5860,7 +5860,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_53: { ++ s_n_llhttp__internal__n_error_54: { + state->error = 0x7; + state->reason = "Invalid characters in url"; + state->error_pos = (const char*) p; +@@ -6522,6 +6522,25 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } ++ s_n_llhttp__internal__n_error_24: { ++ state->error = 0xa; ++ state->reason = "Unexpected whitespace after header value"; ++ state->error_pos = (const char*) p; ++ state->_current = (void*) (intptr_t) s_error; ++ return s_error; ++ /* UNREACHABLE */; ++ abort(); ++ } ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { ++ switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { ++ case 1: ++ goto s_n_llhttp__internal__n_invoke_load_header_state_3; ++ default: ++ goto s_n_llhttp__internal__n_error_24; ++ } ++ /* UNREACHABLE */; ++ abort(); ++ } + s_n_llhttp__internal__n_invoke_update_header_state_2: { + switch (llhttp__internal__c_update_header_state(state, p, endp)) { + default: +@@ -6578,7 +6597,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_24: { ++ s_n_llhttp__internal__n_error_25: { + state->error = 0x3; + state->reason = "Missing expected LF after header value"; + state->error_pos = (const char*) p; +@@ -6650,14 +6669,14 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_26; + return s_error; + } +- goto s_n_llhttp__internal__n_error_25; ++ goto s_n_llhttp__internal__n_error_26; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { + switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_header_value_lenient; +@@ -6765,10 +6784,10 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_27; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_28; + return s_error; + } +- goto s_n_llhttp__internal__n_error_27; ++ goto s_n_llhttp__internal__n_error_28; + /* UNREACHABLE */; + abort(); + } +@@ -6800,14 +6819,14 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_28; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_29; + return s_error; + } +- goto s_n_llhttp__internal__n_error_28; ++ goto s_n_llhttp__internal__n_error_29; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_26: { ++ s_n_llhttp__internal__n_error_27: { + state->error = 0x4; + state->reason = "Duplicate Content-Length"; + state->error_pos = (const char*) p; +@@ -6821,7 +6840,7 @@ static llparse_state_t llhttp__internal__run( + case 0: + goto s_n_llhttp__internal__n_header_value_content_length; + default: +- goto s_n_llhttp__internal__n_error_26; ++ goto s_n_llhttp__internal__n_error_27; + } + /* UNREACHABLE */; + abort(); +@@ -6836,11 +6855,11 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_30; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_31; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_30; ++ goto s_n_llhttp__internal__n_error_31; + /* UNREACHABLE */; + abort(); + } +@@ -6862,16 +6881,16 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_29; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_30; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_29; ++ goto s_n_llhttp__internal__n_error_30; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { +- switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { ++ switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7; + default: +@@ -6883,7 +6902,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_load_type_1: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } +@@ -6914,8 +6933,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { +- switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_9: { ++ switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; + default: +@@ -6927,7 +6946,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_load_type_2: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_9; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } +@@ -7012,7 +7031,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_31: { ++ s_n_llhttp__internal__n_error_32: { + state->error = 0xa; + state->reason = "Invalid header token"; + state->error_pos = (const char*) p; +@@ -7086,7 +7105,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_32: { ++ s_n_llhttp__internal__n_error_33: { + state->error = 0x7; + state->reason = "Expected CRLF"; + state->error_pos = (const char*) p; +@@ -7112,7 +7131,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_37: { ++ s_n_llhttp__internal__n_error_38: { + state->error = 0x17; + state->reason = "Pause on PRI/Upgrade"; + state->error_pos = (const char*) p; +@@ -7121,7 +7140,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_38: { ++ s_n_llhttp__internal__n_error_39: { + state->error = 0x9; + state->reason = "Expected HTTP/2 Connection Preface"; + state->error_pos = (const char*) p; +@@ -7130,7 +7149,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_36: { ++ s_n_llhttp__internal__n_error_37: { + state->error = 0x9; + state->reason = "Expected CRLF after version"; + state->error_pos = (const char*) p; +@@ -7149,7 +7168,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_35: { ++ s_n_llhttp__internal__n_error_36: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7163,12 +7182,12 @@ static llparse_state_t llhttp__internal__run( + case 9: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +- goto s_n_llhttp__internal__n_error_35; ++ goto s_n_llhttp__internal__n_error_36; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_39: { ++ s_n_llhttp__internal__n_error_40: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7184,12 +7203,12 @@ static llparse_state_t llhttp__internal__run( + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +- goto s_n_llhttp__internal__n_error_39; ++ goto s_n_llhttp__internal__n_error_40; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_40: { ++ s_n_llhttp__internal__n_error_41: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7203,12 +7222,12 @@ static llparse_state_t llhttp__internal__run( + case 0: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +- goto s_n_llhttp__internal__n_error_40; ++ goto s_n_llhttp__internal__n_error_41; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_34: { ++ s_n_llhttp__internal__n_error_35: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7226,13 +7245,13 @@ static llparse_state_t llhttp__internal__run( + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_2; + default: +- goto s_n_llhttp__internal__n_error_34; ++ goto s_n_llhttp__internal__n_error_35; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_9: { +- switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_10: { ++ switch (llhttp__internal__c_test_lenient_flags_10(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +@@ -7244,12 +7263,12 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_store_http_minor: { + switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + default: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_9; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_10; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_41: { ++ s_n_llhttp__internal__n_error_42: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -7258,7 +7277,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_42: { ++ s_n_llhttp__internal__n_error_43: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -7275,7 +7294,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_43: { ++ s_n_llhttp__internal__n_error_44: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -7284,7 +7303,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_33: { ++ s_n_llhttp__internal__n_error_34: { + state->error = 0x8; + state->reason = "Invalid method for HTTP/x.x request"; + state->error_pos = (const char*) p; +@@ -7366,12 +7385,12 @@ static llparse_state_t llhttp__internal__run( + case 34: + goto s_n_llhttp__internal__n_req_http_major; + default: +- goto s_n_llhttp__internal__n_error_33; ++ goto s_n_llhttp__internal__n_error_34; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_46: { ++ s_n_llhttp__internal__n_error_47: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -7380,7 +7399,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_44: { ++ s_n_llhttp__internal__n_error_45: { + state->error = 0x8; + state->reason = "Expected SOURCE method for ICE/x.x request"; + state->error_pos = (const char*) p; +@@ -7394,12 +7413,12 @@ static llparse_state_t llhttp__internal__run( + case 33: + goto s_n_llhttp__internal__n_req_http_major; + default: +- goto s_n_llhttp__internal__n_error_44; ++ goto s_n_llhttp__internal__n_error_45; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_45: { ++ s_n_llhttp__internal__n_error_46: { + state->error = 0x8; + state->reason = "Invalid method for RTSP/x.x request"; + state->error_pos = (const char*) p; +@@ -7439,7 +7458,7 @@ static llparse_state_t llhttp__internal__run( + case 45: + goto s_n_llhttp__internal__n_req_http_major; + default: +- goto s_n_llhttp__internal__n_error_45; ++ goto s_n_llhttp__internal__n_error_46; + } + /* UNREACHABLE */; + abort(); +@@ -7520,7 +7539,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_47: { ++ s_n_llhttp__internal__n_error_48: { + state->error = 0x7; + state->reason = "Invalid char in url fragment start"; + state->error_pos = (const char*) p; +@@ -7580,7 +7599,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_48: { ++ s_n_llhttp__internal__n_error_49: { + state->error = 0x7; + state->reason = "Invalid char in url query"; + state->error_pos = (const char*) p; +@@ -7589,7 +7608,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_49: { ++ s_n_llhttp__internal__n_error_50: { + state->error = 0x7; + state->reason = "Invalid char in url path"; + state->error_pos = (const char*) p; +@@ -7700,7 +7719,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_50: { ++ s_n_llhttp__internal__n_error_51: { + state->error = 0x7; + state->reason = "Double @ in url"; + state->error_pos = (const char*) p; +@@ -7709,7 +7728,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_51: { ++ s_n_llhttp__internal__n_error_52: { + state->error = 0x7; + state->reason = "Unexpected char in url server"; + state->error_pos = (const char*) p; +@@ -7718,7 +7737,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_52: { ++ s_n_llhttp__internal__n_error_53: { + state->error = 0x7; + state->reason = "Unexpected char in url server"; + state->error_pos = (const char*) p; +@@ -7727,7 +7746,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_54: { ++ s_n_llhttp__internal__n_error_55: { + state->error = 0x7; + state->reason = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -7736,7 +7755,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_55: { ++ s_n_llhttp__internal__n_error_56: { + state->error = 0x7; + state->reason = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -7745,7 +7764,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_56: { ++ s_n_llhttp__internal__n_error_57: { + state->error = 0x7; + state->reason = "Unexpected start char in url"; + state->error_pos = (const char*) p; +@@ -7764,7 +7783,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_57: { ++ s_n_llhttp__internal__n_error_58: { + state->error = 0x6; + state->reason = "Expected space after method"; + state->error_pos = (const char*) p; +@@ -7781,7 +7800,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_70: { ++ s_n_llhttp__internal__n_error_71: { + state->error = 0x6; + state->reason = "Invalid method encountered"; + state->error_pos = (const char*) p; +@@ -7790,7 +7809,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_60: { ++ s_n_llhttp__internal__n_error_61: { + state->error = 0xd; + state->reason = "Response overflow"; + state->error_pos = (const char*) p; +@@ -7802,14 +7821,14 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_mul_add_status_code: { + switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { + case 1: +- goto s_n_llhttp__internal__n_error_60; ++ goto s_n_llhttp__internal__n_error_61; + default: + goto s_n_llhttp__internal__n_res_status_code; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_61: { ++ s_n_llhttp__internal__n_error_62: { + state->error = 0x2; + state->reason = "Expected LF after CR"; + state->error_pos = (const char*) p; +@@ -7854,7 +7873,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_62: { ++ s_n_llhttp__internal__n_error_63: { + state->error = 0xd; + state->reason = "Invalid response status"; + state->error_pos = (const char*) p; +@@ -7871,7 +7890,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_63: { ++ s_n_llhttp__internal__n_error_64: { + state->error = 0x9; + state->reason = "Expected space after version"; + state->error_pos = (const char*) p; +@@ -7880,7 +7899,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_59: { ++ s_n_llhttp__internal__n_error_60: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7894,12 +7913,12 @@ static llparse_state_t llhttp__internal__run( + case 9: + goto s_n_llhttp__internal__n_res_http_end; + default: +- goto s_n_llhttp__internal__n_error_59; ++ goto s_n_llhttp__internal__n_error_60; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_64: { ++ s_n_llhttp__internal__n_error_65: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7915,12 +7934,12 @@ static llparse_state_t llhttp__internal__run( + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_65: { ++ s_n_llhttp__internal__n_error_66: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7934,12 +7953,12 @@ static llparse_state_t llhttp__internal__run( + case 0: + goto s_n_llhttp__internal__n_res_http_end; + default: +- goto s_n_llhttp__internal__n_error_65; ++ goto s_n_llhttp__internal__n_error_66; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_58: { ++ s_n_llhttp__internal__n_error_59: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7957,13 +7976,13 @@ static llparse_state_t llhttp__internal__run( + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_5; + default: +- goto s_n_llhttp__internal__n_error_58; ++ goto s_n_llhttp__internal__n_error_59; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_10: { +- switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_11: { ++ switch (llhttp__internal__c_test_lenient_flags_10(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: +@@ -7975,12 +7994,12 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_store_http_minor_1: { + switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + default: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_10; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_11; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_66: { ++ s_n_llhttp__internal__n_error_67: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -7989,7 +8008,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_67: { ++ s_n_llhttp__internal__n_error_68: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -8006,7 +8025,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_68: { ++ s_n_llhttp__internal__n_error_69: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -8015,7 +8034,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_71: { ++ s_n_llhttp__internal__n_error_72: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -8040,7 +8059,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_69: { ++ s_n_llhttp__internal__n_error_70: { + state->error = 0x8; + state->reason = "Invalid word encountered"; + state->error_pos = (const char*) p; +@@ -8509,7 +8528,7 @@ enum llparse_state_e { + s_n_llhttp__internal__n_header_value_lws, + s_n_llhttp__internal__n_header_value_almost_done, + s_n_llhttp__internal__n_header_value_lenient, +- s_n_llhttp__internal__n_error_20, ++ s_n_llhttp__internal__n_error_21, + s_n_llhttp__internal__n_header_value_otherwise, + s_n_llhttp__internal__n_header_value_connection_token, + s_n_llhttp__internal__n_header_value_connection_ws, +@@ -8517,12 +8536,12 @@ enum llparse_state_e { + s_n_llhttp__internal__n_header_value_connection_2, + s_n_llhttp__internal__n_header_value_connection_3, + s_n_llhttp__internal__n_header_value_connection, +- s_n_llhttp__internal__n_error_22, + s_n_llhttp__internal__n_error_23, ++ s_n_llhttp__internal__n_error_24, + s_n_llhttp__internal__n_header_value_content_length_ws, + s_n_llhttp__internal__n_header_value_content_length, ++ s_n_llhttp__internal__n_error_26, + s_n_llhttp__internal__n_error_25, +- s_n_llhttp__internal__n_error_24, + s_n_llhttp__internal__n_header_value_te_token_ows, + s_n_llhttp__internal__n_header_value, + s_n_llhttp__internal__n_header_value_te_token, +@@ -9042,7 +9061,7 @@ int llhttp__internal__c_test_flags_3( + return (state->flags & 8) == 8; + } + +-int llhttp__internal__c_test_lenient_flags_7( ++int llhttp__internal__c_test_lenient_flags_8( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -9106,7 +9125,7 @@ int llhttp__internal__c_store_http_minor( + return 0; + } + +-int llhttp__internal__c_test_lenient_flags_9( ++int llhttp__internal__c_test_lenient_flags_10( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -9836,10 +9855,10 @@ static llparse_state_t llhttp__internal__run( + } + switch (*p) { + case 9: { +- goto s_n_llhttp__internal__n_invoke_load_header_state_3; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + } + case ' ': { +- goto s_n_llhttp__internal__n_invoke_load_header_state_3; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + } + default: { + goto s_n_llhttp__internal__n_invoke_load_header_state_4; +@@ -9859,7 +9878,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_header_value_lws; + } + default: { +- goto s_n_llhttp__internal__n_error_19; ++ goto s_n_llhttp__internal__n_error_20; + } + } + /* UNREACHABLE */; +@@ -9885,8 +9904,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_20: +- s_n_llhttp__internal__n_error_20: { ++ case s_n_llhttp__internal__n_error_21: ++ s_n_llhttp__internal__n_error_21: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; +@@ -9905,7 +9924,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1; + } + default: { +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; + } + } + /* UNREACHABLE */; +@@ -10082,8 +10101,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_22: +- s_n_llhttp__internal__n_error_22: { ++ case s_n_llhttp__internal__n_error_23: ++ s_n_llhttp__internal__n_error_23: { + state->error = 0xb; + state->reason = "Content-Length overflow"; + state->error_pos = (const char*) p; +@@ -10092,8 +10111,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_23: +- s_n_llhttp__internal__n_error_23: { ++ case s_n_llhttp__internal__n_error_24: ++ s_n_llhttp__internal__n_error_24: { + state->error = 0xb; + state->reason = "Invalid character in Content-Length"; + state->error_pos = (const char*) p; +@@ -10188,8 +10207,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_25: +- s_n_llhttp__internal__n_error_25: { ++ case s_n_llhttp__internal__n_error_26: ++ s_n_llhttp__internal__n_error_26: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -10198,8 +10217,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_24: +- s_n_llhttp__internal__n_error_24: { ++ case s_n_llhttp__internal__n_error_25: ++ s_n_llhttp__internal__n_error_25: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -10436,7 +10455,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_2; + } + default: { +- goto s_n_llhttp__internal__n_error_26; ++ goto s_n_llhttp__internal__n_error_27; + } + } + /* UNREACHABLE */; +@@ -10790,7 +10809,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_url_skip_lf_to_http09; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_27; ++ goto s_n_llhttp__internal__n_error_28; + } + } + /* UNREACHABLE */; +@@ -10808,13 +10827,13 @@ static llparse_state_t llhttp__internal__run( + switch (match_seq.status) { + case kMatchComplete: { + p++; +- goto s_n_llhttp__internal__n_error_32; ++ goto s_n_llhttp__internal__n_error_33; + } + case kMatchPause: { + return s_n_llhttp__internal__n_req_pri_upgrade; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_33; ++ goto s_n_llhttp__internal__n_error_34; + } + } + /* UNREACHABLE */; +@@ -10831,7 +10850,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_header_field_start; + } + default: { +- goto s_n_llhttp__internal__n_error_31; ++ goto s_n_llhttp__internal__n_error_32; + } + } + /* UNREACHABLE */; +@@ -10852,7 +10871,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_http_complete_1; + } + default: { +- goto s_n_llhttp__internal__n_error_31; ++ goto s_n_llhttp__internal__n_error_32; + } + } + /* UNREACHABLE */; +@@ -10915,7 +10934,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_minor; + } + default: { +- goto s_n_llhttp__internal__n_error_36; ++ goto s_n_llhttp__internal__n_error_37; + } + } + /* UNREACHABLE */; +@@ -10932,7 +10951,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_http_minor; + } + default: { +- goto s_n_llhttp__internal__n_error_37; ++ goto s_n_llhttp__internal__n_error_38; + } + } + /* UNREACHABLE */; +@@ -10995,7 +11014,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_major; + } + default: { +- goto s_n_llhttp__internal__n_error_38; ++ goto s_n_llhttp__internal__n_error_39; + } + } + /* UNREACHABLE */; +@@ -11019,7 +11038,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_http_start_1; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_41; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -11043,7 +11062,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_http_start_2; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_41; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -11067,7 +11086,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_http_start_3; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_41; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -11096,7 +11115,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_http_start_3; + } + default: { +- goto s_n_llhttp__internal__n_error_41; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -11150,7 +11169,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_llhttp__on_url_8; + } + default: { +- goto s_n_llhttp__internal__n_error_42; ++ goto s_n_llhttp__internal__n_error_43; + } + } + /* UNREACHABLE */; +@@ -11207,7 +11226,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_span_end_stub_query_3; + } + default: { +- goto s_n_llhttp__internal__n_error_43; ++ goto s_n_llhttp__internal__n_error_44; + } + } + /* UNREACHABLE */; +@@ -11237,7 +11256,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_query; + } + default: { +- goto s_n_llhttp__internal__n_error_44; ++ goto s_n_llhttp__internal__n_error_45; + } + } + /* UNREACHABLE */; +@@ -11378,10 +11397,10 @@ static llparse_state_t llhttp__internal__run( + } + case 7: { + p++; +- goto s_n_llhttp__internal__n_error_45; ++ goto s_n_llhttp__internal__n_error_46; + } + default: { +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -11436,7 +11455,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_server_with_at; + } + default: { +- goto s_n_llhttp__internal__n_error_47; ++ goto s_n_llhttp__internal__n_error_48; + } + } + /* UNREACHABLE */; +@@ -11453,7 +11472,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_server; + } + default: { +- goto s_n_llhttp__internal__n_error_49; ++ goto s_n_llhttp__internal__n_error_50; + } + } + /* UNREACHABLE */; +@@ -11467,22 +11486,22 @@ static llparse_state_t llhttp__internal__run( + switch (*p) { + case 10: { + p++; +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + case 13: { + p++; +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + case ' ': { + p++; +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + case '/': { + p++; + goto s_n_llhttp__internal__n_url_schema_delim_1; + } + default: { +- goto s_n_llhttp__internal__n_error_49; ++ goto s_n_llhttp__internal__n_error_50; + } + } + /* UNREACHABLE */; +@@ -11524,7 +11543,7 @@ static llparse_state_t llhttp__internal__run( + switch (lookup_table[(uint8_t) *p]) { + case 1: { + p++; +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + case 2: { + goto s_n_llhttp__internal__n_span_end_stub_schema; +@@ -11534,7 +11553,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_50; ++ goto s_n_llhttp__internal__n_error_51; + } + } + /* UNREACHABLE */; +@@ -11566,7 +11585,7 @@ static llparse_state_t llhttp__internal__run( + switch (lookup_table[(uint8_t) *p]) { + case 1: { + p++; +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + case 2: { + goto s_n_llhttp__internal__n_span_start_stub_path_2; +@@ -11575,7 +11594,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_51; ++ goto s_n_llhttp__internal__n_error_52; + } + } + /* UNREACHABLE */; +@@ -11631,7 +11650,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_spaces_before_url; + } + default: { +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + } + /* UNREACHABLE */; +@@ -11649,7 +11668,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11674,7 +11693,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_3; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11695,7 +11714,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_3; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11720,7 +11739,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_4; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11745,7 +11764,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_6; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11770,7 +11789,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_8; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11788,7 +11807,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11809,7 +11828,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_9; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11830,7 +11849,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_7; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11855,7 +11874,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_12; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11880,7 +11899,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_13; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11901,7 +11920,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_13; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11918,7 +11937,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_11; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11943,7 +11962,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_14; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -11968,7 +11987,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_17; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12010,7 +12029,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_15; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12035,7 +12054,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_18; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12060,7 +12079,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_20; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12085,7 +12104,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_21; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12106,7 +12125,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_21; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12131,7 +12150,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_23; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12156,7 +12175,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_24; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12181,7 +12200,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_26; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12206,7 +12225,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_28; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12224,7 +12243,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12245,7 +12264,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_29; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12266,7 +12285,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_27; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12291,7 +12310,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_30; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12320,7 +12339,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_30; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12345,7 +12364,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_31; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12370,7 +12389,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_32; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12395,7 +12414,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_35; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12420,7 +12439,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_36; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12441,7 +12460,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_36; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12466,7 +12485,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_37; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12491,7 +12510,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_38; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12516,7 +12535,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_42; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12541,7 +12560,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_43; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12562,7 +12581,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_43; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12579,7 +12598,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_41; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12601,7 +12620,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_40; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12626,7 +12645,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_45; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12648,7 +12667,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12681,7 +12700,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_44; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12706,7 +12725,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_48; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12731,7 +12750,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_49; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12756,7 +12775,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_50; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12781,7 +12800,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_51; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12810,7 +12829,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_51; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12827,7 +12846,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_47; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12852,7 +12871,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_54; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12870,7 +12889,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12895,7 +12914,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_57; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12916,7 +12935,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_57; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12937,7 +12956,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_55; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12962,7 +12981,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_58; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -12987,7 +13006,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_59; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13012,7 +13031,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_59; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13037,7 +13056,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_61; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13062,7 +13081,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_62; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13083,7 +13102,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_62; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13108,7 +13127,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_65; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13133,7 +13152,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_67; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13158,7 +13177,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_68; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13179,7 +13198,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_68; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13204,7 +13223,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_req_69; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13229,7 +13248,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_69; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13246,7 +13265,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_64; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13323,7 +13342,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_start_req_63; + } + default: { +- goto s_n_llhttp__internal__n_error_64; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13417,7 +13436,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_res_status_start; + } + default: { +- goto s_n_llhttp__internal__n_error_56; ++ goto s_n_llhttp__internal__n_error_57; + } + } + /* UNREACHABLE */; +@@ -13497,7 +13516,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_update_status_code; + } + default: { +- goto s_n_llhttp__internal__n_error_57; ++ goto s_n_llhttp__internal__n_error_58; + } + } + /* UNREACHABLE */; +@@ -13560,7 +13579,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_minor_1; + } + default: { +- goto s_n_llhttp__internal__n_error_60; ++ goto s_n_llhttp__internal__n_error_61; + } + } + /* UNREACHABLE */; +@@ -13577,7 +13596,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_res_http_minor; + } + default: { +- goto s_n_llhttp__internal__n_error_61; ++ goto s_n_llhttp__internal__n_error_62; + } + } + /* UNREACHABLE */; +@@ -13640,7 +13659,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_invoke_store_http_major_1; + } + default: { +- goto s_n_llhttp__internal__n_error_62; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -13664,7 +13683,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_start_res; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_65; ++ goto s_n_llhttp__internal__n_error_66; + } + } + /* UNREACHABLE */; +@@ -13689,7 +13708,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_or_res_method_2; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_63; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13713,7 +13732,7 @@ static llparse_state_t llhttp__internal__run( + return s_n_llhttp__internal__n_req_or_res_method_3; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_63; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13734,7 +13753,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_or_res_method_3; + } + default: { +- goto s_n_llhttp__internal__n_error_63; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13751,7 +13770,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_req_or_res_method_1; + } + default: { +- goto s_n_llhttp__internal__n_error_63; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13811,7 +13830,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */ + abort(); + } +- s_n_llhttp__internal__n_error_48: { ++ s_n_llhttp__internal__n_error_49: { + state->error = 0x7; + state->reason = "Invalid characters in url"; + state->error_pos = (const char*) p; +@@ -14437,6 +14456,25 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } ++ s_n_llhttp__internal__n_error_19: { ++ state->error = 0xa; ++ state->reason = "Unexpected whitespace after header value"; ++ state->error_pos = (const char*) p; ++ state->_current = (void*) (intptr_t) s_error; ++ return s_error; ++ /* UNREACHABLE */; ++ abort(); ++ } ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { ++ switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { ++ case 1: ++ goto s_n_llhttp__internal__n_invoke_load_header_state_3; ++ default: ++ goto s_n_llhttp__internal__n_error_19; ++ } ++ /* UNREACHABLE */; ++ abort(); ++ } + s_n_llhttp__internal__n_invoke_update_header_state_2: { + switch (llhttp__internal__c_update_header_state(state, p, endp)) { + default: +@@ -14493,7 +14531,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_19: { ++ s_n_llhttp__internal__n_error_20: { + state->error = 0x3; + state->reason = "Missing expected LF after header value"; + state->error_pos = (const char*) p; +@@ -14565,14 +14603,14 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_20; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_21; + return s_error; + } +- goto s_n_llhttp__internal__n_error_20; ++ goto s_n_llhttp__internal__n_error_21; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { + switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_header_value_lenient; +@@ -14680,10 +14718,10 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_22; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_23; + return s_error; + } +- goto s_n_llhttp__internal__n_error_22; ++ goto s_n_llhttp__internal__n_error_23; + /* UNREACHABLE */; + abort(); + } +@@ -14715,14 +14753,14 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) p; +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_23; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_24; + return s_error; + } +- goto s_n_llhttp__internal__n_error_23; ++ goto s_n_llhttp__internal__n_error_24; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_21: { ++ s_n_llhttp__internal__n_error_22: { + state->error = 0x4; + state->reason = "Duplicate Content-Length"; + state->error_pos = (const char*) p; +@@ -14736,7 +14774,7 @@ static llparse_state_t llhttp__internal__run( + case 0: + goto s_n_llhttp__internal__n_header_value_content_length; + default: +- goto s_n_llhttp__internal__n_error_21; ++ goto s_n_llhttp__internal__n_error_22; + } + /* UNREACHABLE */; + abort(); +@@ -14751,11 +14789,11 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_26; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_25; ++ goto s_n_llhttp__internal__n_error_26; + /* UNREACHABLE */; + abort(); + } +@@ -14777,16 +14815,16 @@ static llparse_state_t llhttp__internal__run( + if (err != 0) { + state->error = err; + state->error_pos = (const char*) (p + 1); +- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_24; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_24; ++ goto s_n_llhttp__internal__n_error_25; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { +- switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { ++ switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7; + default: +@@ -14798,7 +14836,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_load_type_1: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } +@@ -14829,8 +14867,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { +- switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_9: { ++ switch (llhttp__internal__c_test_lenient_flags_8(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; + default: +@@ -14842,7 +14880,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_load_type_2: { + switch (llhttp__internal__c_load_type(state, p, endp)) { + case 1: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_9; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } +@@ -14927,7 +14965,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_26: { ++ s_n_llhttp__internal__n_error_27: { + state->error = 0xa; + state->reason = "Invalid header token"; + state->error_pos = (const char*) p; +@@ -15001,7 +15039,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_27: { ++ s_n_llhttp__internal__n_error_28: { + state->error = 0x7; + state->reason = "Expected CRLF"; + state->error_pos = (const char*) p; +@@ -15027,7 +15065,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_32: { ++ s_n_llhttp__internal__n_error_33: { + state->error = 0x17; + state->reason = "Pause on PRI/Upgrade"; + state->error_pos = (const char*) p; +@@ -15036,7 +15074,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_33: { ++ s_n_llhttp__internal__n_error_34: { + state->error = 0x9; + state->reason = "Expected HTTP/2 Connection Preface"; + state->error_pos = (const char*) p; +@@ -15045,7 +15083,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_31: { ++ s_n_llhttp__internal__n_error_32: { + state->error = 0x9; + state->reason = "Expected CRLF after version"; + state->error_pos = (const char*) p; +@@ -15064,7 +15102,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_30: { ++ s_n_llhttp__internal__n_error_31: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15078,12 +15116,12 @@ static llparse_state_t llhttp__internal__run( + case 9: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +- goto s_n_llhttp__internal__n_error_30; ++ goto s_n_llhttp__internal__n_error_31; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_34: { ++ s_n_llhttp__internal__n_error_35: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15099,12 +15137,12 @@ static llparse_state_t llhttp__internal__run( + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +- goto s_n_llhttp__internal__n_error_34; ++ goto s_n_llhttp__internal__n_error_35; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_35: { ++ s_n_llhttp__internal__n_error_36: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15118,12 +15156,12 @@ static llparse_state_t llhttp__internal__run( + case 0: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +- goto s_n_llhttp__internal__n_error_35; ++ goto s_n_llhttp__internal__n_error_36; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_29: { ++ s_n_llhttp__internal__n_error_30: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15141,13 +15179,13 @@ static llparse_state_t llhttp__internal__run( + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_2; + default: +- goto s_n_llhttp__internal__n_error_29; ++ goto s_n_llhttp__internal__n_error_30; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_9: { +- switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_10: { ++ switch (llhttp__internal__c_test_lenient_flags_10(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +@@ -15159,12 +15197,12 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_store_http_minor: { + switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + default: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_9; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_10; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_36: { ++ s_n_llhttp__internal__n_error_37: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -15173,7 +15211,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_37: { ++ s_n_llhttp__internal__n_error_38: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -15190,7 +15228,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_38: { ++ s_n_llhttp__internal__n_error_39: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -15199,7 +15237,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_28: { ++ s_n_llhttp__internal__n_error_29: { + state->error = 0x8; + state->reason = "Invalid method for HTTP/x.x request"; + state->error_pos = (const char*) p; +@@ -15281,12 +15319,12 @@ static llparse_state_t llhttp__internal__run( + case 34: + goto s_n_llhttp__internal__n_req_http_major; + default: +- goto s_n_llhttp__internal__n_error_28; ++ goto s_n_llhttp__internal__n_error_29; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_41: { ++ s_n_llhttp__internal__n_error_42: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -15295,7 +15333,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_39: { ++ s_n_llhttp__internal__n_error_40: { + state->error = 0x8; + state->reason = "Expected SOURCE method for ICE/x.x request"; + state->error_pos = (const char*) p; +@@ -15309,12 +15347,12 @@ static llparse_state_t llhttp__internal__run( + case 33: + goto s_n_llhttp__internal__n_req_http_major; + default: +- goto s_n_llhttp__internal__n_error_39; ++ goto s_n_llhttp__internal__n_error_40; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_40: { ++ s_n_llhttp__internal__n_error_41: { + state->error = 0x8; + state->reason = "Invalid method for RTSP/x.x request"; + state->error_pos = (const char*) p; +@@ -15354,7 +15392,7 @@ static llparse_state_t llhttp__internal__run( + case 45: + goto s_n_llhttp__internal__n_req_http_major; + default: +- goto s_n_llhttp__internal__n_error_40; ++ goto s_n_llhttp__internal__n_error_41; + } + /* UNREACHABLE */; + abort(); +@@ -15435,7 +15473,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_42: { ++ s_n_llhttp__internal__n_error_43: { + state->error = 0x7; + state->reason = "Invalid char in url fragment start"; + state->error_pos = (const char*) p; +@@ -15495,7 +15533,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_43: { ++ s_n_llhttp__internal__n_error_44: { + state->error = 0x7; + state->reason = "Invalid char in url query"; + state->error_pos = (const char*) p; +@@ -15504,7 +15542,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_44: { ++ s_n_llhttp__internal__n_error_45: { + state->error = 0x7; + state->reason = "Invalid char in url path"; + state->error_pos = (const char*) p; +@@ -15615,7 +15653,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_45: { ++ s_n_llhttp__internal__n_error_46: { + state->error = 0x7; + state->reason = "Double @ in url"; + state->error_pos = (const char*) p; +@@ -15624,7 +15662,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_46: { ++ s_n_llhttp__internal__n_error_47: { + state->error = 0x7; + state->reason = "Unexpected char in url server"; + state->error_pos = (const char*) p; +@@ -15633,7 +15671,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_47: { ++ s_n_llhttp__internal__n_error_48: { + state->error = 0x7; + state->reason = "Unexpected char in url server"; + state->error_pos = (const char*) p; +@@ -15642,7 +15680,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_49: { ++ s_n_llhttp__internal__n_error_50: { + state->error = 0x7; + state->reason = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -15651,7 +15689,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_50: { ++ s_n_llhttp__internal__n_error_51: { + state->error = 0x7; + state->reason = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -15660,7 +15698,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_51: { ++ s_n_llhttp__internal__n_error_52: { + state->error = 0x7; + state->reason = "Unexpected start char in url"; + state->error_pos = (const char*) p; +@@ -15679,7 +15717,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_52: { ++ s_n_llhttp__internal__n_error_53: { + state->error = 0x6; + state->reason = "Expected space after method"; + state->error_pos = (const char*) p; +@@ -15696,7 +15734,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_64: { ++ s_n_llhttp__internal__n_error_65: { + state->error = 0x6; + state->reason = "Invalid method encountered"; + state->error_pos = (const char*) p; +@@ -15705,7 +15743,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_55: { ++ s_n_llhttp__internal__n_error_56: { + state->error = 0xd; + state->reason = "Response overflow"; + state->error_pos = (const char*) p; +@@ -15717,7 +15755,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_mul_add_status_code: { + switch (llhttp__internal__c_mul_add_status_code(state, p, endp, match)) { + case 1: +- goto s_n_llhttp__internal__n_error_55; ++ goto s_n_llhttp__internal__n_error_56; + default: + goto s_n_llhttp__internal__n_res_status_code; + } +@@ -15760,7 +15798,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_56: { ++ s_n_llhttp__internal__n_error_57: { + state->error = 0xd; + state->reason = "Invalid response status"; + state->error_pos = (const char*) p; +@@ -15777,7 +15815,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_57: { ++ s_n_llhttp__internal__n_error_58: { + state->error = 0x9; + state->reason = "Expected space after version"; + state->error_pos = (const char*) p; +@@ -15786,7 +15824,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_54: { ++ s_n_llhttp__internal__n_error_55: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15800,12 +15838,12 @@ static llparse_state_t llhttp__internal__run( + case 9: + goto s_n_llhttp__internal__n_res_http_end; + default: +- goto s_n_llhttp__internal__n_error_54; ++ goto s_n_llhttp__internal__n_error_55; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_58: { ++ s_n_llhttp__internal__n_error_59: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15821,12 +15859,12 @@ static llparse_state_t llhttp__internal__run( + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: +- goto s_n_llhttp__internal__n_error_58; ++ goto s_n_llhttp__internal__n_error_59; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_59: { ++ s_n_llhttp__internal__n_error_60: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15840,12 +15878,12 @@ static llparse_state_t llhttp__internal__run( + case 0: + goto s_n_llhttp__internal__n_res_http_end; + default: +- goto s_n_llhttp__internal__n_error_59; ++ goto s_n_llhttp__internal__n_error_60; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_53: { ++ s_n_llhttp__internal__n_error_54: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15863,13 +15901,13 @@ static llparse_state_t llhttp__internal__run( + case 2: + goto s_n_llhttp__internal__n_invoke_load_http_minor_5; + default: +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_10: { +- switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_11: { ++ switch (llhttp__internal__c_test_lenient_flags_10(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: +@@ -15881,12 +15919,12 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_store_http_minor_1: { + switch (llhttp__internal__c_store_http_minor(state, p, endp, match)) { + default: +- goto s_n_llhttp__internal__n_invoke_test_lenient_flags_10; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_11; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_60: { ++ s_n_llhttp__internal__n_error_61: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -15895,7 +15933,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_61: { ++ s_n_llhttp__internal__n_error_62: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -15912,7 +15950,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_62: { ++ s_n_llhttp__internal__n_error_63: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -15921,7 +15959,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_65: { ++ s_n_llhttp__internal__n_error_66: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -15946,7 +15984,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_63: { ++ s_n_llhttp__internal__n_error_64: { + state->error = 0x8; + state->reason = "Invalid word encountered"; + state->error_pos = (const char*) p; +diff --git a/test/parallel/test-http-multi-line-headers.js b/test/parallel/test-http-multi-line-headers.js +index 99c48cd..2381c17 100644 +--- a/test/parallel/test-http-multi-line-headers.js ++++ b/test/parallel/test-http-multi-line-headers.js +@@ -46,7 +46,8 @@ const server = net.createServer(function(conn) { + server.listen(0, common.mustCall(function() { + http.get({ + host: '127.0.0.1', +- port: this.address().port ++ port: this.address().port, ++ insecureHTTPParser: true + }, common.mustCall(function(res) { + assert.strictEqual(res.headers['content-type'], + 'text/plain; x-unix-mode=0600; name="hello.txt"'); +diff --git a/test/parallel/test-http-transfer-encoding-smuggling.js b/test/parallel/test-http-transfer-encoding-smuggling.js +index 472b717..900c50e 100644 +--- a/test/parallel/test-http-transfer-encoding-smuggling.js ++++ b/test/parallel/test-http-transfer-encoding-smuggling.js +@@ -71,10 +71,7 @@ const net = require('net'); + '', + ].join('\r\n'); + +- const server = http.createServer(common.mustCall((request, response) => { +- assert.notStrictEqual(request.url, '/admin'); +- response.end('hello world'); +- }), 1); ++ const server = http.createServer(common.mustNotCall()); + + server.listen(0, common.mustSucceed(() => { + const client = net.connect(server.address().port, 'localhost'); +-- +2.44.0 + diff --git a/SPECS/nodejs.spec b/SPECS/nodejs.spec index ce900bf..e54797c 100644 --- a/SPECS/nodejs.spec +++ b/SPECS/nodejs.spec @@ -30,7 +30,7 @@ # This is used by both the nodejs package and the npm subpackage that # has a separate version - the name is special so that rpmdev-bumpspec # will bump this rather than adding .1 to the end. -%global baserelease 4 +%global baserelease 8 %{?!_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}-%{version}} @@ -184,7 +184,19 @@ Source112: https://github.com/WebAssembly/wasi-sdk/archive/wasi-sdk-14/wasi-sdk- Patch1: 0001-Disable-running-gyp-on-shared-deps.patch Patch2: 0002-disable-fips-options.patch Patch3: 0003-deps-nghttp2-update-to-1.57.0.patch -Patch4: nodejs-CVE-2024-22019.patch +Patch4: 0004-Fix-CVE-2024-22019.patch +# CVE-2025-27983 +Patch5: 0005-src-ensure-to-close-stream-when-destroying-session.patch +# CVE-2024-28182 +Patch6: 0006-Limit-CONTINUATION-frames-following-an-incoming-HEAD.patch +# CVE-2024-28182 +Patch7: 0007-Add-nghttp2_option_set_max_continuations.patch +# CVE-2024-22025 +Patch8: 0008-zlib-pause-stream-if-outgoing-buffer-is-full.patch +# CVE-2024-25629 +Patch9: 0009-Address-CVE-2024-25629.patch +# CVE-2024-27982 +Patch10: 0010-http-do-not-allow-OBS-fold-in-headers-by-default.patch BuildRequires: make BuildRequires: python3-devel @@ -476,6 +488,7 @@ export LDFLAGS="%{build_ldflags}" --with-intl=small-icu \ --with-icu-default-data-dir=%{icudatadir} \ --without-corepack \ + --openssl-conf-name=openssl_conf \ --openssl-use-def-ca-store \ --openssl-default-cipher-list=PROFILE=SYSTEM @@ -724,6 +737,19 @@ end %changelog +* Tue May 07 2024 Jan Staněk - 1:16.20.2-8 +- Actually apply the patch for CVE-2024-27982 + +* Wed Apr 24 2024 Jan Staněk - 1:16.20.2-7 +- Backport patch for CVE-2024-27982 + +* Tue Apr 09 2024 Jan Staněk - 1:16.20.2-6 +- Use system OpenSSL configuration section + +* Mon Apr 08 2024 Jan Staněk - 1:16.20.2-5 +- Backport patches for several CVEs. + Fixes CVE-2024-22025 CVE-2024-25629 CVE-2024-27983 CVE-2024-28182 + * Tue Mar 05 2024 Honza Horak - 1:16.20.2-4 - Fix CVE-2024-22019