diff --git a/core/java/android/net/UrlQuerySanitizer.java b/core/java/android/net/UrlQuerySanitizer.java index 5b674067192ee..cf08b653d0f42 100644 --- a/core/java/android/net/UrlQuerySanitizer.java +++ b/core/java/android/net/UrlQuerySanitizer.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Locale; import java.util.Set; import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @@ -837,15 +839,11 @@ public class UrlQuerySanitizer { * @param string the escaped string * @return the unescaped string. */ + private static final Pattern plusOrPercent = Pattern.compile("[+%]"); public String unescape(String string) { - // Early exit if no escaped characters. - int firstEscape = string.indexOf('%'); - if ( firstEscape < 0) { - firstEscape = string.indexOf('+'); - if (firstEscape < 0) { - return string; - } - } + final Matcher matcher = plusOrPercent.matcher(string); + if (!matcher.find()) return string; + final int firstEscape = matcher.start(); int length = string.length(); @@ -855,8 +853,7 @@ public class UrlQuerySanitizer { char c = string.charAt(i); if (c == '+') { c = ' '; - } - else if ( c == '%' && i + 2 < length) { + } else if (c == '%' && i + 2 < length) { char c1 = string.charAt(i + 1); char c2 = string.charAt(i + 2); if (isHexDigit(c1) && isHexDigit(c2)) {