Skip to content

Commit 87ef955

Browse files
committed
Avoid NullPointerException in file filters
1 parent 7d44bb7 commit 87ef955

14 files changed

Lines changed: 69 additions & 23 deletions

src/changes/changes.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,21 @@ The <action> type attribute can be add,update,fix,remove.
5757
<action dev="ggregory" type="fix" issue="IO-781" due-to="Elliotte Rusty Harold">Make CharSequenceInputStream.available() more correct in the face of multibyte encodings #525.</action>
5858
<action dev="ggregory" type="fix" issue="IO-781" due-to="Elliotte Rusty Harold">Remove unreachable code in AbstractIOFileFilterTest #526.</action>
5959
<action dev="ggregory" type="fix" issue="IO-808" due-to="Elliotte Rusty Harold">Rationalize and unify checking for existence of files and directories #529.</action>
60+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in IOCase.checkEquals(String, String) on null input.</action>
61+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in CanExecuteFileFilter.accept(File) on null input.</action>
62+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in CanExecuteFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
63+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in CanReadFileFilter.accept(File) on null input.</action>
64+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in CanReadFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
65+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in CanWriteFileFilter.accept(File) on null input.</action>
66+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in CanWriteFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
67+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in DirectoryFileFilter.accept(File) on null input.</action>
68+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in DirectoryFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
69+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in EmptyFileFilter.accept(File) on null input.</action>
70+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in EmptyFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
71+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in FileFileFilter.accept(File) on null input.</action>
72+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in FileFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
73+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in HiddenFileFilter.accept(File) on null input.</action>
74+
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in HiddenFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
6075
<!-- Add -->
6176
<action dev="ggregory" type="fix" due-to="Gary Gregory">Add and use PathUtils.getFileName(Path, Function&lt;Path, R&gt;).</action>
6277
<action dev="ggregory" type="fix" due-to="Gary Gregory">Add and use PathUtils.getFileNameString().</action>

src/main/java/org/apache/commons/io/IOCase.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,9 @@ public boolean checkEndsWith(final String str, final String end) {
167167
* @param str1 the first string to compare, not null
168168
* @param str2 the second string to compare, not null
169169
* @return true if equal using the case rules
170-
* @throws NullPointerException if either string is null
171170
*/
172171
public boolean checkEquals(final String str1, final String str2) {
173-
Objects.requireNonNull(str1, "str1");
174-
Objects.requireNonNull(str2, "str2");
175-
return sensitive ? str1.equals(str2) : str1.equalsIgnoreCase(str2);
172+
return str1 == str2 || str1 != null && (sensitive ? str1.equals(str2) : str1.equalsIgnoreCase(str2));
176173
}
177174

178175
/**

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ protected CanExecuteFileFilter() {
8282
*/
8383
@Override
8484
public boolean accept(final File file) {
85-
return file.canExecute();
85+
return file != null && file.canExecute();
8686
}
8787

8888
/**
@@ -94,7 +94,7 @@ public boolean accept(final File file) {
9494
*/
9595
@Override
9696
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
97-
return toFileVisitResult(Files.isExecutable(file));
97+
return toFileVisitResult(file != null && Files.isExecutable(file));
9898
}
9999

100100
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ protected CanReadFileFilter() {
9292
*/
9393
@Override
9494
public boolean accept(final File file) {
95-
return file.canRead();
95+
return file != null && file.canRead();
9696
}
9797

9898
/**
@@ -104,7 +104,7 @@ public boolean accept(final File file) {
104104
*/
105105
@Override
106106
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
107-
return toFileVisitResult(Files.isReadable(file));
107+
return toFileVisitResult(file != null && Files.isReadable(file));
108108
}
109109

110110
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ protected CanWriteFileFilter() {
8080
*/
8181
@Override
8282
public boolean accept(final File file) {
83-
return file.canWrite();
83+
return file != null && file.canWrite();
8484
}
8585

8686
/**
@@ -92,7 +92,7 @@ public boolean accept(final File file) {
9292
*/
9393
@Override
9494
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
95-
return toFileVisitResult(Files.isWritable(file));
95+
return toFileVisitResult(file != null && Files.isWritable(file));
9696
}
9797

9898
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ protected DirectoryFileFilter() {
9797
*/
9898
@Override
9999
public boolean accept(final File file) {
100-
return file.isDirectory();
100+
return file != null && file.isDirectory();
101101
}
102102

103103
/**
@@ -109,7 +109,7 @@ public boolean accept(final File file) {
109109
*/
110110
@Override
111111
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
112-
return toFileVisitResult(Files.isDirectory(file));
112+
return toFileVisitResult(file != null && Files.isDirectory(file));
113113
}
114114

115115
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ protected EmptyFileFilter() {
104104
*/
105105
@Override
106106
public boolean accept(final File file) {
107+
if (file == null) {
108+
return true;
109+
}
107110
if (file.isDirectory()) {
108111
final File[] files = file.listFiles();
109112
return IOUtils.length(files) == 0;
@@ -120,6 +123,9 @@ public boolean accept(final File file) {
120123
*/
121124
@Override
122125
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
126+
if (file == null) {
127+
return toFileVisitResult(true);
128+
}
123129
return get(() -> {
124130
if (Files.isDirectory(file)) {
125131
try (Stream<Path> stream = Files.list(file)) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ protected FileFileFilter() {
9797
*/
9898
@Override
9999
public boolean accept(final File file) {
100-
return file.isFile();
100+
return file != null && file.isFile();
101101
}
102102

103103
/**
@@ -109,7 +109,7 @@ public boolean accept(final File file) {
109109
*/
110110
@Override
111111
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
112-
return toFileVisitResult(Files.isRegularFile(file));
112+
return toFileVisitResult(file != null && Files.isRegularFile(file));
113113
}
114114

115115
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ protected HiddenFileFilter() {
101101
*/
102102
@Override
103103
public boolean accept(final File file) {
104-
return file.isHidden();
104+
return file == null || file.isHidden();
105105
}
106106

107107
/**
@@ -114,7 +114,7 @@ public boolean accept(final File file) {
114114
*/
115115
@Override
116116
public FileVisitResult accept(final Path file, final BasicFileAttributes attributes) {
117-
return get(() -> toFileVisitResult(Files.isHidden(file)));
117+
return get(() -> toFileVisitResult(file == null || Files.isHidden(file)));
118118
}
119119

120120
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public NameFileFilter(final String[] names, final IOCase ioCase) {
163163
*/
164164
@Override
165165
public boolean accept(final File file) {
166-
return acceptBaseName(file.getName());
166+
return file != null && acceptBaseName(file.getName());
167167
}
168168

169169
/**

0 commit comments

Comments
 (0)