From 2c60449836280b5d2702fb765231203d23a6d5ff Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 18 Mar 2014 14:13:51 +0000 Subject: [PATCH] Be defensive with File.listFiles() --- .../boot/loader/archive/ExplodedArchive.java | 6 ++- .../loader/archive/SpecialArchiveTests.java | 47 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/SpecialArchiveTests.java diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java index 28644b4c63..9d0a07fa20 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/archive/ExplodedArchive.java @@ -85,7 +85,11 @@ public class ExplodedArchive extends Archive { this.entries.put(entry.getName(), entry); } if (file.isDirectory()) { - for (File child : file.listFiles()) { + File[] files = file.listFiles(); + if (files == null) { + return; + } + for (File child : files) { if (!SKIPPED_NAMES.contains(child.getName())) { if (file.equals(this.root) || this.recursive) { buildEntries(child); diff --git a/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/SpecialArchiveTests.java b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/SpecialArchiveTests.java new file mode 100644 index 0000000000..37ff0c9267 --- /dev/null +++ b/spring-boot-tools/spring-boot-loader/src/test/java/org/springframework/boot/loader/archive/SpecialArchiveTests.java @@ -0,0 +1,47 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.loader.archive; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; + +import static org.hamcrest.Matchers.greaterThan; +import static org.junit.Assert.assertThat; + +/** + * @author Dave Syer + */ +public class SpecialArchiveTests { + + @Test + public void getEntriesForRoot() throws Exception { + ExplodedArchive archive = new ExplodedArchive(new File("/"), false); + Map entries = getEntriesMap(archive); + assertThat(entries.size(), greaterThan(1)); + } + + private Map getEntriesMap(Archive archive) { + Map entries = new HashMap(); + for (Archive.Entry entry : archive.getEntries()) { + entries.put(entry.getName().toString(), entry); + } + return entries; + } +}