Skip to content

Commit e9ff810

Browse files
authored
deps: update llhttp to 9.1.2
PR-URL: nodejs#48981 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
1 parent 71b90fa commit e9ff810

19 files changed

+1967
-9850
lines changed

deps/llhttp/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
libllhttp.pc

deps/llhttp/CMakeLists.txt

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.5.1)
22
cmake_policy(SET CMP0069 NEW)
33

4-
project(llhttp VERSION 8.1.1)
4+
project(llhttp VERSION 9.1.2)
55
include(GNUInstallDirs)
66

77
set(CMAKE_C_STANDARD 99)
@@ -47,8 +47,9 @@ configure_file(
4747
function(config_library target)
4848
target_sources(${target} PRIVATE ${LLHTTP_SOURCES} ${LLHTTP_HEADERS})
4949

50-
target_include_directories(${target} PRIVATE
51-
${CMAKE_CURRENT_SOURCE_DIR}/include
50+
target_include_directories(${target} PUBLIC
51+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
52+
$<INSTALL_INTERFACE:include>
5253
)
5354

5455
set_target_properties(${target} PROPERTIES
@@ -72,9 +73,10 @@ function(config_library target)
7273

7374
# This is required to work with FetchContent
7475
install(EXPORT llhttp
75-
FILE llhttp-config.cmake
76-
NAMESPACE llhttp::
77-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/llhttp)
76+
FILE llhttp-config.cmake
77+
NAMESPACE llhttp::
78+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/llhttp
79+
)
7880
endfunction(config_library target)
7981

8082
if(BUILD_SHARED_LIBS)

deps/llhttp/README.md

+114-30
Original file line numberDiff line numberDiff line change
@@ -61,33 +61,41 @@ checks could be performed to get even stricter verification of the llhttp.
6161
## Usage
6262

6363
```C
64+
#include "stdio.h"
6465
#include "llhttp.h"
66+
#include "string.h"
6567

66-
llhttp_t parser;
67-
llhttp_settings_t settings;
68+
int handle_on_message_complete(llhttp_t* parser) {
69+
fprintf(stdout, "Message completed!\n");
70+
return 0;
71+
}
72+
73+
int main() {
74+
llhttp_t parser;
75+
llhttp_settings_t settings;
6876

69-
/* Initialize user callbacks and settings */
70-
llhttp_settings_init(&settings);
77+
/*Initialize user callbacks and settings */
78+
llhttp_settings_init(&settings);
7179

72-
/* Set user callback */
73-
settings.on_message_complete = handle_on_message_complete;
80+
/*Set user callback */
81+
settings.on_message_complete = handle_on_message_complete;
7482

75-
/* Initialize the parser in HTTP_BOTH mode, meaning that it will select between
76-
* HTTP_REQUEST and HTTP_RESPONSE parsing automatically while reading the first
77-
* input.
78-
*/
79-
llhttp_init(&parser, HTTP_BOTH, &settings);
83+
/*Initialize the parser in HTTP_BOTH mode, meaning that it will select between
84+
*HTTP_REQUEST and HTTP_RESPONSE parsing automatically while reading the first
85+
*input.
86+
*/
87+
llhttp_init(&parser, HTTP_BOTH, &settings);
8088

81-
/* Parse request! */
82-
const char* request = "GET / HTTP/1.1\r\n\r\n";
83-
int request_len = strlen(request);
89+
/*Parse request! */
90+
const char* request = "GET / HTTP/1.1\r\n\r\n";
91+
int request_len = strlen(request);
8492

85-
enum llhttp_errno err = llhttp_execute(&parser, request, request_len);
86-
if (err == HPE_OK) {
87-
/* Successfully parsed! */
88-
} else {
89-
fprintf(stderr, "Parse error: %s %s\n", llhttp_errno_name(err),
90-
parser.reason);
93+
enum llhttp_errno err = llhttp_execute(&parser, request, request_len);
94+
if (err == HPE_OK) {
95+
fprintf(stdout, "Successfully parsed!\n");
96+
} else {
97+
fprintf(stderr, "Parse error: %s %s\n", llhttp_errno_name(err), parser.reason);
98+
}
9199
}
92100
```
93101
For more information on API usage, please refer to [src/native/api.h](https://github.com/nodejs/llhttp/blob/main/src/native/api.h).
@@ -279,7 +287,7 @@ protocol support to highly non-compliant clients/server.
279287
No `HPE_INVALID_HEADER_TOKEN` will be raised for incorrect header values when
280288
lenient parsing is "on".
281289
282-
**USE AT YOUR OWN RISK!**
290+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
283291
284292
### `void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled)`
285293
@@ -292,23 +300,22 @@ conjunction with `Content-Length`.
292300
This error is important to prevent HTTP request smuggling, but may be less desirable
293301
for small number of cases involving legacy servers.
294302
295-
**USE AT YOUR OWN RISK!**
303+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
296304
297305
### `void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled)`
298306
299307
Enables/disables lenient handling of `Connection: close` and HTTP/1.0
300308
requests responses.
301309
302-
Normally `llhttp` would error on (in strict mode) or discard (in loose mode)
303-
the HTTP request/response after the request/response with `Connection: close`
304-
and `Content-Length`.
310+
Normally `llhttp` would error the HTTP request/response
311+
after the request/response with `Connection: close` and `Content-Length`.
305312
306313
This is important to prevent cache poisoning attacks,
307314
but might interact badly with outdated and insecure clients.
308315
309316
With this flag the extra request/response will be parsed normally.
310317
311-
**USE AT YOUR OWN RISK!**
318+
**Enabling this flag can pose a security issue since you will be exposed to poisoning attacks. USE WITH CAUTION!**
312319
313320
### `void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled)`
314321
@@ -323,7 +330,67 @@ avoid request smuggling.
323330
324331
With this flag the extra value will be parsed normally.
325332
326-
**USE AT YOUR OWN RISK!**
333+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
334+
335+
### `void llhttp_set_lenient_version(llhttp_t* parser, int enabled)`
336+
337+
Enables/disables lenient handling of HTTP version.
338+
339+
Normally `llhttp` would error when the HTTP version in the request or status line
340+
is not `0.9`, `1.0`, `1.1` or `2.0`.
341+
With this flag the extra value will be parsed normally.
342+
343+
**Enabling this flag can pose a security issue since you will allow unsupported HTTP versions. USE WITH CAUTION!**
344+
345+
### `void llhttp_set_lenient_data_after_close(llhttp_t* parser, int enabled)`
346+
347+
Enables/disables lenient handling of additional data received after a message ends
348+
and keep-alive is disabled.
349+
350+
Normally `llhttp` would error when additional unexpected data is received if the message
351+
contains the `Connection` header with `close` value.
352+
With this flag the extra data will discarded without throwing an error.
353+
354+
**Enabling this flag can pose a security issue since you will be exposed to poisoning attacks. USE WITH CAUTION!**
355+
356+
### `void llhttp_set_lenient_optional_lf_after_cr(llhttp_t* parser, int enabled)`
357+
358+
Enables/disables lenient handling of incomplete CRLF sequences.
359+
360+
Normally `llhttp` would error when a CR is not followed by LF when terminating the
361+
request line, the status line, the headers or a chunk header.
362+
With this flag only a CR is required to terminate such sections.
363+
364+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
365+
366+
### `void llhttp_set_lenient_optional_cr_before_lf(llhttp_t* parser, int enabled)`
367+
368+
Enables/disables lenient handling of line separators.
369+
370+
Normally `llhttp` would error when a LF is not preceded by CR when terminating the
371+
request line, the status line, the headers, a chunk header or a chunk data.
372+
With this flag only a LF is required to terminate such sections.
373+
374+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
375+
376+
### `void llhttp_set_lenient_optional_crlf_after_chunk(llhttp_t* parser, int enabled)`
377+
378+
Enables/disables lenient handling of chunks not separated via CRLF.
379+
380+
Normally `llhttp` would error when after a chunk data a CRLF is missing before
381+
starting a new chunk.
382+
With this flag the new chunk can start immediately after the previous one.
383+
384+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
385+
386+
### `void llhttp_set_lenient_spaces_after_chunk_size(llhttp_t* parser, int enabled)`
387+
388+
Enables/disables lenient handling of spaces after chunk size.
389+
390+
Normally `llhttp` would error when after a chunk size is followed by one or more spaces are present instead of a CRLF or `;`.
391+
With this flag this check is disabled.
392+
393+
**Enabling this flag can pose a security issue since you will be exposed to request smuggling attacks. USE WITH CAUTION!**
327394
328395
## Build Instructions
329396
@@ -345,17 +412,34 @@ make
345412

346413
### Using with CMake
347414

348-
If you want to use this library in a CMake project you can use the snippet below.
415+
If you want to use this library in a CMake project as a shared library, you can use the snippet below.
349416

350417
```
351418
FetchContent_Declare(llhttp
352-
URL "https://github.com/nodejs/llhttp/archive/refs/tags/v6.0.5.tar.gz") # Using version 6.0.5
419+
URL "https://github.com/nodejs/llhttp/archive/refs/tags/release/v8.1.0.tar.gz")
353420
354421
FetchContent_MakeAvailable(llhttp)
355422
356-
target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp ${PROJECT_NAME})
423+
# Link with the llhttp_shared target
424+
target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp_shared ${PROJECT_NAME})
357425
```
358426

427+
If you want to use this library in a CMake project as a static library, you can set some cache variables first.
428+
429+
```
430+
FetchContent_Declare(llhttp
431+
URL "https://github.com/nodejs/llhttp/archive/refs/tags/release/v8.1.0.tar.gz")
432+
433+
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "")
434+
set(BUILD_STATIC_LIBS ON CACHE INTERNAL "")
435+
FetchContent_MakeAvailable(llhttp)
436+
437+
# Link with the llhttp_static target
438+
target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp_static ${PROJECT_NAME})
439+
```
440+
441+
_Note that using the git repo directly (e.g., via a git repo url and tag) will not work with FetchContent_Declare because [CMakeLists.txt](./CMakeLists.txt) requires string replacements (e.g., `_RELEASE_`) before it will build._
442+
359443
## Building on Windows
360444

361445
### Installation

0 commit comments

Comments
 (0)