Commit 09c805a4 authored by Lars Ingebrigtsen's avatar Lars Ingebrigtsen

Add recursion check for comint password prompting

* lisp/comint.el (comint--prompt-recursion-depth): New variable
(bug#33252).
(comint-watch-for-password-prompt): Use it to avoid bugging out
and making Emacs unusable when a shell script is prompting for
passwords in an infloop.
parent 08f0b0b9
Pipeline #2361 passed with stage
in 53 minutes and 48 seconds
......@@ -2372,6 +2372,8 @@ Security bug: your string can still be temporarily recovered with
(define-obsolete-function-alias 'send-invisible #'comint-send-invisible "27.1")
(defvar comint--prompt-recursion-depth 0)
(defun comint-watch-for-password-prompt (string)
"Prompt in the minibuffer for password and send without echoing.
Looks for a match to `comint-password-prompt-regexp' in order
......@@ -2382,7 +2384,10 @@ This function could be in the list `comint-output-filter-functions'."
(string-match comint-password-prompt-regexp string))
(when (string-match "^[ \n\r\t\v\f\b\a]+" string)
(setq string (replace-match "" t t string)))
(comint-send-invisible string)))
(let ((comint--prompt-recursion-depth (1+ comint--prompt-recursion-depth)))
(if (> comint--prompt-recursion-depth 10)
(message "Password prompt recursion too deep")
(comint-send-invisible string)))))
;; Low-level process communication
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment