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); } }