diff -Nru nodejs-18.13.0+dfsg1/debian/changelog nodejs-18.13.0+dfsg1/debian/changelog --- nodejs-18.13.0+dfsg1/debian/changelog 2024-02-28 12:41:27.000000000 +0000 +++ nodejs-18.13.0+dfsg1/debian/changelog 2024-03-25 14:43:35.000000000 +0000 @@ -1,3 +1,20 @@ +nodejs (18.13.0+dfsg1-1ubuntu2.2) mantic-security; urgency=medium + + * SECURITY UPDATE: Denial of Service + - debian/patches/CVE-2023-30588.patch: fixed the issue that happens by + using an invalid public key in crypto.X509Certificate() + - CVE-2023-30588 + * SECURITY UPDATE: Unauthorised Access + - debian/patches/CVE-2023-30589.patch: fixed the incorrect use of CRLF + sequence to delimit HTTP requests + - CVE-2023-30589 + * SECURITY UPDATE: Incorrect Documentation for Diffie-Hellman APIs + - debian/patches/CVE-2023-30590.patch: fixed the inconsistency between the + documents and the function of Diffie-Hellman APIs + - CVE-2023-30590 + + -- Amir Naseredini Mon, 25 Mar 2024 14:43:35 +0000 + nodejs (18.13.0+dfsg1-1ubuntu2.1) mantic-security; urgency=medium * SECURITY UPDATE: Privilege Escalation diff -Nru nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30588.patch nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30588.patch --- nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30588.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30588.patch 2024-03-25 14:41:55.000000000 +0000 @@ -0,0 +1,83 @@ +From 5a92ea7a3b6210f04c902e177f9dc673ae866393 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= +Date: Thu, 23 Feb 2023 15:13:16 +0000 +Subject: [PATCH] crypto: handle cert with invalid SPKI gracefully + +When attempting to convert the SPKI of a X509Certificate to a KeyObject, +throw an error if the subjectPublicKey cannot be parsed instead of +aborting the process. + +Fixes: https://hackerone.com/bugs?report_id=1884159 +PR-URL: https://github.com/nodejs-private/node-private/pull/393/ +Reviewed-By: Rafael Gonzaga +Reviewed-By: Matteo Collina +Reviewed-By: Robert Nagy +CVE-ID: CVE-2023-30588 +--- + src/crypto/crypto_x509.cc | 4 ++++ + test/parallel/test-crypto-x509.js | 39 +++++++++++++++++++++++++++++++ + 2 files changed, 43 insertions(+) + +diff --git a/src/crypto/crypto_x509.cc b/src/crypto/crypto_x509.cc +index a2f6ed8d8cc3e4..5fb9d5d1b38029 100644 +--- a/src/crypto/crypto_x509.cc ++++ b/src/crypto/crypto_x509.cc +@@ -318,7 +318,11 @@ void X509Certificate::PublicKey(const FunctionCallbackInfo& args) { + X509Certificate* cert; + ASSIGN_OR_RETURN_UNWRAP(&cert, args.Holder()); + ++ // TODO(tniessen): consider checking X509_get_pubkey() when the ++ // X509Certificate object is being created. ++ ClearErrorOnReturn clear_error_on_return; + EVPKeyPointer pkey(X509_get_pubkey(cert->get())); ++ if (!pkey) return ThrowCryptoError(env, ERR_get_error()); + ManagedEVPPKey epkey(std::move(pkey)); + std::shared_ptr key_data = + KeyObjectData::CreateAsymmetric(kKeyTypePublic, epkey); +diff --git a/test/parallel/test-crypto-x509.js b/test/parallel/test-crypto-x509.js +index 70aaaea9c3471d..b7caa2c393f24b 100644 +--- a/test/parallel/test-crypto-x509.js ++++ b/test/parallel/test-crypto-x509.js +@@ -317,3 +317,42 @@ oans248kpal88CGqsN2so/wZKxVnpiXlPHMdiNL7hRSUqlHkUi07FrP2Htg8kjI= + legacyObject.serialNumber, + legacyObjectCheck.serialNumber); + } ++ ++{ ++ // This X.509 Certificate can be parsed by OpenSSL because it contains a ++ // structurally sound TBSCertificate structure. However, the SPKI field of the ++ // TBSCertificate contains the subjectPublicKey as a BIT STRING, and this bit ++ // sequence is not a valid public key. Ensure that X509Certificate.publicKey ++ // does not abort in this case. ++ ++ const certPem = `-----BEGIN CERTIFICATE----- ++MIIDpDCCAw0CFEc1OZ8g17q+PZnna3iQ/gfoZ7f3MA0GCSqGSIb3DQEBBQUAMIHX ++MRMwEQYLKwYBBAGCNzwCAQMTAkdJMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXph ++dGlvbjEOMAwGA1UEBRMFOTkxOTExCzAJBgNVBAYTAkdJMRIwEAYDVQQIFAlHaWJy ++YWx0YXIxEjAQBgNVBAcUCUdpYnJhbHRhcjEgMB4GA1UEChQXV0hHIChJbnRlcm5h ++dGlvbmFsKSBMdGQxHDAaBgNVBAsUE0ludGVyYWN0aXZlIEJldHRpbmcxHDAaBgNV ++BAMUE3d3dy53aWxsaWFtaGlsbC5jb20wIhgPMjAxNDAyMDcwMDAwMDBaGA8yMDE1 ++MDIyMTIzNTk1OVowgbAxCzAJBgNVBAYTAklUMQ0wCwYDVQQIEwRSb21lMRAwDgYD ++VQQHEwdQb21lemlhMRYwFAYDVQQKEw1UZWxlY29taXRhbGlhMRIwEAYDVQQrEwlB ++RE0uQVAuUE0xHTAbBgNVBAMTFHd3dy50ZWxlY29taXRhbGlhLml0MTUwMwYJKoZI ++hvcNAQkBFiZ2YXNlc2VyY2l6aW9wb3J0YWxpY29AdGVsZWNvbWl0YWxpYS5pdDCB ++nzANBgkqhkiG9w0BAQEFAAOBjQA4gYkCgYEA5m/Vf7PevH+inMfUJOc8GeR7WVhM ++CQwcMM5k46MSZo7kCk7VZuaq5G2JHGAGnLPaPUkeXlrf5qLpTxXXxHNtz+WrDlFt ++boAdnTcqpX3+72uBGOaT6Wi/9YRKuCs5D5/cAxAc3XjHfpRXMoXObj9Vy7mLndfV ++/wsnTfU9QVeBkgsCAwEAAaOBkjCBjzAdBgNVHQ4EFgQUfLjAjEiC83A+NupGrx5+ ++Qe6nhRMwbgYIKwYBBQUHAQwEYjBgoV6gXDBaMFgwVhYJaW1hZ2UvZ2lmMCEwHzAH ++BgUrDgMCGgQUS2u5KJYGDLvQUjibKaxLB4shBRgwJhYkaHR0cDovL2xvZ28udmVy ++aXNpZ24uY29tL3ZzbG9nbzEuZ2lmMA0GCSqGSIb3DQEBBQUAA4GBALLiAMX0cIMp +++V/JgMRhMEUKbrt5lYKfv9dil/f22ezZaFafb070jGMMPVy9O3/PavDOkHtTv3vd ++tAt3hIKFD1bJt6c6WtMH2Su3syosWxmdmGk5ihslB00lvLpfj/wed8i3bkcB1doq ++UcXd/5qu2GhokrKU2cPttU+XAN2Om6a0 ++-----END CERTIFICATE-----`; ++ ++ const cert = new X509Certificate(certPem); ++ assert.throws(() => cert.publicKey, { ++ message: common.hasOpenSSL3 ? /decode error/ : /wrong tag/, ++ name: 'Error' ++ }); ++ ++ assert.strictEqual(cert.checkIssued(cert), false); ++} diff -Nru nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30589.patch nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30589.patch --- nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30589.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30589.patch 2024-03-25 14:42:03.000000000 +0000 @@ -0,0 +1,3722 @@ +From e42ff4b0180f4e0f5712364dd6ea015559640152 Mon Sep 17 00:00:00 2001 +From: Paolo Insogna +Date: Tue, 13 Jun 2023 12:06:27 +0200 +Subject: [PATCH] http: disable request smuggling via empty headers + +PR-URL: https://github.com/nodejs-private/node-private/pull/429 +Refs: https://github.com/nodejs-private/node-private/pull/427 +Reviewed-By: Rafael Gonzaga +Reviewed-By: Matteo Collina +CVE-ID: CVE-2023-30589 +--- + deps/llhttp/CMakeLists.txt | 2 +- + deps/llhttp/include/llhttp.h | 2 +- + deps/llhttp/llhttp.gyp | 11 +- + deps/llhttp/src/llhttp.c | 916 ++++++++++-------- + .../test-http-missing-header-separator-lf.js | 83 ++ + 5 files changed, 590 insertions(+), 424 deletions(-) + create mode 100644 test/parallel/test-http-missing-header-separator-lf.js + +diff --git a/deps/llhttp/CMakeLists.txt b/deps/llhttp/CMakeLists.txt +index 6474e110a1f43..d0382038b9608 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.0.10) ++project(llhttp VERSION 6.0.11) + include(GNUInstallDirs) + + set(CMAKE_C_STANDARD 99) +diff --git a/deps/llhttp/include/llhttp.h b/deps/llhttp/include/llhttp.h +index 6e1e71ecbce0c..2da66f15e6485 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 0 +-#define LLHTTP_VERSION_PATCH 10 ++#define LLHTTP_VERSION_PATCH 11 + + #ifndef LLHTTP_STRICT_MODE + # define LLHTTP_STRICT_MODE 0 +diff --git a/deps/llhttp/llhttp.gyp b/deps/llhttp/llhttp.gyp +index 4acc79bdf399f..c7b8800a4f18c 100644 +--- a/deps/llhttp/llhttp.gyp ++++ b/deps/llhttp/llhttp.gyp +@@ -1,4 +1,11 @@ + { ++ 'variables': { ++ 'llhttp_sources': [ ++ 'src/llhttp.c', ++ 'src/api.c', ++ 'src/http.c', ++ ] ++ }, + 'targets': [ + { + 'target_name': 'llhttp', +@@ -7,7 +14,9 @@ + 'direct_dependent_settings': { + 'include_dirs': [ 'include' ], + }, +- 'sources': [ 'src/llhttp.c', 'src/api.c', 'src/http.c' ], ++ 'sources': [ ++ '<@(llhttp_sources)', ++ ], + }, + ] + } +diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c +index 8e63e79cff33e..5e7c5d1093313 100644 +--- a/deps/llhttp/src/llhttp.c ++++ b/deps/llhttp/src/llhttp.c +@@ -359,7 +359,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_24, ++ s_n_llhttp__internal__n_error_25, + 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, +@@ -367,12 +367,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_26, + s_n_llhttp__internal__n_error_27, ++ s_n_llhttp__internal__n_error_28, + 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_30, + s_n_llhttp__internal__n_error_29, +- s_n_llhttp__internal__n_error_28, + 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, +@@ -893,7 +893,7 @@ int llhttp__internal__c_test_flags_3( + return (state->flags & 8) == 8; + } + +-int llhttp__internal__c_test_lenient_flags_5( ++int llhttp__internal__c_test_lenient_flags_7( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -957,7 +957,7 @@ int llhttp__internal__c_store_http_minor( + return 0; + } + +-int llhttp__internal__c_test_lenient_flags_7( ++int llhttp__internal__c_test_lenient_flags_9( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -1657,11 +1657,11 @@ static llparse_state_t llhttp__internal__run( + switch (*p) { + case 9: { + p++; +- goto s_n_llhttp__internal__n_header_value_discard_ws; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_4; + } + case ' ': { + p++; +- goto s_n_llhttp__internal__n_header_value_discard_ws; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_4; + } + default: { + goto s_n_llhttp__internal__n_invoke_load_header_state; +@@ -1681,7 +1681,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_header_value_discard_lws; + } + default: { +- goto s_n_llhttp__internal__n_error_22; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_5; + } + } + /* UNREACHABLE */; +@@ -1717,7 +1717,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_23; ++ goto s_n_llhttp__internal__n_error_24; + } + } + /* UNREACHABLE */; +@@ -1743,8 +1743,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 = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; +@@ -1763,7 +1763,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_4; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + } + } + /* UNREACHABLE */; +@@ -1940,8 +1940,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_26: +- s_n_llhttp__internal__n_error_26: { ++ case s_n_llhttp__internal__n_error_27: ++ s_n_llhttp__internal__n_error_27: { + state->error = 0xb; + state->reason = "Content-Length overflow"; + state->error_pos = (const char*) p; +@@ -1950,8 +1950,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 = "Invalid character in Content-Length"; + state->error_pos = (const char*) p; +@@ -2046,8 +2046,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; +@@ -2056,8 +2056,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 = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -2294,7 +2294,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_30; ++ goto s_n_llhttp__internal__n_error_31; + } + } + /* UNREACHABLE */; +@@ -2674,7 +2674,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_31; ++ goto s_n_llhttp__internal__n_error_32; + } + } + /* UNREACHABLE */; +@@ -2699,7 +2699,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_31; ++ goto s_n_llhttp__internal__n_error_32; + } + } + /* UNREACHABLE */; +@@ -2717,13 +2717,13 @@ static llparse_state_t llhttp__internal__run( + switch (match_seq.status) { + case kMatchComplete: { + p++; +- goto s_n_llhttp__internal__n_error_36; ++ goto s_n_llhttp__internal__n_error_37; + } + case kMatchPause: { + return s_n_llhttp__internal__n_req_pri_upgrade; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_37; ++ goto s_n_llhttp__internal__n_error_38; + } + } + /* UNREACHABLE */; +@@ -2740,7 +2740,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_35; ++ goto s_n_llhttp__internal__n_error_36; + } + } + /* UNREACHABLE */; +@@ -2761,7 +2761,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_35; ++ goto s_n_llhttp__internal__n_error_36; + } + } + /* UNREACHABLE */; +@@ -2824,7 +2824,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_40; ++ goto s_n_llhttp__internal__n_error_41; + } + } + /* UNREACHABLE */; +@@ -2841,7 +2841,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_41; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -2904,7 +2904,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_42; ++ goto s_n_llhttp__internal__n_error_43; + } + } + /* UNREACHABLE */; +@@ -2928,7 +2928,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_45; ++ goto s_n_llhttp__internal__n_error_46; + } + } + /* UNREACHABLE */; +@@ -2952,7 +2952,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_45; ++ goto s_n_llhttp__internal__n_error_46; + } + } + /* UNREACHABLE */; +@@ -2976,7 +2976,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_45; ++ goto s_n_llhttp__internal__n_error_46; + } + } + /* UNREACHABLE */; +@@ -3005,7 +3005,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_45; ++ goto s_n_llhttp__internal__n_error_46; + } + } + /* UNREACHABLE */; +@@ -3096,7 +3096,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_fragment; + } + default: { +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -3157,7 +3157,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_47; ++ goto s_n_llhttp__internal__n_error_48; + } + } + /* UNREACHABLE */; +@@ -3195,7 +3195,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_query; + } + default: { +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_49; + } + } + /* UNREACHABLE */; +@@ -3320,10 +3320,10 @@ static llparse_state_t llhttp__internal__run( + } + case 8: { + p++; +- goto s_n_llhttp__internal__n_error_49; ++ goto s_n_llhttp__internal__n_error_50; + } + default: { +- goto s_n_llhttp__internal__n_error_50; ++ goto s_n_llhttp__internal__n_error_51; + } + } + /* UNREACHABLE */; +@@ -3382,7 +3382,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_51; ++ goto s_n_llhttp__internal__n_error_52; + } + } + /* UNREACHABLE */; +@@ -3399,7 +3399,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_server; + } + default: { +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + } + /* UNREACHABLE */; +@@ -3417,7 +3417,7 @@ static llparse_state_t llhttp__internal__run( + } + case 10: { + p++; +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + case 12: { + p++; +@@ -3425,18 +3425,18 @@ static llparse_state_t llhttp__internal__run( + } + case 13: { + p++; +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + case ' ': { + p++; +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + case '/': { + p++; + goto s_n_llhttp__internal__n_url_schema_delim_1; + } + default: { +- goto s_n_llhttp__internal__n_error_53; ++ goto s_n_llhttp__internal__n_error_54; + } + } + /* UNREACHABLE */; +@@ -3482,7 +3482,7 @@ static llparse_state_t llhttp__internal__run( + } + case 2: { + p++; +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + case 3: { + goto s_n_llhttp__internal__n_span_end_stub_schema; +@@ -3492,7 +3492,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_54; ++ goto s_n_llhttp__internal__n_error_55; + } + } + /* UNREACHABLE */; +@@ -3528,7 +3528,7 @@ static llparse_state_t llhttp__internal__run( + } + case 2: { + p++; +- goto s_n_llhttp__internal__n_error_52; ++ goto s_n_llhttp__internal__n_error_53; + } + case 3: { + goto s_n_llhttp__internal__n_span_start_stub_path_2; +@@ -3537,7 +3537,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 */; +@@ -3635,7 +3635,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_56; ++ goto s_n_llhttp__internal__n_error_57; + } + } + /* UNREACHABLE */; +@@ -3653,7 +3653,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3678,7 +3678,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3699,7 +3699,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3724,7 +3724,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3749,7 +3749,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3774,7 +3774,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3792,7 +3792,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3813,7 +3813,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3834,7 +3834,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3859,7 +3859,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3884,7 +3884,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3905,7 +3905,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3922,7 +3922,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3947,7 +3947,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -3972,7 +3972,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4014,7 +4014,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4039,7 +4039,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4064,7 +4064,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4089,7 +4089,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4110,7 +4110,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4135,7 +4135,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4160,7 +4160,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4185,7 +4185,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4210,7 +4210,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4228,7 +4228,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4249,7 +4249,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4270,7 +4270,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4295,7 +4295,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4324,7 +4324,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4349,7 +4349,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4374,7 +4374,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4399,7 +4399,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4424,7 +4424,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4445,7 +4445,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4470,7 +4470,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4495,7 +4495,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4520,7 +4520,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4545,7 +4545,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4566,7 +4566,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4583,7 +4583,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4605,7 +4605,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4630,7 +4630,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4652,7 +4652,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4685,7 +4685,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4710,7 +4710,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4735,7 +4735,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4760,7 +4760,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4785,7 +4785,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4814,7 +4814,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4831,7 +4831,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4856,7 +4856,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4874,7 +4874,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4899,7 +4899,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4920,7 +4920,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4941,7 +4941,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4966,7 +4966,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -4991,7 +4991,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5016,7 +5016,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5041,7 +5041,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5066,7 +5066,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5087,7 +5087,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5112,7 +5112,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5137,7 +5137,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5162,7 +5162,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5183,7 +5183,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5208,7 +5208,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5233,7 +5233,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5250,7 +5250,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5327,7 +5327,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_69; ++ goto s_n_llhttp__internal__n_error_70; + } + } + /* UNREACHABLE */; +@@ -5353,7 +5353,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_60; ++ goto s_n_llhttp__internal__n_error_61; + } + } + /* UNREACHABLE */; +@@ -5428,7 +5428,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_61; ++ goto s_n_llhttp__internal__n_error_62; + } + } + /* UNREACHABLE */; +@@ -5508,7 +5508,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_62; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -5571,7 +5571,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_65; ++ goto s_n_llhttp__internal__n_error_66; + } + } + /* UNREACHABLE */; +@@ -5588,7 +5588,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_66; ++ goto s_n_llhttp__internal__n_error_67; + } + } + /* UNREACHABLE */; +@@ -5651,7 +5651,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_67; ++ goto s_n_llhttp__internal__n_error_68; + } + } + /* UNREACHABLE */; +@@ -5675,7 +5675,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_70; ++ goto s_n_llhttp__internal__n_error_71; + } + } + /* UNREACHABLE */; +@@ -5700,7 +5700,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_68; ++ goto s_n_llhttp__internal__n_error_69; + } + } + /* UNREACHABLE */; +@@ -5724,7 +5724,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_68; ++ goto s_n_llhttp__internal__n_error_69; + } + } + /* UNREACHABLE */; +@@ -5745,7 +5745,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_68; ++ goto s_n_llhttp__internal__n_error_69; + } + } + /* UNREACHABLE */; +@@ -5762,7 +5762,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_68; ++ goto s_n_llhttp__internal__n_error_69; + } + } + /* UNREACHABLE */; +@@ -5831,7 +5831,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 = "Invalid characters in url"; + state->error_pos = (const char*) p; +@@ -6309,6 +6309,25 @@ static llparse_state_t llhttp__internal__run( + abort(); + } + s_n_llhttp__internal__n_error_21: { ++ state->error = 0xa; ++ state->reason = "Invalid header value char"; ++ 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_4: { ++ switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { ++ case 1: ++ goto s_n_llhttp__internal__n_header_value_discard_ws; ++ default: ++ goto s_n_llhttp__internal__n_error_21; ++ } ++ /* UNREACHABLE */; ++ abort(); ++ } ++ s_n_llhttp__internal__n_error_22: { + state->error = 0xb; + state->reason = "Empty Content-Length"; + state->error_pos = (const char*) p; +@@ -6393,7 +6412,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_load_header_state: { + switch (llhttp__internal__c_load_header_state(state, p, endp)) { + case 2: +- goto s_n_llhttp__internal__n_error_21; ++ goto s_n_llhttp__internal__n_error_22; + default: + goto s_n_llhttp__internal__n_invoke_load_header_state_1; + } +@@ -6419,7 +6438,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_22: { ++ s_n_llhttp__internal__n_error_23: { + state->error = 0x2; + state->reason = "Expected LF after CR"; + state->error_pos = (const char*) p; +@@ -6428,6 +6447,16 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_5: { ++ switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { ++ case 1: ++ goto s_n_llhttp__internal__n_header_value_discard_lws; ++ default: ++ goto s_n_llhttp__internal__n_error_23; ++ } ++ /* UNREACHABLE */; ++ abort(); ++ } + s_n_llhttp__internal__n_invoke_update_header_state_1: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { + default: +@@ -6502,7 +6531,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_23: { ++ s_n_llhttp__internal__n_error_24: { + state->error = 0x3; + state->reason = "Missing expected LF after header value"; + state->error_pos = (const char*) p; +@@ -6574,14 +6603,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_24; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25; + return s_error; + } +- 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_4: { ++ 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_header_value_lenient; +@@ -6689,10 +6718,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_26; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_27; + return s_error; + } +- goto s_n_llhttp__internal__n_error_26; ++ goto s_n_llhttp__internal__n_error_27; + /* UNREACHABLE */; + abort(); + } +@@ -6724,14 +6753,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_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(); + } +- s_n_llhttp__internal__n_error_25: { ++ s_n_llhttp__internal__n_error_26: { + state->error = 0x4; + state->reason = "Duplicate Content-Length"; + state->error_pos = (const char*) p; +@@ -6745,7 +6774,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_25; ++ goto s_n_llhttp__internal__n_error_26; + } + /* UNREACHABLE */; + abort(); +@@ -6760,11 +6789,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_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(); + } +@@ -6786,16 +6815,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_28; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_29; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_28; ++ goto s_n_llhttp__internal__n_error_29; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_5: { +- switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { ++ switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7; + default: +@@ -6807,7 +6836,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_5; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } +@@ -6838,8 +6867,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { +- switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { ++ switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; + default: +@@ -6851,7 +6880,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_6; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } +@@ -6936,7 +6965,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 = 0xa; + state->reason = "Invalid header token"; + state->error_pos = (const char*) p; +@@ -7010,7 +7039,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 = 0x7; + state->reason = "Expected CRLF"; + state->error_pos = (const char*) p; +@@ -7036,7 +7065,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 = 0x17; + state->reason = "Pause on PRI/Upgrade"; + state->error_pos = (const char*) p; +@@ -7045,7 +7074,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 HTTP/2 Connection Preface"; + state->error_pos = (const char*) p; +@@ -7054,7 +7083,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 = "Expected CRLF after version"; + state->error_pos = (const char*) p; +@@ -7073,7 +7102,7 @@ static llparse_state_t llhttp__internal__run( + /* 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; +@@ -7087,12 +7116,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_34; ++ goto s_n_llhttp__internal__n_error_35; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_38: { ++ s_n_llhttp__internal__n_error_39: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7108,12 +7137,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_38; ++ goto s_n_llhttp__internal__n_error_39; + } + /* 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; +@@ -7127,12 +7156,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_39; ++ goto s_n_llhttp__internal__n_error_40; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_33: { ++ s_n_llhttp__internal__n_error_34: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7150,13 +7179,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_33; ++ goto s_n_llhttp__internal__n_error_34; + } + /* 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_9: { ++ switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +@@ -7168,12 +7197,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_7; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_9; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_40: { ++ s_n_llhttp__internal__n_error_41: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -7182,7 +7211,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_41: { ++ s_n_llhttp__internal__n_error_42: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -7199,7 +7228,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 = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -7208,7 +7237,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 = 0x8; + state->reason = "Invalid method for HTTP/x.x request"; + state->error_pos = (const char*) p; +@@ -7290,12 +7319,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_32; ++ goto s_n_llhttp__internal__n_error_33; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_45: { ++ s_n_llhttp__internal__n_error_46: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -7304,7 +7333,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 = 0x8; + state->reason = "Expected SOURCE method for ICE/x.x request"; + state->error_pos = (const char*) p; +@@ -7318,12 +7347,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_43; ++ goto s_n_llhttp__internal__n_error_44; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_44: { ++ s_n_llhttp__internal__n_error_45: { + state->error = 0x8; + state->reason = "Invalid method for RTSP/x.x request"; + state->error_pos = (const char*) p; +@@ -7363,7 +7392,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_44; ++ goto s_n_llhttp__internal__n_error_45; + } + /* UNREACHABLE */; + abort(); +@@ -7444,7 +7473,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 = "Invalid char in url fragment start"; + state->error_pos = (const char*) p; +@@ -7504,7 +7533,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 query"; + state->error_pos = (const char*) p; +@@ -7513,7 +7542,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 path"; + state->error_pos = (const char*) p; +@@ -7624,7 +7653,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 = "Double @ in url"; + state->error_pos = (const char*) p; +@@ -7633,7 +7662,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 server"; + state->error_pos = (const char*) p; +@@ -7642,7 +7671,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; +@@ -7651,7 +7680,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 = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -7660,7 +7689,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; +@@ -7669,7 +7698,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 start char in url"; + state->error_pos = (const char*) p; +@@ -7688,7 +7717,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 = 0x6; + state->reason = "Expected space after method"; + state->error_pos = (const char*) p; +@@ -7705,7 +7734,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 = 0x6; + state->reason = "Invalid method encountered"; + state->error_pos = (const char*) p; +@@ -7714,7 +7743,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 = 0xd; + state->reason = "Response overflow"; + state->error_pos = (const char*) p; +@@ -7726,14 +7755,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_59; ++ goto s_n_llhttp__internal__n_error_60; + default: + goto s_n_llhttp__internal__n_res_status_code; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_60: { ++ s_n_llhttp__internal__n_error_61: { + state->error = 0x2; + state->reason = "Expected LF after CR"; + state->error_pos = (const char*) p; +@@ -7778,7 +7807,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 = 0xd; + state->reason = "Invalid response status"; + state->error_pos = (const char*) p; +@@ -7795,7 +7824,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 = "Expected space after version"; + state->error_pos = (const char*) p; +@@ -7804,7 +7833,7 @@ static llparse_state_t llhttp__internal__run( + /* 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; +@@ -7818,12 +7847,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_58; ++ goto s_n_llhttp__internal__n_error_59; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_63: { ++ s_n_llhttp__internal__n_error_64: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7839,12 +7868,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_63; ++ goto s_n_llhttp__internal__n_error_64; + } + /* 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; +@@ -7858,12 +7887,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_64; ++ goto s_n_llhttp__internal__n_error_65; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_57: { ++ s_n_llhttp__internal__n_error_58: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -7881,13 +7910,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_57; ++ goto s_n_llhttp__internal__n_error_58; + } + /* 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_10: { ++ switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: +@@ -7899,12 +7928,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_8; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_10; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_65: { ++ s_n_llhttp__internal__n_error_66: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -7913,7 +7942,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_66: { ++ s_n_llhttp__internal__n_error_67: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -7930,7 +7959,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 = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -7939,7 +7968,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 = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -7964,7 +7993,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 = 0x8; + state->reason = "Invalid word encountered"; + state->error_pos = (const char*) p; +@@ -8431,7 +8460,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_18, ++ s_n_llhttp__internal__n_error_20, + 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, +@@ -8439,12 +8468,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_20, +- s_n_llhttp__internal__n_error_21, ++ s_n_llhttp__internal__n_error_22, ++ s_n_llhttp__internal__n_error_23, + 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_23, +- s_n_llhttp__internal__n_error_22, ++ 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, +@@ -8960,7 +8989,7 @@ int llhttp__internal__c_test_flags_3( + return (state->flags & 8) == 8; + } + +-int llhttp__internal__c_test_lenient_flags_5( ++int llhttp__internal__c_test_lenient_flags_7( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -9024,7 +9053,7 @@ int llhttp__internal__c_store_http_minor( + return 0; + } + +-int llhttp__internal__c_test_lenient_flags_7( ++int llhttp__internal__c_test_lenient_flags_9( + llhttp__internal_t* state, + const unsigned char* p, + const unsigned char* endp) { +@@ -9694,11 +9723,11 @@ static llparse_state_t llhttp__internal__run( + switch (*p) { + case 9: { + p++; +- goto s_n_llhttp__internal__n_header_value_discard_ws; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_4; + } + case ' ': { + p++; +- goto s_n_llhttp__internal__n_header_value_discard_ws; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_4; + } + default: { + goto s_n_llhttp__internal__n_invoke_load_header_state; +@@ -9712,8 +9741,15 @@ static llparse_state_t llhttp__internal__run( + if (p == endp) { + return s_n_llhttp__internal__n_header_value_discard_ws_almost_done; + } +- p++; +- goto s_n_llhttp__internal__n_header_value_discard_lws; ++ switch (*p) { ++ case 10: { ++ p++; ++ goto s_n_llhttp__internal__n_header_value_discard_lws; ++ } ++ default: { ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_5; ++ } ++ } + /* UNREACHABLE */; + abort(); + } +@@ -9747,7 +9783,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_17; ++ goto s_n_llhttp__internal__n_error_19; + } + } + /* UNREACHABLE */; +@@ -9773,8 +9809,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_18: +- s_n_llhttp__internal__n_error_18: { ++ case s_n_llhttp__internal__n_error_20: ++ s_n_llhttp__internal__n_error_20: { + state->error = 0xa; + state->reason = "Invalid header value char"; + state->error_pos = (const char*) p; +@@ -9793,7 +9829,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_4; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_6; + } + } + /* UNREACHABLE */; +@@ -9970,8 +10006,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_22: ++ s_n_llhttp__internal__n_error_22: { + state->error = 0xb; + state->reason = "Content-Length overflow"; + state->error_pos = (const char*) p; +@@ -9980,8 +10016,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- case s_n_llhttp__internal__n_error_21: +- s_n_llhttp__internal__n_error_21: { ++ case s_n_llhttp__internal__n_error_23: ++ s_n_llhttp__internal__n_error_23: { + state->error = 0xb; + state->reason = "Invalid character in Content-Length"; + state->error_pos = (const char*) p; +@@ -10076,8 +10112,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_25: ++ s_n_llhttp__internal__n_error_25: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -10086,8 +10122,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_24: ++ s_n_llhttp__internal__n_error_24: { + state->error = 0xf; + state->reason = "Invalid `Transfer-Encoding` header value"; + state->error_pos = (const char*) p; +@@ -10324,7 +10360,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_24; ++ goto s_n_llhttp__internal__n_error_26; + } + } + /* UNREACHABLE */; +@@ -10678,7 +10714,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_25; ++ goto s_n_llhttp__internal__n_error_27; + } + } + /* UNREACHABLE */; +@@ -10696,13 +10732,13 @@ static llparse_state_t llhttp__internal__run( + switch (match_seq.status) { + case kMatchComplete: { + p++; +- goto s_n_llhttp__internal__n_error_30; ++ goto s_n_llhttp__internal__n_error_32; + } + case kMatchPause: { + return s_n_llhttp__internal__n_req_pri_upgrade; + } + case kMatchMismatch: { +- goto s_n_llhttp__internal__n_error_31; ++ goto s_n_llhttp__internal__n_error_33; + } + } + /* UNREACHABLE */; +@@ -10719,7 +10755,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_29; ++ goto s_n_llhttp__internal__n_error_31; + } + } + /* UNREACHABLE */; +@@ -10740,7 +10776,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_29; ++ goto s_n_llhttp__internal__n_error_31; + } + } + /* UNREACHABLE */; +@@ -10803,7 +10839,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_34; ++ goto s_n_llhttp__internal__n_error_36; + } + } + /* UNREACHABLE */; +@@ -10820,7 +10856,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_35; ++ goto s_n_llhttp__internal__n_error_37; + } + } + /* UNREACHABLE */; +@@ -10883,7 +10919,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_36; ++ goto s_n_llhttp__internal__n_error_38; + } + } + /* UNREACHABLE */; +@@ -10907,7 +10943,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_39; ++ goto s_n_llhttp__internal__n_error_41; + } + } + /* UNREACHABLE */; +@@ -10931,7 +10967,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_39; ++ goto s_n_llhttp__internal__n_error_41; + } + } + /* UNREACHABLE */; +@@ -10955,7 +10991,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_39; ++ goto s_n_llhttp__internal__n_error_41; + } + } + /* UNREACHABLE */; +@@ -10984,7 +11020,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_39; ++ goto s_n_llhttp__internal__n_error_41; + } + } + /* UNREACHABLE */; +@@ -11038,7 +11074,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_40; ++ goto s_n_llhttp__internal__n_error_42; + } + } + /* UNREACHABLE */; +@@ -11095,7 +11131,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_41; ++ goto s_n_llhttp__internal__n_error_43; + } + } + /* UNREACHABLE */; +@@ -11125,7 +11161,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_query; + } + default: { +- goto s_n_llhttp__internal__n_error_42; ++ goto s_n_llhttp__internal__n_error_44; + } + } + /* UNREACHABLE */; +@@ -11266,10 +11302,10 @@ static llparse_state_t llhttp__internal__run( + } + case 7: { + p++; +- goto s_n_llhttp__internal__n_error_43; ++ goto s_n_llhttp__internal__n_error_45; + } + default: { +- goto s_n_llhttp__internal__n_error_44; ++ goto s_n_llhttp__internal__n_error_46; + } + } + /* UNREACHABLE */; +@@ -11324,7 +11360,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_45; ++ goto s_n_llhttp__internal__n_error_47; + } + } + /* UNREACHABLE */; +@@ -11341,7 +11377,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_server; + } + default: { +- goto s_n_llhttp__internal__n_error_47; ++ goto s_n_llhttp__internal__n_error_49; + } + } + /* UNREACHABLE */; +@@ -11355,22 +11391,22 @@ static llparse_state_t llhttp__internal__run( + switch (*p) { + case 10: { + p++; +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_48; + } + case 13: { + p++; +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_48; + } + case ' ': { + p++; +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_48; + } + case '/': { + p++; + goto s_n_llhttp__internal__n_url_schema_delim_1; + } + default: { +- goto s_n_llhttp__internal__n_error_47; ++ goto s_n_llhttp__internal__n_error_49; + } + } + /* UNREACHABLE */; +@@ -11412,7 +11448,7 @@ static llparse_state_t llhttp__internal__run( + switch (lookup_table[(uint8_t) *p]) { + case 1: { + p++; +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_48; + } + case 2: { + goto s_n_llhttp__internal__n_span_end_stub_schema; +@@ -11422,7 +11458,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_48; ++ goto s_n_llhttp__internal__n_error_50; + } + } + /* UNREACHABLE */; +@@ -11454,7 +11490,7 @@ static llparse_state_t llhttp__internal__run( + switch (lookup_table[(uint8_t) *p]) { + case 1: { + p++; +- goto s_n_llhttp__internal__n_error_46; ++ goto s_n_llhttp__internal__n_error_48; + } + case 2: { + goto s_n_llhttp__internal__n_span_start_stub_path_2; +@@ -11463,7 +11499,7 @@ static llparse_state_t llhttp__internal__run( + goto s_n_llhttp__internal__n_url_schema; + } + default: { +- goto s_n_llhttp__internal__n_error_49; ++ goto s_n_llhttp__internal__n_error_51; + } + } + /* UNREACHABLE */; +@@ -11519,7 +11555,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_50; ++ goto s_n_llhttp__internal__n_error_52; + } + } + /* UNREACHABLE */; +@@ -11537,7 +11573,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11562,7 +11598,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11583,7 +11619,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11608,7 +11644,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11633,7 +11669,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11658,7 +11694,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11676,7 +11712,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11697,7 +11733,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11718,7 +11754,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11743,7 +11779,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11768,7 +11804,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11789,7 +11825,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11806,7 +11842,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11831,7 +11867,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11856,7 +11892,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11898,7 +11934,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11923,7 +11959,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11948,7 +11984,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11973,7 +12009,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -11994,7 +12030,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12019,7 +12055,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12044,7 +12080,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12069,7 +12105,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12094,7 +12130,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12112,7 +12148,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12133,7 +12169,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12154,7 +12190,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12179,7 +12215,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12208,7 +12244,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12233,7 +12269,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12258,7 +12294,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12283,7 +12319,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12308,7 +12344,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12329,7 +12365,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12354,7 +12390,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12379,7 +12415,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12404,7 +12440,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12429,7 +12465,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12450,7 +12486,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12467,7 +12503,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12489,7 +12525,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12514,7 +12550,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12536,7 +12572,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12569,7 +12605,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12594,7 +12630,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12619,7 +12655,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12644,7 +12680,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12669,7 +12705,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12698,7 +12734,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12715,7 +12751,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12740,7 +12776,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12758,7 +12794,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12783,7 +12819,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12804,7 +12840,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12825,7 +12861,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12850,7 +12886,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12875,7 +12911,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12900,7 +12936,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12925,7 +12961,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12950,7 +12986,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12971,7 +13007,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -12996,7 +13032,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13021,7 +13057,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13046,7 +13082,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13067,7 +13103,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13092,7 +13128,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13117,7 +13153,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13134,7 +13170,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13211,7 +13247,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_62; ++ goto s_n_llhttp__internal__n_error_64; + } + } + /* UNREACHABLE */; +@@ -13305,7 +13341,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_54; ++ goto s_n_llhttp__internal__n_error_56; + } + } + /* UNREACHABLE */; +@@ -13385,7 +13421,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_55; ++ goto s_n_llhttp__internal__n_error_57; + } + } + /* UNREACHABLE */; +@@ -13448,7 +13484,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_58; ++ goto s_n_llhttp__internal__n_error_60; + } + } + /* UNREACHABLE */; +@@ -13465,7 +13501,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_59; ++ goto s_n_llhttp__internal__n_error_61; + } + } + /* UNREACHABLE */; +@@ -13528,7 +13564,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_60; ++ goto s_n_llhttp__internal__n_error_62; + } + } + /* UNREACHABLE */; +@@ -13552,7 +13588,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_63; ++ goto s_n_llhttp__internal__n_error_65; + } + } + /* UNREACHABLE */; +@@ -13577,7 +13613,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_61; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -13601,7 +13637,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_61; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -13622,7 +13658,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_61; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -13639,7 +13675,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_61; ++ goto s_n_llhttp__internal__n_error_63; + } + } + /* UNREACHABLE */; +@@ -13699,7 +13735,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */ + abort(); + } +- s_n_llhttp__internal__n_error_46: { ++ s_n_llhttp__internal__n_error_48: { + state->error = 0x7; + state->reason = "Invalid characters in url"; + state->error_pos = (const char*) p; +@@ -14141,6 +14177,25 @@ static llparse_state_t llhttp__internal__run( + abort(); + } + s_n_llhttp__internal__n_error_16: { ++ state->error = 0xa; ++ state->reason = "Invalid header value char"; ++ 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_4: { ++ switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { ++ case 1: ++ goto s_n_llhttp__internal__n_header_value_discard_ws; ++ default: ++ goto s_n_llhttp__internal__n_error_16; ++ } ++ /* UNREACHABLE */; ++ abort(); ++ } ++ s_n_llhttp__internal__n_error_17: { + state->error = 0xb; + state->reason = "Empty Content-Length"; + state->error_pos = (const char*) p; +@@ -14225,7 +14280,7 @@ static llparse_state_t llhttp__internal__run( + s_n_llhttp__internal__n_invoke_load_header_state: { + switch (llhttp__internal__c_load_header_state(state, p, endp)) { + case 2: +- goto s_n_llhttp__internal__n_error_16; ++ goto s_n_llhttp__internal__n_error_17; + default: + goto s_n_llhttp__internal__n_invoke_load_header_state_1; + } +@@ -14251,6 +14306,25 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } ++ s_n_llhttp__internal__n_error_18: { ++ state->error = 0x2; ++ state->reason = "Expected LF after CR"; ++ 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_5: { ++ switch (llhttp__internal__c_test_lenient_flags_2(state, p, endp)) { ++ case 1: ++ goto s_n_llhttp__internal__n_header_value_discard_lws; ++ default: ++ goto s_n_llhttp__internal__n_error_18; ++ } ++ /* UNREACHABLE */; ++ abort(); ++ } + s_n_llhttp__internal__n_invoke_update_header_state_1: { + switch (llhttp__internal__c_update_header_state_1(state, p, endp)) { + default: +@@ -14325,7 +14399,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_17: { ++ s_n_llhttp__internal__n_error_19: { + state->error = 0x3; + state->reason = "Missing expected LF after header value"; + state->error_pos = (const char*) p; +@@ -14397,14 +14471,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_18; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_20; + return s_error; + } +- goto s_n_llhttp__internal__n_error_18; ++ goto s_n_llhttp__internal__n_error_20; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_4: { ++ 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_header_value_lenient; +@@ -14512,10 +14586,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_20; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_22; + return s_error; + } +- goto s_n_llhttp__internal__n_error_20; ++ goto s_n_llhttp__internal__n_error_22; + /* UNREACHABLE */; + abort(); + } +@@ -14547,14 +14621,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_21; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_23; + return s_error; + } +- goto s_n_llhttp__internal__n_error_21; ++ goto s_n_llhttp__internal__n_error_23; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_19: { ++ s_n_llhttp__internal__n_error_21: { + state->error = 0x4; + state->reason = "Duplicate Content-Length"; + state->error_pos = (const char*) p; +@@ -14568,7 +14642,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_19; ++ goto s_n_llhttp__internal__n_error_21; + } + /* UNREACHABLE */; + abort(); +@@ -14583,11 +14657,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_23; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_23; ++ goto s_n_llhttp__internal__n_error_25; + /* UNREACHABLE */; + abort(); + } +@@ -14609,16 +14683,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_22; ++ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_24; + return s_error; + } + p++; +- goto s_n_llhttp__internal__n_error_22; ++ goto s_n_llhttp__internal__n_error_24; + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_5: { +- switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_7: { ++ switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7; + default: +@@ -14630,7 +14704,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_5; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_7; + default: + goto s_n_llhttp__internal__n_header_value_te_chunked; + } +@@ -14661,8 +14735,8 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_invoke_test_lenient_flags_6: { +- switch (llhttp__internal__c_test_lenient_flags_5(state, p, endp)) { ++ s_n_llhttp__internal__n_invoke_test_lenient_flags_8: { ++ switch (llhttp__internal__c_test_lenient_flags_7(state, p, endp)) { + case 0: + goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8; + default: +@@ -14674,7 +14748,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_6; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_8; + default: + goto s_n_llhttp__internal__n_invoke_or_flags_17; + } +@@ -14759,7 +14833,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_24: { ++ s_n_llhttp__internal__n_error_26: { + state->error = 0xa; + state->reason = "Invalid header token"; + state->error_pos = (const char*) p; +@@ -14833,7 +14907,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_25: { ++ s_n_llhttp__internal__n_error_27: { + state->error = 0x7; + state->reason = "Expected CRLF"; + state->error_pos = (const char*) p; +@@ -14859,7 +14933,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_30: { ++ s_n_llhttp__internal__n_error_32: { + state->error = 0x17; + state->reason = "Pause on PRI/Upgrade"; + state->error_pos = (const char*) p; +@@ -14868,7 +14942,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_31: { ++ s_n_llhttp__internal__n_error_33: { + state->error = 0x9; + state->reason = "Expected HTTP/2 Connection Preface"; + state->error_pos = (const char*) p; +@@ -14877,7 +14951,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_29: { ++ s_n_llhttp__internal__n_error_31: { + state->error = 0x9; + state->reason = "Expected CRLF after version"; + state->error_pos = (const char*) p; +@@ -14896,7 +14970,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_28: { ++ s_n_llhttp__internal__n_error_30: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -14910,12 +14984,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_28; ++ goto s_n_llhttp__internal__n_error_30; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_32: { ++ s_n_llhttp__internal__n_error_34: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -14931,12 +15005,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_32; ++ goto s_n_llhttp__internal__n_error_34; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_33: { ++ s_n_llhttp__internal__n_error_35: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -14950,12 +15024,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_33; ++ goto s_n_llhttp__internal__n_error_35; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_27: { ++ s_n_llhttp__internal__n_error_29: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -14973,13 +15047,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_27; ++ goto s_n_llhttp__internal__n_error_29; + } + /* 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_9: { ++ switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_invoke_load_method_1; + default: +@@ -14991,12 +15065,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_7; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_9; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_34: { ++ s_n_llhttp__internal__n_error_36: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -15005,7 +15079,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_35: { ++ s_n_llhttp__internal__n_error_37: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -15022,7 +15096,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_36: { ++ s_n_llhttp__internal__n_error_38: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -15031,7 +15105,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_26: { ++ s_n_llhttp__internal__n_error_28: { + state->error = 0x8; + state->reason = "Invalid method for HTTP/x.x request"; + state->error_pos = (const char*) p; +@@ -15113,12 +15187,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_26; ++ goto s_n_llhttp__internal__n_error_28; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_39: { ++ s_n_llhttp__internal__n_error_41: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -15127,7 +15201,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_37: { ++ s_n_llhttp__internal__n_error_39: { + state->error = 0x8; + state->reason = "Expected SOURCE method for ICE/x.x request"; + state->error_pos = (const char*) p; +@@ -15141,12 +15215,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_37; ++ goto s_n_llhttp__internal__n_error_39; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_38: { ++ s_n_llhttp__internal__n_error_40: { + state->error = 0x8; + state->reason = "Invalid method for RTSP/x.x request"; + state->error_pos = (const char*) p; +@@ -15186,7 +15260,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_38; ++ goto s_n_llhttp__internal__n_error_40; + } + /* UNREACHABLE */; + abort(); +@@ -15267,7 +15341,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_40: { ++ s_n_llhttp__internal__n_error_42: { + state->error = 0x7; + state->reason = "Invalid char in url fragment start"; + state->error_pos = (const char*) p; +@@ -15327,7 +15401,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_41: { ++ s_n_llhttp__internal__n_error_43: { + state->error = 0x7; + state->reason = "Invalid char in url query"; + state->error_pos = (const char*) p; +@@ -15336,7 +15410,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_42: { ++ s_n_llhttp__internal__n_error_44: { + state->error = 0x7; + state->reason = "Invalid char in url path"; + state->error_pos = (const char*) p; +@@ -15447,7 +15521,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_43: { ++ s_n_llhttp__internal__n_error_45: { + state->error = 0x7; + state->reason = "Double @ in url"; + state->error_pos = (const char*) p; +@@ -15456,7 +15530,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_44: { ++ s_n_llhttp__internal__n_error_46: { + state->error = 0x7; + state->reason = "Unexpected char in url server"; + state->error_pos = (const char*) p; +@@ -15465,7 +15539,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_45: { ++ s_n_llhttp__internal__n_error_47: { + state->error = 0x7; + state->reason = "Unexpected char in url server"; + state->error_pos = (const char*) p; +@@ -15474,7 +15548,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_47: { ++ s_n_llhttp__internal__n_error_49: { + state->error = 0x7; + state->reason = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -15483,7 +15557,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_48: { ++ s_n_llhttp__internal__n_error_50: { + state->error = 0x7; + state->reason = "Unexpected char in url schema"; + state->error_pos = (const char*) p; +@@ -15492,7 +15566,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_49: { ++ s_n_llhttp__internal__n_error_51: { + state->error = 0x7; + state->reason = "Unexpected start char in url"; + state->error_pos = (const char*) p; +@@ -15511,7 +15585,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_50: { ++ s_n_llhttp__internal__n_error_52: { + state->error = 0x6; + state->reason = "Expected space after method"; + state->error_pos = (const char*) p; +@@ -15528,7 +15602,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_62: { ++ s_n_llhttp__internal__n_error_64: { + state->error = 0x6; + state->reason = "Invalid method encountered"; + state->error_pos = (const char*) p; +@@ -15537,7 +15611,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_53: { ++ s_n_llhttp__internal__n_error_55: { + state->error = 0xd; + state->reason = "Response overflow"; + state->error_pos = (const char*) p; +@@ -15549,7 +15623,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_53; ++ goto s_n_llhttp__internal__n_error_55; + default: + goto s_n_llhttp__internal__n_res_status_code; + } +@@ -15592,7 +15666,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_54: { ++ s_n_llhttp__internal__n_error_56: { + state->error = 0xd; + state->reason = "Invalid response status"; + state->error_pos = (const char*) p; +@@ -15609,7 +15683,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_55: { ++ s_n_llhttp__internal__n_error_57: { + state->error = 0x9; + state->reason = "Expected space after version"; + state->error_pos = (const char*) p; +@@ -15618,7 +15692,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_52: { ++ s_n_llhttp__internal__n_error_54: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15632,12 +15706,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_52; ++ goto s_n_llhttp__internal__n_error_54; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_56: { ++ s_n_llhttp__internal__n_error_58: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15653,12 +15727,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_56; ++ goto s_n_llhttp__internal__n_error_58; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_57: { ++ s_n_llhttp__internal__n_error_59: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15672,12 +15746,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_57; ++ goto s_n_llhttp__internal__n_error_59; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_51: { ++ s_n_llhttp__internal__n_error_53: { + state->error = 0x9; + state->reason = "Invalid HTTP version"; + state->error_pos = (const char*) p; +@@ -15695,13 +15769,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_51; ++ goto s_n_llhttp__internal__n_error_53; + } + /* 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_10: { ++ switch (llhttp__internal__c_test_lenient_flags_9(state, p, endp)) { + case 1: + goto s_n_llhttp__internal__n_res_http_end; + default: +@@ -15713,12 +15787,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_8; ++ goto s_n_llhttp__internal__n_invoke_test_lenient_flags_10; + } + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_58: { ++ s_n_llhttp__internal__n_error_60: { + state->error = 0x9; + state->reason = "Invalid minor version"; + state->error_pos = (const char*) p; +@@ -15727,7 +15801,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_59: { ++ s_n_llhttp__internal__n_error_61: { + state->error = 0x9; + state->reason = "Expected dot"; + state->error_pos = (const char*) p; +@@ -15744,7 +15818,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_60: { ++ s_n_llhttp__internal__n_error_62: { + state->error = 0x9; + state->reason = "Invalid major version"; + state->error_pos = (const char*) p; +@@ -15753,7 +15827,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_63: { ++ s_n_llhttp__internal__n_error_65: { + state->error = 0x8; + state->reason = "Expected HTTP/"; + state->error_pos = (const char*) p; +@@ -15778,7 +15852,7 @@ static llparse_state_t llhttp__internal__run( + /* UNREACHABLE */; + abort(); + } +- s_n_llhttp__internal__n_error_61: { ++ s_n_llhttp__internal__n_error_63: { + state->error = 0x8; + state->reason = "Invalid word encountered"; + state->error_pos = (const char*) p; +diff --git a/test/parallel/test-http-missing-header-separator-lf.js b/test/parallel/test-http-missing-header-separator-lf.js +new file mode 100644 +index 0000000000000..7fc17dc2c971d +--- /dev/null ++++ b/test/parallel/test-http-missing-header-separator-lf.js +@@ -0,0 +1,83 @@ ++'use strict'; ++ ++const common = require('../common'); ++const assert = require('assert'); ++ ++const http = require('http'); ++const net = require('net'); ++ ++function serverHandler(server, msg) { ++ const client = net.connect(server.address().port, 'localhost'); ++ ++ let response = ''; ++ ++ client.on('data', common.mustCall((chunk) => { ++ response += chunk; ++ })); ++ ++ client.setEncoding('utf8'); ++ client.on('error', common.mustNotCall()); ++ client.on('end', common.mustCall(() => { ++ assert.strictEqual( ++ response, ++ 'HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n' ++ ); ++ server.close(); ++ })); ++ client.write(msg); ++ client.resume(); ++} ++ ++{ ++ const msg = [ ++ 'GET / HTTP/1.1', ++ 'Host: localhost', ++ 'Dummy: x\rContent-Length: 23', ++ '', ++ 'GET / HTTP/1.1', ++ 'Dummy: GET /admin HTTP/1.1', ++ 'Host: localhost', ++ '', ++ '', ++ ].join('\r\n'); ++ ++ const server = http.createServer(common.mustNotCall()); ++ ++ server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg))); ++} ++ ++{ ++ const msg = [ ++ 'POST / HTTP/1.1', ++ 'Host: localhost', ++ 'x:x\rTransfer-Encoding: chunked', ++ '', ++ '1', ++ 'A', ++ '0', ++ '', ++ '', ++ ].join('\r\n'); ++ ++ const server = http.createServer(common.mustNotCall()); ++ ++ server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg))); ++} ++ ++{ ++ const msg = [ ++ 'POST / HTTP/1.1', ++ 'Host: localhost', ++ 'x:\rTransfer-Encoding: chunked', ++ '', ++ '1', ++ 'A', ++ '0', ++ '', ++ '', ++ ].join('\r\n'); ++ ++ const server = http.createServer(common.mustNotCall()); ++ ++ server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg))); ++} diff -Nru nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30590.patch nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30590.patch --- nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30590.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-18.13.0+dfsg1/debian/patches/CVE-2023-30590.patch 2024-03-25 14:43:04.000000000 +0000 @@ -0,0 +1,155 @@ +From 1a5c9284ebce5cd71cf7a3c29759a748c373ac85 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= +Date: Mon, 12 Jun 2023 19:44:48 +0200 +Subject: [PATCH] doc,test: clarify behavior of DH generateKeys + +The DiffieHellman class is an old and thin wrapper around certain +OpenSSL functions, many of which are deprecated in OpenSSL 3.0. Because +the Node.js API mirrors the OpenSSL API, it adopts some of its +peculiarities, but the Node.js documentation does not properly reflect +these. Most importantly, despite the documentation saying otherwise, +diffieHellman.generateKeys() does not generate a new private key when +one has already been set or generated. Based on the documentation alone, +users may be led to misuse the API in a way that results in key reuse, +which can have drastic negative consequences for subsequent operations +that consume the shared secret. + +These design issues in this old API have been around for many years, and +we are not currently aware of any misuse in the ecosystem that falls +into the above scenario. Changing the behavior of the API would be a +significant breaking change and is thus not appropriate for a security +release (nor is it a goal.) The reported issue is treated as CWE-1068 +(after a vast amount of uncertainty whether to treat it as a +vulnerability at all), therefore, this change only updates the +documentation to match the actual behavior. Tests are also added that +demonstrate this particular oddity. + +Newer APIs exist that can be used for some, but not all, Diffie-Hellman +operations (e.g., crypto.diffieHellman() that was added in 2020). We +should keep modernizing crypto APIs, but that is a non-goal for this +security release. + +The ECDH class mirrors the DiffieHellman class in many ways, but it does +not appear to be affected by this particular peculiarity. In particular, +ecdh.generateKeys() does appear to always generate a new private key. + +PR-URL: https://github.com/nodejs-private/node-private/pull/426 +Reviewed-By: Rafael Gonzaga +Reviewed-By: Ben Noordhuis +CVE-ID: CVE-2023-30590 +--- + doc/api/crypto.md | 13 +++++++- + test/parallel/test-crypto-dh.js | 53 +++++++++++++++++++++++++++++++++ + 2 files changed, 65 insertions(+), 1 deletion(-) + +diff --git a/doc/api/crypto.md b/doc/api/crypto.md +index 9ac29cb7c2f718..ca9dc7b2e235e2 100644 +--- a/doc/api/crypto.md ++++ b/doc/api/crypto.md +@@ -1060,12 +1060,17 @@ added: v0.5.0 + * `encoding` {string} The [encoding][] of the return value. + * Returns: {Buffer | string} + +-Generates private and public Diffie-Hellman key values, and returns ++Generates private and public Diffie-Hellman key values unless they have been ++generated or computed already, and returns + the public key in the specified `encoding`. This key should be + transferred to the other party. + If `encoding` is provided a string is returned; otherwise a + [`Buffer`][] is returned. + ++This function is a thin wrapper around [`DH_generate_key()`][]. In particular, ++once a private key has been generated or set, calling this function only updates ++the public key but does not generate a new private key. ++ + ### `diffieHellman.getGenerator([encoding])` + +