From: Eli Zaretskii Date: Mon, 16 Aug 2021 19:06:26 +0000 (+0300) Subject: Plug another hole for longjmp-ing from 'redisplay_window' X-Git-Tag: emacs-28.0.90~1476 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6898ae6f8c0128c5ff06de3f5d7adb7f9dab6563;p=emacs.git Plug another hole for longjmp-ing from 'redisplay_window' * src/fringe.c (update_window_fringes): Inhibit quitting, so as not to longjmp out of redisplay_window. (Bug#44448) --- diff --git a/src/fringe.c b/src/fringe.c index 47615f51f97..b651a4eb0d9 100644 --- a/src/fringe.c +++ b/src/fringe.c @@ -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; }