Skip to content

Commit 94d36ef

Browse files
committed
Avoid NullPointerException in RegexFileFilter.RegexFileFilter(Pattern).
Avoid NullPointerException in RegexFileFilter.accept(Path, BasicFileAttributes)
1 parent 512c183 commit 94d36ef

3 files changed

Lines changed: 9 additions & 4 deletions

File tree

src/changes/changes.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ The <action> type attribute can be add,update,fix,remove.
5353
<action dev="ggregory" type="fix" due-to="Stephan Markwalder, Gary Gregory">Add test for FileChannels.contentEquals() #509.</action>
5454
<action dev="ggregory" type="fix" due-to="Gary Gregory">Fix FileChannels.contentEquals().</action>
5555
<action dev="ggregory" type="fix" due-to="Gary Gregory">Fix some Javadoc issues in LineIterator and IOUtils.</action>
56+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in RegexFileFilter.RegexFileFilter(Pattern).</action>
57+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in RegexFileFilter.accept(Path, BasicFileAttributes).</action>
5658
<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>
5759
<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>
5860
<!-- UPDATE -->

src/main/java/org/apache/commons/io/filefilter/RegexFileFilter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private static int toFlags(final IOCase ioCase) {
111111
*/
112112
@SuppressWarnings("unchecked")
113113
public RegexFileFilter(final Pattern pattern) {
114-
this(pattern, (Function<Path, String> & Serializable) p -> p.getFileName().toString());
114+
this(pattern, (Function<Path, String> & Serializable) p -> Objects.toString(p.getFileName(), null));
115115
}
116116

117117
/**
@@ -125,7 +125,7 @@ public RegexFileFilter(final Pattern pattern) {
125125
public RegexFileFilter(final Pattern pattern, final Function<Path, String> pathToString) {
126126
Objects.requireNonNull(pattern, "pattern");
127127
this.pattern = pattern;
128-
this.pathToString = pathToString;
128+
this.pathToString = pathToString != null ? pathToString : Objects::toString;
129129
}
130130

131131
/**
@@ -181,7 +181,8 @@ public boolean accept(final File dir, final String name) {
181181
*/
182182
@Override
183183
public FileVisitResult accept(final Path path, final BasicFileAttributes attributes) {
184-
return toFileVisitResult(pattern.matcher(pathToString.apply(path)).matches());
184+
final String result = pathToString.apply(path);
185+
return toFileVisitResult(result != null && pattern.matcher(result).matches());
185186
}
186187

187188
/**

src/test/java/org/apache/commons/io/filefilter/RegexFileFilterTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,9 @@ public void testRegexFileNameOnly() throws IOException {
166166
final String patternStr = "Foo.*";
167167
assertFiltering(assertSerializable(new RegexFileFilter(patternStr)), path, true);
168168
assertFiltering(assertSerializable(new RegexFileFilter(Pattern.compile(patternStr), (Function<Path, String> & Serializable) Path::toString)), path,
169-
false);
169+
false);
170+
assertFiltering(new RegexFileFilter(Pattern.compile(patternStr), (Function<Path, String> & Serializable) null), path, false);
171+
assertFiltering(new RegexFileFilter(Pattern.compile(patternStr), (Function<Path, String> & Serializable) p -> null), path, false);
170172
}
171173

172174
}

0 commit comments

Comments
 (0)