From 558ca61cbdba5315c058f70d1ba2232f1391739e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 19 Sep 2021 21:39:18 +0300 Subject: [PATCH] Avoid segfaults due to 'bug-reference-mode' * 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 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/xdisp.c b/src/xdisp.c index 2e72f6b5915..b777d1b2825 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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'. -- 2.39.5