Merge "Fix a bug where + before % is ignored"

This commit is contained in:
Treehugger Robot
2019-04-22 08:09:32 +00:00
committed by Gerrit Code Review

View File

@@ -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)) {