Avoid NullPointerException in IOCase.checkIndexOf(String, int, String)
on null input
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 56c4bf7..7948185 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,6 +72,7 @@
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in FileFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in HiddenFileFilter.accept(File) on null input.</action>
<action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in HiddenFileFilter.accept(Path, BasicFileAttributes) on null input.</action>
+ <action dev="ggregory" type="fix" due-to="Gary Gregory">Avoid NullPointerException in IOCase.checkIndexOf(String, int, String) on null input.</action>
<!-- Add -->
<action dev="ggregory" type="fix" due-to="Gary Gregory">Add and use PathUtils.getFileName(Path, Function<Path, R>).</action>
<action dev="ggregory" type="fix" due-to="Gary Gregory">Add and use PathUtils.getFileNameString().</action>
diff --git a/src/main/java/org/apache/commons/io/IOCase.java b/src/main/java/org/apache/commons/io/IOCase.java
index 1eabc9e..2f6575a 100644
--- a/src/main/java/org/apache/commons/io/IOCase.java
+++ b/src/main/java/org/apache/commons/io/IOCase.java
@@ -185,15 +185,16 @@ public boolean checkEquals(final String str1, final String str2) {
* @param search the start to search for, not null
* @return the first index of the search String,
* -1 if no match or {@code null} string input
- * @throws NullPointerException if either string is null
* @since 2.0
*/
public int checkIndexOf(final String str, final int strStartIndex, final String search) {
- final int endIndex = str.length() - search.length();
- if (endIndex >= strStartIndex) {
- for (int i = strStartIndex; i <= endIndex; i++) {
- if (checkRegionMatches(str, i, search)) {
- return i;
+ if (str != null && search != null) {
+ final int endIndex = str.length() - search.length();
+ if (endIndex >= strStartIndex) {
+ for (int i = strStartIndex; i <= endIndex; i++) {
+ if (checkRegionMatches(str, i, search)) {
+ return i;
+ }
}
}
}
diff --git a/src/test/java/org/apache/commons/io/IOCaseTest.java b/src/test/java/org/apache/commons/io/IOCaseTest.java
index f8d72d6..1112dbe 100644
--- a/src/test/java/org/apache/commons/io/IOCaseTest.java
+++ b/src/test/java/org/apache/commons/io/IOCaseTest.java
@@ -152,6 +152,9 @@ public void test_checkEquals_functionality() {
public void test_checkIndexOf_case() {
assertEquals(1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, "BC"));
assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, "Bc"));
+ assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, "Bc"));
+ assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, null));
+ assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, null));
assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "BC"));
assertEquals(1, IOCase.INSENSITIVE.checkIndexOf("ABC", 0, "Bc"));
@@ -199,9 +202,9 @@ public void test_checkIndexOf_functionality() {
// too long
assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("DEF", 0, "ABCDEFGHIJ"));
- assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf("ABC", 0, null));
- assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf(null, 0, "ABC"));
- assertThrows(NullPointerException.class, () -> IOCase.SENSITIVE.checkIndexOf(null, 0, null));
+ assertEquals(-1, IOCase.SENSITIVE.checkIndexOf("ABC", 0, null));
+ assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, "ABC"));
+ assertEquals(-1, IOCase.SENSITIVE.checkIndexOf(null, 0, null));
}
@Test