Compare suffix patterns by length

Closes gh-23125
This commit is contained in:
Rossen Stoyanchev 2019-07-05 07:36:35 +01:00
parent 157df861f9
commit 0d3e5db3ff
2 changed files with 7 additions and 3 deletions

View File

@ -776,7 +776,10 @@ public class AntPathMatcher implements PathMatcher {
return 1;
}
if (info1.isPrefixPattern() && info2.getDoubleWildcards() == 0) {
if (info1.isPrefixPattern() && info2.isPrefixPattern()) {
return info2.getLength() - info1.getLength();
}
else if (info1.isPrefixPattern() && info2.getDoubleWildcards() == 0) {
return 1;
}
else if (info2.isPrefixPattern() && info1.getDoubleWildcards() == 0) {

View File

@ -481,8 +481,9 @@ public class AntPathMatcherTests {
assertThat(comparator.compare("/hotels/**", "/hotels/{hotel}/bookings/{booking}/cutomers/{customer}")).isEqualTo(1);
assertThat(comparator.compare("/hotels/foo/bar/**", "/hotels/{hotel}")).isEqualTo(1);
assertThat(comparator.compare("/hotels/{hotel}", "/hotels/foo/bar/**")).isEqualTo(-1);
assertThat(comparator.compare("/hotels/**/bookings/**", "/hotels/**")).isEqualTo(2);
assertThat(comparator.compare("/hotels/**", "/hotels/**/bookings/**")).isEqualTo(-2);
// gh-23125
assertThat(comparator.compare("/hotels/*/bookings/**", "/hotels/**")).isEqualTo(-11);
// SPR-8683
assertThat(comparator.compare("/**", "/hotels/{hotel}")).isEqualTo(1);