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

commit bcf8fbbc36eba7dabfbeb88af920f0dfcc6de355
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Thu Dec 21 20:42:01 2023 -0500

    Avoid NullPointerException in IOCase.checkIndexOf(String, int, String)
    on null input
---
 src/changes/changes.xml                             |  1 +
 src/main/java/org/apache/commons/io/IOCase.java     | 13 +++++++------
 src/test/java/org/apache/commons/io/IOCaseTest.java |  9 ++++++---
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 56c4bf74..79481855 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,6 +72,7 @@ The <action> type attribute can be add,update,fix,remove.
       <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&lt;Path, 
R&gt;).</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 1eabc9e9..2f6575a3 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 enum IOCase {
      * @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 f8d72d6f..1112dbe2 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 class IOCaseTest {
     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 class IOCaseTest {
         // 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

Reply via email to