Skip to content

Commit f10d721

Browse files
ronagMylesBorins
authored andcommittedNov 16, 2020
http: reset headers timeout on headers complete
headers timeout should not occur *after* headers have been received. Fixes: #35661 PR-URL: #34578 Backport-PR-URL: #35819 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Pranshu Srivastava <rexagod@gmail.com> (cherry picked from commit da4d8de)
1 parent b732c92 commit f10d721

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed
 

‎src/node_http_parser_impl.h

+1
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ class Parser : public AsyncWrap, public StreamListener {
265265
#ifdef NODE_EXPERIMENTAL_HTTP
266266
header_nread_ = 0;
267267
#endif /* NODE_EXPERIMENTAL_HTTP */
268+
header_parsing_start_time_ = 0;
268269

269270
// Arguments for the on-headers-complete javascript callback. This
270271
// list needs to be kept in sync with the actual argument list for
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'use strict';
2+
const common = require('../common');
3+
4+
const net = require('net');
5+
const { HTTPParser } = process.binding('http_parser');
6+
7+
const server = net.createServer((socket) => {
8+
socket.write('HTTP/1.1 200 OK\r\n');
9+
socket.write('Transfer-Encoding: chunked\r\n\r\n');
10+
setTimeout(() => {
11+
socket.write('1\r\n');
12+
socket.write('\n\r\n');
13+
setTimeout(() => {
14+
socket.write('1\r\n');
15+
socket.write('\n\r\n');
16+
setImmediate(() => {
17+
socket.destroy();
18+
server.close();
19+
});
20+
}, 500);
21+
}, 500);
22+
}).listen(0, () => {
23+
const socket = net.connect(server.address().port);
24+
const parser = new HTTPParser(HTTPParser.RESPONSE, false);
25+
parser.initialize(
26+
HTTPParser.RESPONSE,
27+
{},
28+
1e3
29+
);
30+
31+
parser[HTTPParser.kOnTimeout] = common.mustNotCall();
32+
33+
parser[HTTPParser.kOnHeaders] = common.mustNotCall();
34+
35+
parser[HTTPParser.kOnExecute] = common.mustCallAtLeast(3);
36+
37+
parser[HTTPParser.kOnHeadersComplete] = common.mustCall();
38+
39+
parser[HTTPParser.kOnBody] = common.mustCall(2);
40+
41+
parser[HTTPParser.kOnMessageComplete] = common.mustNotCall();
42+
43+
parser.consume(socket._handle);
44+
});

0 commit comments

Comments
 (0)
Please sign in to comment.