emacs-diffs
[Top][All Lists]
Advanced

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

master 6898ae6: Plug another hole for longjmp-ing from 'redisplay_window


From: Eli Zaretskii
Subject: master 6898ae6: Plug another hole for longjmp-ing from 'redisplay_window'
Date: Mon, 16 Aug 2021 15:09:19 -0400 (EDT)

branch: master
commit 6898ae6f8c0128c5ff06de3f5d7adb7f9dab6563
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    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)
---
 src/fringe.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/fringe.c b/src/fringe.c
index 47615f5..b651a4e 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;
 }
 



reply via email to

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