emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/emacs-24 r108068: Fixes: debbugs:11917


From: Andreas Schwab
Subject: [Emacs-diffs] /srv/bzr/emacs/emacs-24 r108068: Fixes: debbugs:11917
Date: Thu, 12 Jul 2012 09:12:24 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108068
committer: Andreas Schwab <address@hidden>
branch nick: emacs
timestamp: Thu 2012-07-12 09:12:24 +0200
message:
  Fixes: debbugs:11917
  
  Fix crash when creating indirect buffer
  * buffer.c (buffer_lisp_local_variables): Add argument CLONE.
  Don't handle unbound variables specially if non-zero.
  (Fbuffer_local_variables): Pass zero.
  (clone_per_buffer_values): Pass non-zero.
modified:
  src/ChangeLog
  src/buffer.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-06-28 07:12:59 +0000
+++ b/src/ChangeLog     2012-07-12 07:12:24 +0000
@@ -1,3 +1,11 @@
+2012-07-12  Andreas Schwab  <address@hidden>
+
+       Fix crash when creating indirect buffer (Bug#11917)
+       * buffer.c (buffer_lisp_local_variables): Add argument CLONE.
+       Don't handle unbound variables specially if non-zero.
+       (Fbuffer_local_variables): Pass zero.
+       (clone_per_buffer_values): Pass non-zero.
+
 2012-06-28  Andreas Schwab  <address@hidden>
 
        * gnutls.c (emacs_gnutls_handshake): Revert last change.  Add QUIT

=== modified file 'src/buffer.c'
--- a/src/buffer.c      2012-05-23 17:32:28 +0000
+++ b/src/buffer.c      2012-07-12 07:12:24 +0000
@@ -156,7 +156,7 @@
 static void free_buffer_text (struct buffer *b);
 static struct Lisp_Overlay * copy_overlays (struct buffer *, struct 
Lisp_Overlay *);
 static void modify_overlay (struct buffer *, EMACS_INT, EMACS_INT);
-static Lisp_Object buffer_lisp_local_variables (struct buffer *);
+static Lisp_Object buffer_lisp_local_variables (struct buffer *, int);
 
 /* For debugging; temporary.  See set_buffer_internal.  */
 /* Lisp_Object Qlisp_mode, Vcheck_symbol; */
@@ -505,7 +505,7 @@
 
   /* Get (a copy of) the alist of Lisp-level local variables of FROM
      and install that in TO.  */
-  BVAR (to, local_var_alist) = buffer_lisp_local_variables (from);
+  BVAR (to, local_var_alist) = buffer_lisp_local_variables (from, 1);
 }
 
 
@@ -1003,10 +1003,12 @@
 
 /* Return an alist of the Lisp-level buffer-local bindings of
    buffer BUF.  That is, don't include the variables maintained
-   in special slots in the buffer object.  */
+   in special slots in the buffer object.
+   If CLONE is zero elements of the form (VAR . unbound) are replaced
+   by VAR.  */
 
 static Lisp_Object
-buffer_lisp_local_variables (struct buffer *buf)
+buffer_lisp_local_variables (struct buffer *buf, int clone)
 {
   Lisp_Object result = Qnil;
   register Lisp_Object tail;
@@ -1026,7 +1028,7 @@
       if (buf != current_buffer)
        val = XCDR (elt);
 
-      result = Fcons (EQ (val, Qunbound)
+      result = Fcons (!clone && EQ (val, Qunbound)
                      ? XCAR (elt)
                      : Fcons (XCAR (elt), val),
                      result);
@@ -1055,7 +1057,7 @@
       buf = XBUFFER (buffer);
     }
 
-  result = buffer_lisp_local_variables (buf);
+  result = buffer_lisp_local_variables (buf, 0);
 
   /* Add on all the variables stored in special slots.  */
   {


reply via email to

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