From cc0ea0cf47fcb27f2da6e48770a770274825b32d Mon Sep 17 00:00:00 2001 From: Turan Suleyman Date: Tue, 2 Oct 2018 00:34:47 +0100 Subject: [PATCH 1/2] Added changes for StringUtils.repeat() --- .../org/apache/commons/lang3/StringUtils.java | 15 +++++++++++---- .../org/apache/commons/lang3/StringUtilsTest.java | 6 ++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 1d7b9b99335..1a90b9948bd 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -6075,8 +6075,8 @@ public static String overlay(final String str, String overlay, int start, int en end = temp; } return str.substring(0, start) + - overlay + - str.substring(end); + overlay + + str.substring(end); } // Chomping @@ -6222,6 +6222,7 @@ public static String chop(final String str) { * StringUtils.repeat("a", 3) = "aaa" * StringUtils.repeat("ab", 2) = "abab" * StringUtils.repeat("a", -2) = "" + * StringUtils.repeat("aaa", Integer.MAX_VALUE) = throws an ArrayIndexOutOfBoundsException * * * @param str the String to repeat, may be null @@ -6246,7 +6247,13 @@ public static String repeat(final String str, final int repeat) { return repeat(str.charAt(0), repeat); } - final int outputLength = inputLength * repeat; + final long longSize = (long) inputLength * (long) repeat; + final int outputLength = (int) longSize; + + if (outputLength != longSize) { + throw new ArrayIndexOutOfBoundsException("Required string length is too large: " + longSize); + } + switch (inputLength) { case 1 : return repeat(str.charAt(0), repeat); @@ -6820,7 +6827,7 @@ public static String capitalize(final String str) { final int codepoint = str.codePointAt(inOffset); newCodePoints[outOffset++] = codepoint; // copy the remaining ones inOffset += Character.charCount(codepoint); - } + } return new String(newCodePoints, 0, outOffset); } diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index 04aecaea752..66d066071ef 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -1592,6 +1592,12 @@ public void testRepeat_StringInt() { final String str = StringUtils.repeat("a", 10000); // bigger than pad limit assertEquals(10000, str.length()); assertTrue(StringUtils.containsOnly(str, 'a')); + try { + StringUtils.repeat("aaa",Integer.MAX_VALUE); + fail("StringUtils.repeat expecting ArrayIndexOutOfBoundsException"); + } catch (final ArrayIndexOutOfBoundsException ex) { + // empty + } } @Test From 3acb09d40d3c2be99ae8049f60d2b66bb46b7fef Mon Sep 17 00:00:00 2001 From: Turan Suleyman Date: Tue, 2 Oct 2018 00:36:48 +0100 Subject: [PATCH 2/2] Added changes for StringUtils.repeat() --- src/main/java/org/apache/commons/lang3/StringUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 1a90b9948bd..2f64083662f 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -6075,8 +6075,8 @@ public static String overlay(final String str, String overlay, int start, int en end = temp; } return str.substring(0, start) + - overlay + - str.substring(end); + overlay + + str.substring(end); } // Chomping