M src/main/java/eu/siacs/conversations/utils/Patterns.java => src/main/java/eu/siacs/conversations/utils/Patterns.java +4 -5
@@ 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.
M src/main/java/eu/siacs/conversations/utils/XmppUri.java => src/main/java/eu/siacs/conversations/utils/XmppUri.java +1 -4
@@ 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 {