Skip to content

Commit 3b06756

Browse files
committed
http: keep F_LENIENT between messages
`F_LENIENT` flag should not be reset along with the other flags when starting parsing a new message. This setting should remain on for the lifetime of the parser or until `llhttp_set_lenient(..., 0)`. PR-URL: nodejs/llhttp#34 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
1 parent c83d8cf commit 3b06756

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/native/http.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,11 @@ int llhttp__after_message_complete(llhttp_t* parser, const char* p,
7474
int should_keep_alive;
7575

7676
should_keep_alive = llhttp_should_keep_alive(parser);
77-
parser->flags = 0;
7877
parser->finish = HTTP_FINISH_SAFE;
7978

79+
/* Keep `F_LENIENT` flag between messages, but reset every other flag */
80+
parser->flags &= F_LENIENT;
81+
8082
/* NOTE: this is ignored in loose parsing mode */
8183
return should_keep_alive;
8284
}

test/request/lenient.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,35 @@ off=33 headers complete method=1 v=1/1 flags=100 content_length=0
2222
off=33 message complete
2323
```
2424

25+
## Second request header value with lenient
26+
27+
<!-- meta={"type": "request-lenient"} -->
28+
```http
29+
GET /url HTTP/1.1
30+
Header1: Okay
31+
32+
33+
GET /url HTTP/1.1
34+
Header1: \f
35+
36+
37+
```
38+
39+
```log
40+
off=0 message begin
41+
off=4 len=4 span[url]="/url"
42+
off=19 len=7 span[header_field]="Header1"
43+
off=28 len=4 span[header_value]="Okay"
44+
off=36 headers complete method=1 v=1/1 flags=100 content_length=0
45+
off=36 message complete
46+
off=38 message begin
47+
off=42 len=4 span[url]="/url"
48+
off=57 len=7 span[header_field]="Header1"
49+
off=66 len=1 span[header_value]="\f"
50+
off=71 headers complete method=1 v=1/1 flags=100 content_length=0
51+
off=71 message complete
52+
```
53+
2554
## Header value without lenient
2655

2756
<!-- meta={"type": "request"} -->

0 commit comments

Comments
 (0)