emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 13e6275: fix rmail armor decryption problems


From: Paul Eggert
Subject: [Emacs-diffs] master 13e6275: fix rmail armor decryption problems
Date: Sun, 24 Feb 2019 13:46:25 -0500 (EST)

branch: master
commit 13e6275e58c3dc84fbb65bc9d05eb875e3096f5f
Author: Richard Stallman <address@hidden>
Commit: Paul Eggert <address@hidden>

    fix rmail armor decryption problems
    
    * lisp/mail/rmail.el (rmail-epa-decrypt): Don't decrypt an armor
    that was copied into the message from a message it is a reply to.
    (rmail-epa-decrypt-1): Catch and ignore errors in
    epa-decrypt-region.  Make armor-start and armor-end markers.
---
 lisp/mail/rmail.el | 33 +++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 36821e8..7f7f0e9 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -4544,6 +4544,9 @@ Argument MIME is non-nil if this is a mime message."
 
     (unless armor-end
       (error "Encryption armor beginning has no matching end"))
+    (setq armor-start (move-marker (make-marker) armor-start))
+    (setq armor-end (move-marker (make-marker) armor-end))
+
     (goto-char armor-start)
 
     ;; Because epa--find-coding-system-for-mime-charset not autoloaded.
@@ -4576,15 +4579,16 @@ Argument MIME is non-nil if this is a mime message."
         (mail-unquote-printable-region armor-start
                                        (- (point-max) after-end))))
 
-    ;; Decrypt it, maybe in place, maybe making new buffer.
-    (epa-decrypt-region
-     armor-start (- (point-max) after-end)
-     ;; Call back this function to prepare the output.
-     (lambda ()
-       (let ((inhibit-read-only t))
-         (delete-region armor-start (- (point-max) after-end))
-         (goto-char armor-start)
-         (current-buffer))))
+    (condition-case nil
+       (epa-decrypt-region
+        armor-start (- (point-max) after-end)
+        ;; Call back this function to prepare the output.
+        (lambda ()
+          (let ((inhibit-read-only t))
+            (delete-region armor-start (- (point-max) after-end))
+            (goto-char armor-start)
+            (current-buffer))))
+      (error nil))
 
     (list armor-start (- (point-max) after-end) mime
           armor-end-regexp
@@ -4620,9 +4624,14 @@ Argument MIME is non-nil if this is a mime message."
       (goto-char (point-min))
       (while (re-search-forward "-----BEGIN PGP MESSAGE-----$" nil t)
        (let ((coding-system-for-read coding-system-for-read)
-             (case-fold-search t))
-
-          (push (rmail-epa-decrypt-1 mime) decrypts)))
+             (case-fold-search t)
+             (armor-start (match-beginning 0)))
+         ;; Don't decrypt an armor that was copied into
+         ;; the message from a message it is a reply to.
+         (or (equal (buffer-substring (line-beginning-position)
+                                      armor-start)
+                    "> ")
+             (push (rmail-epa-decrypt-1 mime) decrypts))))
 
       (when (and decrypts (eq major-mode 'rmail-mode))
         (rmail-add-label "decrypt"))



reply via email to

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