summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/_http_agent.js11
-rw-r--r--test/parallel/test-http-client-headers-host-array.js23
2 files changed, 33 insertions, 1 deletions
diff --git a/lib/_http_agent.js b/lib/_http_agent.js
index e1cfa6d7fc..25ff16fea1 100644
--- a/lib/_http_agent.js
+++ b/lib/_http_agent.js
@@ -27,7 +27,11 @@ const net = require('net');
const EventEmitter = require('events');
const debug = require('internal/util/debuglog').debuglog('http');
const { async_id_symbol } = require('internal/async_hooks').symbols;
-
+const {
+ codes: {
+ ERR_INVALID_ARG_TYPE,
+ },
+} = require('internal/errors');
// New Agent code.
// The largest departure from the previous implementation is that
@@ -240,6 +244,11 @@ function calculateServerName(options, req) {
let servername = options.host;
const hostHeader = req.getHeader('host');
if (hostHeader) {
+ if (typeof hostHeader !== 'string') {
+ throw new ERR_INVALID_ARG_TYPE('options.headers.host',
+ 'String', hostHeader);
+ }
+
// abc => abc
// abc:123 => abc
// [::1] => ::1
diff --git a/test/parallel/test-http-client-headers-host-array.js b/test/parallel/test-http-client-headers-host-array.js
new file mode 100644
index 0000000000..53b2595141
--- /dev/null
+++ b/test/parallel/test-http-client-headers-host-array.js
@@ -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');
+}