SIGN IN SIGN UP

input: Fix panic on IME composition in `masked` input (#2623)

## Description

IME composition in a `masked` input panicked while shaping text: `end
byte index 8 is not a char boundary; it is inside '•'`.

The masked display text is `MASK_CHAR` repeated once per character, but
the IME marked range (#2601) was passed to `split_run_for_ime_underline`
in original-text offsets, so a `TextRun` boundary could land inside a
multi-byte `MASK_CHAR`. Convert it to mask offsets first, and add a
regression test on the run boundaries.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
F
Floyd Wang committed
de5859b271886af45cfab1f8984938d615b0b741
Parent: c48fb6f
Committed by GitHub <noreply@github.com> on 7/30/2026, 3:57:18 AM