From 38b7e94c17c304aa3b7e13fc7d9ccdb47e4a4f89 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Thu, 2 Mar 2023 12:31:08 +0100 Subject: properly handle File.list() returning null --- src/main/org/apache/tools/ant/taskdefs/Delete.java | 2 +- src/main/org/apache/tools/ant/taskdefs/Sync.java | 10 +++++++--- src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java | 3 +++ .../org/apache/tools/ant/taskdefs/optional/jlink/jlink.java | 4 ++++ .../apache/tools/ant/taskdefs/optional/sound/SoundTask.java | 5 ++++- src/main/org/apache/tools/tar/TarEntry.java | 3 +++ 6 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java index 82d84e10f..1917c8391 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Delete.java +++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java @@ -747,7 +747,7 @@ public class Delete extends MatchingTask { if (!f.exists()) { continue; } - if (!f.isDirectory() || f.list().length == 0) { + if (!f.isDirectory() || f.list() == null || f.list().length == 0) { log("Deleting " + f, verbosity); if (!delete(f) && failonerror) { handle("Unable to delete " diff --git a/src/main/org/apache/tools/ant/taskdefs/Sync.java b/src/main/org/apache/tools/ant/taskdefs/Sync.java index 48eb6473d..34bed4400 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Sync.java +++ b/src/main/org/apache/tools/ant/taskdefs/Sync.java @@ -110,7 +110,9 @@ public class Sync extends Task { // If the destination directory didn't already exist, // or was empty, then no previous file removal is necessary! - boolean noRemovalNecessary = !toDir.exists() || toDir.list().length < 1; + String[] toDirChildren = toDir.list(); + boolean noRemovalNecessary = !toDir.exists() || toDirChildren == null + || toDirChildren.length < 1; // Copy all the necessary out-of-date files log("PASS#1: Copying files to " + toDir, Project.MSG_DEBUG); @@ -290,6 +292,7 @@ public class Sync extends Task { int removedCount = 0; if (dir.isDirectory()) { File[] children = dir.listFiles(); + if (children != null) { for (File file : children) { // Test here again to avoid method call for non-directories! if (file.isDirectory()) { @@ -297,12 +300,13 @@ public class Sync extends Task { preservedEmptyDirectories); } } - if (children.length > 0) { + } + if (children == null || children.length > 0) { // This directory may have become empty... // We need to re-query its children list! children = dir.listFiles(); } - if (children.length < 1 && removeIfEmpty + if ((children == null || children.length < 1) && removeIfEmpty && !preservedEmptyDirectories.contains(dir)) { log("Removing empty directory: " + dir, Project.MSG_DEBUG); dir.delete(); diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java index ef2b1a727..78c556bb0 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java +++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java @@ -428,10 +428,13 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { if (performDirectoryScan) { // Process all the directories marked for styling for (String dir : scanner.getIncludedDirectories()) { + String[] elements = new File(baseDir, dir).list(); + if (elements != null) { for (String element : new File(baseDir, dir).list()) { process(baseDir, dir + File.separator + element, destDir, styleResource); } + } } } } else if (resources.isEmpty()) { diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java b/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java index 480c4cab0..e9cdb103a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java @@ -255,6 +255,10 @@ public class jlink { */ private void addDirContents(ZipOutputStream output, File dir, String prefix, boolean compress) throws IOException { + String[] names = dir.list(); + if (names == null || names.length == 0) { + return; + } for (String name : dir.list()) { File file = new File(dir, name); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java index 9193627ef..1f0363318 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java @@ -148,12 +148,15 @@ public class SoundTask extends Task { if (source.isDirectory()) { // get the list of files in the dir Vector files = new Vector<>(); - for (String file : source.list()) { + String[] fileNames = source.list(); + if (fileNames != null) { + for (String file : fileNames) { File f = new File(source, file); if (f.isFile()) { files.addElement(f); } } + } if (files.size() < 1) { throw new BuildException("No files found in directory " + source); } diff --git a/src/main/org/apache/tools/tar/TarEntry.java b/src/main/org/apache/tools/tar/TarEntry.java index a47b25689..9dfdd50a3 100644 --- a/src/main/org/apache/tools/tar/TarEntry.java +++ b/src/main/org/apache/tools/tar/TarEntry.java @@ -824,6 +824,9 @@ public class TarEntry implements TarConstants { } String[] list = file.list(); + if (list == null) { + return new TarEntry[0]; + } TarEntry[] result = new TarEntry[list.length]; for (int i = 0; i < list.length; ++i) { -- cgit v1.2.1