hack-local-variables-filter fix for bug#12155
authorGlenn Morris <rgm@gnu.org>
Tue, 7 Aug 2012 18:41:39 +0000 (14:41 -0400)
committerGlenn Morris <rgm@gnu.org>
Tue, 7 Aug 2012 18:41:39 +0000 (14:41 -0400)
* lisp/files.el (hack-local-variables-filter): If an eval: form is not
known to be safe, and enable-local-variables is :safe, then ignore
the form totally, as is done for non-eval forms.

lisp/ChangeLog
lisp/files.el

index d8bf55e..7d61d9d 100644 (file)
@@ -1,3 +1,9 @@
+2012-08-07  Glenn Morris  <rgm@gnu.org>
+
+       * files.el (hack-local-variables-filter): If an eval: form is not
+       known to be safe, and enable-local-variables is :safe, then ignore
+       the form totally, as is done for non-eval forms.  (Bug#12155)
+
 2012-08-07  Chong Yidong  <cyd@gnu.org>
 
        * mouse.el (mouse-drag-track): Deactivate the mark before popping.
index cf95217..02c9e04 100644 (file)
@@ -3107,11 +3107,16 @@ DIR-NAME is the name of the associated directory.  Otherwise it is nil."
              ;; Obey `enable-local-eval'.
              ((eq var 'eval)
               (when enable-local-eval
-                (push elt all-vars)
-                (or (eq enable-local-eval t)
-                    (hack-one-local-variable-eval-safep (eval (quote val)))
-                    (safe-local-variable-p var val)
-                    (push elt unsafe-vars))))
+                (let ((safe (or (hack-one-local-variable-eval-safep
+                                 (eval (quote val)))
+                                ;; In case previously marked safe (bug#5636).
+                                (safe-local-variable-p var val))))
+                  ;; If not safe and e-l-v = :safe, ignore totally.
+                  (when (or safe (not (eq enable-local-variables :safe)))
+                    (push elt all-vars)
+                    (or (eq enable-local-eval t)
+                        safe
+                        (push elt unsafe-vars))))))
              ;; Ignore duplicates (except `mode') in the present list.
              ((and (assq var all-vars) (not (eq var 'mode))) nil)
              ;; Accept known-safe variables.