]> git.eshelyaron.com Git - emacs.git/commitdiff
Add recursion check for comint password prompting
authorLars Ingebrigtsen <larsi@gnus.org>
Wed, 10 Jul 2019 13:23:27 +0000 (15:23 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 10 Jul 2019 13:23:27 +0000 (15:23 +0200)
* 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.

lisp/comint.el

index fbb67360df6b020b4eaa68fedd1d5ec97f512cdf..55e64865a2760c9e86c141c41b8c8380c8305b56 100644 (file)
@@ -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)))))
 \f
 ;; Low-level process communication