]> git.eshelyaron.com Git - emacs.git/commitdiff
Plug another hole for longjmp-ing from 'redisplay_window'
authorEli Zaretskii <eliz@gnu.org>
Mon, 16 Aug 2021 19:06:26 +0000 (22:06 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 16 Aug 2021 19:06:26 +0000 (22:06 +0300)
* src/fringe.c (update_window_fringes): Inhibit quitting, so as
not to longjmp out of redisplay_window.  (Bug#44448)

src/fringe.c

index 47615f51f9709f8941a73345717ecbedfbf5e6a1..b651a4eb0d9a6b72ac79dacad0b97649efde3376 100644 (file)
@@ -969,6 +969,14 @@ update_window_fringes (struct window *w, bool keep_current_p)
   if (w->pseudo_window_p)
     return 0;
 
+  ptrdiff_t count = SPECPDL_INDEX ();
+
+  /* This function could be called for redisplaying non-selected
+     windows, in which case point has been temporarily moved to that
+     window's window-point.  So we cannot afford quitting out of here,
+     as point is restored after this function returns.  */
+  specbind (Qinhibit_quit, Qt);
+
   if (!MINI_WINDOW_P (w)
       && (ind = BVAR (XBUFFER (w->contents), indicate_buffer_boundaries), !NILP (ind)))
     {
@@ -1331,6 +1339,8 @@ update_window_fringes (struct window *w, bool keep_current_p)
       row->fringe_bitmap_periodic_p = periodic_p;
     }
 
+  unbind_to (count, Qnil);
+
   return redraw_p && !keep_current_p;
 }