From cb8d93a1ef137a0a7a8d193e431091ec216b91ea Mon Sep 17 00:00:00 2001 From: RyotaK <49341894+Ry0taK@users.noreply.github.com> Date: Fri, 16 Dec 2022 16:50:57 +0000 Subject: [PATCH] Implement protocol validation --- src/browser/OscLinkProvider.ts | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/browser/OscLinkProvider.ts b/src/browser/OscLinkProvider.ts index c621ddf2..1b6ee483 100644 --- a/src/browser/OscLinkProvider.ts +++ b/src/browser/OscLinkProvider.ts @@ -66,14 +66,25 @@ export class OscLinkProvider implements ILinkProvider { y } }; - // OSC links always use underline and pointer decorations - result.push({ - text, - range, - activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)), - hover: (e, text) => linkHandler?.hover?.(e, text, range), - leave: (e, text) => linkHandler?.leave?.(e, text, range) - }); + + let ignoreLink = false; + if (!linkHandler?.allowNonHttpProtocols) { + const parsed = new URL(text); + if (!['http:', 'https:'].includes(parsed.protocol)) { + ignoreLink = true; + } + } + + if (!ignoreLink) { + // OSC links always use underline and pointer decorations + result.push({ + text, + range, + activate: (e, text) => (linkHandler ? linkHandler.activate(e, text, range) : defaultActivate(e, text)), + hover: (e, text) => linkHandler?.hover?.(e, text, range), + leave: (e, text) => linkHandler?.leave?.(e, text, range) + }); + } } finishLink = false;