Skip to content

Commit 0d3e5db

Browse files
committed
Compare suffix patterns by length
Closes gh-23125
1 parent 157df86 commit 0d3e5db

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

spring-core/src/main/java/org/springframework/util/AntPathMatcher.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,7 +776,10 @@ else if (pattern2EqualsPath) {
776776
return 1;
777777
}
778778

779-
if (info1.isPrefixPattern() && info2.getDoubleWildcards() == 0) {
779+
if (info1.isPrefixPattern() && info2.isPrefixPattern()) {
780+
return info2.getLength() - info1.getLength();
781+
}
782+
else if (info1.isPrefixPattern() && info2.getDoubleWildcards() == 0) {
780783
return 1;
781784
}
782785
else if (info2.isPrefixPattern() && info1.getDoubleWildcards() == 0) {

spring-core/src/test/java/org/springframework/util/AntPathMatcherTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,9 @@ public void patternComparator() {
481481
assertThat(comparator.compare("/hotels/**", "/hotels/{hotel}/bookings/{booking}/cutomers/{customer}")).isEqualTo(1);
482482
assertThat(comparator.compare("/hotels/foo/bar/**", "/hotels/{hotel}")).isEqualTo(1);
483483
assertThat(comparator.compare("/hotels/{hotel}", "/hotels/foo/bar/**")).isEqualTo(-1);
484-
assertThat(comparator.compare("/hotels/**/bookings/**", "/hotels/**")).isEqualTo(2);
485-
assertThat(comparator.compare("/hotels/**", "/hotels/**/bookings/**")).isEqualTo(-2);
484+
485+
// gh-23125
486+
assertThat(comparator.compare("/hotels/*/bookings/**", "/hotels/**")).isEqualTo(-11);
486487

487488
// SPR-8683
488489
assertThat(comparator.compare("/**", "/hotels/{hotel}")).isEqualTo(1);

0 commit comments

Comments
 (0)