From 0dc9f6c157392905be80df7560d625d565bd2caa Mon Sep 17 00:00:00 2001 From: gregw Date: Wed, 28 Oct 2020 12:08:11 +0100 Subject: [PATCH] Fixes #5521 ResourceCollection list NPE NPE check. Note that I cannot work out how the none directory resource was added in the first place, so I was unable to reproduce the exact exception. --- .../jetty/util/resource/PathResource.java | 6 +----- .../jetty/util/resource/ResourceCollection.java | 4 +++- .../util/resource/ResourceCollectionTest.java | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java index e9931f548e43..e29e285c4b11 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/PathResource.java @@ -571,11 +571,7 @@ public String[] list() int size = entries.size(); return entries.toArray(new String[size]); } - catch (DirectoryIteratorException e) - { - LOG.debug(e); - } - catch (IOException e) + catch (DirectoryIteratorException | IOException e) { LOG.debug(e); } diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/ResourceCollection.java b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/ResourceCollection.java index 594ba49c3b3c..4b8b8818d179 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/ResourceCollection.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/ResourceCollection.java @@ -434,10 +434,12 @@ public long length() public String[] list() { assertResourcesSet(); - HashSet set = new HashSet<>(); for (Resource r : _resources) { + String[] list = r.list(); + if (list != null) + Collections.addAll(set, list); Collections.addAll(set, r.list()); } String[] result = set.toArray(new String[0]); diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceCollectionTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceCollectionTest.java index 51200037cce0..f307e57ca2c3 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceCollectionTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/ResourceCollectionTest.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.InputStreamReader; import java.nio.file.Path; +import java.util.Arrays; import org.eclipse.jetty.toolchain.test.FS; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; @@ -32,7 +33,9 @@ import org.junit.jupiter.api.extension.ExtendWith; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -174,6 +177,19 @@ private void assertThrowIllegalStateException(ResourceCollection coll) }); } + @Test + public void testList() throws Exception + { + ResourceCollection rc1 = new ResourceCollection( + Resource.newResource("src/test/resources/org/eclipse/jetty/util/resource/one/"), + Resource.newResource("src/test/resources/org/eclipse/jetty/util/resource/two/"), + Resource.newResource("src/test/resources/org/eclipse/jetty/util/resource/three/")); + + assertThat(Arrays.asList(rc1.list()), contains("1.txt", "2.txt", "3.txt", "dir/")); + assertThat(Arrays.asList(rc1.addPath("dir").list()), contains("1.txt", "2.txt", "3.txt")); + assertThat(rc1.addPath("unknown").list(), nullValue()); + } + @Test public void testMultipleSources1() throws Exception {