Fix issue in UriTemplate parsing
The recent commit 971f04 replaced the use of a NAMES_PATTERN regex in
favor of direct parsing in order to deal with nested curly braces.
The change also incorrectly replicated this logic which removes a
trailing slash after Pattern quoting (and not before):
cca037a74d/spring-web/src/main/java/org/springframework/web/util/UriTemplate.java (L207-L210)
After some more investigation there doesn't appear to be any scenario
where the quoted pattern would end with a trailing slash. It should
always end with \E (end of quote) or a ")" (end of group). Nor are
there any failing tests so this commit removes the logic altogether.
Issue: SPR-13705
This commit is contained in:
@@ -197,6 +197,7 @@ public class UriTemplate implements Serializable {
|
||||
if (c == '{') {
|
||||
level++;
|
||||
if (level == 1) {
|
||||
// start of URI variable
|
||||
pattern.append(quote(builder));
|
||||
builder = new StringBuilder();
|
||||
continue;
|
||||
@@ -205,6 +206,7 @@ public class UriTemplate implements Serializable {
|
||||
else if (c == '}') {
|
||||
level--;
|
||||
if (level == 0) {
|
||||
// end of URI variable
|
||||
String variable = builder.toString();
|
||||
int idx = variable.indexOf(':');
|
||||
if (idx == -1) {
|
||||
@@ -227,14 +229,11 @@ public class UriTemplate implements Serializable {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (i + 1 == uriTemplate.length()) {
|
||||
if (c != '/') {
|
||||
builder.append(c);
|
||||
}
|
||||
pattern.append(quote(builder));
|
||||
}
|
||||
builder.append(c);
|
||||
}
|
||||
if (builder.length() > 0) {
|
||||
pattern.append(quote(builder));
|
||||
}
|
||||
return new TemplateInfo(variableNames, Pattern.compile(pattern.toString()));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user