Commit 720ed0b5 authored by Eli Zaretskii's avatar Eli Zaretskii

Avoid crashes when ':eval' deletes our frame

* src/xdisp.c (display_mode_element): Signal an error if
':eval' somehow deletes the frame whose window we are
redisplaying. (Bug#29726)
parent 9105c9aa
...@@ -23685,6 +23685,14 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, ...@@ -23685,6 +23685,14 @@ display_mode_element (struct it *it, int depth, int field_width, int precision,
{ {
Lisp_Object spec; Lisp_Object spec;
spec = safe__eval (true, XCAR (XCDR (elt))); spec = safe__eval (true, XCAR (XCDR (elt)));
/* The :eval form could delete the frame stored in the
iterator, which will cause a crash if we try to
access faces and other fields (e.g., FRAME_KBOARD)
on that frame. This is a nonsensical thing to do,
and signaling an error from redisplay might be
dangerous, but we cannot continue with an invalid frame. */
if (!FRAME_LIVE_P (it->f))
signal_error (":eval deleted the frame being displayed", elt);
n += display_mode_element (it, depth, field_width - n, n += display_mode_element (it, depth, field_width - n,
precision - n, spec, props, precision - n, spec, props,
risky); risky);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment