This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git


The following commit(s) were added to refs/heads/master by this push:
     new b1aba6833 fix StrBuilder.lastIndexOf(String) start index for an empty 
search (#1759)
b1aba6833 is described below

commit b1aba6833f31ac2c9cc5a1302cac966f997db31e
Author: alhuda <[email protected]>
AuthorDate: Thu Jul 30 15:22:02 2026 +0530

    fix StrBuilder.lastIndexOf(String) start index for an empty search (#1759)
    
    The no-index overload delegated to lastIndexOf(String, int) with
    size - 1, but the last valid start position for an empty search string
    is size. new StrBuilder("abc").lastIndexOf("") returned 2 instead of 3,
    and an empty builder returned -1 instead of 0. That disagreed with
    String.lastIndexOf, StringBuilder.lastIndexOf and StringUtils.lastIndexOf,
    and with StrBuilder's own indexOf and contains.
    
    Non-empty searches are unaffected, because their last possible match
    start is size - str.length(), which is at most size - 1.
---
 src/main/java/org/apache/commons/lang3/text/StrBuilder.java     | 2 +-
 src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java 
b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
index 7010b4e4b..d177ebed9 100644
--- a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
@@ -2362,7 +2362,7 @@ public int lastIndexOf(final char ch, int startIndex) {
      * @return The last index of the string, or -1 if not found.
      */
     public int lastIndexOf(final String str) {
-        return lastIndexOf(str, size - 1);
+        return lastIndexOf(str, size);
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java 
b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
index 2d86d29d1..6958ab676 100644
--- a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
@@ -1059,6 +1059,11 @@ void testLastIndexOf_String() {
         assertEquals(1, sb.lastIndexOf("ba"));
         assertEquals("abab".lastIndexOf("ba"), sb.lastIndexOf("ba"));
 
+        assertEquals(4, sb.lastIndexOf(""));
+        //should work like String#lastIndexOf
+        assertEquals("abab".lastIndexOf(""), sb.lastIndexOf(""));
+        assertEquals("".lastIndexOf(""), new StrBuilder().lastIndexOf(""));
+
         assertEquals(-1, sb.lastIndexOf("z"));
 
         assertEquals(-1, sb.lastIndexOf((String) null));

Reply via email to