emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-28 5fe7e4d1ae: Avoid a redisplay loop when 'overlay-arrow-string'


From: Eli Zaretskii
Subject: emacs-28 5fe7e4d1ae: Avoid a redisplay loop when 'overlay-arrow-string' is non-ASCII
Date: Thu, 21 Apr 2022 16:20:26 -0400 (EDT)

branch: emacs-28
commit 5fe7e4d1ae24047858d8633e22036d288e5f0c06
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    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 <wavexx@thregr.org>.
---
 src/xdisp.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/xdisp.c b/src/xdisp.c
index 15bb5eefb5..71de359222 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);
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]