]> git.eshelyaron.com Git - emacs.git/commitdiff
fix rmail armor decryption problems
authorRichard Stallman <rms@gnu.org>
Sun, 24 Feb 2019 18:45:34 +0000 (10:45 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Feb 2019 18:46:14 +0000 (10:46 -0800)
* 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

index 36821e83e0dad032a034d076b8d640435a8d805d..7f7f0e967d0807c8ca9f13763576e506c4655d20 100644 (file)
@@ -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"))