changeset 7217:c35a4919c161

(hack-one-local-variable): Silently execute eval if the form is a put of a harmless property with harmless args.
author Richard M. Stallman <rms@gnu.org>
date Sat, 30 Apr 1994 04:29:23 +0000
parents 6ecee038c1c9
children 49f9f9a08b4c
files lisp/files.el
diffstat 1 files changed, 28 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/files.el	Sat Apr 30 04:22:22 1994 +0000
+++ b/lisp/files.el	Sat Apr 30 04:29:23 1994 +0000
@@ -1111,6 +1111,9 @@
 (put 'minor-mode-map-alist 'risky-local-variable t)
 (put 'after-load-alist 'risky-local-variable t)
 	    
+(defun hack-one-local-variable-quotep (exp)
+  (and (consp exp) (eq (car exp) 'quote) (consp (cdr exp))))
+
 ;; "Set" one variable in a local variables spec.
 ;; A few variable names are treated specially.
 (defun hack-one-local-variable (var val)
@@ -1124,17 +1127,31 @@
 	((or (get var 'risky-local-variable)
 	     (string-match "-hooks?$\\|-functions?$\\|-forms?$"
 			   (symbol-name var)))
-	 (if (and (not (string= (user-login-name) "root"))
-		  (or (eq enable-local-eval t)
-		      (and enable-local-eval
-			   (save-window-excursion
-			     (switch-to-buffer (current-buffer))
-			     (save-excursion
-			       (beginning-of-line)
-			       (set-window-start (selected-window) (point)))
-			     (setq enable-local-eval
-				   (y-or-n-p (format "Process `eval' or hook local variables in file %s? "
-						     (file-name-nondirectory buffer-file-name))))))))
+	 ;; Permit evaling a put of a harmless property
+	 ;; if the args do nothing tricky.
+	 (if (or (and (eq var 'eval)
+		      (consp val)
+		      (eq (car val) 'put)
+		      (hack-one-local-variable-quotep (nth 1 val))
+		      (hack-one-local-variable-quotep (nth 2 val))
+		      ;; Only allow safe values of lisp-indent-hook;
+		      ;; not functions.
+		      (or (numberp (nth 3 val))
+			  (eq (nth 3 val) 'defun))
+		      (memq (nth 1 (nth 2 val))
+			    '(lisp-indent-hook)))
+		 ;; Permit eval if not root and user says ok.
+		 (and (not (string= (user-login-name) "root"))
+		      (or (eq enable-local-eval t)
+			  (and enable-local-eval
+			       (save-window-excursion
+				 (switch-to-buffer (current-buffer))
+				 (save-excursion
+				   (beginning-of-line)
+				   (set-window-start (selected-window) (point)))
+				 (setq enable-local-eval
+				       (y-or-n-p (format "Process `eval' or hook local variables in file %s? "
+							 (file-name-nondirectory buffer-file-name)))))))))
 	     (if (eq var 'eval)
 		 (save-excursion (eval val))
 	       (make-local-variable var)