changeset 36094:fddc05f3f926

(read-passwd): Clear Lisp memory holding password.
author Gerd Moellmann <gerd@gnu.org>
date Thu, 15 Feb 2001 09:55:14 +0000
parents b34680155c90
children dc2e8b8b1edc
files lisp/subr.el
diffstat 1 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Thu Feb 15 05:00:37 2001 +0000
+++ b/lisp/subr.el	Thu Feb 15 09:55:14 2001 +0000
@@ -1,6 +1,7 @@
 ;;; subr.el --- basic lisp subroutines for Emacs
 
-;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 86, 92, 94, 95, 99, 2000, 2001
+;;   Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -905,7 +906,11 @@
 	  (let ((first (read-passwd prompt nil default))
 		(second (read-passwd "Confirm password: " nil default)))
 	    (if (equal first second)
-		(setq success first)
+		(progn
+		  (and (arrayp second) (fillarray second ?\0))
+		  (setq success first))
+	      (and (arrayp first) (fillarray first ?\0))
+	      (and (arrayp second) (fillarray second ?\0))
 	      (message "Password not repeated accurately; please start over")
 	      (sit-for 1))))
 	success)
@@ -919,11 +924,20 @@
 		    (setq c (read-char-exclusive nil t))
 		    (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
 	(if (= c ?\C-u)
-	    (setq pass "")
+	    (progn
+	      (and (arrayp pass) (fillarray pass ?\0))
+	      (setq pass ""))
 	  (if (and (/= c ?\b) (/= c ?\177))
-	      (setq pass (concat pass (char-to-string c)))
+	      (let* ((new-char (char-to-string c))
+		     (new-pass (concat pass new-char)))
+		(and (arrayp pass) (fillarray pass ?\0))
+		(fillarray new-char ?\0)
+		(setq c ?\0)
+		(setq pass new-pass))
 	    (if (> (length pass) 0)
-		(setq pass (substring pass 0 -1))))))
+		(let ((new-pass (substring pass 0 -1)))
+		  (and (arrayp pass) (fillarray pass ?\0))
+		  (setq pass new-pass))))))
       (clear-this-command-keys)
       (message nil)
       (or pass default ""))))