emacs-diffs
[Top][All Lists]
Advanced

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

master 3de8ed09ab4: Avoid infinite recursion in 'window_wants_header_lin


From: Eli Zaretskii
Subject: master 3de8ed09ab4: Avoid infinite recursion in 'window_wants_header_line'
Date: Sat, 10 Jun 2023 04:49:52 -0400 (EDT)

branch: master
commit 3de8ed09ab46b9922e15aaf0cc8884b41087c996
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    Avoid infinite recursion in 'window_wants_header_line'
    
    * src/window.c (null_header_line_format): Avoid infinite
    recursion by disallowing :eval on recursive calls.
    (Bug#63988)
---
 src/window.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/window.c b/src/window.c
index 3802efb992a..e22fea0bb7a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5470,6 +5470,7 @@ window_wants_mode_line (struct window *w)
          && WINDOW_PIXEL_HEIGHT (w) > WINDOW_FRAME_LINE_HEIGHT (w));
 }
 
+static int header_line_eval_called = 0;
 
 /**
  * null_header_line_format:
@@ -5497,9 +5498,18 @@ null_header_line_format (Lisp_Object fmt, struct frame 
*f)
        {
          if (EQ (car, QCeval))
            {
+             if (header_line_eval_called > 0)
+               return false;
+             eassert (header_line_eval_called == 0);
+             header_line_eval_called++;
              val = safe_eval_inhibit_quit (XCAR (XCDR (fmt)));
+             header_line_eval_called--;
+             eassert (header_line_eval_called == 0);
              if (!FRAME_LIVE_P (f))
-               signal_error (":eval deleted the frame being displayed", fmt);
+               {
+                 header_line_eval_called = 0;
+                 signal_error (":eval deleted the frame being displayed", fmt);
+               }
              return NILP (val);
            }
          val = find_symbol_value (car);



reply via email to

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