diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/text/LinkifyHelper.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/text/LinkifyHelper.kt index b95dacc5a8..5115605322 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/text/LinkifyHelper.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/text/LinkifyHelper.kt @@ -97,7 +97,7 @@ object LinkifyHelper { val closingParenthesisCount = linkifiedTextLastPath.count { it == ')' } val openingParenthesisCount = linkifiedTextLastPath.count { it == '(' } // If it's not part of a pair, remove it from the link span by adjusting the end index - end -= closingParenthesisCount - openingParenthesisCount + end -= (closingParenthesisCount - openingParenthesisCount).coerceAtLeast(0) } return end } diff --git a/libraries/androidutils/src/test/kotlin/io/element/android/libraries/androidutils/text/LinkifierHelperTest.kt b/libraries/androidutils/src/test/kotlin/io/element/android/libraries/androidutils/text/LinkifierHelperTest.kt index 4722994cc8..6fa18be1ac 100644 --- a/libraries/androidutils/src/test/kotlin/io/element/android/libraries/androidutils/text/LinkifierHelperTest.kt +++ b/libraries/androidutils/src/test/kotlin/io/element/android/libraries/androidutils/text/LinkifierHelperTest.kt @@ -122,4 +122,22 @@ class LinkifierHelperTest { assertThat(urlSpans.size).isEqualTo(1) assertThat(urlSpans.first().url).isEqualTo("https://github.com/element-hq/element-android/READ(ME)") } + + @Test + fun `linkification handles mismatched opening parenthesis in URL`() { + val text = "A url: (https://github.com/element-hq/element-android/READ((((((ME))" + val result = LinkifyHelper.linkify(text) + val urlSpans = result.toSpannable().getSpans() + assertThat(urlSpans.size).isEqualTo(1) + assertThat(urlSpans.first().url).isEqualTo("https://github.com/element-hq/element-android/READ((((((ME))") + } + + @Test + fun `linkification handles mismatched closing parenthesis in URL`() { + val text = "A url: (https://github.com/element-hq/element-android/READ(ME)))))" + val result = LinkifyHelper.linkify(text) + val urlSpans = result.toSpannable().getSpans() + assertThat(urlSpans.size).isEqualTo(1) + assertThat(urlSpans.first().url).isEqualTo("https://github.com/element-hq/element-android/READ(ME)") + } }