changeset 101871:cf870c811594

(rmail-cease-edit): Look for the message's encoding, and its "content-transfer-encoding" and "content-type" headers only in the headers' portion. (Bug#2017)
author Eli Zaretskii <eliz@gnu.org>
date Sat, 07 Feb 2009 15:16:01 +0000
parents 085bed32d1c1
children 288dd91ca0c1
files lisp/mail/rmailedit.el
diffstat 1 files changed, 18 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/rmailedit.el	Sat Feb 07 13:24:06 2009 +0000
+++ b/lisp/mail/rmailedit.el	Sat Feb 07 15:16:01 2009 +0000
@@ -124,7 +124,7 @@
       (insert "\n")))
   (let ((old rmail-old-text)
 	character-coding is-text-message coding-system
-	headers-end)
+	headers-end limit)
     ;; Go back to Rmail mode, but carefully.
     (force-mode-line-update)
     (let ((rmail-buffer-swapped nil)) ; Prevent change-major-mode-hook
@@ -146,16 +146,24 @@
       (rmail-swap-buffers-maybe)
 
       (narrow-to-region (rmail-msgbeg rmail-current-message)
-                       (rmail-msgend rmail-current-message))
+			(rmail-msgend rmail-current-message))
 
-      (setq character-coding (mail-fetch-field "content-transfer-encoding")
-	    is-text-message (rmail-is-text-p)
-	    coding-system (rmail-get-coding-system))
+      (save-restriction
+	(setq limit
+	      (save-excursion
+		(goto-char (point-min))
+		(search-forward "\n\n" nil t)))
+	;; All 3 of the functions we call below assume the buffer was
+	;; narrowed to just the headers of the message.
+	(narrow-to-region (rmail-msgbeg rmail-current-message) limit)
+	(setq character-coding
+	      (mail-fetch-field "content-transfer-encoding")
+	      is-text-message (rmail-is-text-p)
+	      coding-system (rmail-get-coding-system)))
       (if character-coding
 	  (setq character-coding (downcase character-coding)))
 
-      (goto-char (point-min))
-      (search-forward "\n\n")
+      (goto-char limit)
       (let ((inhibit-read-only t))
 	(let ((data-buffer (current-buffer))
 	      (end (copy-marker (point) t)))
@@ -164,14 +172,14 @@
 				  data-buffer))
 	  (delete-region end (point-max)))
 
-	;; Re-encode the message body in whatever
-	;; way it was decoded.
+	;; Re-apply content-transfer-encoding, if any, on the message
+	;; body.
 	(cond
 	 ((string= character-coding "quoted-printable")
 	  (mail-quote-printable-region (point) (point-max)))
 	 ((and (string= character-coding "base64") is-text-message)
 	  (base64-encode-region (point) (point-max)))
-	 ((eq character-coding 'uuencode)
+	 ((and (eq character-coding 'uuencode) is-text-message)
 	  (error "uuencoded messages are not supported yet.")))
 	))