emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 3d9d976: Fix undefined behavior in mapbacktrace


From: Philipp Stephani
Subject: [Emacs-diffs] master 3d9d976: Fix undefined behavior in mapbacktrace
Date: Mon, 5 Jun 2017 16:10:14 -0400 (EDT)

branch: master
commit 3d9d976aa476b1c1098359a1215ad1cabd022d33
Author: Philipp Stephani <address@hidden>
Commit: Philipp Stephani <address@hidden>

    Fix undefined behavior in mapbacktrace
    
    * src/eval.c (Fmapbacktrace): Don't assume that PDL is still valid.
---
 src/eval.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/eval.c b/src/eval.c
index ef96104..8f293c9 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3613,8 +3613,12 @@ returns nil.  */)
 
   while (backtrace_p (pdl))
     {
+      ptrdiff_t i = pdl - specpdl;
       backtrace_frame_apply (function, pdl);
-      pdl = backtrace_next (pdl);
+      /* Beware! PDL is no longer valid here because FUNCTION might
+         have caused grow_specpdl to reallocate pdlvec.  We must use
+         the saved index, cf. Bug#27258.  */
+      pdl = backtrace_next (&specpdl[i]);
     }
 
   return Qnil;



reply via email to

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