<i18n dev> RFR: 8294008: Grapheme implementation of setText() throws IndexOutOfBoundsException
Joe Wang
joehw at openjdk.org
Mon Sep 19 22:10:17 UTC 2022
On Mon, 19 Sep 2022 21:02:38 GMT, Naoto Sato <naoto at openjdk.org> wrote:
>> src/java.base/share/classes/sun/util/locale/provider/BreakIteratorProviderImpl.java line 329:
>>
>>> 327: @Override
>>> 328: public int length() {
>>> 329: return src.getEndIndex();
>>
>> Could the issue be somewhere else? I mean it feels correct for length = endIndex - beginIndex.
>
> It's somewhat confusing as this class adapts `CharacterIterator` into `CharSequence` which are similar to each other (thus the bug). Those `beginIndex`/`endIndex` designate the range in the source `CharacterIterator`, and this `length()` method should return the entire text length of the `CharSequence` nevertheless, thus it should start from `0` to `endIndex`.
Yeah, I saw there's a mismatch between the src and limit in this call that led to the index check Exception:
286 for (int b = ci.getBeginIndex(); b < end;) {
287 boundaries.add(b);
288 b = Grapheme.nextBoundary(text, b, end);
289 }
and nextBoundary could walk through the entire CharSequence. Maybe it's worth a note to the length() method.
-------------
PR: https://git.openjdk.org/jdk/pull/10349
More information about the i18n-dev
mailing list