From d0bd3513be11cc78d61a77c73770c371e6fd64a8 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 30 Apr 1994 04:29:23 +0000 Subject: [PATCH] (hack-one-local-variable): Silently execute eval if the form is a put of a harmless property with harmless args. --- lisp/files.el | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index 4a7e3ed783..4f7fead12a 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1111,6 +1111,9 @@ If `enable-local-variables' is nil, this function does not check for a (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 @@ If `enable-local-variables' is nil, this function does not check for a ((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) -- 2.20.1