Repository: commons-lang
Updated Branches:
  refs/heads/master e2dbe55d5 -> 65ed41ff7


LANG-1276: StrBuilder#replaceAll ArrayIndexOutOfBoundsException (closes #200)

Avoid ArrayIndexOutOfBoundsException by keeping variable buf consistent with 
buffer in StrBuilder#replaceImpl.


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/10325422
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/10325422
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/10325422

Branch: refs/heads/master
Commit: 10325422e5a4735aa87a4d47bdb377e09fe963d2
Parents: e2dbe55
Author: Andy Klimczak <andyklimc...@fastmail.com>
Authored: Sat Oct 22 21:54:14 2016 -0400
Committer: pascalschumacher <pascalschumac...@gmx.net>
Committed: Sun Oct 23 17:01:43 2016 +0200

----------------------------------------------------------------------
 src/main/java/org/apache/commons/lang3/text/StrBuilder.java     | 2 +-
 src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/10325422/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
----------------------------------------------------------------------
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 5679484..6079101 100644
--- a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
@@ -2110,8 +2110,8 @@ public class StrBuilder implements CharSequence, 
Appendable, Serializable, Build
             return this;
         }
         final int replaceLen = (replaceStr == null ? 0 : replaceStr.length());
-        final char[] buf = buffer;
         for (int i = from; i < to && replaceCount != 0; i++) {
+            final char[] buf = buffer;
             final int removeLen = matcher.isMatch(buf, i, from, to);
             if (removeLen > 0) {
                 replaceImpl(i, i + removeLen, removeLen, replaceStr, 
replaceLen);

http://git-wip-us.apache.org/repos/asf/commons-lang/blob/10325422/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
----------------------------------------------------------------------
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 7fa0579..f83dc49 100644
--- a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
@@ -897,6 +897,10 @@ public class StrBuilderTest {
         sb = new StrBuilder("A1-A2A3-A4");
         sb.replaceAll(A_NUMBER_MATCHER, "***");
         assertEquals("***-******-***", sb.toString());
+
+        sb = new StrBuilder("Dear X, hello X.");
+        sb.replaceAll(StrMatcher.stringMatcher("X"), "012345678901234567");
+        assertEquals("Dear 012345678901234567, hello 012345678901234567.", 
sb.toString());
     }
 
     @Test

Reply via email to