summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuigi Pinca <luigipinca@gmail.com>2019-06-24 18:15:58 +0200
committerLuigi Pinca <luigipinca@gmail.com>2019-07-01 18:26:10 +0200
commit26b048effb23eb479fe0e10087860bb7f9862f2a (patch)
tree4af8383b916eff1e048a0f5d1e2309747d7255ab
parent9b77be4814cfe9cf816c05b325b2fa7bc6a92e55 (diff)
downloadandroid-node-v8-26b048effb23eb479fe0e10087860bb7f9862f2a.tar.gz
android-node-v8-26b048effb23eb479fe0e10087860bb7f9862f2a.tar.bz2
android-node-v8-26b048effb23eb479fe0e10087860bb7f9862f2a.zip
http2: remove square brackets from parsed hostname
Make `http2.connect()` work when using URLs with literal IPv6 addresses. Fixes: https://github.com/nodejs/node/issues/28216 PR-URL: https://github.com/nodejs/node/pull/28406 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
-rw-r--r--lib/internal/http2/core.js11
-rw-r--r--test/parallel/test-http2-connect.js30
2 files changed, 39 insertions, 2 deletions
diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js
index fefb04d03d..a65dbb92c5 100644
--- a/lib/internal/http2/core.js
+++ b/lib/internal/http2/core.js
@@ -2778,7 +2778,16 @@ function connect(authority, options, listener) {
const protocol = authority.protocol || options.protocol || 'https:';
const port = '' + (authority.port !== '' ?
authority.port : (authority.protocol === 'http:' ? 80 : 443));
- const host = authority.hostname || authority.host || 'localhost';
+ let host = 'localhost';
+
+ if (authority.hostname) {
+ host = authority.hostname;
+
+ if (host[0] === '[')
+ host = host.slice(1, -1);
+ } else if (authority.host) {
+ host = authority.host;
+ }
let socket;
if (typeof options.createConnection === 'function') {
diff --git a/test/parallel/test-http2-connect.js b/test/parallel/test-http2-connect.js
index a2f30f974e..2137ef2892 100644
--- a/test/parallel/test-http2-connect.js
+++ b/test/parallel/test-http2-connect.js
@@ -1,6 +1,12 @@
'use strict';
-const { mustCall, hasCrypto, skip, expectsError } = require('../common');
+const {
+ mustCall,
+ hasCrypto,
+ hasIPv6,
+ skip,
+ expectsError
+} = require('../common');
if (!hasCrypto)
skip('missing crypto');
const { createServer, connect } = require('http2');
@@ -73,3 +79,25 @@ const { connect: netConnect } = require('net');
type: Error
});
}
+
+// Check for literal IPv6 addresses in URL's
+if (hasIPv6) {
+ const server = createServer();
+ server.listen(0, '::1', mustCall(() => {
+ const { port } = server.address();
+ const clients = new Set();
+
+ clients.add(connect(`http://[::1]:${port}`));
+ clients.add(connect(new URL(`http://[::1]:${port}`)));
+
+ for (const client of clients) {
+ client.once('connect', mustCall(() => {
+ client.close();
+ clients.delete(client);
+ if (clients.size === 0) {
+ server.close();
+ }
+ }));
+ }
+ }));
+}