From: Lars Ingebrigtsen Date: Wed, 10 Jul 2019 13:23:27 +0000 (+0200) Subject: Add recursion check for comint password prompting X-Git-Tag: emacs-27.0.90~2015 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=09c805a40591a73591d6a609cf74ae7ce3ddd93a;p=emacs.git 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. --- diff --git a/lisp/comint.el b/lisp/comint.el index fbb67360df6..55e64865a27 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -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