bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sen


From: Noam Postavsky
Subject: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending
Date: Thu, 16 Apr 2020 20:30:14 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.90 (gnu/linux)

tags 39884 + patch
quit

"Rainer Gemulla" <rgemulla@gmx.de> writes:

> During step 9, this statement is executed, but afterwards, the tag
> variable is not set to the list mentioned in the statement
> (seriously!). In my case, it had value 'Content-Type:
> multipart/alternative; boundary="====-=-="' right afterwards

Yes, it's due destructive modification of a quoted literal value.  To
catch it, I modified mml.el like this:

--- i/lisp/gnus/mml.el
+++ w/lisp/gnus/mml.el
@@ -216,6 +216,8 @@ mml-parse
     (with-syntax-table mml-syntax-table
       (mml-parse-1))))
 
+(defconst mml-text/plain-tag-literal-constant '(type . "text/plain"))
+
 (defun mml-parse-1 ()
   "Parse the current buffer as an MML document."
   (let (struct tag point contents charsets warn use-ascii no-markup-p raw)
@@ -281,7 +283,7 @@ mml-parse-1
            (setq tag (mml-read-tag)
                  no-markup-p nil
                  warn nil)
-         (setq tag (list 'part '(type . "text/plain"))
+         (setq tag (list 'part mml-text/plain-tag-literal-constant)
                no-markup-p t
                warn t))
        (setq raw (cdr (assq 'raw tag))

And added a debug check around setcdr as in the attached
bug-39884-bad-mml-parsing.el file.

Attachment: bug-39884-bad-mml-parsing.el
Description: bug reproducer

This gives the backtrace:

Attachment: setcdr-backtrace.txt
Description: backtrace from the guilty setcdr

The fix is simply to make a fresh cons instead of using a quoted literal
(your backquote fix macroexpands to the same thing, but it's not
sufficiently obvious enough for a human reader to realize that), this
should be safe enough to put on the emacs-27 branch:

>From 16c77ed31d836c374b37cbdf03947567fc7b8581 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Thu, 16 Apr 2020 20:24:26 -0400
Subject: [PATCH] Don't let a code literal get modified in mml parsing
 (Bug#39884)

* lisp/gnus/mml.el (mml-parse-1): Make a fresh cons for the tag type,
because 'mml-generate-mime' destructively modifies it.
---
 lisp/gnus/mml.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index cdd8f3d3a5..556cf0804a 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -281,7 +281,7 @@ mml-parse-1
            (setq tag (mml-read-tag)
                  no-markup-p nil
                  warn nil)
-         (setq tag (list 'part '(type . "text/plain"))
+         (setq tag (list 'part (cons 'type "text/plain"))
                no-markup-p t
                warn t))
        (setq raw (cdr (assq 'raw tag))
-- 
2.11.0


reply via email to

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