RFR 8218228 : The constructor StringBuffer(CharSequence) violates spec for negatively sized argument

Ivan Gerasimov ivan.gerasimov at oracle.com
Fri Feb 8 01:59:41 UTC 2019


Hi David!


On 2/7/19 5:16 PM, David Holmes wrote:
> Hi Ivan,
>
> On 8/02/2019 11:02 am, Ivan Gerasimov wrote:
>> Hello!
>>
>> The specification states:
>> """
>> If the length of the specified CharSequence is less than or equal to 
>> zero, then an empty buffer of capacity 16 is returned.
>> """
>>
>> However, the current implementation throws either 
>> NegativeArraySizeException or IndexOutOfBounds instead (the actual 
>> exception type depends on the value of reported negative length).
>
> How can you have a negative length CharSequence ??
>
A custom CharSequence returning negative length() can be created.
Not sure how useful/popular this may be, though.

That's why I propose just removing the mentioning negative length, and 
not changing the behavior.

The proposed code change is to only unify the behavior for any negative 
value of length.

> If its an empty CharSequence then it should return the empty buffer as 
> indicated.
>
Empty CharSequence is processed correctly already.

With kind regards,
Ivan

> Cheers,
> David
>
>> It is proposed to do two things:
>> 1) remove the problematic sentence from the javadoc (CSR is filed).
>> 2) unify the exception type thrown, if the argument reports negative 
>> length.
>> NegativeArraySizeException will be consistent with, for example, 
>> StringBuffer(negativeCapacity).
>>
>> Would you please help review the fix?
>>
>> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8218228
>> WEBREV: http://cr.openjdk.java.net/~igerasim/8218228/00/webrev/
>> CRS: https://bugs.openjdk.java.net/browse/JDK-8218649
>>
>

-- 
With kind regards,
Ivan Gerasimov



More information about the core-libs-dev mailing list