Patterns: attempt at fixing complex xmpp URIs (typically xmpp:#mychan%irc.server@xmpp.server.tld?join) (#3115)
This commit is contained in:
parent
2fc4ca719d
commit
a4004904fe
|
@ -28,10 +28,11 @@ import java.util.regex.Pattern;
|
||||||
public class Patterns {
|
public class Patterns {
|
||||||
|
|
||||||
public static final Pattern XMPP_PATTERN = Pattern
|
public static final Pattern XMPP_PATTERN = Pattern
|
||||||
.compile("xmpp\\:(?:(?:["
|
.compile("xmpp:"
|
||||||
+ Patterns.GOOD_IRI_CHAR
|
+ "(?:\\S+)" // any (one or more) non-whitespace prefix
|
||||||
+ "\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])"
|
+ "@(?:[." + Patterns.GOOD_IRI_CHAR + "])+" // domain part, added the dot
|
||||||
+ "|(?:\\%[a-fA-F0-9]{2}))+");
|
+ "(?:\\?[a-zA-Z]+)?" // optional action, can be any letter but no digit
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regular expression to match all IANA top-level domains.
|
* Regular expression to match all IANA top-level domains.
|
||||||
|
|
|
@ -91,7 +91,10 @@ public class XmppUri {
|
||||||
if (uri.getAuthority() != null) {
|
if (uri.getAuthority() != null) {
|
||||||
jid = uri.getAuthority();
|
jid = uri.getAuthority();
|
||||||
} else {
|
} else {
|
||||||
String[] parts = uri.getSchemeSpecificPart().split("\\?");
|
// 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("\\?");
|
||||||
if (parts.length > 0) {
|
if (parts.length > 0) {
|
||||||
jid = parts[0];
|
jid = parts[0];
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue