Browse Source

Fix string handling to avoid exceptions when doing path extraction

Issue: SPR-15259
pull/1329/head
Andy Clement 8 years ago
parent
commit
f98ea11e5e
  1. 4
      spring-web/src/main/java/org/springframework/web/util/patterns/PathPattern.java
  2. 8
      spring-web/src/test/java/org/springframework/web/util/patterns/PathPatternMatcherTests.java

4
spring-web/src/main/java/org/springframework/web/util/patterns/PathPattern.java

@ -232,7 +232,7 @@ public class PathPattern implements Comparable<PathPattern> {
while (separatorCount > 0 && pos < len) { while (separatorCount > 0 && pos < len) {
if (path.charAt(pos++) == separator) { if (path.charAt(pos++) == separator) {
// Skip any adjacent separators // Skip any adjacent separators
while (path.charAt(pos) == separator) { while (pos < len && path.charAt(pos) == separator) {
pos++; pos++;
} }
separatorCount--; separatorCount--;
@ -240,7 +240,7 @@ public class PathPattern implements Comparable<PathPattern> {
} }
int end = len; int end = len;
// Trim trailing separators // Trim trailing separators
while (path.charAt(end - 1) == separator) { while (end > 0 && path.charAt(end - 1) == separator) {
end--; end--;
} }
// Check if multiple separators embedded in the resulting path, if so trim them out. // Check if multiple separators embedded in the resulting path, if so trim them out.

8
spring-web/src/test/java/org/springframework/web/util/patterns/PathPatternMatcherTests.java

@ -467,6 +467,14 @@ public class PathPatternMatcherTests {
} }
} }
@Test
public void extractPathWithinPattern_spr15259() {
checkExtractPathWithinPattern("/**","/","");
checkExtractPathWithinPattern("/**","//","");
checkExtractPathWithinPattern("/**","","");
checkExtractPathWithinPattern("/**","/foobar","foobar");
}
@Test @Test
public void extractPathWithinPattern() throws Exception { public void extractPathWithinPattern() throws Exception {
checkExtractPathWithinPattern("/welcome*/", "/welcome/", "welcome"); checkExtractPathWithinPattern("/welcome*/", "/welcome/", "welcome");

Loading…
Cancel
Save