File CVE-2022-35256.patch of Package nodejs10.26739
From a9f1146b8827855e342834458a71f2367346ace0 Mon Sep 17 00:00:00 2001
From: Paolo Insogna <paolo@cowtech.it>
Date: Thu, 22 Sep 2022 13:07:36 +0000
Subject: [PATCH] http: disable chunked encoding when OBS fold is used
Reviewed-By: Vladimir de Turckheim <vlad2t@hotmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
PR-URL: https://github.com/nodejs-private/node-private/pull/341
Backport-PR-URL: https://github.com/nodejs-private/node-private/pull/343
CVE-ID: CVE-2022-32213, CVE-2022-35256
---
deps/llhttp/include/llhttp.h | 2 +-
deps/llhttp/src/llhttp.c | 448 +++++++++---------
test/parallel/test-http-header-overflow.js | 9 +-
.../test-http-missing-header-separator-cr.js | 72 ++-
.../test-http-transfer-encoding-smuggling.js | 119 +++--
5 files changed, 371 insertions(+), 279 deletions(-)
Index: node-v10.24.1/deps/llhttp/include/llhttp.h
===================================================================
--- node-v10.24.1.orig/deps/llhttp/include/llhttp.h
+++ node-v10.24.1/deps/llhttp/include/llhttp.h
@@ -3,7 +3,7 @@
#define LLHTTP_VERSION_MAJOR 2
#define LLHTTP_VERSION_MINOR 1
-#define LLHTTP_VERSION_PATCH 5
+#define LLHTTP_VERSION_PATCH 6
#ifndef LLHTTP_STRICT_MODE
# define LLHTTP_STRICT_MODE 0
Index: node-v10.24.1/deps/llhttp/src/llhttp.c
===================================================================
--- node-v10.24.1.orig/deps/llhttp/src/llhttp.c
+++ node-v10.24.1/deps/llhttp/src/llhttp.c
@@ -325,8 +325,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_header_value_lenient_failed,
+ 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,
@@ -738,7 +737,7 @@ int llhttp__internal__c_or_flags_6(
return 0;
}
-int llhttp__internal__c_update_header_state_2(
+int llhttp__internal__c_update_header_state_3(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -746,7 +745,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_update_header_state_4(
+int llhttp__internal__c_update_header_state_1(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -754,7 +753,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_update_header_state_5(
+int llhttp__internal__c_update_header_state_6(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -762,7 +761,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_update_header_state_6(
+int llhttp__internal__c_update_header_state_7(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -770,7 +769,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_test_flags_6(
+int llhttp__internal__c_test_flags_7(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -811,7 +810,7 @@ int llhttp__internal__c_or_flags_15(
return 0;
}
-int llhttp__internal__c_test_flags_7(
+int llhttp__internal__c_test_flags_8(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -834,7 +833,7 @@ int llhttp__internal__c_and_flags(
return 0;
}
-int llhttp__internal__c_update_header_state_7(
+int llhttp__internal__c_update_header_state_8(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -1565,7 +1564,7 @@ static llparse_state_t llhttp__internal_
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_error_23;
}
}
/* UNREACHABLE */;
@@ -1578,13 +1577,13 @@ static llparse_state_t llhttp__internal_
}
switch (*p) {
case 9: {
- goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_3;
}
case ' ': {
- goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_3;
}
default: {
- goto s_n_llhttp__internal__n_invoke_load_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_4;
}
}
/* UNREACHABLE */;
@@ -1601,7 +1600,7 @@ static llparse_state_t llhttp__internal_
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 */;
@@ -1627,32 +1626,16 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- case s_n_llhttp__internal__n_error_24:
- s_n_llhttp__internal__n_error_24: {
- state->error = 0x19;
- state->reason = "Missing expected CR after header value";
+ 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;
state->_current = (void*) (intptr_t) s_error;
return s_error;
/* UNREACHABLE */;
abort();
}
- case s_n_llhttp__internal__n_header_value_lenient_failed:
- s_n_llhttp__internal__n_header_value_lenient_failed: {
- if (p == endp) {
- return s_n_llhttp__internal__n_header_value_lenient_failed;
- }
- switch (*p) {
- case 10: {
- goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2;
- }
- default: {
- goto s_n_llhttp__internal__n_error_25;
- }
- }
- /* UNREACHABLE */;
- abort();
- }
case s_n_llhttp__internal__n_header_value_otherwise:
s_n_llhttp__internal__n_header_value_otherwise: {
if (p == endp) {
@@ -1663,7 +1646,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1;
}
default: {
- goto s_n_llhttp__internal__n_invoke_test_flags_5;
+ goto s_n_llhttp__internal__n_invoke_test_flags_6;
}
}
/* UNREACHABLE */;
@@ -1726,10 +1709,10 @@ static llparse_state_t llhttp__internal_
}
case ',': {
p++;
- goto s_n_llhttp__internal__n_invoke_load_header_state_4;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_5;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_4;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_5;
}
}
/* UNREACHABLE */;
@@ -1747,7 +1730,7 @@ static llparse_state_t llhttp__internal_
switch (match_seq.status) {
case kMatchComplete: {
p++;
- goto s_n_llhttp__internal__n_invoke_update_header_state_2;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_3;
}
case kMatchPause: {
return s_n_llhttp__internal__n_header_value_connection_1;
@@ -1771,7 +1754,7 @@ static llparse_state_t llhttp__internal_
switch (match_seq.status) {
case kMatchComplete: {
p++;
- goto s_n_llhttp__internal__n_invoke_update_header_state_5;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_6;
}
case kMatchPause: {
return s_n_llhttp__internal__n_header_value_connection_2;
@@ -1795,7 +1778,7 @@ static llparse_state_t llhttp__internal_
switch (match_seq.status) {
case kMatchComplete: {
p++;
- goto s_n_llhttp__internal__n_invoke_update_header_state_6;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_7;
}
case kMatchPause: {
return s_n_llhttp__internal__n_header_value_connection_3;
@@ -2079,7 +2062,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_header_value_te_token_ows;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_8;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_9;
}
}
/* UNREACHABLE */;
@@ -2092,10 +2075,10 @@ static llparse_state_t llhttp__internal_
}
switch (*p) {
case 10: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_7;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_8;
}
case 13: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_7;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_8;
}
case ' ': {
p++;
@@ -2158,7 +2141,7 @@ static llparse_state_t llhttp__internal_
}
case 10: {
p++;
- goto s_n_llhttp__internal__n_header_value_discard_lws;
+ goto s_n_llhttp__internal__n_invoke_test_flags_5;
}
case 13: {
p++;
@@ -2275,7 +2258,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_1;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_9;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_10;
}
}
/* UNREACHABLE */;
@@ -2300,7 +2283,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_3;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2325,7 +2308,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_4;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2346,7 +2329,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_header_field_4;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2370,7 +2353,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_1;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2395,7 +2378,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_5;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2420,7 +2403,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_6;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2445,7 +2428,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_7;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -2474,7 +2457,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_header_field_7;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -5712,7 +5695,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_error_21: {
+ s_n_llhttp__internal__n_error_22: {
state->error = 0xb;
state->reason = "Empty Content-Length";
state->error_pos = (const char*) p;
@@ -5797,14 +5780,33 @@ static llparse_state_t llhttp__internal_
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;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_error_22: {
+ 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_flags_5: {
+ switch (llhttp__internal__c_test_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_21;
+ }
+ /* UNREACHABLE */;
+ abort();
+ }
+ s_n_llhttp__internal__n_error_23: {
state->error = 0x2;
state->reason = "Expected LF after CR";
state->error_pos = (const char*) p;
@@ -5814,6 +5816,24 @@ static llparse_state_t llhttp__internal_
abort();
}
s_n_llhttp__internal__n_invoke_update_header_state_1: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
+ default:
+ goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ }
+ /* UNREACHABLE */;
+ abort();
+ }
+ s_n_llhttp__internal__n_invoke_load_header_state_3: {
+ switch (llhttp__internal__c_load_header_state(state, p, endp)) {
+ case 8:
+ goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ default:
+ goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ }
+ /* UNREACHABLE */;
+ abort();
+ }
+ s_n_llhttp__internal__n_invoke_update_header_state_2: {
switch (llhttp__internal__c_update_header_state(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_field_start;
@@ -5824,7 +5844,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_7: {
switch (llhttp__internal__c_or_flags_3(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_2;
}
/* UNREACHABLE */;
abort();
@@ -5832,7 +5852,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_8: {
switch (llhttp__internal__c_or_flags_4(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_2;
}
/* UNREACHABLE */;
abort();
@@ -5840,7 +5860,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_9: {
switch (llhttp__internal__c_or_flags_5(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_2;
}
/* UNREACHABLE */;
abort();
@@ -5853,7 +5873,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_load_header_state_3: {
+ s_n_llhttp__internal__n_invoke_load_header_state_4: {
switch (llhttp__internal__c_load_header_state(state, p, endp)) {
case 5:
goto s_n_llhttp__internal__n_invoke_or_flags_7;
@@ -5869,7 +5889,7 @@ static llparse_state_t llhttp__internal_
/* 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;
@@ -5940,35 +5960,25 @@ static llparse_state_t llhttp__internal_
err = llhttp__on_header_value(state, start, p);
if (err != 0) {
state->error = err;
- state->error_pos = (const char*) (p + 1);
- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_24;
+ state->error_pos = (const char*) p;
+ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_25;
return s_error;
}
- p++;
- goto s_n_llhttp__internal__n_error_24;
- /* UNREACHABLE */;
- abort();
- }
- s_n_llhttp__internal__n_error_25: {
- 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;
+ goto s_n_llhttp__internal__n_error_25;
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_5: {
+ s_n_llhttp__internal__n_invoke_test_flags_6: {
switch (llhttp__internal__c_test_flags_2(state, p, endp)) {
case 1:
goto s_n_llhttp__internal__n_header_value_lenient;
default:
- goto s_n_llhttp__internal__n_header_value_lenient_failed;
+ goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_3: {
+ s_n_llhttp__internal__n_invoke_update_header_state_4: {
switch (llhttp__internal__c_update_header_state(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection;
@@ -5979,7 +5989,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_11: {
switch (llhttp__internal__c_or_flags_3(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_4;
}
/* UNREACHABLE */;
abort();
@@ -5987,7 +5997,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_12: {
switch (llhttp__internal__c_or_flags_4(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_4;
}
/* UNREACHABLE */;
abort();
@@ -5995,7 +6005,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_13: {
switch (llhttp__internal__c_or_flags_5(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_4;
}
/* UNREACHABLE */;
abort();
@@ -6008,7 +6018,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_load_header_state_4: {
+ s_n_llhttp__internal__n_invoke_load_header_state_5: {
switch (llhttp__internal__c_load_header_state(state, p, endp)) {
case 5:
goto s_n_llhttp__internal__n_invoke_or_flags_11;
@@ -6024,32 +6034,32 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_4: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_5: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_token;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_2: {
- switch (llhttp__internal__c_update_header_state_2(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_3: {
+ switch (llhttp__internal__c_update_header_state_3(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_ws;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_5: {
- switch (llhttp__internal__c_update_header_state_5(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_6: {
+ switch (llhttp__internal__c_update_header_state_6(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_ws;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_6: {
- switch (llhttp__internal__c_update_header_state_6(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_7: {
+ switch (llhttp__internal__c_update_header_state_7(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_ws;
}
@@ -6117,8 +6127,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_6: {
- switch (llhttp__internal__c_test_flags_6(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_test_flags_7: {
+ switch (llhttp__internal__c_test_flags_7(state, p, endp)) {
case 0:
goto s_n_llhttp__internal__n_header_value_content_length;
default:
@@ -6145,8 +6155,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_7: {
- switch (llhttp__internal__c_update_header_state_7(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_8: {
+ switch (llhttp__internal__c_update_header_state_8(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_otherwise;
}
@@ -6171,7 +6181,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_8: {
+ s_n_llhttp__internal__n_invoke_test_flags_9: {
switch (llhttp__internal__c_test_flags_2(state, p, endp)) {
case 0:
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7;
@@ -6184,15 +6194,15 @@ static llparse_state_t llhttp__internal_
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_flags_8;
+ goto s_n_llhttp__internal__n_invoke_test_flags_9;
default:
goto s_n_llhttp__internal__n_header_value_te_chunked;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_8: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_9: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value;
}
@@ -6215,7 +6225,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_9: {
+ s_n_llhttp__internal__n_invoke_test_flags_10: {
switch (llhttp__internal__c_test_flags_2(state, p, endp)) {
case 0:
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8;
@@ -6228,7 +6238,7 @@ static llparse_state_t llhttp__internal_
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_flags_9;
+ goto s_n_llhttp__internal__n_invoke_test_flags_10;
default:
goto s_n_llhttp__internal__n_invoke_or_flags_17;
}
@@ -6243,8 +6253,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_7: {
- switch (llhttp__internal__c_test_flags_7(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_test_flags_8: {
+ switch (llhttp__internal__c_test_flags_8(state, p, endp)) {
case 1:
goto s_n_llhttp__internal__n_invoke_load_type_2;
default:
@@ -6256,7 +6266,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_18: {
switch (llhttp__internal__c_or_flags_18(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_8;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_9;
}
/* UNREACHABLE */;
abort();
@@ -6266,9 +6276,9 @@ static llparse_state_t llhttp__internal_
case 1:
goto s_n_llhttp__internal__n_header_value_connection;
case 2:
- goto s_n_llhttp__internal__n_invoke_test_flags_6;
- case 3:
goto s_n_llhttp__internal__n_invoke_test_flags_7;
+ case 3:
+ goto s_n_llhttp__internal__n_invoke_test_flags_8;
case 4:
goto s_n_llhttp__internal__n_invoke_or_flags_18;
default:
@@ -6322,8 +6332,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_9: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_10: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_field_general;
}
@@ -6338,8 +6348,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_10: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_11: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_field_general;
}
@@ -7413,8 +7423,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_header_value_lenient_failed,
+ s_n_llhttp__internal__n_error_19,
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,
@@ -7821,7 +7830,7 @@ int llhttp__internal__c_or_flags_6(
return 0;
}
-int llhttp__internal__c_update_header_state_2(
+int llhttp__internal__c_update_header_state_3(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -7829,7 +7838,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_update_header_state_4(
+int llhttp__internal__c_update_header_state_1(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -7837,7 +7846,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_update_header_state_5(
+int llhttp__internal__c_update_header_state_6(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -7845,7 +7854,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_update_header_state_6(
+int llhttp__internal__c_update_header_state_7(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -7853,7 +7862,7 @@ int llhttp__internal__c_update_header_st
return 0;
}
-int llhttp__internal__c_test_flags_6(
+int llhttp__internal__c_test_flags_7(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -7894,7 +7903,7 @@ int llhttp__internal__c_or_flags_15(
return 0;
}
-int llhttp__internal__c_test_flags_7(
+int llhttp__internal__c_test_flags_8(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -7917,7 +7926,7 @@ int llhttp__internal__c_and_flags(
return 0;
}
-int llhttp__internal__c_update_header_state_7(
+int llhttp__internal__c_update_header_state_8(
llhttp__internal_t* state,
const unsigned char* p,
const unsigned char* endp) {
@@ -8612,13 +8621,13 @@ static llparse_state_t llhttp__internal_
}
switch (*p) {
case 9: {
- goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_3;
}
case ' ': {
- goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_3;
}
default: {
- goto s_n_llhttp__internal__n_invoke_load_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_4;
}
}
/* UNREACHABLE */;
@@ -8635,7 +8644,7 @@ static llparse_state_t llhttp__internal_
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_18;
}
}
/* UNREACHABLE */;
@@ -8661,32 +8670,16 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- case s_n_llhttp__internal__n_error_18:
- s_n_llhttp__internal__n_error_18: {
- state->error = 0x19;
- state->reason = "Missing expected CR after header value";
+ case s_n_llhttp__internal__n_error_19:
+ s_n_llhttp__internal__n_error_19: {
+ 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();
}
- case s_n_llhttp__internal__n_header_value_lenient_failed:
- s_n_llhttp__internal__n_header_value_lenient_failed: {
- if (p == endp) {
- return s_n_llhttp__internal__n_header_value_lenient_failed;
- }
- switch (*p) {
- case 10: {
- goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2;
- }
- default: {
- goto s_n_llhttp__internal__n_error_19;
- }
- }
- /* UNREACHABLE */;
- abort();
- }
case s_n_llhttp__internal__n_header_value_otherwise:
s_n_llhttp__internal__n_header_value_otherwise: {
if (p == endp) {
@@ -8697,7 +8690,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1;
}
default: {
- goto s_n_llhttp__internal__n_invoke_test_flags_5;
+ goto s_n_llhttp__internal__n_invoke_test_flags_6;
}
}
/* UNREACHABLE */;
@@ -8760,10 +8753,10 @@ static llparse_state_t llhttp__internal_
}
case ',': {
p++;
- goto s_n_llhttp__internal__n_invoke_load_header_state_4;
+ goto s_n_llhttp__internal__n_invoke_load_header_state_5;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_4;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_5;
}
}
/* UNREACHABLE */;
@@ -8781,7 +8774,7 @@ static llparse_state_t llhttp__internal_
switch (match_seq.status) {
case kMatchComplete: {
p++;
- goto s_n_llhttp__internal__n_invoke_update_header_state_2;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_3;
}
case kMatchPause: {
return s_n_llhttp__internal__n_header_value_connection_1;
@@ -8805,7 +8798,7 @@ static llparse_state_t llhttp__internal_
switch (match_seq.status) {
case kMatchComplete: {
p++;
- goto s_n_llhttp__internal__n_invoke_update_header_state_5;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_6;
}
case kMatchPause: {
return s_n_llhttp__internal__n_header_value_connection_2;
@@ -8829,7 +8822,7 @@ static llparse_state_t llhttp__internal_
switch (match_seq.status) {
case kMatchComplete: {
p++;
- goto s_n_llhttp__internal__n_invoke_update_header_state_6;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_7;
}
case kMatchPause: {
return s_n_llhttp__internal__n_header_value_connection_3;
@@ -9113,7 +9106,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_header_value_te_token_ows;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_8;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_9;
}
}
/* UNREACHABLE */;
@@ -9126,10 +9119,10 @@ static llparse_state_t llhttp__internal_
}
switch (*p) {
case 10: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_7;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_8;
}
case 13: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_7;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_8;
}
case ' ': {
p++;
@@ -9192,7 +9185,7 @@ static llparse_state_t llhttp__internal_
}
case 10: {
p++;
- goto s_n_llhttp__internal__n_header_value_discard_lws;
+ goto s_n_llhttp__internal__n_invoke_test_flags_5;
}
case 13: {
p++;
@@ -9309,7 +9302,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_field_1;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_9;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_10;
}
}
/* UNREACHABLE */;
@@ -9334,7 +9327,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_3;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9359,7 +9352,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_4;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9380,7 +9373,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_header_field_4;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9404,7 +9397,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_1;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9429,7 +9422,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_5;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9454,7 +9447,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_6;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9479,7 +9472,7 @@ static llparse_state_t llhttp__internal_
return s_n_llhttp__internal__n_header_field_7;
}
case kMatchMismatch: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -9508,7 +9501,7 @@ static llparse_state_t llhttp__internal_
goto s_n_llhttp__internal__n_header_field_7;
}
default: {
- goto s_n_llhttp__internal__n_invoke_update_header_state_10;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_11;
}
}
/* UNREACHABLE */;
@@ -12540,7 +12533,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_error_16: {
+ s_n_llhttp__internal__n_error_17: {
state->error = 0xb;
state->reason = "Empty Content-Length";
state->error_pos = (const char*) p;
@@ -12625,14 +12618,51 @@ static llparse_state_t llhttp__internal_
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;
}
/* UNREACHABLE */;
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_flags_5: {
+ switch (llhttp__internal__c_test_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_16;
+ }
+ /* UNREACHABLE */;
+ abort();
+ }
s_n_llhttp__internal__n_invoke_update_header_state_1: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
+ default:
+ goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ }
+ /* UNREACHABLE */;
+ abort();
+ }
+ s_n_llhttp__internal__n_invoke_load_header_state_3: {
+ switch (llhttp__internal__c_load_header_state(state, p, endp)) {
+ case 8:
+ goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ default:
+ goto s_n_llhttp__internal__n_span_start_llhttp__on_header_value_1;
+ }
+ /* UNREACHABLE */;
+ abort();
+ }
+ s_n_llhttp__internal__n_invoke_update_header_state_2: {
switch (llhttp__internal__c_update_header_state(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_field_start;
@@ -12643,7 +12673,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_7: {
switch (llhttp__internal__c_or_flags_3(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_2;
}
/* UNREACHABLE */;
abort();
@@ -12651,7 +12681,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_8: {
switch (llhttp__internal__c_or_flags_4(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_2;
}
/* UNREACHABLE */;
abort();
@@ -12659,7 +12689,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_9: {
switch (llhttp__internal__c_or_flags_5(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_1;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_2;
}
/* UNREACHABLE */;
abort();
@@ -12672,7 +12702,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_load_header_state_3: {
+ s_n_llhttp__internal__n_invoke_load_header_state_4: {
switch (llhttp__internal__c_load_header_state(state, p, endp)) {
case 5:
goto s_n_llhttp__internal__n_invoke_or_flags_7;
@@ -12688,7 +12718,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_error_17: {
+ s_n_llhttp__internal__n_error_18: {
state->error = 0x3;
state->reason = "Missing expected LF after header value";
state->error_pos = (const char*) p;
@@ -12759,35 +12789,25 @@ static llparse_state_t llhttp__internal_
err = llhttp__on_header_value(state, start, p);
if (err != 0) {
state->error = err;
- state->error_pos = (const char*) (p + 1);
- state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_18;
+ state->error_pos = (const char*) p;
+ state->_current = (void*) (intptr_t) s_n_llhttp__internal__n_error_19;
return s_error;
}
- p++;
- goto s_n_llhttp__internal__n_error_18;
- /* UNREACHABLE */;
- abort();
- }
- s_n_llhttp__internal__n_error_19: {
- 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;
+ goto s_n_llhttp__internal__n_error_19;
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_5: {
+ s_n_llhttp__internal__n_invoke_test_flags_6: {
switch (llhttp__internal__c_test_flags_2(state, p, endp)) {
case 1:
goto s_n_llhttp__internal__n_header_value_lenient;
default:
- goto s_n_llhttp__internal__n_header_value_lenient_failed;
+ goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_3: {
+ s_n_llhttp__internal__n_invoke_update_header_state_4: {
switch (llhttp__internal__c_update_header_state(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection;
@@ -12798,7 +12818,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_11: {
switch (llhttp__internal__c_or_flags_3(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_4;
}
/* UNREACHABLE */;
abort();
@@ -12806,7 +12826,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_12: {
switch (llhttp__internal__c_or_flags_4(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_4;
}
/* UNREACHABLE */;
abort();
@@ -12814,7 +12834,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_13: {
switch (llhttp__internal__c_or_flags_5(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_3;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_4;
}
/* UNREACHABLE */;
abort();
@@ -12827,7 +12847,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_load_header_state_4: {
+ s_n_llhttp__internal__n_invoke_load_header_state_5: {
switch (llhttp__internal__c_load_header_state(state, p, endp)) {
case 5:
goto s_n_llhttp__internal__n_invoke_or_flags_11;
@@ -12843,32 +12863,32 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_4: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_5: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_token;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_2: {
- switch (llhttp__internal__c_update_header_state_2(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_3: {
+ switch (llhttp__internal__c_update_header_state_3(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_ws;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_5: {
- switch (llhttp__internal__c_update_header_state_5(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_6: {
+ switch (llhttp__internal__c_update_header_state_6(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_ws;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_6: {
- switch (llhttp__internal__c_update_header_state_6(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_7: {
+ switch (llhttp__internal__c_update_header_state_7(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_connection_ws;
}
@@ -12936,8 +12956,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_6: {
- switch (llhttp__internal__c_test_flags_6(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_test_flags_7: {
+ switch (llhttp__internal__c_test_flags_7(state, p, endp)) {
case 0:
goto s_n_llhttp__internal__n_header_value_content_length;
default:
@@ -12964,8 +12984,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_7: {
- switch (llhttp__internal__c_update_header_state_7(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_8: {
+ switch (llhttp__internal__c_update_header_state_8(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value_otherwise;
}
@@ -12990,7 +13010,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_8: {
+ s_n_llhttp__internal__n_invoke_test_flags_9: {
switch (llhttp__internal__c_test_flags_2(state, p, endp)) {
case 0:
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_7;
@@ -13003,15 +13023,15 @@ static llparse_state_t llhttp__internal_
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_flags_8;
+ goto s_n_llhttp__internal__n_invoke_test_flags_9;
default:
goto s_n_llhttp__internal__n_header_value_te_chunked;
}
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_8: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_9: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_value;
}
@@ -13034,7 +13054,7 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_9: {
+ s_n_llhttp__internal__n_invoke_test_flags_10: {
switch (llhttp__internal__c_test_flags_2(state, p, endp)) {
case 0:
goto s_n_llhttp__internal__n_span_end_llhttp__on_header_value_8;
@@ -13047,7 +13067,7 @@ static llparse_state_t llhttp__internal_
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_flags_9;
+ goto s_n_llhttp__internal__n_invoke_test_flags_10;
default:
goto s_n_llhttp__internal__n_invoke_or_flags_17;
}
@@ -13062,8 +13082,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_test_flags_7: {
- switch (llhttp__internal__c_test_flags_7(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_test_flags_8: {
+ switch (llhttp__internal__c_test_flags_8(state, p, endp)) {
case 1:
goto s_n_llhttp__internal__n_invoke_load_type_2;
default:
@@ -13075,7 +13095,7 @@ static llparse_state_t llhttp__internal_
s_n_llhttp__internal__n_invoke_or_flags_18: {
switch (llhttp__internal__c_or_flags_18(state, p, endp)) {
default:
- goto s_n_llhttp__internal__n_invoke_update_header_state_8;
+ goto s_n_llhttp__internal__n_invoke_update_header_state_9;
}
/* UNREACHABLE */;
abort();
@@ -13085,9 +13105,9 @@ static llparse_state_t llhttp__internal_
case 1:
goto s_n_llhttp__internal__n_header_value_connection;
case 2:
- goto s_n_llhttp__internal__n_invoke_test_flags_6;
- case 3:
goto s_n_llhttp__internal__n_invoke_test_flags_7;
+ case 3:
+ goto s_n_llhttp__internal__n_invoke_test_flags_8;
case 4:
goto s_n_llhttp__internal__n_invoke_or_flags_18;
default:
@@ -13141,8 +13161,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_9: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_10: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_field_general;
}
@@ -13157,8 +13177,8 @@ static llparse_state_t llhttp__internal_
/* UNREACHABLE */;
abort();
}
- s_n_llhttp__internal__n_invoke_update_header_state_10: {
- switch (llhttp__internal__c_update_header_state_4(state, p, endp)) {
+ s_n_llhttp__internal__n_invoke_update_header_state_11: {
+ switch (llhttp__internal__c_update_header_state_1(state, p, endp)) {
default:
goto s_n_llhttp__internal__n_header_field_general;
}
Index: node-v10.24.1/test/parallel/test-http-missing-header-separator-cr.js
===================================================================
--- node-v10.24.1.orig/test/parallel/test-http-missing-header-separator-cr.js
+++ node-v10.24.1/test/parallel/test-http-missing-header-separator-cr.js
@@ -6,21 +6,7 @@ const assert = require('assert');
const http = require('http');
const net = require('net');
-const msg = [
- 'GET / HTTP/1.1',
- 'Host: localhost',
- 'Dummy: x\nContent-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(() => {
+function serverHandler(server, msg) {
const client = net.connect(server.address().port, 'localhost');
let response = '';
@@ -40,4 +26,58 @@ server.listen(0, common.mustSucceed(() =
}));
client.write(msg);
client.resume();
-}));
+}
+
+{
+ const msg = [
+ 'GET / HTTP/1.1',
+ 'Host: localhost',
+ 'Dummy: x\nContent-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\nTransfer-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:\nTransfer-Encoding: chunked',
+ '',
+ '1',
+ 'A',
+ '0',
+ '',
+ '',
+ ].join('\r\n');
+
+ const server = http.createServer(common.mustNotCall());
+
+ server.listen(0, common.mustSucceed(serverHandler.bind(null, server, msg)));
+}
Index: node-v10.24.1/test/parallel/test-http-transfer-encoding-smuggling.js
===================================================================
--- node-v10.24.1.orig/test/parallel/test-http-transfer-encoding-smuggling.js
+++ node-v10.24.1/test/parallel/test-http-transfer-encoding-smuggling.js
@@ -6,47 +6,84 @@ const assert = require('assert');
const http = require('http');
const net = require('net');
-const msg = [
- 'POST / HTTP/1.1',
- 'Host: 127.0.0.1',
- 'Transfer-Encoding: chunked',
- 'Transfer-Encoding: chunked-false',
- 'Connection: upgrade',
- '',
- '1',
- 'A',
- '0',
- '',
- 'GET /flag HTTP/1.1',
- 'Host: 127.0.0.1',
- '',
- '',
-].join('\r\n');
-
-const server = http.createServer(common.mustNotCall((req, res) => {
- res.end();
-}, 1));
-
-server.listen(0, common.mustSucceed(() => {
- const client = net.connect(server.address().port, 'localhost');
-
- let response = '';
-
- // Verify that the server listener is never called
-
- client.on('data', common.mustCall((chunk) => {
- response += chunk.toString('utf-8');
+{
+ const msg = [
+ 'POST / HTTP/1.1',
+ 'Host: 127.0.0.1',
+ 'Transfer-Encoding: chunked',
+ 'Transfer-Encoding: chunked-false',
+ 'Connection: upgrade',
+ '',
+ '1',
+ 'A',
+ '0',
+ '',
+ 'GET /flag HTTP/1.1',
+ 'Host: 127.0.0.1',
+ '',
+ '',
+ ].join('\r\n');
+
+ const server = http.createServer(common.mustNotCall((req, res) => {
+ res.end();
+ }, 1));
+
+ server.listen(0, common.mustSucceed(() => {
+ const client = net.connect(server.address().port, 'localhost');
+
+ let response = '';
+
+ // Verify that the server listener is never called
+
+ client.on('data', common.mustCall((chunk) => {
+ response += chunk.toString('utf-8');
+ }));
+
+ 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 = [
+ 'POST / HTTP/1.1',
+ 'Host: 127.0.0.1',
+ 'Transfer-Encoding: chunked',
+ ' , chunked-false',
+ 'Connection: upgrade',
+ '',
+ '1',
+ 'A',
+ '0',
+ '',
+ 'GET /flag HTTP/1.1',
+ 'Host: 127.0.0.1',
+ '',
+ '',
+ ].join('\r\n');
+
+ const server = http.createServer(common.mustCall((request, response) => {
+ assert.notStrictEqual(request.url, '/admin');
+ response.end('hello world');
+ }), 1);
+
+ server.listen(0, common.mustSucceed(() => {
+ const client = net.connect(server.address().port, 'localhost');
+
+ client.on('end', common.mustCall(function() {
+ server.close();
+ }));
- 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();
}));
- client.write(msg);
- client.resume();
-}));
+}
Index: node-v10.24.1/test/parallel/test-http-header-overflow.js
===================================================================
--- /dev/null
+++ node-v10.24.1/test/parallel/test-http-header-overflow.js
@@ -0,0 +1,51 @@
+'use strict';
+const { expectsError, mustCall } = require('../common');
+const assert = require('assert');
+const { createServer, maxHeaderSize } = require('http');
+const { createConnection } = require('net');
+
+const CRLF = '\r\n';
+const DUMMY_HEADER_NAME = 'Cookie: ';
+const DUMMY_HEADER_VALUE = 'a'.repeat(
+ // Plus one is to make it 1 byte too big
+ maxHeaderSize - DUMMY_HEADER_NAME.length + 2
+);
+const PAYLOAD_GET = 'GET /blah HTTP/1.1';
+const PAYLOAD = PAYLOAD_GET + CRLF +
+ DUMMY_HEADER_NAME + DUMMY_HEADER_VALUE + CRLF.repeat(2);
+
+const server = createServer();
+
+server.on('connection', mustCall((socket) => {
+ // Legacy parser gives sligthly different response.
+ // This discripancy is not fixed on purpose.
+ socket.on('error', expectsError({
+ name: 'Error',
+// message: 'Parse Error: Header overflow',
+ message: 'Parse Error',
+ code: 'HPE_HEADER_OVERFLOW',
+ bytesParsed: maxHeaderSize + PAYLOAD_GET.length + (CRLF.length * 2) + 1,
+ rawPacket: Buffer.from(PAYLOAD)
+ }));
+}));
+
+server.listen(0, mustCall(() => {
+ const c = createConnection(server.address().port);
+ let received = '';
+
+ c.on('connect', mustCall(() => {
+ c.write(PAYLOAD);
+ }));
+ c.on('data', mustCall((data) => {
+ received += data.toString();
+ }));
+ c.on('end', mustCall(() => {
+ assert.strictEqual(
+ received,
+ 'HTTP/1.1 400 Bad Request\r\n' +
+ 'Connection: close\r\n\r\n'
+ );
+ c.end();
+ }));
+ c.on('close', mustCall(() => server.close()));
+}));