]> git.eshelyaron.com Git - emacs.git/commitdiff
* subr.el (read-passwd): Better clean after ourselves.
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 2 May 2012 21:34:57 +0000 (17:34 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 2 May 2012 21:34:57 +0000 (17:34 -0400)
Fixes: debbugs:11392
lisp/ChangeLog
lisp/subr.el

index d2ab4b60c8b69e0710581c6b48488b2a964e0827..40df0618c0e37c7036c94fee16a745b0de58f969 100644 (file)
@@ -1,3 +1,7 @@
+2012-05-02  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * subr.el (read-passwd): Better clean after ourselves (bug#11392).
+
 2012-05-02  Juanma Barranquero  <lekktu@gmail.com>
 
        * notifications.el (dbus-debug):
index b548f82ca5adf7d6e2f3f3d4735cc49422572f92..1f9f3aee9fa8af9bad0feb4f2f784f5900e8f217 100644 (file)
@@ -2115,21 +2115,21 @@ by doing (clear-string STRING)."
               (message "Password not repeated accurately; please start over")
               (sit-for 1))))
         success)
-    (let (minibuf)
+    (let ((hide-chars-fun
+           (lambda (beg end _len)
+             (clear-this-command-keys)
+             (setq beg (min end (max (minibuffer-prompt-end)
+                                     beg)))
+             (dotimes (i (- end beg))
+               (put-text-property (+ i beg) (+ 1 i beg)
+                                  'display (string ?.)))))
+          minibuf)
       (minibuffer-with-setup-hook
           (lambda ()
             (setq minibuf (current-buffer))
             ;; Turn off electricity.
             (set (make-local-variable 'post-self-insert-hook) nil)
-            (add-hook 'after-change-functions
-                      (lambda (beg end _len)
-                        (clear-this-command-keys)
-                        (setq beg (min end (max (minibuffer-prompt-end)
-                                                beg)))
-                        (dotimes (i (- end beg))
-                          (put-text-property (+ i beg) (+ 1 i beg)
-                                             'display (string ?.))))
-                      nil t))
+            (add-hook 'after-change-functions hide-chars-fun nil 'local))
         (unwind-protect
             (read-string prompt nil
                          (let ((sym (make-symbol "forget-history")))
@@ -2137,7 +2137,14 @@ by doing (clear-string STRING)."
                            sym)
                          default)
           (when (buffer-live-p minibuf)
-            (with-current-buffer minibuf (erase-buffer))))))))
+            (with-current-buffer minibuf
+              ;; Not sure why but it seems that there might be cases where the
+              ;; minibuffer is not always properly reset later on, so undo
+              ;; whatever we've done here (bug#11392).
+              (remove-hook 'after-change-functions hide-chars-fun 'local)
+              (kill-local-variable 'post-self-insert-hook)
+              ;; And of course, don't keep the sensitive data around.
+              (erase-buffer))))))))
 
 ;; This should be used by `call-interactively' for `n' specs.
 (defun read-number (prompt &optional default)