]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid assertion violation in unbind_to
authorEli Zaretskii <eliz@gnu.org>
Sat, 26 Dec 2015 10:43:08 +0000 (12:43 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 26 Dec 2015 10:43:08 +0000 (12:43 +0200)
* src/eval.c (unbind_to) <SPECPDL_LET>: Avoid assertion violation
if we get here with an object that is not a symbol.  (Bug#14412)

src/eval.c

index d04796abc3a423f05d504b2597958b80be693c5c..571681c318fe9ff12cde8dc91faf24a5c0e6dc87 100644 (file)
@@ -3196,11 +3196,15 @@ unbind_to (ptrdiff_t count, Lisp_Object value)
          { /* If variable has a trivial value (no forwarding), we can
               just set it.  No need to check for constant symbols here,
               since that was already done by specbind.  */
-           struct Lisp_Symbol *sym = XSYMBOL (specpdl_symbol (specpdl_ptr));
-           if (sym->redirect == SYMBOL_PLAINVAL)
+           Lisp_Object symbol = specpdl_symbol (specpdl_ptr);
+           if (SYMBOLP (symbol))
              {
-               SET_SYMBOL_VAL (sym, specpdl_old_value (specpdl_ptr));
-               break;
+               struct Lisp_Symbol *sym = XSYMBOL (symbol);
+               if (sym->redirect == SYMBOL_PLAINVAL)
+                 {
+                   SET_SYMBOL_VAL (sym, specpdl_old_value (specpdl_ptr));
+                   break;
+                 }
              }
            else
              { /* FALLTHROUGH!!