diff --git a/src/main/java/org/codehaus/plexus/util/FileUtils.java b/src/main/java/org/codehaus/plexus/util/FileUtils.java index b411272a..f14771c8 100644 --- a/src/main/java/org/codehaus/plexus/util/FileUtils.java +++ b/src/main/java/org/codehaus/plexus/util/FileUtils.java @@ -1270,6 +1270,9 @@ private static void cleanDirectoryOnExit(final File directory) throws IOExceptio IOException exception = null; final File[] files = directory.listFiles(); + if (files == null) { + throw new IOException("Could not list directory " + directory.getAbsolutePath()); + } for (final File file : files) { try { forceDeleteOnExit(file); @@ -1762,6 +1765,9 @@ private static void copyDirectoryStructure( } File[] files = sourceDirectory.listFiles(); + if (files == null) { + throw new IOException("Could not list directory " + sourceDirectory.getAbsolutePath()); + } String sourcePath = sourceDirectory.getAbsolutePath(); diff --git a/src/test/java/org/codehaus/plexus/util/FileUtilsTest.java b/src/test/java/org/codehaus/plexus/util/FileUtilsTest.java index 5bdaf97c..b3ed474a 100644 --- a/src/test/java/org/codehaus/plexus/util/FileUtilsTest.java +++ b/src/test/java/org/codehaus/plexus/util/FileUtilsTest.java @@ -36,6 +36,7 @@ import org.junit.jupiter.api.condition.OS; import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * This is used to test FileUtils for correctness. @@ -679,6 +680,21 @@ void removeExtensionWithPaths() { } } + @Test + void copyDirectoryStructureFailsWhenSourceCannotBeListed() throws Exception { + File from = new File(getTestDirectory(), "unlistable"); + from.mkdirs(); + File to = new File(getTestDirectory(), "unlistable-copy"); + assumeTrue(from.setReadable(false) && from.setExecutable(false) && from.listFiles() == null); + try { + IOException e = assertThrows(IOException.class, () -> FileUtils.copyDirectoryStructure(from, to)); + assertTrue(e.getMessage().contains(from.getAbsolutePath())); + } finally { + from.setExecutable(true); + from.setReadable(true); + } + } + @Test void copyDirectoryStructureWithAEmptyDirectoryStructure() throws Exception { File from = new File(getTestDirectory(), "from");