bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#1104: pasting a password


From: Chong Yidong
Subject: bug#1104: pasting a password
Date: Sun, 16 Nov 2008 01:01:21 -0500

> DW> Login Name: myname
>
> DW> Login Password: {SHA}reallylongsodontaskmetotypeitinbyhandplease
>
> DW> Login URL: http://wiki.debian.org/UserPreferences
>
> The problem is C-y is just read as a raw character there at the
> mini buffer Password: prompt. emacs-w3m-version "1.4.263".
>
> KY> That's what `read-passwd' that is an Emacs function does.  In
> KY> the function definition, the special keys that it handles are
> KY> only C-h, C-u and C-? (see the doc string).

The following patch allows yanking into the password prompt (I haven't
changed the docstring of read-passwd, which needs doing).  What do
people think about the advisability of this?

Note, in particular, that we can detect any key that performs yank or
yank-pop by using `key-binding'---but it works only if the command is a
single-character key sequence.  That's fine for C-y, but fails if the
user has customized `yank' to a two-character sequence.  I don't see any
way around this, though.

Another shortcoming is that the user can no longer enter a literal C-y;
but this may be a negligble problem---currently, the user can't enter
C-u either, since C-u clears the field.


*** trunk/lisp/subr.el.~1.620.~ 2008-11-06 01:49:41.000000000 -0500
--- trunk/lisp/subr.el  2008-11-16 00:48:31.000000000 -0500
***************
*** 1818,1838 ****
                      (setq c (read-char-exclusive nil t))
                      (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
          (clear-this-command-keys)
!         (if (= c ?\C-u)
!             (progn
!               (and (arrayp pass) (clear-string pass))
!               (setq pass ""))
!           (if (and (/= c ?\b) (/= c ?\177))
!               (let* ((new-char (char-to-string c))
!                      (new-pass (concat pass new-char)))
!                 (and (arrayp pass) (clear-string pass))
!                 (clear-string new-char)
!                 (setq c ?\0)
!                 (setq pass new-pass))
!             (if (> (length pass) 0)
!                 (let ((new-pass (substring pass 0 -1)))
!                   (and (arrayp pass) (clear-string pass))
!                   (setq pass new-pass))))))
        (message nil)
        (or pass default "")))))
  
--- 1818,1845 ----
                      (setq c (read-char-exclusive nil t))
                      (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
          (clear-this-command-keys)
!         (cond ((= c ?\C-u)
!                (and (arrayp pass) (clear-string pass))
!                (setq pass ""))
!               ((memq (key-binding (vector c))
!                      '(yank yank-pop))
!                (let ((new-pass (concat pass
!                                        (substring-no-properties
!                                         (current-kill 0)))))
!                  (and (arrayp pass) (clear-string pass))
!                  (setq c ?\0)
!                  (setq pass new-pass)))
!               ((and (/= c ?\b) (/= c ?\177))
!                (let* ((new-char (char-to-string c))
!                       (new-pass (concat pass new-char)))
!                  (and (arrayp pass) (clear-string pass))
!                  (clear-string new-char)
!                  (setq c ?\0)
!                  (setq pass new-pass)))
!               ((> (length pass) 0)
!                (let ((new-pass (substring pass 0 -1)))
!                  (and (arrayp pass) (clear-string pass))
!                  (setq pass new-pass)))))
        (message nil)
        (or pass default "")))))
  

Diff finished.  Sun Nov 16 00:51:53 2008






reply via email to

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