From 7e7e6c0e6e14628e70650abfba8c0a2a36984c98 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sat, 18 Oct 2025 21:10:54 +0200 Subject: [PATCH] android.text.Layout: convert byte index to character index This fixes a WhatsApp crash when rendering text with emojis. --- src/api-impl-jni/text/android_text_Layout.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api-impl-jni/text/android_text_Layout.c b/src/api-impl-jni/text/android_text_Layout.c index bb6ab23c..f96f169f 100644 --- a/src/api-impl-jni/text/android_text_Layout.c +++ b/src/api-impl-jni/text/android_text_Layout.c @@ -53,7 +53,8 @@ JNIEXPORT jint JNICALL Java_android_text_Layout_native_1get_1line_1start(JNIEnv PangoLayoutIter *pango_iter = pango_layout_get_iter(pango_layout); while (line--) pango_layout_iter_next_line(pango_iter); - return pango_layout_iter_get_index(pango_iter); + int byte_index = pango_layout_iter_get_index(pango_iter); + return g_utf8_strlen(pango_layout_get_text(pango_layout), byte_index); } JNIEXPORT jint JNICALL Java_android_text_Layout_native_1get_1line_1end(JNIEnv *env, jobject object, jlong layout, jint line) @@ -63,7 +64,8 @@ JNIEXPORT jint JNICALL Java_android_text_Layout_native_1get_1line_1end(JNIEnv *e while (line--) pango_layout_iter_next_line(pango_iter); pango_layout_iter_next_line(pango_iter); - return pango_layout_iter_get_index(pango_iter); + int byte_index = pango_layout_iter_get_index(pango_iter); + return g_utf8_strlen(pango_layout_get_text(pango_layout), byte_index); } static void get_line_extends(PangoLayout *pango_layout, int line, PangoRectangle *logical_rect) {