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 94d36ef6 Avoid NullPointerException in 
RegexFileFilter.RegexFileFilter(Pattern).
94d36ef6 is described below

commit 94d36ef673bdd58b53da0f0283b22f1852adc7ca
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Thu Nov 23 11:16:41 2023 -0500

    Avoid NullPointerException in RegexFileFilter.RegexFileFilter(Pattern).
    
    Avoid NullPointerException in RegexFileFilter.accept(Path,
    BasicFileAttributes)
---
 src/changes/changes.xml                                            | 2 ++
 .../java/org/apache/commons/io/filefilter/RegexFileFilter.java     | 7 ++++---
 .../java/org/apache/commons/io/filefilter/RegexFileFilterTest.java | 4 +++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8ce88278..3fe59b8f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -53,6 +53,8 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="fix" due-to="Stephan Markwalder, Gary 
Gregory">Add test for FileChannels.contentEquals() #509.</action>
       <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix 
FileChannels.contentEquals().</action>
       <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix some Javadoc 
issues in LineIterator and IOUtils.</action>
+      <action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid 
NullPointerException in RegexFileFilter.RegexFileFilter(Pattern).</action>
+      <action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid 
NullPointerException in RegexFileFilter.accept(Path, 
BasicFileAttributes).</action>
       <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs 
error: Class org.apache.commons.io.filefilter.DelegateFileFilter defines 
non-transient non-serializable instance field fileFilter 
[org.apache.commons.io.filefilter.DelegateFileFilter] In 
DelegateFileFilter.java SE_BAD_FIELD.</action>
       <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix SpotBugs 
error: Class org.apache.commons.io.filefilter.DelegateFileFilter defines 
non-transient non-serializable instance field fileNameFilter 
[org.apache.commons.io.filefilter.DelegateFileFilter] In 
DelegateFileFilter.java SE_BAD_FIELD.</action>
       <!-- UPDATE -->
diff --git 
a/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java 
b/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java
index 9bcdd806..7c3067c4 100644
--- a/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java
+++ b/src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java
@@ -111,7 +111,7 @@ public class RegexFileFilter extends AbstractFileFilter 
implements Serializable
      */
     @SuppressWarnings("unchecked")
     public RegexFileFilter(final Pattern pattern) {
-        this(pattern, (Function<Path, String> & Serializable) p -> 
p.getFileName().toString());
+        this(pattern, (Function<Path, String> & Serializable) p -> 
Objects.toString(p.getFileName(), null));
     }
 
     /**
@@ -125,7 +125,7 @@ public class RegexFileFilter extends AbstractFileFilter 
implements Serializable
     public RegexFileFilter(final Pattern pattern, final Function<Path, String> 
pathToString) {
         Objects.requireNonNull(pattern, "pattern");
         this.pattern = pattern;
-        this.pathToString = pathToString;
+        this.pathToString = pathToString != null ? pathToString : 
Objects::toString;
     }
 
     /**
@@ -181,7 +181,8 @@ public class RegexFileFilter extends AbstractFileFilter 
implements Serializable
      */
     @Override
     public FileVisitResult accept(final Path path, final BasicFileAttributes 
attributes) {
-        return 
toFileVisitResult(pattern.matcher(pathToString.apply(path)).matches());
+        final String result = pathToString.apply(path);
+        return toFileVisitResult(result != null && 
pattern.matcher(result).matches());
     }
 
     /**
diff --git 
a/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java 
b/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java
index c0571299..bfdd0377 100644
--- a/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java
+++ b/src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java
@@ -166,7 +166,9 @@ public class RegexFileFilterTest {
         final String patternStr = "Foo.*";
         assertFiltering(assertSerializable(new RegexFileFilter(patternStr)), 
path, true);
         assertFiltering(assertSerializable(new 
RegexFileFilter(Pattern.compile(patternStr), (Function<Path, String> & 
Serializable) Path::toString)), path,
-            false);
+                false);
+        assertFiltering(new RegexFileFilter(Pattern.compile(patternStr), 
(Function<Path, String> & Serializable) null), path, false);
+        assertFiltering(new RegexFileFilter(Pattern.compile(patternStr), 
(Function<Path, String> & Serializable) p -> null), path, false);
     }
 
 }

Reply via email to