# HG changeset patch # User Glenn Morris # Date 1254796642 0 # Node ID b9bdbb16b3fa21768e42f2313dac0b95f19821a9 # Parent e3bdbd8a2169889f4b101a6f3858210b461ff96f (rmail-cease-edit): If there is a Content-Type header we don't understand, don't insert another. (Bug#4624) If changing mime charset, insert the new one in the right place. diff -r e3bdbd8a2169 -r b9bdbb16b3fa lisp/ChangeLog --- a/lisp/ChangeLog Tue Oct 06 02:36:35 2009 +0000 +++ b/lisp/ChangeLog Tue Oct 06 02:37:22 2009 +0000 @@ -1,3 +1,9 @@ +2009-10-06 Glenn Morris + + * mail/rmailedit.el (rmail-cease-edit): If there is a Content-Type + header we don't understand, don't insert another. (Bug#4624) + If changing mime charset, insert the new one in the right place. + 2009-10-06 Matthew Junker (tiny change) * calendar/cal-tex.el (cal-tex-cursor-month-landscape) diff -r e3bdbd8a2169 -r b9bdbb16b3fa lisp/mail/rmailedit.el --- a/lisp/mail/rmailedit.el Tue Oct 06 02:36:35 2009 +0000 +++ b/lisp/mail/rmailedit.el Tue Oct 06 02:37:22 2009 +0000 @@ -168,35 +168,43 @@ (string= old (buffer-substring (point-min) (point-max)))) (setq old nil) (goto-char (point-min)) - ;; If they changed the message's encoding, rewrite the charset= - ;; header for them, so that subsequent rmail-show-message - ;; decodes it correctly. - (let ((buffer-read-only nil) - (new-coding (coding-system-base edited-coding)) - old-coding mime-charset mime-beg mime-end) - (when (re-search-forward rmail-mime-charset-pattern - (1- (save-excursion (search-forward "\n\n"))) - 'move) - (setq mime-beg (match-beginning 1) - mime-end (match-end 1) - old-coding (coding-system-from-name (match-string 1)))) - (setq mime-charset - (symbol-name - (or (coding-system-get new-coding :mime-charset) - (if (coding-system-equal new-coding 'undecided) - 'us-ascii - new-coding)))) - (cond - ((null old-coding) - ;; If there was no charset= spec, insert one. - (insert "Content-type: text/plain; charset=" mime-charset "\n")) - ((not (coding-system-equal (coding-system-base old-coding) - new-coding)) - (delete-region mime-beg mime-end) - (insert mime-charset)))) + ;; FIXME the edit may have inadvertently removed this. + (search-forward "\n\n") + (setq headers-end (point-marker)) (goto-char (point-min)) - (search-forward "\n\n") - (setq headers-end (point)) + (save-restriction + (narrow-to-region (point) headers-end) + ;; If they changed the message's encoding, rewrite the charset= + ;; header for them, so that subsequent rmail-show-message + ;; decodes it correctly. + (let* ((buffer-read-only nil) + (new-coding (coding-system-base edited-coding)) + (mime-charset (symbol-name + (or (coding-system-get new-coding :mime-charset) + (if (coding-system-equal new-coding + 'undecided) + 'us-ascii + new-coding)))) + old-coding mime-beg mime-end content-type) + (if (re-search-forward rmail-mime-charset-pattern nil 'move) + (setq mime-beg (match-beginning 1) + mime-end (match-end 1) + old-coding (coding-system-from-name (match-string 1))) + (setq content-type (mail-fetch-field "Content-Type"))) + (cond + ;; No match for rmail-mime-charset-pattern, but there was some + ;; other Content-Type. We should not insert another. (Bug#4624) + (content-type) + ((null old-coding) + ;; If there was no charset= spec, insert one. + (backward-char 1) + (insert "Content-type: text/plain; charset=" mime-charset "\n")) + ((not (coding-system-equal (coding-system-base old-coding) + new-coding)) + (goto-char mime-end) + (delete-region mime-beg mime-end) + (insert mime-charset))))) + (goto-char headers-end) (setq new-headers (rmail-edit-headers-alist t)) (rmail-swap-buffers-maybe) (narrow-to-region (rmail-msgbeg rmail-current-message) @@ -205,6 +213,7 @@ (setq limit (save-excursion (goto-char (point-min)) + ;; FIXME this should not be using NOERROR. (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.