]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid segfaults due to 'bug-reference-mode'
authorEli Zaretskii <eliz@gnu.org>
Sun, 19 Sep 2021 18:39:18 +0000 (21:39 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 19 Sep 2021 18:39:18 +0000 (21:39 +0300)
* src/xdisp.c (handle_fontified_prop): Set the frame's
inhibit_clear_image_cache flag around calls to
'fontification-functions', to avoid Lisp triggering the clearing
of image and/or face caches behind redisplay's back.  (Big#50571)

src/xdisp.c

index 2e72f6b59158580d893fdd53ee82a54d90f62505..b777d1b28254076de479a2ca0e1b15636000ccb9 100644 (file)
@@ -4288,12 +4288,17 @@ handle_fontified_prop (struct it *it)
       struct buffer *obuf = current_buffer;
       ptrdiff_t begv = BEGV, zv = ZV;
       bool old_clip_changed = current_buffer->clip_changed;
+      bool saved_inhibit_flag = it->f->inhibit_clear_image_cache;
 
       val = Vfontification_functions;
       specbind (Qfontification_functions, Qnil);
 
       eassert (it->end_charpos == ZV);
 
+      /* Don't allow Lisp that runs from 'fontification-functions'
+        clear our face and image caches behind our back.  */
+      it->f->inhibit_clear_image_cache = true;
+
       if (!CONSP (val) || EQ (XCAR (val), Qlambda))
        safe_call1 (val, pos);
       else
@@ -4327,6 +4332,7 @@ handle_fontified_prop (struct it *it)
            }
        }
 
+      it->f->inhibit_clear_image_cache = saved_inhibit_flag;
       unbind_to (count, Qnil);
 
       /* Fontification functions routinely call `save-restriction'.