From 5d60229bf1a9a496102fc2a3ef9e57dcce7bef10 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 28 Feb 2019 21:16:10 +0200 Subject: [PATCH] Avoid rare crashes in xbacktrace * src/eval.c (backtrace_thread_p, backtrace_top): Don't segfault in "xbacktrace" if called before the specpdl machinery is initialized in pdumped Emacs. --- src/eval.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/eval.c b/src/eval.c index bf16a709b15..e162725f03d 100644 --- a/src/eval.c +++ b/src/eval.c @@ -179,7 +179,7 @@ set_backtrace_debug_on_exit (union specbinding *pdl, bool doe) bool backtrace_p (union specbinding *pdl) -{ return pdl >= specpdl; } +{ return specpdl ? pdl >= specpdl : false; } static bool backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl) @@ -188,6 +188,12 @@ backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl) union specbinding * backtrace_top (void) { + /* This is so "xbacktrace" doesn't crash in pdumped Emacs if they + invoke the command before init_eval_once_for_pdumper initializes + specpdl machinery. See also backtrace_p above. */ + if (!specpdl) + return NULL; + union specbinding *pdl = specpdl_ptr - 1; while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE) pdl--; -- 2.39.2