StringBuXXXXX.append(char str[], int offset, int len)
This is a bug report with fix. StringBuilder, AbstractStringBuilder, and StringBuffer fail to specify IndexOutOfBoundsException for append(char str[], int offset, int len) although other methods in these classes are careful to do so. Here's the fix: diff --git a/src/share/classes/java/lang/AbstractStringBuilder.java b/src/share/classes/java/lang/AbstractStringBuilder.java --- a/src/share/classes/java/lang/AbstractStringBuilder.java +++ b/src/share/classes/java/lang/AbstractStringBuilder.java @@ -525,6 +525,9 @@ * @param offset the index of the first <code>char</code> to append. * @param len the number of <code>char</code>s to append. * @return a reference to this object. + * @throws IndexOutOfBoundsException + * if {@code offset < 0} or {@code len < 0} + * or {@code offset+len > str.length} */ public AbstractStringBuilder append(char str[], int offset, int len) { int newCount = count + len; diff --git a/src/share/classes/java/lang/StringBuffer.java b/src/share/classes/java/lang/StringBuffer.java --- a/src/share/classes/java/lang/StringBuffer.java +++ b/src/share/classes/java/lang/StringBuffer.java @@ -319,6 +319,9 @@ return this; } + /** + * @throws IndexOutOfBoundsException {@inheritDoc} + */ public synchronized StringBuffer append(char str[], int offset, int len) { super.append(str, offset, len); return this; diff --git a/src/share/classes/java/lang/StringBuilder.java b/src/share/classes/java/lang/StringBuilder.java --- a/src/share/classes/java/lang/StringBuilder.java +++ b/src/share/classes/java/lang/StringBuilder.java @@ -201,6 +201,9 @@ return this; } + /** + * @throws IndexOutOfBoundsException {@inheritDoc} + */ public StringBuilder append(char str[], int offset, int len) { super.append(str, offset, len); return this; More changes to these classes to come. Martin
Martin Buchholz wrote:
This is a bug report with fix.
StringBuilder, AbstractStringBuilder, and StringBuffer fail to specify IndexOutOfBoundsException for append(char str[], int offset, int len) although other methods in these classes are careful to do so.
I've added these to 6728229 as it seems sensible to fix these when removing the bogus exception from StringBuilder.append(CharSequence). I hope that is okay with you. -Alan.
Here's the fix:
diff --git a/src/share/classes/java/lang/AbstractStringBuilder.java b/src/share/classes/java/lang/AbstractStringBuilder.java --- a/src/share/classes/java/lang/AbstractStringBuilder.java +++ b/src/share/classes/java/lang/AbstractStringBuilder.java @@ -525,6 +525,9 @@ * @param offset the index of the first <code>char</code> to append. * @param len the number of <code>char</code>s to append. * @return a reference to this object. + * @throws IndexOutOfBoundsException + * if {@code offset < 0} or {@code len < 0} + * or {@code offset+len > str.length} */ public AbstractStringBuilder append(char str[], int offset, int len) { int newCount = count + len; diff --git a/src/share/classes/java/lang/StringBuffer.java b/src/share/classes/java/lang/StringBuffer.java --- a/src/share/classes/java/lang/StringBuffer.java +++ b/src/share/classes/java/lang/StringBuffer.java @@ -319,6 +319,9 @@ return this; }
+ /** + * @throws IndexOutOfBoundsException {@inheritDoc} + */ public synchronized StringBuffer append(char str[], int offset, int len) { super.append(str, offset, len); return this; diff --git a/src/share/classes/java/lang/StringBuilder.java b/src/share/classes/java/lang/StringBuilder.java --- a/src/share/classes/java/lang/StringBuilder.java +++ b/src/share/classes/java/lang/StringBuilder.java @@ -201,6 +201,9 @@ return this; }
+ /** + * @throws IndexOutOfBoundsException {@inheritDoc} + */ public StringBuilder append(char str[], int offset, int len) { super.append(str, offset, len); return this;
More changes to these classes to come.
Martin
participants (2)
-
Alan Bateman
-
Martin Buchholz