Subject: bug#28671: 25.2; double transfer-encoding in rmailedit for complex mime messages

From: Eli Zaretskii <[email-masked]>
Date: Mon, 02 Oct 2017 19:37:55 +0300

> From: Ken Olum <[email-masked]>
> Date: Mon, 02 Oct 2017 11:37:46 -0400
> Cc: [email-masked]
> 
> When rmail-edit-current-message gets a mime message which is too complex
> for it to handle (i.e., anything but one "text/plain" part), it just
> gives you the raw message to edit.  If you do so, rmail-cease-edit then
> applies the transfer-encoding even though the message wasn't decoded,
> and so on.  It also in some circumstances it also moves the marker for
> the beginning of the following message.
> 
> The attached patch modifies rmail-cease-edit to check the
> rmail-old-mime-state flag set by rmail-edit-current-message when it is
> editing the raw message.  If set, rmail-cease-edit inserts the
> already-encoded body without further processing.  It also deletes the
> old body after inserting the new, rather than before, to avoid moving
> the next message's marker.

Thanks.  Could you please send a small mbox file which could be used
to reproduce the problem and test the solution?

A couple of minor comments to the patch:

>  	;; Re-apply content-transfer-encoding, if any, on the message body.
> -	(cond
> -	 ((string= character-coding "quoted-printable")
> -	  (mail-quote-printable-region start (point-max)))
> -	 ((and (string= character-coding "base64") is-text-message)
> -	  (base64-encode-region start (point-max)))
> -	 ((and (eq character-coding 'uuencode) is-text-message)
> -	  (error "uuencoded messages are not supported")))
> +        (unless mime-state              ; if set, already transfer-encoded
> +          (cond
> +           ((string= character-coding "quoted-printable")
> +            (mail-quote-printable-region start end))
> +           ((and (string= character-coding "base64") is-text-message)
> +            (base64-encode-region start end))
> +           ((and (eq character-coding 'uuencode) is-text-message)
> +            (error "uuencoded messages are not supported"))))

You could easily make the change less intrusive by simply adding the
mime-state condition as the first alternative in 'cond' with no
action, right?

Also, please add a commit log message for the changes formatted as a
ChangeLog entry (e.g., using "C-x 4 a").