From afa9b2c7a5a0895eed09f9d94ea1ada5c55a3470 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 30 Mar 2025 10:12:13 +0200 Subject: [PATCH] run xmpp uris through XmppUri parser before displaying them --- .../eu/siacs/conversations/ui/util/MyLinkify.java | 3 +++ .../java/eu/siacs/conversations/utils/XmppUri.java | 11 ++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java index 3e7db20d03c05d6ad7ee1c9c1a16c9c74b02b9de..e502780b73c8f1096d5006a335ddf9c48c41edbb 100644 --- a/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java +++ b/src/main/java/eu/siacs/conversations/ui/util/MyLinkify.java @@ -29,6 +29,7 @@ package eu.siacs.conversations.ui.util; +import android.net.Uri; import android.text.Editable; import android.text.style.URLSpan; import android.text.util.Linkify; @@ -39,6 +40,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import eu.siacs.conversations.ui.text.FixedURLSpan; import eu.siacs.conversations.utils.Patterns; +import eu.siacs.conversations.utils.XmppUri; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; @@ -59,6 +61,7 @@ public class MyLinkify { case "tel" -> Patterns.URI_TEL.matcher(match).matches(); case "http", "https" -> Patterns.URI_HTTP.matcher(match).matches(); case "geo" -> Patterns.URI_GEO.matcher(match).matches(); + case "xmpp" -> new XmppUri(Uri.parse(match.toString())).isValidJid(); default -> true; }; }; diff --git a/src/main/java/eu/siacs/conversations/utils/XmppUri.java b/src/main/java/eu/siacs/conversations/utils/XmppUri.java index b6022cb694cebc2eb67808c26f20d11733c4cd23..d861b1d9211d5f0e7fb8335eb5fe18ab4a4fac0c 100644 --- a/src/main/java/eu/siacs/conversations/utils/XmppUri.java +++ b/src/main/java/eu/siacs/conversations/utils/XmppUri.java @@ -45,19 +45,19 @@ public class XmppUri { } } - public XmppUri(Uri uri) { + public XmppUri(final Uri uri) { parse(uri); } - public XmppUri(Uri uri, boolean safeSource) { + public XmppUri(final Uri uri, final boolean safeSource) { this.safeSource = safeSource; parse(uri); } - private static Map parseParameters(final String query, final char seperator) { + private static Map parseParameters(final String query, final char separator) { final ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); final String[] pairs = - query == null ? new String[0] : query.split(String.valueOf(seperator)); + query == null ? new String[0] : query.split(String.valueOf(separator)); for (String pair : pairs) { final String[] parts = pair.split("=", 2); if (parts.length == 0) { @@ -251,7 +251,8 @@ public class XmppUri { public final String fingerprint; final int deviceId; - public Fingerprint(FingerprintType type, String fingerprint, int deviceId) { + public Fingerprint( + final FingerprintType type, final String fingerprint, final int deviceId) { this.type = type; this.fingerprint = fingerprint; this.deviceId = deviceId;