RFR (JDK11) 8137326: Methods for comparing CharSequence, StringBuilder, and StringBuffer
Xueming Shen
xueming.shen at oracle.com
Tue Feb 27 20:15:07 UTC 2018
+1
On 2/27/18, 11:37 AM, Joe Wang wrote:
> Hi Sherman and all,
>
> Thanks for the further reviews!
>
> Here's the latest webrev with boundary checks in
> StringLatin1/StringUTF16:
>
> JBS: https://bugs.openjdk.java.net/browse/JDK-8137326
> webrev: http://cr.openjdk.java.net/~joehw/jdk11/8137326/webrev/
>
> Best,
> Joe
>
> On 2/22/2018 6:07 PM, Joe Wang wrote:
>>
>>
>> On 2/22/18, 12:51 PM, Xueming Shen wrote:
>>> On 2/22/18, 12:04 PM, Joe Wang wrote:
>>>> Hi Sherman,
>>>>
>>>> Thanks for reviewing the change.
>>>>
>>>> Taking a local copy of the count field, but the boundary check
>>>> would be almost immediately done against the field itself. Are you
>>>> worrying about the count field may be out of sync with the byte
>>>> array? I would think that's unlikely to happen. Whether it's
>>>> StringBuilder or StringBuffer, it's not advisable/practical to use
>>>> in multiple threads. In a valid usage, the count is always
>>>> consistent with the byte array.
>>>>
>>>
>>> Hi Joe,
>>>
>>> It might not be a "valid usage" but it did happen and when it
>>> happens it might just crash the
>>> vm without those boundary checks. It's especially true for those
>>> intrinsics methods with explicit
>>> comments "intrinsic performs no bounds checks". In this case, the
>>> StringUTF16.getChar() is being
>>> called in new public method StringUTF16.compareTo(byte[], byte[],
>>> int, int) without appropriate
>>> boundary check. In the "old" code the "index" is guaranteed to be
>>> within [0, len) in
>>> StringUTF16.compareTo(byte[], byte[]), so it's safe. A real case for
>>> such scenario can be found in
>>> JDK-8158168 [1], for example.
>>
>> Thanks for the pointer! The email thread helps a lot. I've updated
>> the webrev with a boundary check in ASB (AbstractStringBuilder line
>> 106, 107), and then a note to StringUTF16.compareTo (StringUTF16 line
>> 280). Hopefully this is sufficient. Didn't want to add any check in
>> StringUTF16 since that may affect the original two-arg method.
>>
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8137326
>> webrev: http://cr.openjdk.java.net/~joehw/jdk11/8137326/webrev/
>>
>> -Joe
>>
>>>
>>> -Sherman
>>>
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8158168
>
More information about the core-libs-dev
mailing list