From: Eli Zaretskii Date: Thu, 21 Apr 2022 20:18:42 +0000 (+0300) Subject: Avoid a redisplay loop when 'overlay-arrow-string' is non-ASCII X-Git-Tag: emacs-28.1.90~114 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5fe7e4d1ae24047858d8633e22036d288e5f0c06;p=emacs.git 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 . --- 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);