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