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

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

bug#469: pgg-gpg.el - pgg-gpg-process-region timing problem


From: Thien-Thi Nguyen
Subject: bug#469: pgg-gpg.el - pgg-gpg-process-region timing problem
Date: Mon, 23 Jun 2008 10:43:05 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux)

ChangeLog entry:

        Use process sentinel to monitor gpg subprocess status.

        * pgg-gpg.el (pgg-gpg-process-region): Fix omission bug:
        Use process sentinel to update process status and exit-status.
        Reported by ken manheimer <ken.manheimer@gmail.com>.

patch:
*** pgg-gpg.el  6 May 2008 07:57:46 -0000       1.27
--- pgg-gpg.el  23 Jun 2008 08:40:50 -0000
***************
*** 70,111 ****
            ,@pgg-gpg-extra-args ,@args))
         (output-buffer pgg-output-buffer)
         (errors-buffer pgg-errors-buffer)
!        (orig-mode (default-file-modes))
!        (process-connection-type nil)
!        (inhibit-redisplay t)
!        process status exit-status
!        passphrase-with-newline
!        encoded-passphrase-with-new-line)
      (with-current-buffer (get-buffer-create errors-buffer)
        (buffer-disable-undo)
        (erase-buffer))
      (unwind-protect
!       (progn
          (set-default-file-modes 448)
!         (let ((coding-system-for-write 'binary))
!           (setq process
!                 (apply #'start-process "*GnuPG*" errors-buffer
!                        program args)))
!         (set-process-sentinel process #'ignore)
          (when passphrase
!           (setq passphrase-with-newline (concat passphrase "\n"))
!           (if pgg-passphrase-coding-system
!               (progn
!                 (setq encoded-passphrase-with-new-line
                        (encode-coding-string
!                        passphrase-with-newline
!                        (coding-system-change-eol-conversion
!                         pgg-passphrase-coding-system 'unix)))
!                 (pgg-clear-string passphrase-with-newline))
!             (setq encoded-passphrase-with-new-line passphrase-with-newline
!                   passphrase-with-newline nil))
!           (process-send-string process encoded-passphrase-with-new-line))
          (process-send-region process start end)
          (process-send-eof process)
!         (while (eq 'run (process-status process))
            (accept-process-output process 5))
-         (setq status (process-status process)
-               exit-status (process-exit-status process))
          (delete-process process)
          (with-current-buffer (get-buffer-create output-buffer)
            (buffer-disable-undo)
--- 70,104 ----
            ,@pgg-gpg-extra-args ,@args))
         (output-buffer pgg-output-buffer)
         (errors-buffer pgg-errors-buffer)
!        (inhibit-redisplay t))
      (with-current-buffer (get-buffer-create errors-buffer)
        (buffer-disable-undo)
        (erase-buffer))
      (unwind-protect
!       (let* ((coding-system-for-write 'binary)
!              (process (let ((orig (default-file-modes)))
                          (set-default-file-modes 448)
!                         (prog1 (apply #'start-process "*GnuPG*"
!                                       errors-buffer program args)
!                           (set-default-file-modes orig))))
!              (status (process-status process))
!              exit-status)
!         (set-process-sentinel
!          process (lambda (process reason)
!                    (setq status (process-status process)
!                          exit-status (process-exit-status process))))
          (when passphrase
!           (process-send-string
!            process (if pgg-passphrase-coding-system
                         (encode-coding-string
!                         passphrase
!                         pgg-passphrase-coding-system)
!                      passphrase))
!           (process-send-string process "\n"))
          (process-send-region process start end)
          (process-send-eof process)
!         (while (eq 'run status)
            (accept-process-output process 5))
          (delete-process process)
          (with-current-buffer (get-buffer-create output-buffer)
            (buffer-disable-undo)
***************
*** 120,134 ****
                (error "%s exited abnormally: '%s'" program exit-status))
            (if (= 127 exit-status)
                (error "%s could not be found" program))))
-       (if passphrase-with-newline
-         (pgg-clear-string passphrase-with-newline))
-       (if encoded-passphrase-with-new-line
-         (pgg-clear-string encoded-passphrase-with-new-line))
-       (if (and process (eq 'run (process-status process)))
-         (interrupt-process process))
        (if (file-exists-p output-file-name)
!         (delete-file output-file-name))
!       (set-default-file-modes orig-mode))))
  
  (defun pgg-gpg-possibly-cache-passphrase (passphrase &optional key notruncate)
    (if (and passphrase
--- 113,120 ----
                (error "%s exited abnormally: '%s'" program exit-status))
            (if (= 127 exit-status)
                (error "%s could not be found" program))))
        (if (file-exists-p output-file-name)
!         (delete-file output-file-name)))))
  
  (defun pgg-gpg-possibly-cache-passphrase (passphrase &optional key notruncate)
    (if (and passphrase






reply via email to

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