From ae274cac5ad4d559d0e5af60f4ca2681c1da594e Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 00:24:19 +0200 Subject: [PATCH 01/12] fix: premature end large body --- test/large-body.js | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/large-body.js diff --git a/test/large-body.js b/test/large-body.js new file mode 100644 index 00000000000..1538b187609 --- /dev/null +++ b/test/large-body.js @@ -0,0 +1,47 @@ +'use strict' + +const { test } = require('tap') +const { Client } = require('..') +const { createServer } = require('http') +const EE = require('events') + +test('basic get', (t) => { + t.plan(2) + + const SIZE = 5900373096 + + const server = createServer(async (req, res) => { + res.setHeader('content-length', 5900373096) + let pos = 0 + while (pos < SIZE) { + const len = Math.min(SIZE - pos, 65536 * 8) + if (!res.write(Buffer.allocUnsafe(len))) { + await EE.once(res, 'drain') + } + pos += len + } + + res.end() + }) + t.teardown(server.close.bind(server)) + + server.listen(0, () => { + const client = new Client(`http://localhost:${server.address().port}`) + t.teardown(client.close.bind(client)) + + client.request({ + path: '/', + method: 'GET' + }, (err, data) => { + t.error(err) + + let pos = 0 + data.body.on('data', (buf) => { + pos += buf.length + }) + data.body.on('end', () => { + t.equal(pos, SIZE) + }) + }) + }) +}) From ffe079a4ef5f0d796434b8411f6f69986a74363f Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 00:25:47 +0200 Subject: [PATCH 02/12] fixup --- test/{large-body.js => issue-803.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename test/{large-body.js => issue-803.js} (94%) diff --git a/test/large-body.js b/test/issue-803.js similarity index 94% rename from test/large-body.js rename to test/issue-803.js index 1538b187609..e0bd49c618a 100644 --- a/test/large-body.js +++ b/test/issue-803.js @@ -5,7 +5,7 @@ const { Client } = require('..') const { createServer } = require('http') const EE = require('events') -test('basic get', (t) => { +test('https://github.com/nodejs/undici/issues/803', (t) => { t.plan(2) const SIZE = 5900373096 From 3319d341dc6d5909fe2ea21e44730d8a30d25376 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 00:31:21 +0200 Subject: [PATCH 03/12] fixup --- test/issue-803.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/issue-803.js b/test/issue-803.js index e0bd49c618a..57c948ea905 100644 --- a/test/issue-803.js +++ b/test/issue-803.js @@ -11,7 +11,7 @@ test('https://github.com/nodejs/undici/issues/803', (t) => { const SIZE = 5900373096 const server = createServer(async (req, res) => { - res.setHeader('content-length', 5900373096) + res.setHeader('content-length', SIZE) let pos = 0 while (pos < SIZE) { const len = Math.min(SIZE - pos, 65536 * 8) From cc14143c391911bd432ee4fed73f31070479a57a Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 00:41:02 +0200 Subject: [PATCH 04/12] fixup --- docs/api/Errors.md | 25 +++++++++++++------------ lib/client.js | 17 ++++++++++++++++- lib/core/errors.js | 15 +++++++++++++-- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/docs/api/Errors.md b/docs/api/Errors.md index 0cde2b32a4f..01fa51c9847 100644 --- a/docs/api/Errors.md +++ b/docs/api/Errors.md @@ -7,15 +7,16 @@ You can find all the error objects inside the `errors` key. const { errors } = require('undici') ``` -| Error | Error Codes | Description | -| ------------------------------------|---------------------------------------|---------------------------------------------------| -| `InvalidArgumentError` | `UND_ERR_INVALID_ARG` | passed an invalid argument. | -| `InvalidReturnValueError` | `UND_ERR_INVALID_RETURN_VALUE` | returned an invalid value. | -| `RequestAbortedError` | `UND_ERR_ABORTED` | the request has been aborted by the user | -| `ClientDestroyedError` | `UND_ERR_DESTROYED` | trying to use a destroyed client. | -| `ClientClosedError` | `UND_ERR_CLOSED` | trying to use a closed client. | -| `SocketError` | `UND_ERR_SOCKET` | there is an error with the socket. | -| `NotSupportedError` | `UND_ERR_NOT_SUPPORTED` | encountered unsupported functionality. | -| `RequestContentLengthMismatchError` | `UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`| request body does not match content-length header | -| `InformationalError` | `UND_ERR_INFO` | expected error with reason | -| `TrailerMismatchError` | `UND_ERR_TRAILER_MISMATCH` | trailers did not match specification | +| Error | Error Codes | Description | +| ------------------------------------|---------------------------------------|----------------------------------------------------| +| `InvalidArgumentError` | `UND_ERR_INVALID_ARG` | passed an invalid argument. | +| `InvalidReturnValueError` | `UND_ERR_INVALID_RETURN_VALUE` | returned an invalid value. | +| `RequestAbortedError` | `UND_ERR_ABORTED` | the request has been aborted by the user | +| `ClientDestroyedError` | `UND_ERR_DESTROYED` | trying to use a destroyed client. | +| `ClientClosedError` | `UND_ERR_CLOSED` | trying to use a closed client. | +| `SocketError` | `UND_ERR_SOCKET` | there is an error with the socket. | +| `NotSupportedError` | `UND_ERR_NOT_SUPPORTED` | encountered unsupported functionality. | +| `RequestContentLengthMismatchError` | `UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`| request body does not match content-length header | +| `RequestContentLengthMismatchError` | `UND_ERR_RES_CONTENT_LENGTH_MISMATCH`| response body does not match content-length header | +| `InformationalError` | `UND_ERR_INFO` | expected error with reason | +| `TrailerMismatchError` | `UND_ERR_TRAILER_MISMATCH` | trailers did not match specification | diff --git a/lib/client.js b/lib/client.js index f7f56f0af16..258fea6026e 100644 --- a/lib/client.js +++ b/lib/client.js @@ -9,6 +9,7 @@ const Request = require('./core/request') const Dispatcher = require('./dispatcher') const { RequestContentLengthMismatchError, + ResponseContentLengthMismatchError, TrailerMismatchError, InvalidArgumentError, RequestAbortedError, @@ -448,8 +449,11 @@ class Parser { this.paused = false this.resume = this.resume.bind(this) + this.bytesRead = 0 + this.trailer = '' this.keepAlive = '' + this.contentLength = '' } setTimeout (value, type) { @@ -590,6 +594,8 @@ class Parser { this.keepAlive += buf.toString() } else if (key.length === 7 && key.toString().toLowerCase() === 'trailer') { this.trailer += buf.toString() + } else if (key.length === 14 && key.toString().toLowerCase() === 'content-length') { + this.contentLength += buf.toString() } this.trackHeader(buf.length) @@ -780,6 +786,8 @@ class Parser { assert(statusCode >= 200) + this.bytesRead += buf.length + try { if (request.onData(buf) === false) { return constants.ERROR.PAUSED @@ -790,7 +798,7 @@ class Parser { } onMessageComplete () { - const { client, socket, statusCode, upgrade, trailer, headers, shouldKeepAlive } = this + const { client, socket, statusCode, upgrade, trailer, headers, contentLength, bytesRead, shouldKeepAlive } = this if (socket.destroyed && (!statusCode || shouldKeepAlive)) { return -1 @@ -806,6 +814,8 @@ class Parser { assert(statusCode >= 100) this.statusCode = null + this.bytesRead = 0 + this.contentLength = '' this.trailer = '' this.keepAlive = '' @@ -834,6 +844,11 @@ class Parser { } } + if (contentLength && bytesRead !== parseInt(contentLength)) { + util.destroy(socket, new ResponseContentLengthMismatchError()) + return -1 + } + try { request.onComplete(headers) } catch (err) { diff --git a/lib/core/errors.js b/lib/core/errors.js index 5db37fde05c..97831a7e56a 100644 --- a/lib/core/errors.js +++ b/lib/core/errors.js @@ -94,7 +94,17 @@ class RequestContentLengthMismatchError extends UndiciError { Error.captureStackTrace(this, RequestContentLengthMismatchError) this.name = 'RequestContentLengthMismatchError' this.message = message || 'Request body length does not match content-length header' - this.code = 'UND_ERR_CONTENT_LENGTH_MISMATCH' + this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH' + } +} + +class ResponseContentLengthMismatchError extends UndiciError { + constructor (message) { + super(message) + Error.captureStackTrace(this, ResponseContentLengthMismatchError) + this.name = 'ResponseContentLengthMismatchError' + this.message = message || 'Response body length does not match content-length header' + this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH' } } @@ -163,5 +173,6 @@ module.exports = { ClientClosedError, InformationalError, SocketError, - NotSupportedError + NotSupportedError, + ResponseContentLengthMismatchError } From beda1f8b5615d262ea6f9fad8211901164902471 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 07:12:36 +0200 Subject: [PATCH 05/12] fixuP --- test/issue-803.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/issue-803.js b/test/issue-803.js index 57c948ea905..70f64cce773 100644 --- a/test/issue-803.js +++ b/test/issue-803.js @@ -14,7 +14,7 @@ test('https://github.com/nodejs/undici/issues/803', (t) => { res.setHeader('content-length', SIZE) let pos = 0 while (pos < SIZE) { - const len = Math.min(SIZE - pos, 65536 * 8) + const len = Math.min(SIZE - pos, 65536) if (!res.write(Buffer.allocUnsafe(len))) { await EE.once(res, 'drain') } From 4a9160ddbe1b330a0a1dc95651a2ad0a5364249e Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 07:23:02 +0200 Subject: [PATCH 06/12] fixup --- lib/client.js | 2 +- lib/core/request.js | 2 +- lib/core/util.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/client.js b/lib/client.js index 258fea6026e..bacdc00afa5 100644 --- a/lib/client.js +++ b/lib/client.js @@ -844,7 +844,7 @@ class Parser { } } - if (contentLength && bytesRead !== parseInt(contentLength)) { + if (contentLength && bytesRead !== parseInt(contentLength, 10)) { util.destroy(socket, new ResponseContentLengthMismatchError()) return -1 } diff --git a/lib/core/request.js b/lib/core/request.js index d60f15f27a2..04383a27688 100644 --- a/lib/core/request.js +++ b/lib/core/request.js @@ -189,7 +189,7 @@ function processHeader (request, key, val) { key.length === 14 && key.toLowerCase() === 'content-length' ) { - request.contentLength = parseInt(val) + request.contentLength = parseInt(val, 10) if (!Number.isFinite(request.contentLength)) { throw new InvalidArgumentError('invalid content-length header') } diff --git a/lib/core/util.js b/lib/core/util.js index 5ed0bc74fa0..2439bcf716a 100644 --- a/lib/core/util.js +++ b/lib/core/util.js @@ -147,7 +147,7 @@ function destroy (stream, err) { const KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/ function parseKeepAliveTimeout (val) { const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR) - return m ? parseInt(m[1]) * 1000 : null + return m ? parseInt(m[1], 10) * 1000 : null } function parseHeaders (headers, obj = {}) { From 52d477739da7847bc7a07075498b4173759ec2f0 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 08:07:39 +0200 Subject: [PATCH 07/12] fixup --- deps/llhttp/src/llhttp.c | 450 ++++++++++++++++++------------------ lib/llhttp/llhttp.wasm | Bin 42406 -> 42400 bytes lib/llhttp/llhttp_simd.wasm | Bin 42068 -> 42338 bytes 3 files changed, 225 insertions(+), 225 deletions(-) diff --git a/deps/llhttp/src/llhttp.c b/deps/llhttp/src/llhttp.c index a8efce1033e..0af3e5ed54c 100644 --- a/deps/llhttp/src/llhttp.c +++ b/deps/llhttp/src/llhttp.c @@ -677,9 +677,9 @@ int llhttp__internal__c_mul_add_content_length( if (state->content_length > 0xffffffffffffffffULL / 16) { return 1; } - + state->content_length *= 16; - + /* Addition overflow */ if (match >= 0) { if (state->content_length > 0xffffffffffffffffULL - match) { @@ -856,9 +856,9 @@ int llhttp__internal__c_mul_add_content_length_1( if (state->content_length > 0xffffffffffffffffULL / 10) { return 1; } - + state->content_length *= 10; - + /* Addition overflow */ if (match >= 0) { if (state->content_length > 0xffffffffffffffffULL - match) { @@ -955,9 +955,9 @@ int llhttp__internal__c_mul_add_status_code( if (state->status_code > 0xffff / 10) { return 1; } - + state->status_code *= 10; - + /* Addition overflow */ if (match >= 0) { if (state->status_code > 0xffff - match) { @@ -969,7 +969,7 @@ int llhttp__internal__c_mul_add_status_code( } } state->status_code += match; - + /* Enforce maximum */ if (state->status_code > 999) { return 1; @@ -1079,7 +1079,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_chunk_data_almost_done: s_n_llhttp__internal__n_chunk_data_almost_done: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_chunk_data_almost_done; } @@ -1102,9 +1102,9 @@ static llparse_state_t llhttp__internal__run( } case s_n_llhttp__internal__n_consume_content_length: s_n_llhttp__internal__n_consume_content_length: { - size_t avail; - size_t need; - + uint64_t avail; + uint64_t need; + avail = endp - p; need = state->content_length; if (avail >= need) { @@ -1112,7 +1112,7 @@ static llparse_state_t llhttp__internal__run( state->content_length = 0; goto s_n_llhttp__internal__n_span_end_llhttp__on_body; } - + state->content_length -= avail; return s_n_llhttp__internal__n_consume_content_length; /* UNREACHABLE */; @@ -1457,9 +1457,9 @@ static llparse_state_t llhttp__internal__run( } case s_n_llhttp__internal__n_consume_content_length_1: s_n_llhttp__internal__n_consume_content_length_1: { - size_t avail; - size_t need; - + uint64_t avail; + uint64_t need; + avail = endp - p; need = state->content_length; if (avail >= need) { @@ -1467,7 +1467,7 @@ static llparse_state_t llhttp__internal__run( state->content_length = 0; goto s_n_llhttp__internal__n_span_end_llhttp__on_body_1; } - + state->content_length -= avail; return s_n_llhttp__internal__n_consume_content_length_1; /* UNREACHABLE */; @@ -1743,7 +1743,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_connection_1: s_n_llhttp__internal__n_header_value_connection_1: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_connection_1; } @@ -1767,7 +1767,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_connection_2: s_n_llhttp__internal__n_header_value_connection_2: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_connection_2; } @@ -1791,7 +1791,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_connection_3: s_n_llhttp__internal__n_header_value_connection_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_connection_3; } @@ -2024,17 +2024,17 @@ static llparse_state_t llhttp__internal__run( __m128i input; int avail; int match_len; - + /* Load input */ input = _mm_loadu_si128((__m128i const*) p); ranges = _mm_loadu_si128((__m128i const*) llparse_blob7); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 6, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_header_value; @@ -2096,7 +2096,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_te_chunked: s_n_llhttp__internal__n_header_value_te_chunked: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_te_chunked; } @@ -2211,29 +2211,29 @@ static llparse_state_t llhttp__internal__run( __m128i input; int avail; int match_len; - + /* Load input */ input = _mm_loadu_si128((__m128i const*) p); ranges = _mm_loadu_si128((__m128i const*) llparse_blob8); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 16, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_header_field_general; } ranges = _mm_loadu_si128((__m128i const*) llparse_blob9); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 2, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_header_field_general; @@ -2276,7 +2276,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_3: s_n_llhttp__internal__n_header_field_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_3; } @@ -2301,7 +2301,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_4: s_n_llhttp__internal__n_header_field_4: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_4; } @@ -2347,7 +2347,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_1: s_n_llhttp__internal__n_header_field_1: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_1; } @@ -2371,7 +2371,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_5: s_n_llhttp__internal__n_header_field_5: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_5; } @@ -2396,7 +2396,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_6: s_n_llhttp__internal__n_header_field_6: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_6; } @@ -2421,7 +2421,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_7: s_n_llhttp__internal__n_header_field_7: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_7; } @@ -2591,7 +2591,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_pri_upgrade: s_n_llhttp__internal__n_req_pri_upgrade: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_pri_upgrade; } @@ -2796,7 +2796,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_http_start_1: s_n_llhttp__internal__n_req_http_start_1: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_http_start_1; } @@ -2820,7 +2820,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_http_start_2: s_n_llhttp__internal__n_req_http_start_2: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_http_start_2; } @@ -2844,7 +2844,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_http_start_3: s_n_llhttp__internal__n_req_http_start_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_http_start_3; } @@ -3545,7 +3545,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_3: s_n_llhttp__internal__n_start_req_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_3; } @@ -3591,7 +3591,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_4: s_n_llhttp__internal__n_start_req_4: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_4; } @@ -3616,7 +3616,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_6: s_n_llhttp__internal__n_start_req_6: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_6; } @@ -3641,7 +3641,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_8: s_n_llhttp__internal__n_start_req_8: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_8; } @@ -3726,7 +3726,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_12: s_n_llhttp__internal__n_start_req_12: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_12; } @@ -3751,7 +3751,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_13: s_n_llhttp__internal__n_start_req_13: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_13; } @@ -3814,7 +3814,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_14: s_n_llhttp__internal__n_start_req_14: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_14; } @@ -3839,7 +3839,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_17: s_n_llhttp__internal__n_start_req_17: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_17; } @@ -3882,7 +3882,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_15: s_n_llhttp__internal__n_start_req_15: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_15; } @@ -3906,7 +3906,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_18: s_n_llhttp__internal__n_start_req_18: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_18; } @@ -3931,7 +3931,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_20: s_n_llhttp__internal__n_start_req_20: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_20; } @@ -3956,7 +3956,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_21: s_n_llhttp__internal__n_start_req_21: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_21; } @@ -4002,7 +4002,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_23: s_n_llhttp__internal__n_start_req_23: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_23; } @@ -4027,7 +4027,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_24: s_n_llhttp__internal__n_start_req_24: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_24; } @@ -4052,7 +4052,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_26: s_n_llhttp__internal__n_start_req_26: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_26; } @@ -4077,7 +4077,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_28: s_n_llhttp__internal__n_start_req_28: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_28; } @@ -4162,7 +4162,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_30: s_n_llhttp__internal__n_start_req_30: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_30; } @@ -4216,7 +4216,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_31: s_n_llhttp__internal__n_start_req_31: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_31; } @@ -4241,7 +4241,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_32: s_n_llhttp__internal__n_start_req_32: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_32; } @@ -4266,7 +4266,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_35: s_n_llhttp__internal__n_start_req_35: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_35; } @@ -4291,7 +4291,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_36: s_n_llhttp__internal__n_start_req_36: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_36; } @@ -4337,7 +4337,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_37: s_n_llhttp__internal__n_start_req_37: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_37; } @@ -4362,7 +4362,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_38: s_n_llhttp__internal__n_start_req_38: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_38; } @@ -4387,7 +4387,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_42: s_n_llhttp__internal__n_start_req_42: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_42; } @@ -4412,7 +4412,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_43: s_n_llhttp__internal__n_start_req_43: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_43; } @@ -4497,7 +4497,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_45: s_n_llhttp__internal__n_start_req_45: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_45; } @@ -4577,7 +4577,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_48: s_n_llhttp__internal__n_start_req_48: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_48; } @@ -4602,7 +4602,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_49: s_n_llhttp__internal__n_start_req_49: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_49; } @@ -4627,7 +4627,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_50: s_n_llhttp__internal__n_start_req_50: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_50; } @@ -4652,7 +4652,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_51: s_n_llhttp__internal__n_start_req_51: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_51; } @@ -4723,7 +4723,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_54: s_n_llhttp__internal__n_start_req_54: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_54; } @@ -4766,7 +4766,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_57: s_n_llhttp__internal__n_start_req_57: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_57; } @@ -4833,7 +4833,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_58: s_n_llhttp__internal__n_start_req_58: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_58; } @@ -4858,7 +4858,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_59: s_n_llhttp__internal__n_start_req_59: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_59; } @@ -4908,7 +4908,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_61: s_n_llhttp__internal__n_start_req_61: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_61; } @@ -4933,7 +4933,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_62: s_n_llhttp__internal__n_start_req_62: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_62; } @@ -4979,7 +4979,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_65: s_n_llhttp__internal__n_start_req_65: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_65; } @@ -5004,7 +5004,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_67: s_n_llhttp__internal__n_start_req_67: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_67; } @@ -5029,7 +5029,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_68: s_n_llhttp__internal__n_start_req_68: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_68; } @@ -5075,7 +5075,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_69: s_n_llhttp__internal__n_start_req_69: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_69; } @@ -5543,7 +5543,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_res: s_n_llhttp__internal__n_start_res: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_res; } @@ -5567,7 +5567,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_or_res_method_2: s_n_llhttp__internal__n_req_or_res_method_2: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_2; } @@ -5592,7 +5592,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_or_res_method_3: s_n_llhttp__internal__n_req_or_res_method_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_3; } @@ -5896,7 +5896,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_body: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_body(state, start, p); @@ -5988,7 +5988,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_body_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_body(state, start, p); @@ -6166,7 +6166,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -6323,7 +6323,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -6340,7 +6340,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -6358,7 +6358,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -6483,7 +6483,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -6518,7 +6518,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -6610,7 +6610,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_field: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_field(state, start, p); @@ -6628,7 +6628,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_field_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_field(state, start, p); @@ -6703,7 +6703,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_3: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -6729,7 +6729,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_4: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -6994,7 +6994,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_5: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7011,7 +7011,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_6: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7028,7 +7028,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_7: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7045,7 +7045,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_8: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7071,7 +7071,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_9: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7088,7 +7088,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_10: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7105,7 +7105,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_11: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7140,7 +7140,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7157,7 +7157,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7174,7 +7174,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_2: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7191,7 +7191,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_12: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7208,7 +7208,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_13: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7225,7 +7225,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_14: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -7360,7 +7360,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_status: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_status(state, start, p); @@ -7378,7 +7378,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_status_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_status(state, start, p); @@ -7564,7 +7564,7 @@ int llhttp__internal_execute(llhttp__internal_t* state, const char* p, const cha if (state->_span_pos0 != NULL) { state->_span_pos0 = (void*) p; } - + next = llhttp__internal__run(state, (const unsigned char*) p, (const unsigned char*) endp); if (next == s_error) { return state->error; @@ -7574,7 +7574,7 @@ int llhttp__internal_execute(llhttp__internal_t* state, const char* p, const cha /* execute spans */ if (state->_span_pos0 != NULL) { int error; - + error = ((llhttp__internal__span_cb) state->_span_cb0)(state, state->_span_pos0, (const char*) endp); if (error != 0) { state->error = error; @@ -7582,7 +7582,7 @@ int llhttp__internal_execute(llhttp__internal_t* state, const char* p, const cha return error; } } - + return 0; } @@ -8267,9 +8267,9 @@ int llhttp__internal__c_mul_add_content_length( if (state->content_length > 0xffffffffffffffffULL / 16) { return 1; } - + state->content_length *= 16; - + /* Addition overflow */ if (match >= 0) { if (state->content_length > 0xffffffffffffffffULL - match) { @@ -8446,9 +8446,9 @@ int llhttp__internal__c_mul_add_content_length_1( if (state->content_length > 0xffffffffffffffffULL / 10) { return 1; } - + state->content_length *= 10; - + /* Addition overflow */ if (match >= 0) { if (state->content_length > 0xffffffffffffffffULL - match) { @@ -8545,9 +8545,9 @@ int llhttp__internal__c_mul_add_status_code( if (state->status_code > 0xffff / 10) { return 1; } - + state->status_code *= 10; - + /* Addition overflow */ if (match >= 0) { if (state->status_code > 0xffff - match) { @@ -8559,7 +8559,7 @@ int llhttp__internal__c_mul_add_status_code( } } state->status_code += match; - + /* Enforce maximum */ if (state->status_code > 999) { return 1; @@ -8676,9 +8676,9 @@ static llparse_state_t llhttp__internal__run( } case s_n_llhttp__internal__n_consume_content_length: s_n_llhttp__internal__n_consume_content_length: { - size_t avail; - size_t need; - + uint64_t avail; + uint64_t need; + avail = endp - p; need = state->content_length; if (avail >= need) { @@ -8686,7 +8686,7 @@ static llparse_state_t llhttp__internal__run( state->content_length = 0; goto s_n_llhttp__internal__n_span_end_llhttp__on_body; } - + state->content_length -= avail; return s_n_llhttp__internal__n_consume_content_length; /* UNREACHABLE */; @@ -9024,9 +9024,9 @@ static llparse_state_t llhttp__internal__run( } case s_n_llhttp__internal__n_consume_content_length_1: s_n_llhttp__internal__n_consume_content_length_1: { - size_t avail; - size_t need; - + uint64_t avail; + uint64_t need; + avail = endp - p; need = state->content_length; if (avail >= need) { @@ -9034,7 +9034,7 @@ static llparse_state_t llhttp__internal__run( state->content_length = 0; goto s_n_llhttp__internal__n_span_end_llhttp__on_body_1; } - + state->content_length -= avail; return s_n_llhttp__internal__n_consume_content_length_1; /* UNREACHABLE */; @@ -9296,7 +9296,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_connection_1: s_n_llhttp__internal__n_header_value_connection_1: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_connection_1; } @@ -9320,7 +9320,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_connection_2: s_n_llhttp__internal__n_header_value_connection_2: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_connection_2; } @@ -9344,7 +9344,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_connection_3: s_n_llhttp__internal__n_header_value_connection_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_connection_3; } @@ -9577,17 +9577,17 @@ static llparse_state_t llhttp__internal__run( __m128i input; int avail; int match_len; - + /* Load input */ input = _mm_loadu_si128((__m128i const*) p); ranges = _mm_loadu_si128((__m128i const*) llparse_blob7); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 6, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_header_value; @@ -9649,7 +9649,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_value_te_chunked: s_n_llhttp__internal__n_header_value_te_chunked: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_value_te_chunked; } @@ -9764,29 +9764,29 @@ static llparse_state_t llhttp__internal__run( __m128i input; int avail; int match_len; - + /* Load input */ input = _mm_loadu_si128((__m128i const*) p); ranges = _mm_loadu_si128((__m128i const*) llparse_blob8); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 16, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_header_field_general; } ranges = _mm_loadu_si128((__m128i const*) llparse_blob9); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 2, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_header_field_general; @@ -9829,7 +9829,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_3: s_n_llhttp__internal__n_header_field_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_3; } @@ -9854,7 +9854,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_4: s_n_llhttp__internal__n_header_field_4: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_4; } @@ -9900,7 +9900,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_1: s_n_llhttp__internal__n_header_field_1: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_1; } @@ -9924,7 +9924,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_5: s_n_llhttp__internal__n_header_field_5: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_5; } @@ -9949,7 +9949,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_6: s_n_llhttp__internal__n_header_field_6: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_6; } @@ -9974,7 +9974,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_header_field_7: s_n_llhttp__internal__n_header_field_7: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_header_field_7; } @@ -10069,7 +10069,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_url_skip_lf_to_http09: s_n_llhttp__internal__n_url_skip_lf_to_http09: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_url_skip_lf_to_http09; } @@ -10093,7 +10093,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_pri_upgrade: s_n_llhttp__internal__n_req_pri_upgrade: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_pri_upgrade; } @@ -10298,7 +10298,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_http_start_1: s_n_llhttp__internal__n_req_http_start_1: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_http_start_1; } @@ -10322,7 +10322,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_http_start_2: s_n_llhttp__internal__n_req_http_start_2: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_http_start_2; } @@ -10346,7 +10346,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_http_start_3: s_n_llhttp__internal__n_req_http_start_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_http_start_3; } @@ -10566,17 +10566,17 @@ static llparse_state_t llhttp__internal__run( __m128i input; int avail; int match_len; - + /* Load input */ input = _mm_loadu_si128((__m128i const*) p); ranges = _mm_loadu_si128((__m128i const*) llparse_blob0); - + /* Find first character that does not match `ranges` */ match_len = _mm_cmpestri(ranges, 12, input, 16, _SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_NEGATIVE_POLARITY); - + if (match_len != 0) { p += match_len; goto s_n_llhttp__internal__n_url_path; @@ -10952,7 +10952,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_3: s_n_llhttp__internal__n_start_req_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_3; } @@ -10998,7 +10998,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_4: s_n_llhttp__internal__n_start_req_4: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_4; } @@ -11023,7 +11023,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_6: s_n_llhttp__internal__n_start_req_6: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_6; } @@ -11048,7 +11048,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_8: s_n_llhttp__internal__n_start_req_8: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_8; } @@ -11133,7 +11133,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_12: s_n_llhttp__internal__n_start_req_12: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_12; } @@ -11158,7 +11158,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_13: s_n_llhttp__internal__n_start_req_13: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_13; } @@ -11221,7 +11221,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_14: s_n_llhttp__internal__n_start_req_14: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_14; } @@ -11246,7 +11246,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_17: s_n_llhttp__internal__n_start_req_17: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_17; } @@ -11289,7 +11289,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_15: s_n_llhttp__internal__n_start_req_15: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_15; } @@ -11313,7 +11313,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_18: s_n_llhttp__internal__n_start_req_18: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_18; } @@ -11338,7 +11338,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_20: s_n_llhttp__internal__n_start_req_20: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_20; } @@ -11363,7 +11363,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_21: s_n_llhttp__internal__n_start_req_21: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_21; } @@ -11409,7 +11409,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_23: s_n_llhttp__internal__n_start_req_23: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_23; } @@ -11434,7 +11434,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_24: s_n_llhttp__internal__n_start_req_24: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_24; } @@ -11459,7 +11459,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_26: s_n_llhttp__internal__n_start_req_26: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_26; } @@ -11484,7 +11484,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_28: s_n_llhttp__internal__n_start_req_28: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_28; } @@ -11569,7 +11569,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_30: s_n_llhttp__internal__n_start_req_30: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_30; } @@ -11623,7 +11623,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_31: s_n_llhttp__internal__n_start_req_31: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_31; } @@ -11648,7 +11648,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_32: s_n_llhttp__internal__n_start_req_32: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_32; } @@ -11673,7 +11673,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_35: s_n_llhttp__internal__n_start_req_35: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_35; } @@ -11698,7 +11698,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_36: s_n_llhttp__internal__n_start_req_36: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_36; } @@ -11744,7 +11744,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_37: s_n_llhttp__internal__n_start_req_37: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_37; } @@ -11769,7 +11769,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_38: s_n_llhttp__internal__n_start_req_38: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_38; } @@ -11794,7 +11794,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_42: s_n_llhttp__internal__n_start_req_42: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_42; } @@ -11819,7 +11819,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_43: s_n_llhttp__internal__n_start_req_43: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_43; } @@ -11904,7 +11904,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_45: s_n_llhttp__internal__n_start_req_45: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_45; } @@ -11984,7 +11984,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_48: s_n_llhttp__internal__n_start_req_48: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_48; } @@ -12009,7 +12009,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_49: s_n_llhttp__internal__n_start_req_49: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_49; } @@ -12034,7 +12034,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_50: s_n_llhttp__internal__n_start_req_50: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_50; } @@ -12059,7 +12059,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_51: s_n_llhttp__internal__n_start_req_51: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_51; } @@ -12130,7 +12130,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_54: s_n_llhttp__internal__n_start_req_54: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_54; } @@ -12173,7 +12173,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_57: s_n_llhttp__internal__n_start_req_57: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_57; } @@ -12240,7 +12240,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_58: s_n_llhttp__internal__n_start_req_58: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_58; } @@ -12265,7 +12265,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_59: s_n_llhttp__internal__n_start_req_59: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_59; } @@ -12315,7 +12315,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_61: s_n_llhttp__internal__n_start_req_61: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_61; } @@ -12340,7 +12340,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_62: s_n_llhttp__internal__n_start_req_62: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_62; } @@ -12386,7 +12386,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_65: s_n_llhttp__internal__n_start_req_65: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_65; } @@ -12411,7 +12411,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_67: s_n_llhttp__internal__n_start_req_67: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_67; } @@ -12436,7 +12436,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_68: s_n_llhttp__internal__n_start_req_68: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_68; } @@ -12482,7 +12482,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_req_69: s_n_llhttp__internal__n_start_req_69: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_req_69; } @@ -12943,7 +12943,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_start_res: s_n_llhttp__internal__n_start_res: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_start_res; } @@ -12967,7 +12967,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_or_res_method_2: s_n_llhttp__internal__n_req_or_res_method_2: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_2; } @@ -12992,7 +12992,7 @@ static llparse_state_t llhttp__internal__run( case s_n_llhttp__internal__n_req_or_res_method_3: s_n_llhttp__internal__n_req_or_res_method_3: { llparse_match_t match_seq; - + if (p == endp) { return s_n_llhttp__internal__n_req_or_res_method_3; } @@ -13269,7 +13269,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_body: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_body(state, start, p); @@ -13352,7 +13352,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_body_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_body(state, start, p); @@ -13521,7 +13521,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -13669,7 +13669,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -13686,7 +13686,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_2: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -13704,7 +13704,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_3: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -13829,7 +13829,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_4: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -13864,7 +13864,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_value_5: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_value(state, start, p); @@ -13956,7 +13956,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_field: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_field(state, start, p); @@ -13974,7 +13974,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_header_field_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_header_field(state, start, p); @@ -14049,7 +14049,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_3: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14075,7 +14075,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_4: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14340,7 +14340,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_5: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14357,7 +14357,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_6: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14374,7 +14374,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_7: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14391,7 +14391,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_8: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14417,7 +14417,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_9: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14434,7 +14434,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_10: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14451,7 +14451,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_11: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14486,7 +14486,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14503,7 +14503,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14520,7 +14520,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_2: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14537,7 +14537,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_12: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14554,7 +14554,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_13: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14571,7 +14571,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_url_14: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_url(state, start, p); @@ -14697,7 +14697,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_status: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_status(state, start, p); @@ -14715,7 +14715,7 @@ static llparse_state_t llhttp__internal__run( s_n_llhttp__internal__n_span_end_llhttp__on_status_1: { const unsigned char* start; int err; - + start = state->_span_pos0; state->_span_pos0 = NULL; err = llhttp__on_status(state, start, p); @@ -14901,7 +14901,7 @@ int llhttp__internal_execute(llhttp__internal_t* state, const char* p, const cha if (state->_span_pos0 != NULL) { state->_span_pos0 = (void*) p; } - + next = llhttp__internal__run(state, (const unsigned char*) p, (const unsigned char*) endp); if (next == s_error) { return state->error; @@ -14911,7 +14911,7 @@ int llhttp__internal_execute(llhttp__internal_t* state, const char* p, const cha /* execute spans */ if (state->_span_pos0 != NULL) { int error; - + error = ((llhttp__internal__span_cb) state->_span_cb0)(state, state->_span_pos0, (const char*) endp); if (error != 0) { state->error = error; @@ -14919,7 +14919,7 @@ int llhttp__internal_execute(llhttp__internal_t* state, const char* p, const cha return error; } } - + return 0; } diff --git a/lib/llhttp/llhttp.wasm b/lib/llhttp/llhttp.wasm index 6ab61c4e8eeebcae16e5fd0c59e1ebecbc08e19a..d1f9c0e1faae7921f762475e97660c117a389bdd 100755 GIT binary patch delta 2183 zcmZ`)T}&KR6rMX%kY#sfXBX2hP}(~~7Zyqdx&;bI*;!=yD@2hNEvACjCN52-8sn2C zjcJWylyJjCW77Cy{iC*Zu+~~=(zm8Q)DTf)eCPw#swF%$G5)0McV>5sD?q~e&bjCB zyXW4$bNagc-gWt$s>q3VZLf0Bm3!wZQ{1ESQDxLV=6O^tkjfNpYFy^bWW!UY_X+h3 z;}X}nS1jh=^5|T(SlncW%5`zGAeg0b)nMYhCnUm!@lnllg}I}Op?PM3>wq)BEZ}8e zHt;Lp1Henb9N?Eg7w{r57x)Fx4ZHyK06zz+z-gccw1HmWXF!TS52W~WK#vLKEEG!k z6i5kYfRr!=lnl+GdT=9AC5l9qC=ykoNK}a;Q6-8*l_(NbqDWMUBDE%p)S4&~Ria3p zi6V6-iqx4XQan+lcw*?Ohe8x7fhbY}QKW=Vn47OWhpE&#*keVLtVHK>O#MN|K}jK5 zG8xy0!(p{`%hV0HSfxWKF+v0Y!NApk!_PCQ@8kwsHY2~G*46p zb*76*a5M9X!C-MwD&Cde#L5gi7*KT2MKKb}N6s(7iF6KIJLlt)t%#j3c_hemGQ!E^mgGwmA3Y z^6I0<=2Yh%o+=A!nS-~#DZ@SYCkKritBcpS)-u1C-5N}<%Cx%ZtOhIYuR5`NDiCYG zRZ*1%E;H2;$a~eVLXI~C#0{$)+Li4w^6d(UO<}S-!eoz!qfEEw!afFLVMjM)xTYHN zxf(dchcz>h8=D`9Qu`B8ni3U1 z*FyG>EoC&d<%ITDr$8%lnsfBR80q_C>B6%y>U%r(Ybx*eHnKOgABId$^;&y^d}w;J zgM6OOR>XAg})zB2R(mM#y)a*O;l9cG0M)#IWMjqVUkeq{V&^Px`s KX5)t*uKyPfuHgs( delta 2191 zcmZ`)U2GIp6rMY~3$&fNvs(~bp)fOL+bu0WZRrm!r8|ohD6}eVidIlajADyMG%@jk zHj&_OP}3WYBueUwJU|r~D2Sk`zGx~0!-JZLNK}kIh>9^j80z=U?iQ-+CVRef?)}cW z-#vG7@9?<(_PBo74C#B`@U75;dB(MmMA#S<13LcxpmC>JqT9k1{jRjNijeJE2VCbi$^Tmbc8x$B-G+LeS?-rvpy`X8_*=<^fLv^MNOT1;A0D0Xz;gfyaOn=mRa_Q6Tw8faD(r8ZMl7 z;V|JHAQMJ_OgIG894jL=U-i%33b~X?xs*w{lu5aiNx76sxs*w{lu5ai$>k}N%Tp%h zQYKfYOs-CuT%9t>r%dvx(n!IfOeRn!6DX4j2StIM>o^W&k7HLu$o69DYViVpq@-Vz zNn39-ztWMUC3MXdw(Re7qPDa}zZdFrVtO)^#F@oP=c?ZM3-6LVM!Ck+3UIv9dR_Az z3$CZZwWTB23D3nb3w#c!{AKRSGp1JlEoWtSYGw4+E4@+qi`UbQdoCt70tOg=u|`nd!oqQ#Q3)j2&2XQ#C*0{-Mu_+QK&bJ!(Ps#3D^|rDs2m zdQ#1bmkOyG%Bkbnq>igMGA27dRe4i_8UAF((}`af1fRs|+-=5o z%-~adts*X`99hi&wBn#pC5h=_e34QOR@SRa@rXKA=>&s12d`uXovQR;!0f0Bn4wQJ zOMO0XroX>xb_AO~UY&&fvw9coVJ`)HqNWY@dJTQAmj2kfA~jsQP)L8gHYPA|aajj! zWnDGwmO2uL>(0QE_+&kZ>aBVv4y@%|Wy4O`Hyb?IOASk5qm3NzY9uGwTBJHVm~(M5 zUa_3DUyYwElg}~`2}`M zU6D$yWcJjUBS#_7&o3w$=A zD}_0KAQg1$l~q)AVO0fHrJ2dq%nG)$npMVwm@b4 zHr?K_wG;5i)=_=9eKl-*JN>=wqp;lN=Jm{Zc0K2~<_|#}-LM~VTF>trR>8k<6i;5j=q!=mzS{MshFeg2`8!hepXK)q%akJ#N|H^0l7x$RK+mgy3a4kG8c=W|cYC`OW zz`;G4NxRVZ?t2Lh@Xz1B1TeJiF|4z5+wB+`-PV?05(~EG)jFn;$EQUGveM5=Ocn2F M7cu{V9V?dq1Ji%mD*ylh diff --git a/lib/llhttp/llhttp_simd.wasm b/lib/llhttp/llhttp_simd.wasm index 52db42fb67d4128e68434620c550f7484b0a0a76..7d9493caf7d2c196e7c6161d31dd137f1f149520 100755 GIT binary patch delta 6431 zcma)A2~?HU7XJTp?}ZC@ge(yp&ixS)XB;lh`eTCNP-dE%rldGr2nE6M>7^V}b3nFc z(4e^tR8TKn94b<5aQVu7zHG48Ygs*4SBEL6@mBV|67kz~W(hcfeH30yzWDSbDcnOsYTKA#q9F zy1lqq@-nv?15wtF;0$XkMB2izu$U%dRiR=_8pQU6h@B4=yWAia9^O>j%}}vn;YIqP z?}dn!mo&xps`Zj7@`tx%lg-c8nEb&jwg(-tQj&=)PR_Wj$T`)DYpUb0%q8yRE*RJD zTf3V(RN1G<9tU^Bh}Z;+lRG>zMA^H-j#!`HX+JI7QcWJG{S;C&(l?P>kk%m$L;42N zaHOvzwIY2DX#~=fNF$M+Kx#vJ9H|}YF{BQpwMd;vgGgOSUqwptHAqQ5fYh$w;3y7g z!x5yk;V@F#P>odbI0e*q;s`21B&Y{#G{!AvHD#wi68L`8!p{-MzrRmFrUYv`KYHPsk{K4RKFXm!-vy!hm6y( zG=~X^?DNRz<&dMJ$#p$Lj#j&Q9QO0f#zvy^>=Yacian7CCAh^?CbN2g#Q1&e;%<09 ze&>iNE^|kYN`_*XWIR)G69_k+bK37y@5uRTY(^YWEVzqh4Zuz@Rra{yrOut?C^*$Q zeypx3!f@ID()CHBE*Y^p)Cf!mm3iFulW-xi9coQWDD9wYMccJR3egIC6WhpT5ZNUO zrTcg3HAa_qwkX|#JzqD$K;|F{XPTpy!NtV3sPe5Yy$rKl|F6p8@&*@aX1T~L6Pi`4 zn>9JHS4I=Ji`a*l)dJ9xyR}+Ks~H1uJ~0lFUQ7J(5s_qdEhicJ&p~B~@x@GfwozLx zC77J%2ngCzh6Q^kRmp9mwLHOscI$b9zS>s~KXvOSM??GW35EmlEN6keaDT5s?1LlV@0EzN;DKIlnFaR4 z>%IH3z`o#(-aX{DZjL1)@|f&2X?6xGAUV04?1mZ1tMT*3pcrCupl)z_>$<+ubp_Lh+$W2ln#N8^|Kxd}sLP(y%{JcEbSn*lPHr@<;5@r*8Y%V3QfX>7c0ur3HzNH$DUNs8k9ZzIlE)hGjgvF^m+pixQ03)xz6 zKW!z}Q$}tjk0usbxxP}*fI7hBJtF%n^=$qjlQt5FL&k|q$G)Vq8Y*MzxKYRo$)_s~tcHA=H+~aJ z{Wv~`)mB2}1Wb!yzX|aR8o}-0>cV_6#xOog{I5 zfN*Ceyg2z$_QpZDJ$caZza7N>j<0HzvU{0bm0Y$|+2gdKS%`yLzIZUXQt#;hTvLSo zu2k~|?u7g)?b(iluziZsuLVt9N|jPfoL*99e4L2)PzaE}Pbp)ah)`0oXKkF#G%fygRj=?LQ-0^vj?`nQr%!n zgkg(tEaltW*-7k|>e8$jur07f$ePBo!=+j6&`%%Z;sJdeo0Vz5bhts26>742zzbP7 zz>^89H@r$hd2;|Qh$ZC(k#O!;J6CeC)PM*xZpt+)vI4H>uXTK4r*|6-WkUM@9 zEc3>)50An_^G>omN5MW{VY>rp+(6B+xCk_Z3>WrwgzEXR>N7hy8+!}a;etTs@Z z)du=4c$9q*2$n3EEVHWt_;#Vfs;j`}8^T^Wh-uLVX84@)9+*8Xo(iDEr)a6v7T)(Q zW@jt$&W%gZ5>evOBE{8y_`r;yhr3%Oj`nDehSfQlc+sEB8R&Wz8XQIG13MnOm;GJ} zU2+w6xfC*UGud1QY>Ke|L<$G~2s-ixC zK7FnRiWZGzB{gtj(Wb#o)R7KTi#nub`HH2PmX(WV^wQ4rFjD*i9pW(yKo(Wz)Kh=EZ`Y$PCU~5+~E* z+QKY?{!L+LlCc*(87-6`a3(T`V8EWDZVti5W5T?|`J`y*O#NU=1F>l1ng{KX_zj8- z5Dr(uI2%u>yK1o@%|6Ax3RkyDD9 zfSs#_Ez8oeY~bT%L*0$~$XwLsS-zZItA*#67ut12Xzn|;5Vs;T?Iaz}Ej|T%j~HX# znP^`fEeMx!ToN;MsP@L*w^h+3l)2y^UAWFcnj)!@yHnbYQhKp!Cy=oBJhC%57S5~c_s+T`)*UH}{ z{H=|ty@>p?oAitoDb4k2M_dgl-c?I+u5HJHsr}P57N`N&>P{}v46rjqXq^Fut^NyD zmUB%f*A^;BqiJCA4PCRpM}T;Gqaj>kJGN?>n+p|8G-@=Ao3#SB`|I2%gJJ{Ik`J|9 z_IIL6{+Iuz|1MWzz8J2=>qB#;RdxGRDT!UANTx7}TWKcZpTcmAb1ODVv5d2p)5ORG z6z+`JO_UJfUIsZ&j&H>ve428pP?0o)!nmXvboI&8$+|&$(Fq?ZByQ3g92Y4=ZU_^7 z4o&^&sb8aoVbnbux(R%-wu8g47ZGCD2w&%6w`!r=x{efr%ykLmsQh(*j&AOC7`Hx# zdg#3M^(5PMLuZnmu;DYBB|RN4W>24Op(Tqu0`XEq<`&IB9B2lnZXDn+S~6xnrpmgF zIn-N!+ITN@PV1(glsGAy8WSg6Pn_&cB5}N%8xzM&O9*T3=3>#NHxJkDdT!EgBz$)@ zOL57k7$wCq23m^ajgGk{fTcT3T6@%6IyG>y;0mdN#uGxSz>ZnOwIk5Bqt9fH(_E|2 z&t(l|$}MAKsc_9){M;fIj5;wj-k{>QHnaGpP1_2iw@}-H)mus^46d!sT`_Fy3b$?t z+N523aCYk;BgB|iTBTrYqqd01BfBb`{{`p!l8^+$Gq4HZhnXm^03ym;s{s{o1BCF9S0SrJ zNJ@af0lGXzFabhH0)rY6ky1oJEz~DgYf)MSK1IGtTlG`vId^6@EDsA`=G=SkIp_Z8 zb?;5SIK|#S!J3)C&S;uVh-2*hM$KbQXRKxw^s>wB>M9s(pCa^vKia#(97hT$G41)R zJ&cI)bIzs+=aj)|8*9qk6RXRth@E3-B|11qd))D!)%D#`!R9I#7Bl?ORM-9PWF`rU zP@;&ECEF?~o}G$&xO=Z4StO4n?u9)azH*6@TNQ$eAiE_IwkBrSJ(61%pv;v8R}zEe z9@p!Fv(PGgT!)d`kiLf0j`R@H7^JTvjYWD8sRQXNNaK*UAZ>&6Wu#7|FCldyeG#b} z=>eo7QVppG>3*anzYi(NHzRc^IB3EFDKsJ_g}q2gp#iBy_83sxK<7J(5iY?bxCE2n z5=??iFbOWfB)9~V;1W!NOE77Bf=SyGOoB@=X?KE2yAw>>onVqY!6bP?=_Buog(-n$%SG#%hpLGe(G%NO7Rs;=}}d1I(hz9vrF`97>`rP%Kmh6D?ptpzX7_ zw(W?reR4Il+|srZZ5!jOrnTDs=+?IFQMS*8VYrl`+>ARd+V(*>qO`NBHEW?sYV6Lj zzjuRupB|T(pzPM;(%E8BrJ0hT)~tt>a#BjvCO!&I=j%3sH|11TvsSwxZxC3`8d#FH zoo!nWndxhjypkZfOH@LR@fOf70!GUs_RENlzwvDgheDPhvIn{kGgXj9_%S_I@Iqon zTC$-VXL@~;HmeImX+}G{=xSk3D892jDsInMV=4-_S8NW$q>kArUemFQDK6et+`GRO zrNBY{(vd)>WJZ)dw^e3m!mv1#Kpu#I+}ElY$?1*WwH3nP%OX83qIYlBl^mYHL$^*K zdhDjM#&}}xz6?WgcCr|qJ8gOP9s&NI8SBL^5RIJRDfX{047;-vG-ul3cX!HMfJF)X zCkzJ+f%Aqyw1pqSkd&iaD9YK-LL1#~uBo`Y>&db2Hi;gc?z zIMZxhy#fpEfOg$_u+Z~bQMVkSy(n3!OEEI!j8%6gR0}J*cM?Qs>AncRWkdb!=UTYG zM;1=z_ZWcRBR%|VX)UboM=WbDv7~^XRoB9n!N}59W8^vH#s9 zMXci{>&)HD4b};h^<04|b;@LQQi&CntQR?pGV`{XnSw%}iS>-3sja&wn|M*GtiNgP z-AFJvi(LA^bjd%!l=`bFwPU~~!`9zS)?WrrM^;oCmkhdwEJAkCO!o1?{gFkn{>F^; z@S>NHMX|nWMr`m9k|L--n&#gfvejTks`S9ndysWq{`(Fy8Akq(4y!_mq4)V&MIB7K z4^yVCx-Zunr(ae~^1)jpG&N!vK@mum^_jI){Jxt>{K0W8P$m`+X*K}rNrZViEd3BE1>=90)QV!J;avpf-$3e z_iNaNCw_o=QOFfwF4f|377BFL(o0GfNQqus@rBonf1c6Y+4w@+Qpp2<9(@Plz&qxa+o@yLu;w~=eVjtjei);$w|7DE*g@AZmyaFKzO93=#`a#TawlZ7@6E})2}Q0Q4G~KY z@J!5sA17R9Z#KZCiRam+1~~m#zEA-dC+2B)KR#Vxd-p=q6N*lf;L4a-_7-t&8eY`p zmNvp;lZLSEjnF))g`IAM;ADk;)rd~z>kcKwA$)R}`;`K1rX;c^@-!*VsxKh&qAA^3 zMH4KVQp&b8X_u#r64-$z=pR(rPrKpCU|-?i;44XhgF%r>fvN>7_%bf@+G!8jB{SH1 zY>tw&WFIe1HCJ}K;^=`W@?y{*hd%hEq)6~V$Eo@3(rPH4s<3y7w1x0gku|J_T~mwL zg)m&5+LyJ|L-%R9?45d;G;K=!l_rd#8{_YNF@z)aj0WeXwJUGdaH7~~p|CuU9ik}? zL!k)Xo>16Lp46e zVUl81-`C)?>52JAXtMyjsvAZ%4k8#}JP`V>|DZ*Qshi1EP|ZjCPW&y!4}(fYcD4z| zmgY-32zuAsFaolbE_KP4#T*Kqe4%D&E=>^6k|F9}`~~1b6TDYiz|J*6!i=gu*Qt|^ zmFtjON({dL5r$n|ELrB3DfR&F7-i+`jEB4Ep3963e@)A>jRUZ&g5;R3ILdSzl4B;R z!?wxomu zlZRZ1k=QWZ63+%%4k|VY*(C~|e&~!%N6*D^h^fEQ1n)eR`UtPO{^0wNfn4rb-dGlC{20zT3?J|sE4AyEee}2(`N&+C+g9@HDe2fKX zCB14|;Bl02iO(>~`hQxFh7h-)TRF9y?hD4+I^0baOWEUm9Ls1|!b&t6mzKq$;sH~={?d12Z^H;CdcW<4MKJ|G<{<*L>`i6srf9u<|SPnJ1Bn9IEE+0v_+{N-rLyfadXRfr*2wwnp$n@;#AM4 zloVWIw1nNbaq$cBM&I+(hFrqlzQ5d0Bv^jPTe%-Kf-=)94OIf6RMH$1`mX$jm|3A$!Df6)b1}C2$ zmUA2@^mQ2o;^b9OP8jTdc)F> zX|`-x8lNpYE=Hfm5UNbk58YmF^T5Rt#=L(~Swbi0@Tvql7bjJ9rYcxh)mjCyMiu<2 z>U1|fnF_-zMiTH&z&|5l#4+q{L9a=(K5RyP9Q}QWAJ5DCmFxMm>NkmC z8VRGXS2Et^SW+DFK)02|jni5m@&!*+vA6CJRqQTItE6v%Uc0M{hUyVg@NZUV)#yaY zJ|vNP(HwA2LdN9rpvUd!j5V>nc$P^8p^}86|JpehGNr-`Ch{h^hv+& zAbn+TvwyIl^d7;+DP76?r)uTlc%y%8<|-z8+$vsh3sxQX^9P7pj(=)39wU-~-fYug zY)uNjPGDY*n#NCmwVeN9$~)WR^d6u`mBs1&EK{(kA&2wBOzqQ}6;>@_U9|u?Tia`g I*4K&u13`~q&Hw-a From 88ce970733c3b2a2345afce87e9799ba06ee553e Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 08:14:45 +0200 Subject: [PATCH 08/12] FIXUP --- test/errors.js | 2 +- test/types/errors.test-d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/errors.js b/test/errors.js index a9850ad179e..f5aab06538a 100644 --- a/test/errors.js +++ b/test/errors.js @@ -21,7 +21,7 @@ const scenarios = [ createScenario(errors.InvalidReturnValueError, 'Invalid Return Value Error', 'InvalidReturnValueError', 'UND_ERR_INVALID_RETURN_VALUE'), createScenario(errors.RequestAbortedError, 'Request aborted', 'RequestAbortedError', 'UND_ERR_ABORTED'), createScenario(errors.InformationalError, 'Request information', 'InformationalError', 'UND_ERR_INFO'), - createScenario(errors.RequestContentLengthMismatchError, 'Request body length does not match content-length header', 'RequestContentLengthMismatchError', 'UND_ERR_CONTENT_LENGTH_MISMATCH'), + createScenario(errors.RequestContentLengthMismatchError, 'Request body length does not match content-length header', 'RequestContentLengthMismatchError', 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'), createScenario(errors.TrailerMismatchError, 'Trailers does not match trailer header', 'TrailerMismatchError', 'UND_ERR_TRAILER_MISMATCH'), createScenario(errors.ClientDestroyedError, 'The client is destroyed', 'ClientDestroyedError', 'UND_ERR_DESTROYED'), createScenario(errors.ClientClosedError, 'The client is closed', 'ClientClosedError', 'UND_ERR_CLOSED'), diff --git a/test/types/errors.test-d.ts b/test/types/errors.test-d.ts index 2d7082ea781..d7a58ac40ff 100644 --- a/test/types/errors.test-d.ts +++ b/test/types/errors.test-d.ts @@ -36,7 +36,7 @@ expectAssignable<'UND_ERR_INFO'>(new errors.InformationalError().code) expectAssignable(new errors.RequestContentLengthMismatchError()) expectAssignable(new errors.RequestContentLengthMismatchError()) expectAssignable<'RequestContentLengthMismatchError'>(new errors.RequestContentLengthMismatchError().name) -expectAssignable<'UND_ERR_CONTENT_LENGTH_MISMATCH'>(new errors.RequestContentLengthMismatchError().code) +expectAssignable<'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'>(new errors.RequestContentLengthMismatchError().code) expectAssignable(new errors.ClientDestroyedError()) expectAssignable(new errors.ClientDestroyedError()) From bf165cc75096950e71fad978027e6e42751ea9a7 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 08:44:15 +0200 Subject: [PATCH 09/12] fixup --- lib/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/client.js b/lib/client.js index bacdc00afa5..0e3e04701c5 100644 --- a/lib/client.js +++ b/lib/client.js @@ -844,7 +844,7 @@ class Parser { } } - if (contentLength && bytesRead !== parseInt(contentLength, 10)) { + if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) { util.destroy(socket, new ResponseContentLengthMismatchError()) return -1 } From b66ae782f48bb20c11e72ea58fb2d88a6e0fa804 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 08:44:44 +0200 Subject: [PATCH 10/12] fixup --- lib/client.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/client.js b/lib/client.js index 0e3e04701c5..f41ae304b28 100644 --- a/lib/client.js +++ b/lib/client.js @@ -844,6 +844,7 @@ class Parser { } } + /* istanbul ignore next */ if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) { util.destroy(socket, new ResponseContentLengthMismatchError()) return -1 From 08e58055c377d6422d635eb17c9ee2a463d72873 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 08:45:37 +0200 Subject: [PATCH 11/12] fixup --- lib/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/client.js b/lib/client.js index f41ae304b28..d5985a781d6 100644 --- a/lib/client.js +++ b/lib/client.js @@ -844,7 +844,7 @@ class Parser { } } - /* istanbul ignore next */ + /* istanbul ignore next: should be handled by llhttp? */ if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) { util.destroy(socket, new ResponseContentLengthMismatchError()) return -1 From b0d42a56ab063b463aa5d17ef0cba38333fd9462 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Wed, 12 May 2021 09:03:04 +0200 Subject: [PATCH 12/12] fixup --- types/errors.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/errors.d.ts b/types/errors.d.ts index 705796dc1b2..2fced259ee5 100644 --- a/types/errors.d.ts +++ b/types/errors.d.ts @@ -48,7 +48,7 @@ declare namespace Errors { /** Body does not match content-length header. */ export class RequestContentLengthMismatchError extends UndiciError { name: 'RequestContentLengthMismatchError'; - code: 'UND_ERR_CONTENT_LENGTH_MISMATCH'; + code: 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'; } /** Trying to use a destroyed client. */