Skip to content

Commit 24033ee

Browse files
Melteddaduh95
authored andcommitted
http: fix rawHeaders exceeding maxHeadersCount limit
Fixes: #61284 PR-URL: #61285 Reviewed-By: Tim Perry <pimterry@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: René <contact.9a5d6388@renegade334.me.uk> Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
1 parent b5cdc27 commit 24033ee

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

‎lib/_http_common.js‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ const MAX_HEADER_PAIRS = 2000;
5959
// called to process trailing HTTP headers.
6060
functionparserOnHeaders(headers,url){
6161
// Once we exceeded headers limit - stop collecting them
62-
if(this.maxHeaderPairs<=0||
63-
this._headers.length<this.maxHeaderPairs){
62+
constcapacity=this.maxHeaderPairs-this._headers.length;
63+
if(this.maxHeaderPairs<=0||capacity>=headers.length){
6464
this._headers.push(...headers);
65+
}elseif(capacity>0){
66+
this._headers.push(...headers.slice(0,capacity));
6567
}
6668
this._url+=url;
6769
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'use strict';
2+
constcommon=require('../common');
3+
constassert=require('assert');
4+
consthttp=require('http');
5+
constnet=require('net');
6+
7+
constserver=http.createServer(common.mustCall((req,res)=>{
8+
constlimit=server.maxHeadersCount*2;
9+
assert.ok(req.rawHeaders.length<=limit,
10+
`rawHeaders.length (${req.rawHeaders.length}) exceeds limit (${limit})`);
11+
res.end();
12+
server.close();
13+
}));
14+
15+
server.maxHeadersCount=50;
16+
17+
server.listen(0,common.mustCall(()=>{
18+
constport=server.address().port;
19+
constheaders=Array.from({length: 65},(_,i)=>`X-${i}:v`).join('\r\n');
20+
constreq=`GET / HTTP/1.1\r\nHost: localhost\r\n${headers}\r\n\r\n`;
21+
22+
net.createConnection(port,'localhost',function(){
23+
this.write(req);
24+
this.once('data',()=>this.end());
25+
});
26+
}));

0 commit comments

Comments
 (0)