From 02df2829e51152b199ff09bf09259f7ab19c2a95 Mon Sep 17 00:00:00 2001 From: Dmitriy Vasyura Date: Fri, 26 Dec 2025 04:21:23 -0800 Subject: [PATCH 1/2] Add IPv6 localhost to default list of trusted domains --- src/vs/platform/url/common/trustedDomains.ts | 3 ++- src/vs/platform/url/test/common/trustedDomains.test.ts | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/vs/platform/url/common/trustedDomains.ts b/src/vs/platform/url/common/trustedDomains.ts index f6b5348663356..bb18f68322e07 100644 --- a/src/vs/platform/url/common/trustedDomains.ts +++ b/src/vs/platform/url/common/trustedDomains.ts @@ -52,7 +52,8 @@ export function normalizeURL(url: string | URI): string { const rLocalhost = /^(.+\.)?localhost(:\d+)?$/i; const r127 = /^127.0.0.1(:\d+)?$/; +const rIPv6Localhost = /^\[::1\](:\d+)?$/; export function isLocalhostAuthority(authority: string) { - return rLocalhost.test(authority) || r127.test(authority); + return rLocalhost.test(authority) || r127.test(authority) || rIPv6Localhost.test(authority); } diff --git a/src/vs/platform/url/test/common/trustedDomains.test.ts b/src/vs/platform/url/test/common/trustedDomains.test.ts index ca7865baa6840..1d72bb1693c9e 100644 --- a/src/vs/platform/url/test/common/trustedDomains.test.ts +++ b/src/vs/platform/url/test/common/trustedDomains.test.ts @@ -18,6 +18,7 @@ suite('trustedDomains', () => { assert.strictEqual(isURLDomainTrusted(URI.parse('http://localhost:3000'), []), true); assert.strictEqual(isURLDomainTrusted(URI.parse('http://127.0.0.1:3000'), []), true); assert.strictEqual(isURLDomainTrusted(URI.parse('http://subdomain.localhost'), []), true); + assert.strictEqual(isURLDomainTrusted(URI.parse('http://[::1]:3000'), []), true); }); test('wildcard (*) matches everything', () => { @@ -116,6 +117,12 @@ suite('trustedDomains', () => { assert.strictEqual(isLocalhostAuthority('SUB.LOCALHOST'), true); }); + test('recognizes IPv6 localhost [::1]', () => { + assert.strictEqual(isLocalhostAuthority('[::1]'), true); + assert.strictEqual(isLocalhostAuthority('[::1]:3000'), true); + assert.strictEqual(isLocalhostAuthority('[::1]:8080'), true); + }); + test('does not match non-localhost authorities', () => { assert.strictEqual(isLocalhostAuthority('example.com'), false); assert.strictEqual(isLocalhostAuthority('notlocalhost.com'), false); From 0e7d84de144db3d6760c01b7e80758e2e85d3bc3 Mon Sep 17 00:00:00 2001 From: Dmitriy Vasyura Date: Fri, 26 Dec 2025 13:11:23 -0800 Subject: [PATCH 2/2] PR feedback --- src/vs/platform/url/test/common/trustedDomains.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/platform/url/test/common/trustedDomains.test.ts b/src/vs/platform/url/test/common/trustedDomains.test.ts index 1d72bb1693c9e..7bb6bfdd501c3 100644 --- a/src/vs/platform/url/test/common/trustedDomains.test.ts +++ b/src/vs/platform/url/test/common/trustedDomains.test.ts @@ -18,6 +18,7 @@ suite('trustedDomains', () => { assert.strictEqual(isURLDomainTrusted(URI.parse('http://localhost:3000'), []), true); assert.strictEqual(isURLDomainTrusted(URI.parse('http://127.0.0.1:3000'), []), true); assert.strictEqual(isURLDomainTrusted(URI.parse('http://subdomain.localhost'), []), true); + assert.strictEqual(isURLDomainTrusted(URI.parse('https://[::1]'), []), true); assert.strictEqual(isURLDomainTrusted(URI.parse('http://[::1]:3000'), []), true); }); @@ -128,6 +129,9 @@ suite('trustedDomains', () => { assert.strictEqual(isLocalhostAuthority('notlocalhost.com'), false); assert.strictEqual(isLocalhostAuthority('127.0.0.2'), false); assert.strictEqual(isLocalhostAuthority('192.168.1.1'), false); + assert.strictEqual(isLocalhostAuthority('[::]'), false); + assert.strictEqual(isLocalhostAuthority('[::2]'), false); + assert.strictEqual(isLocalhostAuthority('[::1'), false); }); }); });