Do not set trusted-content in major modes

* lisp/progmodes/elisp-mode.el (lisp-interaction-mode):
* lisp/ielm.el (inferior-emacs-lisp-mode): Do not set `trusted-content.
* lisp/ielm.el (ielm):
* lisp/simple.el (get-scratch-buffer-create): Set `trusted-content` here
instead.
* lisp/files.el (trusted-content): Doc fix; warn against setting this
option to :all in a major or mode mode.
Problem reported by Max Nikulin <manikulin@gmail.com>.
This commit is contained in:
Stefan Kangas 2025-01-26 14:53:49 +01:00
parent d11488fd6f
commit 5485ea6aef
5 changed files with 12 additions and 7 deletions

View file

@ -193,6 +193,9 @@ For example, Flymake's backend for Emacs Lisp consults this option
and disables itself with an "untrusted content" warning if the file and disables itself with an "untrusted content" warning if the file
is not listed. is not listed.
Emacs Lisp authors should note that a major or minor mode must never set
this variable to the ':all' value.
This option is used to fix CVE-2024-53920. See below for details. This option is used to fix CVE-2024-53920. See below for details.
** Emacs now supports Unicode Standard version 15.1. ** Emacs now supports Unicode Standard version 15.1.

View file

@ -724,11 +724,12 @@ enabled (for example, when it is added to a mode hook).
Each element of the list should be a string: Each element of the list should be a string:
- If it ends in \"/\", it is considered as a directory name and means that - If it ends in \"/\", it is considered as a directory name and means that
Emacs should trust all the files whose name has this directory as a prefix. Emacs should trust all the files whose name has this directory as a prefix.
- else it is considered as a file name. - Otherwise, it is considered a file name.
Use abbreviated file names. For example, an entry \"~/mycode/\" means Use abbreviated file names. For example, an entry \"~/mycode/\" means
that Emacs will trust all the files in your directory \"mycode\". that Emacs will trust all the files in your directory \"mycode\".
This variable can also be set to `:all', in which case Emacs will trust This variable can also be set to `:all', in which case Emacs will trust
all files, which opens a gaping security hole." all files, which opens a gaping security hole. Emacs Lisp authors
should note that this value must never be set by a major or minor mode."
:type '(choice (repeat :tag "List" file) :type '(choice (repeat :tag "List" file)
(const :tag "Trust everything (DANGEROUS!)" :all)) (const :tag "Trust everything (DANGEROUS!)" :all))
:version "30.1") :version "30.1")

View file

@ -580,7 +580,6 @@ Customized bindings may be defined in `ielm-map', which currently contains:
ielm-fontify-input-enable ielm-fontify-input-enable
(comint-fontify-input-mode)) (comint-fontify-input-mode))
(setq-local trusted-content :all)
(setq comint-prompt-regexp (concat "^" (regexp-quote ielm-prompt))) (setq comint-prompt-regexp (concat "^" (regexp-quote ielm-prompt)))
(setq-local paragraph-separate "\\'") (setq-local paragraph-separate "\\'")
(setq-local paragraph-start comint-prompt-regexp) (setq-local paragraph-start comint-prompt-regexp)
@ -684,7 +683,8 @@ See `inferior-emacs-lisp-mode' for details."
(unless (comint-check-proc buf-name) (unless (comint-check-proc buf-name)
(with-current-buffer (get-buffer-create buf-name) (with-current-buffer (get-buffer-create buf-name)
(unless (zerop (buffer-size)) (setq old-point (point))) (unless (zerop (buffer-size)) (setq old-point (point)))
(inferior-emacs-lisp-mode))) (inferior-emacs-lisp-mode)
(setq-local trusted-content :all)))
(pop-to-buffer-same-window buf-name) (pop-to-buffer-same-window buf-name)
(when old-point (push-mark old-point)))) (when old-point (push-mark old-point))))

View file

@ -1337,8 +1337,7 @@ Semicolons start comments.
\\{lisp-interaction-mode-map}" \\{lisp-interaction-mode-map}"
:abbrev-table nil :abbrev-table nil
(setq-local lexical-binding t) (setq-local lexical-binding t))
(setq-local trusted-content :all))
;;; Emacs Lisp Byte-Code mode ;;; Emacs Lisp Byte-Code mode

View file

@ -11154,7 +11154,9 @@ too short to have a dst element.
(when initial-scratch-message (when initial-scratch-message
(insert (substitute-command-keys initial-scratch-message)) (insert (substitute-command-keys initial-scratch-message))
(set-buffer-modified-p nil)) (set-buffer-modified-p nil))
(funcall initial-major-mode)) (funcall initial-major-mode)
(when (eq initial-major-mode 'lisp-interaction-mode)
(setq-local trusted-content :all)))
scratch))) scratch)))
(defun scratch-buffer () (defun scratch-buffer ()