properly handle File.list() returning null
diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java
index 82d84e1..1917c83 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 @@
                     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 48eb647..34bed44 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 @@
 
         // 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 @@
         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 @@
                             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 ef2b1a7..78c556b 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 @@
                 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 480c4ca..e9cdb10 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 @@
      */
     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 9193627..1f03633 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 @@
                 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 a47b256..9dfdd50 100644
--- a/src/main/org/apache/tools/tar/TarEntry.java
+++ b/src/main/org/apache/tools/tar/TarEntry.java
@@ -824,6 +824,9 @@
         }
 
         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) {