diff --git a/src/main/java/eu/siacs/conversations/utils/Patterns.java b/src/main/java/eu/siacs/conversations/utils/Patterns.java index dcbb24a0c..fae13aaea 100644 --- a/src/main/java/eu/siacs/conversations/utils/Patterns.java +++ b/src/main/java/eu/siacs/conversations/utils/Patterns.java @@ -28,11 +28,10 @@ import java.util.regex.Pattern; public class Patterns { public static final Pattern XMPP_PATTERN = Pattern - .compile("xmpp:" - + "(?:\\S+)" // any (one or more) non-whitespace prefix - + "@(?:[." + Patterns.GOOD_IRI_CHAR + "])+" // domain part, added the dot - + "(?:\\?[a-zA-Z]+)?" // optional action, can be any letter but no digit - ); + .compile("xmpp\\:(?:(?:[" + + Patterns.GOOD_IRI_CHAR + + "\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])" + + "|(?:\\%[a-fA-F0-9]{2}))+"); /** * Regular expression to match all IANA top-level domains. diff --git a/src/main/java/eu/siacs/conversations/utils/XmppUri.java b/src/main/java/eu/siacs/conversations/utils/XmppUri.java index e9ebb6534..0deb66a80 100644 --- a/src/main/java/eu/siacs/conversations/utils/XmppUri.java +++ b/src/main/java/eu/siacs/conversations/utils/XmppUri.java @@ -91,10 +91,7 @@ public class XmppUri { if (uri.getAuthority() != null) { jid = uri.getAuthority(); } else { - // At this point, it might be safe to assume that any instance of '%' or '#' in the - // passed URI is the result of the user input and can safely be (should be?) encoded - Uri replaced = Uri.parse(lameUrlEncode(uri.toString())); - String[] parts = replaced.getSchemeSpecificPart().split("\\?"); + String[] parts = uri.getSchemeSpecificPart().split("\\?"); if (parts.length > 0) { jid = parts[0]; } else {