From 5fe7e4d1ae24047858d8633e22036d288e5f0c06 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 21 Apr 2022 23:18:42 +0300 Subject: [PATCH] Avoid a redisplay loop when 'overlay-arrow-string' is non-ASCII * src/xdisp.c (get_overlay_arrow_glyph_row): Don't assume every character in 'overlay-arrow-string' is one byte long. Reported by Yuri D'Elia . --- src/xdisp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 15bb5eefb56..71de3592227 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -21653,7 +21653,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string) struct buffer *buffer = XBUFFER (w->contents); struct buffer *old = current_buffer; const unsigned char *arrow_string = SDATA (overlay_arrow_string); - ptrdiff_t arrow_len = SCHARS (overlay_arrow_string); + ptrdiff_t arrow_len = SCHARS (overlay_arrow_string), nchars = 0; const unsigned char *arrow_end = arrow_string + arrow_len; const unsigned char *p; struct it it; @@ -21684,7 +21684,7 @@ get_overlay_arrow_glyph_row (struct window *w, Lisp_Object overlay_arrow_string) p += it.len; /* Get its face. */ - ilisp = make_fixnum (p - arrow_string); + ilisp = make_fixnum (nchars++); face = Fget_text_property (ilisp, Qface, overlay_arrow_string); it.face_id = compute_char_face (f, it.char_to_display, face); -- 2.39.5