You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/11/01 03:42:50 UTC

[commons-io] branch master updated: Fix possible NPEs in some file filters when paths have no parent or no elements.

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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ac7bef  Fix possible NPEs in some file filters when paths have no parent or no elements.
1ac7bef is described below

commit 1ac7befa44528dab09fb4864be9d7a95db8a25b6
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Oct 31 23:42:44 2020 -0400

    Fix possible NPEs in some file filters when paths have no parent or no
    elements.
---
 src/main/java/org/apache/commons/io/IOCase.java    | 19 +++++++-------
 .../commons/io/filefilter/NameFileFilter.java      |  3 ++-
 .../commons/io/filefilter/PrefixFileFilter.java    |  5 ++--
 .../commons/io/filefilter/SuffixFileFilter.java    |  3 ++-
 .../commons/io/filefilter/WildcardFileFilter.java  |  3 ++-
 .../commons/io/filefilter/WildcardFilter.java      |  3 ++-
 .../java/org/apache/commons/io/IOCaseTestCase.java | 30 +++++-----------------
 7 files changed, 27 insertions(+), 39 deletions(-)

diff --git a/src/main/java/org/apache/commons/io/IOCase.java b/src/main/java/org/apache/commons/io/IOCase.java
index f3f8f7e..34cf215 100644
--- a/src/main/java/org/apache/commons/io/IOCase.java
+++ b/src/main/java/org/apache/commons/io/IOCase.java
@@ -171,13 +171,12 @@ public enum IOCase {
      * into account.
      * </p>
      *
-     * @param str  the string to check, not null
-     * @param start  the start to compare against, not null
-     * @return true if equal using the case rules
-     * @throws NullPointerException if either string is null
+     * @param str  the string to check
+     * @param start  the start to compare against
+     * @return true if equal using the case rules, false if either input is null
      */
     public boolean checkStartsWith(final String str, final String start) {
-        return str.regionMatches(!sensitive, 0, start, 0, start.length());
+        return str != null && start != null && str.regionMatches(!sensitive, 0, start, 0, start.length());
     }
 
     /**
@@ -187,12 +186,14 @@ public enum IOCase {
      * into account.
      * </p>
      *
-     * @param str  the string to check, not null
-     * @param end  the end to compare against, not null
-     * @return true if equal using the case rules
-     * @throws NullPointerException if either string is null
+     * @param str  the string to check
+     * @param end  the end to compare against
+     * @return true if equal using the case rules, false if either input is null
      */
     public boolean checkEndsWith(final String str, final String end) {
+        if (str == null || end == null) {
+            return false;
+        }
         final int endLen = end.length();
         return str.regionMatches(!sensitive, str.length() - endLen, end, 0, endLen);
     }
diff --git a/src/main/java/org/apache/commons/io/filefilter/NameFileFilter.java b/src/main/java/org/apache/commons/io/filefilter/NameFileFilter.java
index f9879f6..b89703f 100644
--- a/src/main/java/org/apache/commons/io/filefilter/NameFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/NameFileFilter.java
@@ -22,6 +22,7 @@ import java.nio.file.FileVisitResult;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.commons.io.IOCase;
 
@@ -187,7 +188,7 @@ public class NameFileFilter extends AbstractFileFilter implements Serializable {
      */
     @Override
     public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
-        return toFileVisitResult(acceptBaseName(file.getFileName().toString()), file);
+        return toFileVisitResult(acceptBaseName(Objects.toString(file.getFileName(), null)), file);
     }
 
     private boolean acceptBaseName(final String baseName) {
diff --git a/src/main/java/org/apache/commons/io/filefilter/PrefixFileFilter.java b/src/main/java/org/apache/commons/io/filefilter/PrefixFileFilter.java
index c71fb20..164915f 100644
--- a/src/main/java/org/apache/commons/io/filefilter/PrefixFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/PrefixFileFilter.java
@@ -168,7 +168,7 @@ public class PrefixFileFilter extends AbstractFileFilter implements Serializable
      */
     @Override
     public boolean accept(final File file) {
-        return accept(file.getName());
+        return accept(file == null ? null : file.getName());
     }
 
     /**
@@ -192,7 +192,8 @@ public class PrefixFileFilter extends AbstractFileFilter implements Serializable
      */
     @Override
     public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
-        return toFileVisitResult(accept(file.getFileName().toFile()), file);
+        final Path fileName = file.getFileName();
+        return toFileVisitResult(accept(fileName == null ? null : fileName.toFile()), file);
     }
 
     private boolean accept(final String name) {
diff --git a/src/main/java/org/apache/commons/io/filefilter/SuffixFileFilter.java b/src/main/java/org/apache/commons/io/filefilter/SuffixFileFilter.java
index d0c480b..39ffbd1 100644
--- a/src/main/java/org/apache/commons/io/filefilter/SuffixFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/SuffixFileFilter.java
@@ -22,6 +22,7 @@ import java.nio.file.FileVisitResult;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.commons.io.IOCase;
 
@@ -193,7 +194,7 @@ public class SuffixFileFilter extends AbstractFileFilter implements Serializable
      */
     @Override
     public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
-        return toFileVisitResult(accept(file.getFileName().toString()), file);
+        return toFileVisitResult(accept(Objects.toString(file.getFileName(), null)), file);
     }
 
     private boolean accept(final String name) {
diff --git a/src/main/java/org/apache/commons/io/filefilter/WildcardFileFilter.java b/src/main/java/org/apache/commons/io/filefilter/WildcardFileFilter.java
index 4590062..daa80de 100644
--- a/src/main/java/org/apache/commons/io/filefilter/WildcardFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/WildcardFileFilter.java
@@ -22,6 +22,7 @@ import java.nio.file.FileVisitResult;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOCase;
@@ -195,7 +196,7 @@ public class WildcardFileFilter extends AbstractFileFilter implements Serializab
      */
     @Override
     public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
-        return toFileVisitResult(accept(file.getFileName().toString()), file);
+        return toFileVisitResult(accept(Objects.toString(file.getFileName(), null)), file);
     }
 
     private boolean accept(final String name) {
diff --git a/src/main/java/org/apache/commons/io/filefilter/WildcardFilter.java b/src/main/java/org/apache/commons/io/filefilter/WildcardFilter.java
index 07de795..abd8f42 100644
--- a/src/main/java/org/apache/commons/io/filefilter/WildcardFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/WildcardFilter.java
@@ -23,6 +23,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.commons.io.FilenameUtils;
 
@@ -158,7 +159,7 @@ public class WildcardFilter extends AbstractFileFilter implements Serializable {
         }
 
         for (final String wildcard : wildcards) {
-            if (FilenameUtils.wildcardMatch(file.getFileName().toString(), wildcard)) {
+            if (FilenameUtils.wildcardMatch(Objects.toString(file.getFileName(), null), wildcard)) {
                 return FileVisitResult.CONTINUE;
             }
         }
diff --git a/src/test/java/org/apache/commons/io/IOCaseTestCase.java b/src/test/java/org/apache/commons/io/IOCaseTestCase.java
index 1939d90..58781a4 100644
--- a/src/test/java/org/apache/commons/io/IOCaseTestCase.java
+++ b/src/test/java/org/apache/commons/io/IOCaseTestCase.java
@@ -173,18 +173,9 @@ public class IOCaseTestCase {
         assertFalse(IOCase.SENSITIVE.checkStartsWith("", "ABC"));
         assertTrue(IOCase.SENSITIVE.checkStartsWith("", ""));
 
-        try {
-            IOCase.SENSITIVE.checkStartsWith("ABC", null);
-            fail();
-        } catch (final NullPointerException ignore) {}
-        try {
-            IOCase.SENSITIVE.checkStartsWith(null, "ABC");
-            fail();
-        } catch (final NullPointerException ignore) {}
-        try {
-            IOCase.SENSITIVE.checkStartsWith(null, null);
-            fail();
-        } catch (final NullPointerException ignore) {}
+        assertFalse(IOCase.SENSITIVE.checkStartsWith("ABC", null));
+        assertFalse(IOCase.SENSITIVE.checkStartsWith(null, "ABC"));
+        assertFalse(IOCase.SENSITIVE.checkStartsWith(null, null));
     }
 
     @Test
@@ -212,18 +203,9 @@ public class IOCaseTestCase {
         assertFalse(IOCase.SENSITIVE.checkEndsWith("", "ABC"));
         assertTrue(IOCase.SENSITIVE.checkEndsWith("", ""));
 
-        try {
-            IOCase.SENSITIVE.checkEndsWith("ABC", null);
-            fail();
-        } catch (final NullPointerException ignore) {}
-        try {
-            IOCase.SENSITIVE.checkEndsWith(null, "ABC");
-            fail();
-        } catch (final NullPointerException ignore) {}
-        try {
-            IOCase.SENSITIVE.checkEndsWith(null, null);
-            fail();
-        } catch (final NullPointerException ignore) {}
+        assertFalse(IOCase.SENSITIVE.checkEndsWith("ABC", null));
+        assertFalse(IOCase.SENSITIVE.checkEndsWith(null, "ABC"));
+        assertFalse(IOCase.SENSITIVE.checkEndsWith(null, null));
     }
 
     @Test