summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2021-08-16 22:06:26 +0300
committerEli Zaretskii <eliz@gnu.org>2021-08-16 22:06:26 +0300
commit6898ae6f8c0128c5ff06de3f5d7adb7f9dab6563 (patch)
treec5f72ab260e63831070753ebfccee3ac2c5ef2d9 /src
parentb21c9b0816e9bb923e00d6e69eed7c4341850dd0 (diff)
downloademacs-6898ae6f8c0128c5ff06de3f5d7adb7f9dab6563.tar.gz
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)
Diffstat (limited to 'src')
-rw-r--r--src/fringe.c10
1 files changed, 10 insertions, 0 deletions
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;
}