emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/emacs-24 r108108: * subr.el (read-passwd):


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/emacs-24 r108108: * subr.el (read-passwd): Better clean after ourselves.
Date: Fri, 02 Nov 2012 02:33:49 -0000
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108108
fixes bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11392
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Wed 2012-05-02 17:34:57 -0400
message:
  * subr.el (read-passwd): Better clean after ourselves.
modified:
  lisp/ChangeLog
  lisp/subr.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-05-02 13:00:29 +0000
+++ b/lisp/ChangeLog    2012-05-02 21:34:57 +0000
@@ -1,3 +1,7 @@
+2012-05-02  Stefan Monnier  <address@hidden>
+
+       * subr.el (read-passwd): Better clean after ourselves (bug#11392).
+
 2012-05-02  Juanma Barranquero  <address@hidden>
 
        * notifications.el (dbus-debug):

=== modified file 'lisp/subr.el'
--- a/lisp/subr.el      2012-04-27 03:10:38 +0000
+++ b/lisp/subr.el      2012-05-02 21:34:57 +0000
@@ -2115,21 +2115,21 @@
               (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 @@
                            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)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]