From 1c5e2e3359545dc42979fb60dafc7a8df9c56a08 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 15 Jun 2023 10:11:06 -0400 Subject: [PATCH] Fix linkify for valid URLs with ... in the path. --- .../java/org/thoughtcrime/securesms/util/LinkUtil.kt | 10 +++++----- .../securesms/util/LinkUtilTest_isLegal.java | 3 ++- .../securesms/util/LinkUtilTest_isValidPreviewUrl.kt | 3 ++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LinkUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/util/LinkUtil.kt index a1a4526a32..704192e4c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LinkUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LinkUtil.kt @@ -67,18 +67,18 @@ object LinkUtil { return LegalCharactersResult(false) } - if (ILLEGAL_PERIODS_PATTERN.matcher(url).find()) { - return LegalCharactersResult(false) - } - val matcher = DOMAIN_PATTERN.matcher(url) if (!matcher.matches()) { return LegalCharactersResult(false) } val domain = Objects.requireNonNull(matcher.group(2)) - val cleanedDomain = domain.replace("\\.".toRegex(), "") + if (ILLEGAL_PERIODS_PATTERN.matcher(domain).find()) { + return LegalCharactersResult(false) + } + + val cleanedDomain = domain.replace("\\.".toRegex(), "") return LegalCharactersResult( isLegal = ALL_ASCII_PATTERN.matcher(cleanedDomain).matches() || ALL_NON_ASCII_PATTERN.matcher(cleanedDomain).matches(), domain = domain diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isLegal.java b/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isLegal.java index 6c39cc0c42..866353f01c 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isLegal.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isLegal.java @@ -45,7 +45,8 @@ public class LinkUtilTest_isLegal { { "cool.localhost", true }, { "localhost", true }, { "https://localhost", true }, - { "cool.test", true } + { "cool.test", true }, + { "https://github.com/signalapp/Signal-Android/compare/v6.23.2...v6.23.3", true } }); } diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isValidPreviewUrl.kt b/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isValidPreviewUrl.kt index 2440d0983d..90cc548fc2 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isValidPreviewUrl.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/util/LinkUtilTest_isValidPreviewUrl.kt @@ -50,7 +50,8 @@ class LinkUtilTest_isValidPreviewUrl(private val input: String, private val outp arrayOf("https://cool.test", false), arrayOf("https://cool.invalid.com", true), arrayOf("https://cool.localhost.signal.org", true), - arrayOf("https://cool.test.blarg.gov", true) + arrayOf("https://cool.test.blarg.gov", true), + arrayOf("https://github.com/signalapp/Signal-Android/compare/v6.23.2...v6.23.3", true) ) } }