Author: bayard Date: Sun Jul 3 07:04:38 2011 New Revision: 1142381 URL: http://svn.apache.org/viewvc?rev=1142381&view=rev Log: Applying Ilya's patch from LANG-703 fixing an NPE when toString returns null
Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java?rev=1142381&r1=1142380&r2=1142381&view=diff ============================================================================== --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java Sun Jul 3 07:04:38 2011 @@ -3290,13 +3290,12 @@ public class StringUtils { if (array == null) { return null; } - int bufSize = (endIndex - startIndex); - if (bufSize <= 0) { + int noOfItems = (endIndex - startIndex); + if (noOfItems <= 0) { return EMPTY; } - - bufSize *= ((array[startIndex] == null ? 16 : array[startIndex].toString().length()) + 1); - StringBuilder buf = new StringBuilder(bufSize); + + StringBuilder buf = new StringBuilder(noOfItems * 16); for (int i = startIndex; i < endIndex; i++) { if (i > startIndex) { @@ -3309,7 +3308,6 @@ public class StringUtils { return buf.toString(); } - /** * <p>Joins the elements of the provided array into a single String * containing the provided list of elements.</p> @@ -3377,15 +3375,12 @@ public class StringUtils { // endIndex - startIndex > 0: Len = NofStrings *(len(firstString) + len(separator)) // (Assuming that all Strings are roughly equally long) - int bufSize = (endIndex - startIndex); - if (bufSize <= 0) { + int noOfItems = (endIndex - startIndex); + if (noOfItems <= 0) { return EMPTY; } - bufSize *= ((array[startIndex] == null ? 16 : array[startIndex].toString().length()) - + separator.length()); - - StringBuilder buf = new StringBuilder(bufSize); + StringBuilder buf = new StringBuilder(noOfItems * 16); for (int i = startIndex; i < endIndex; i++) { if (i > startIndex) { Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java?rev=1142381&r1=1142380&r2=1142381&view=diff ============================================================================== --- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java (original) +++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java Sun Jul 3 07:04:38 2011 @@ -67,6 +67,14 @@ public class StringUtilsTest extends Tes private static final String[] ARRAY_LIST = { "foo", "bar", "baz" }; private static final String[] EMPTY_ARRAY_LIST = {}; private static final String[] NULL_ARRAY_LIST = {null}; + private static final Object[] NULL_TO_STRING_LIST = { + new Object(){ + @Override + public String toString() { + return null; + } + } + }; private static final String[] MIXED_ARRAY_LIST = {null, "", "foo"}; private static final Object[] MIXED_TYPE_LIST = {"foo", Long.valueOf(2L)}; @@ -182,6 +190,7 @@ public class StringUtilsTest extends Tes assertEquals("", StringUtils.join(EMPTY_ARRAY_LIST)); assertEquals("", StringUtils.join(NULL_ARRAY_LIST)); + assertEquals("null", StringUtils.join(NULL_TO_STRING_LIST)); assertEquals("abc", StringUtils.join(new String[] {"a", "b", "c"})); assertEquals("a", StringUtils.join(new String[] {null, "a", ""})); assertEquals("foo", StringUtils.join(MIXED_ARRAY_LIST)); @@ -197,6 +206,7 @@ public class StringUtilsTest extends Tes assertEquals("/", StringUtils.join(MIXED_ARRAY_LIST, '/', 0, MIXED_ARRAY_LIST.length-1)); assertEquals("foo", StringUtils.join(MIXED_TYPE_LIST, '/', 0, 1)); + assertEquals("null", StringUtils.join(NULL_TO_STRING_LIST,'/', 0, 1)); assertEquals("foo/2", StringUtils.join(MIXED_TYPE_LIST, '/', 0, 2)); assertEquals("2", StringUtils.join(MIXED_TYPE_LIST, '/', 1, 2)); assertEquals("", StringUtils.join(MIXED_TYPE_LIST, '/', 2, 1));