diff --git a/client/js/libs/handlebars/ircmessageparser/findLinks.js b/client/js/libs/handlebars/ircmessageparser/findLinks.js index 50c442e6..803ddb1d 100644 --- a/client/js/libs/handlebars/ircmessageparser/findLinks.js +++ b/client/js/libs/handlebars/ircmessageparser/findLinks.js @@ -22,41 +22,45 @@ function findLinks(text) { // -Tags. // See https://medialize.github.io/URI.js/docs.html#static-withinString // In our case, we store each URI encountered in a result array. - URI.withinString(text, function(url, start, end) { - let parsedScheme; + try { + URI.withinString(text, function(url, start, end) { + let parsedScheme; - try { - // Extract the scheme of the URL detected, if there is one - parsedScheme = URI(url).scheme().toLowerCase(); - } catch (e) { - // URI may throw an exception for malformed urls, - // as to why withinString finds these in the first place is a mystery - return; - } + try { + // Extract the scheme of the URL detected, if there is one + parsedScheme = URI(url).scheme().toLowerCase(); + } catch (e) { + // URI may throw an exception for malformed urls, + // as to why withinString finds these in the first place is a mystery + return; + } - // Check if the scheme of the detected URL matches a common one above. - // In a URL like `foo..http://example.com`, the scheme would be `foo..http`, - // so we need to clean up the end of the scheme and filter out the rest. - const matchedScheme = commonSchemes.find((scheme) => parsedScheme.endsWith(scheme)); + // Check if the scheme of the detected URL matches a common one above. + // In a URL like `foo..http://example.com`, the scheme would be `foo..http`, + // so we need to clean up the end of the scheme and filter out the rest. + const matchedScheme = commonSchemes.find((scheme) => parsedScheme.endsWith(scheme)); - // A known scheme was found, extract the unknown part from the URL - if (matchedScheme) { - const prefix = parsedScheme.length - matchedScheme.length; - start += prefix; - url = url.slice(prefix); - } + // A known scheme was found, extract the unknown part from the URL + if (matchedScheme) { + const prefix = parsedScheme.length - matchedScheme.length; + start += prefix; + url = url.slice(prefix); + } - // The URL matched but does not start with a scheme (`www.foo.com`), add it - if (!parsedScheme.length) { - url = "http://" + url; - } + // The URL matched but does not start with a scheme (`www.foo.com`), add it + if (!parsedScheme.length) { + url = "http://" + url; + } - result.push({ - start: start, - end: end, - link: url + result.push({ + start: start, + end: end, + link: url + }); }); - }); + } catch (e) { + // withinString is wrapped in a try/catch due to https://github.com/medialize/URI.js/issues/359 + } return result; }