http: fix non-string header value concatenation
Since headers are stored in an empty literal object ({}) instead of an object created with Object.create(null), care must be taken with property names inherited from Object. Currently there are only functions inherited, so we can safely check for existing strings instead. Fixes: https://github.com/nodejs/node/issues/4456 PR-URL: https://github.com/nodejs/node/pull/4460 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Minwoo Jung <jmwsoft@gmail.com>
This commit is contained in:
Родитель
6efa031168
Коммит
2a1ef977e3
|
@ -165,7 +165,7 @@ IncomingMessage.prototype._addHeaderLine = function(field, value, dest) {
|
|||
|
||||
default:
|
||||
// make comma-separated list
|
||||
if (dest[field] !== undefined) {
|
||||
if (typeof dest[field] === 'string') {
|
||||
dest[field] += ', ' + value;
|
||||
} else {
|
||||
dest[field] = value;
|
||||
|
|
|
@ -16,6 +16,7 @@ var srv = http.createServer(function(req, res) {
|
|||
assert.equal(req.headers['x-bar'], 'banjo, bango');
|
||||
assert.equal(req.headers['sec-websocket-protocol'], 'chat, share');
|
||||
assert.equal(req.headers['sec-websocket-extensions'], 'foo; 1, bar; 2, baz');
|
||||
assert.equal(req.headers['constructor'], 'foo, bar, baz');
|
||||
|
||||
res.writeHead(200, {'Content-Type' : 'text/plain'});
|
||||
res.end('EOF');
|
||||
|
@ -48,7 +49,10 @@ srv.listen(common.PORT, function() {
|
|||
['sec-websocket-protocol', 'share'],
|
||||
['sec-websocket-extensions', 'foo; 1'],
|
||||
['sec-websocket-extensions', 'bar; 2'],
|
||||
['sec-websocket-extensions', 'baz']
|
||||
['sec-websocket-extensions', 'baz'],
|
||||
['constructor', 'foo'],
|
||||
['constructor', 'bar'],
|
||||
['constructor', 'baz'],
|
||||
]
|
||||
});
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче