Skip to content

Commit

Permalink
Fix IndexOutOfBoundsException exception from parseUrl with empty spec
Browse files Browse the repository at this point in the history
Update jar `Handler` code so that the `parseUrl` method can accept an
empty `spec`. Prior to this commit, a `classLoader.getResource("")`
call would result in a `null` result. This breaks a number of things
including `ClassPathResource` and `PathMatchingResourcePatternResolver`.

Fixes gh-38524
  • Loading branch information
philwebb committed Nov 23, 2023
1 parent 7387c1c commit 0856e10
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ private String extractRelativePath(URL url, String spec, int start, int limit) {

private String extractContextPath(URL url, String spec, int start) {
String contextPath = url.getPath();
if (spec.charAt(start) == '/') {
if (spec.regionMatches(false, start, "/", 0, 1)) {
int indexOfContextPathSeparator = indexOfSeparator(contextPath);
if (indexOfContextPathSeparator == -1) {
throw new IllegalStateException("malformed context url:%s: no !/".formatted(url));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,15 @@ void parseUrlWhenAnchorOnly() throws MalformedURLException {
assertThat(url.toExternalForm()).isEqualTo("jar:file:example.jar!/entry.txt#runtime");
}

@Test // gh-38524
void parseUrlWhenSpecIsEmpty() throws MalformedURLException {
URL url = createJarUrl("nested:gh-38524.jar/!BOOT-INF/classes/!/");
String spec = "";
this.handler.parseURL(url, spec, 0, 0);
assertThat(url.toExternalForm()).isEqualTo("jar:nested:gh-38524.jar/!BOOT-INF/classes/!/");

}

@Test
void hashCodeGeneratesHashCode() throws MalformedURLException {
URL url = createJarUrl("file:example.jar!/entry.txt");
Expand Down

0 comments on commit 0856e10

Please sign in to comment.