From 6c7a63bbb5629cc857ef4930f81a8a70f2db6155 Mon Sep 17 00:00:00 2001 From: gregw Date: Wed, 28 Oct 2020 15:12:59 +0100 Subject: [PATCH] Fixes #5521 ResourceCollection list NPE Minimized changes in 9. Will do bulk of changes in 10. --- .../util/resource/ResourceCollection.java | 61 +++++++++++-------- .../util/resource/ResourceCollectionTest.java | 2 +- 2 files changed, 37 insertions(+), 26 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 e11c77136df9..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 @@ -256,40 +256,51 @@ public Resource addPath(String path) throws IOException return this; } + Resource resource = null; ArrayList resources = null; - - // Attempt a simple (single) Resource lookup that exists - for (Resource res : _resources) + int i = 0; + for (; i < _resources.length; i++) { - Resource r = res.addPath(path); - if (!r.exists()) - continue; - - if (!r.isDirectory()) - return r; - - if (resources == null) - resources = new ArrayList<>(); - resources.add(r); + resource = _resources[i].addPath(path); + if (resource.exists()) + { + if (resource.isDirectory()) + { + break; + } + return resource; + } } - if (resources == null) + for (i++; i < _resources.length; i++) { - return null; /* TODO this is not allowed in 10. Instead do: - for (Resource res : _r1esources) + Resource r = _resources[i].addPath(path); + if (r.exists() && r.isDirectory()) { - Resource r = res.addPath(path); - if (r.exists()) - return r; + if (resources == null) + { + resources = new ArrayList<>(); + } + + if (resource != null) + { + resources.add(resource); + resource = null; + } + + resources.add(r); } - return EmptyResource.INSTANCE; - */ } - if (resources.size() == 1) - return resources.get(0); - - return new ResourceCollection(resources.toArray(new Resource[0])); + if (resource != null) + { + return resource; + } + if (resources != null) + { + return new ResourceCollection(resources.toArray(new Resource[0])); + } + return null; } @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 ef28688ef483..d3e212517c6f 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,7 @@ 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"), nullValue()); + assertThat(rc1.addPath("unknown").list(), nullValue()); // TODO for jetty-10 assertThat(rc1.addPath("unknown").list(), nullValue()); }