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