# HG changeset patch # User Richard M. Stallman # Date 1035394724 0 # Node ID 9f3ecf5e3d6556183f95e458e383ef994eaac3f1 # Parent ee12f8f7eb1295594b9f848dd83b6a6d50fec709 (risky-local-variable-p): New function. (compile-command): Use `stringp' for `safe-local-variable' prop. (hack-one-local-variable): Use `risky-local-variable-p'. diff -r ee12f8f7eb12 -r 9f3ecf5e3d65 lisp/files.el --- a/lisp/files.el Wed Oct 23 16:55:33 2002 +0000 +++ b/lisp/files.el Wed Oct 23 17:38:44 2002 +0000 @@ -2057,16 +2057,21 @@ (put 'mode-line-position 'risky-local-variable t) (put 'display-time-string 'risky-local-variable t) -;; This one is safe because the user gets to check it before it is used. -(put 'compile-command 'safe-local-variable t) - -(defun risky-local-variable-p (sym) - "Returns non-nil if SYM could be dangerous as a file-local variable." - (or (memq sym ignored-local-variables) - (get sym 'risky-local-variable) - (and (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$\\|-predicate$\\|font-lock-keywords$\\|font-lock-keywords-[0-9]+$\\|font-lock-syntactic-keywords$\\|-frame-alist$\\|-mode-alist$\\|-map$\\|-map-alist$" - (symbol-name sym)) - (not (get sym 'safe-local-variable))))) +;; This case is safe because the user gets to check it before it is used. +(put 'compile-command 'safe-local-variable 'stringp) + +(defun risky-local-variable-p (sym val) + "Non-nil if SYM could be dangerous as a file-local variable with value VAL." + (let ((safep (get sym 'safe-local-variable))) + (or (memq sym ignored-local-variables) + (get sym 'risky-local-variable) + (and (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$\\|-predicate$\\|font-lock-keywords$\\|font-lock-keywords-[0-9]+$\\|font-lock-syntactic-keywords$\\|-frame-alist$\\|-mode-alist$\\|-map$\\|-map-alist$" + (symbol-name sym)) + (not safep)) + ;; If the safe-local-variable property isn't t or nil, + ;; then it must return non-nil on the proposed value to be safe. + (and (not (memq safep '(t nil))) + (not (funcall safep val)))))) (defcustom safe-local-eval-forms nil "*Expressions that are considered \"safe\" in an `eval:' local variable. @@ -2134,7 +2139,7 @@ nil) ;; "Setting" eval means either eval it or do nothing. ;; Likewise for setting hook variables. - ((risky-local-variable-p var) + ((risky-local-variable-p var val) ;; Permit evalling a put of a harmless property. ;; if the args do nothing tricky. (if (or (and (eq var 'eval) @@ -2157,7 +2162,7 @@ (save-excursion (eval val)) (make-local-variable var) (set var val)) - (message "Ignoring `eval:' in the local variables list"))) + (message "Ignoring risky spec in the local variables list"))) ;; Ordinary variable, really set it. (t (make-local-variable var) ;; Make sure the string has no text properties.