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