You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2023/03/02 11:34:46 UTC

[ant] 01/02: properly handle File.list() returning null

This is an automated email from the ASF dual-hosted git repository.

bodewig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ant.git

commit 38b7e94c17c304aa3b7e13fc7d9ccdb47e4a4f89
Author: Stefan Bodewig <bo...@apache.org>
AuthorDate: Thu Mar 2 12:31:08 2023 +0100

    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<File> 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) {