]> git.eshelyaron.com Git - emacs.git/commitdiff
Prevent infloops in redisplay due to truncate-lines and overlays
authorEli Zaretskii <eliz@gnu.org>
Fri, 23 Dec 2016 14:17:52 +0000 (16:17 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 23 Dec 2016 14:17:52 +0000 (16:17 +0200)
* src/xdisp.c (hscroll_window_tree): Avoid inflooping in
redisplay_window when a screen line ends in an overlay string with
a newline.  (Bug#25246)

src/xdisp.c

index ad0b9686f04accd23bd4c2a8f60b75cbea70e736..5de5ecaef0d50247b2330956d52f48b29cc3ffa4 100644 (file)
@@ -13049,6 +13049,17 @@ hscroll_window_tree (Lisp_Object window)
              init_to_row_start (&it, w, cursor_row);
              it.last_visible_x = INFINITY;
              move_it_in_display_line_to (&it, pt, -1, MOVE_TO_POS);
+             /* If the line ends in an overlay string with a newline,
+                we might infloop, because displaying the window will
+                want to put the cursor after the overlay, i.e. at X
+                coordinate of zero on the next screen line.  So we
+                use the buffer position prior to the overlay string
+                instead.  */
+             if (it.method == GET_FROM_STRING && pt > 1)
+               {
+                 init_to_row_start (&it, w, cursor_row);
+                 move_it_in_display_line_to (&it, pt - 1, -1, MOVE_TO_POS);
+               }
              current_buffer = saved_current_buffer;
 
              /* Position cursor in window.  */