From 156943701a02394d18cb5083be4e0706b547f1c5 Mon Sep 17 00:00:00 2001 From: gregw Date: Wed, 28 Oct 2020 12:51:21 +0100 Subject: [PATCH] Fixes #5521 ResourceCollection list NPE Refactor addPath in a simpler way, plus with TODOs to fix issues in 10 when merged. --- .../util/resource/ResourceCollection.java | 61 ++++++++----------- .../util/resource/ResourceCollectionTest.java | 3 +- 2 files changed, 27 insertions(+), 37 deletions(-) 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 4b8b8818d179..e11c77136df9 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 @@ -256,51 +256,40 @@ public Resource addPath(String path) throws IOException return this; } - Resource resource = null; ArrayList resources = null; - int i = 0; - for (; i < _resources.length; i++) - { - resource = _resources[i].addPath(path); - if (resource.exists()) - { - if (resource.isDirectory()) - { - break; - } - return resource; - } - } - for (i++; i < _resources.length; i++) + // Attempt a simple (single) Resource lookup that exists + for (Resource res : _resources) { - Resource r = _resources[i].addPath(path); - if (r.exists() && r.isDirectory()) - { - if (resources == null) - { - resources = new ArrayList<>(); - } + Resource r = res.addPath(path); + if (!r.exists()) + continue; - if (resource != null) - { - resources.add(resource); - resource = null; - } + if (!r.isDirectory()) + return r; - resources.add(r); - } + if (resources == null) + resources = new ArrayList<>(); + resources.add(r); } - if (resource != null) - { - return resource; - } - if (resources != null) + if (resources == null) { - return new ResourceCollection(resources.toArray(new Resource[0])); + return null; /* TODO this is not allowed in 10. Instead do: + for (Resource res : _r1esources) + { + Resource r = res.addPath(path); + if (r.exists()) + return r; + } + return EmptyResource.INSTANCE; + */ } - return null; + + if (resources.size() == 1) + return resources.get(0); + + return new ResourceCollection(resources.toArray(new Resource[0])); } @Override 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 f307e57ca2c3..ef28688ef483 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 @@ -187,7 +187,8 @@ public void testList() throws Exception 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()); + assertThat(rc1.addPath("unknown"), nullValue()); + // TODO for jetty-10 assertThat(rc1.addPath("unknown").list(), nullValue()); } @Test