http: throw if 'host' agent header is not a string value
If the 'host' agent header is an array or other non-string value, throw. PR-URL: https://github.com/nodejs/node/pull/29568 Fixes: https://github.com/nodejs/node/issues/29408 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
parent
a0c6cf8eb1
commit
2daf883a18
@ -27,7 +27,11 @@ const net = require('net');
|
|||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const debug = require('internal/util/debuglog').debuglog('http');
|
const debug = require('internal/util/debuglog').debuglog('http');
|
||||||
const { async_id_symbol } = require('internal/async_hooks').symbols;
|
const { async_id_symbol } = require('internal/async_hooks').symbols;
|
||||||
|
const {
|
||||||
|
codes: {
|
||||||
|
ERR_INVALID_ARG_TYPE,
|
||||||
|
},
|
||||||
|
} = require('internal/errors');
|
||||||
// New Agent code.
|
// New Agent code.
|
||||||
|
|
||||||
// The largest departure from the previous implementation is that
|
// The largest departure from the previous implementation is that
|
||||||
@ -240,6 +244,11 @@ function calculateServerName(options, req) {
|
|||||||
let servername = options.host;
|
let servername = options.host;
|
||||||
const hostHeader = req.getHeader('host');
|
const hostHeader = req.getHeader('host');
|
||||||
if (hostHeader) {
|
if (hostHeader) {
|
||||||
|
if (typeof hostHeader !== 'string') {
|
||||||
|
throw new ERR_INVALID_ARG_TYPE('options.headers.host',
|
||||||
|
'String', hostHeader);
|
||||||
|
}
|
||||||
|
|
||||||
// abc => abc
|
// abc => abc
|
||||||
// abc:123 => abc
|
// abc:123 => abc
|
||||||
// [::1] => ::1
|
// [::1] => ::1
|
||||||
|
23
test/parallel/test-http-client-headers-host-array.js
Normal file
23
test/parallel/test-http-client-headers-host-array.js
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
require('../common');
|
||||||
|
|
||||||
|
const assert = require('assert');
|
||||||
|
const http = require('http');
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
port: '80',
|
||||||
|
path: '/',
|
||||||
|
headers: {
|
||||||
|
host: []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
assert.throws(() => {
|
||||||
|
http.request(options);
|
||||||
|
}, {
|
||||||
|
code: /ERR_INVALID_ARG_TYPE/
|
||||||
|
}, 'http request should throw when passing array as header host');
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user