From 41a62992766b50e4df97ab8b1f8eebc0dc0bdf63 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Mon, 29 Aug 2022 10:58:17 +0200 Subject: [PATCH] Simple browser opener doesn't work with IPv6 hosts (#159276) Fixes #158599 --- extensions/simple-browser/src/extension.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/extensions/simple-browser/src/extension.ts b/extensions/simple-browser/src/extension.ts index ff3649c7baf..63131a43bcf 100644 --- a/extensions/simple-browser/src/extension.ts +++ b/extensions/simple-browser/src/extension.ts @@ -32,6 +32,9 @@ const enabledHosts = new Set([ '::' ]); +const IPv6Localhost = /0\:0\:0\:0\:0\:0\:0\:1|\:\:1/; +const IPv6AllInterfaces = /0\:0\:0\:0\:0\:0\:0\:0|\:\:/; + const openerId = 'simpleBrowser.open'; export function activate(context: vscode.ExtensionContext) { @@ -67,7 +70,8 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.window.registerExternalUriOpener(openerId, { canOpenExternalUri(uri: vscode.Uri) { - const originalUri = new URL(uri.toString()); + // We have to replace the IPv6 hosts with IPv4 because URL can't handle IPv6. + const originalUri = new URL(uri.toString().replace(IPv6Localhost, '127.0.0.1').replace(IPv6AllInterfaces, '0.0.0.0')); if (enabledHosts.has(originalUri.hostname)) { return isWeb() ? vscode.ExternalUriOpenerPriority.Default