From debbugs-submit-bounces@debbugs.gnu.org Tue Mar 03 10:36:54 2020 Received: (at submit) by debbugs.gnu.org; 3 Mar 2020 15:36:54 +0000 Received: from localhost ([127.0.0.1]:39862 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j99bJ-00088l-FP for submit@debbugs.gnu.org; Tue, 03 Mar 2020 10:36:53 -0500 Received: from lists.gnu.org ([209.51.188.17]:44607) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j99bI-00088d-2E for submit@debbugs.gnu.org; Tue, 03 Mar 2020 10:36:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:47302) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j99bG-0006zS-6r for bug-gnu-emacs@gnu.org; Tue, 03 Mar 2020 10:36:51 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=BAYES_50,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPOOFED_FREEMAIL,URIBL_BLOCKED autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j99bE-0002nO-7y for bug-gnu-emacs@gnu.org; Tue, 03 Mar 2020 10:36:50 -0500 Received: from mout.gmx.net ([212.227.15.18]:36875) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j99bD-0002mO-OW for bug-gnu-emacs@gnu.org; Tue, 03 Mar 2020 10:36:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1583249805; bh=kS1OLcBr35nfMe2SqqNONrYEwBcjg3/186QzgygRV50=; h=X-UI-Sender-Class:From:To:Subject:Date:Reply-To; b=GWhB4wcy/KquWuv9Hz5c91gUgt4IbUJ2phhzVgbWpFB/CMohmUxT+kWLBk9Apkfoa QzbBybHekc/UeKUOmTkepv2xICjQljxnZ6KMgUNLOa7KbfY5P3ZiVQAgPqD/tkVDbY vvfvosNx0RjUFMxV3YVuAl+8i++U7xPo67wegdcY= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [134.155.85.75] ([134.155.85.75]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MKsjH-1ioSLg1sQn-00LIEB for ; Tue, 03 Mar 2020 16:36:45 +0100 From: "Rainer Gemulla" To: bug-gnu-emacs@gnu.org Subject: 27.0.50; Emacs may destroy outgoing email messages during sending Date: Tue, 03 Mar 2020 15:36:37 +0000 Message-Id: User-Agent: eM_Client/7.2.35595.0 Mime-Version: 1.0 Content-Type: multipart/signed; boundary="------=_MB0BE8C248-8358-4AA5-8CC8-B74AA9D2AEC7"; protocol="application/pgp-signature"; micalg=SHA-256 X-Provags-ID: V03:K1:Uk2N3u8v/XFH7Zoz2UU0PMxeIIXa7DD/La5m71O5FgGCVLFiEIu 3xBV8Jz0NojPSYy6lizkDTK+fobaqdbLf+Va70j95WPbZdQ2WaDj0yeOQqS6F4/2pVQwcAX 9kg+9gxEXMAFjKeNMGr3/En6BD7vue/NqGlF2pIVh+8u/gJ2uak3H841iipLsi4c9iT41tE CpcvTPDhyhRpeT3m870WA== X-UI-Out-Filterresults: notjunk:1;V03:K0:/dPPBTpDXm4=:RH/z6qdZt2X6xC2dIMGM5F FGFu9lsLOfAY5yAXT0/XGeosSptDRyQVmKlIxiS5vtgnOomDpzrro0/H0gqBpj2Hrut1dZa3u 6fhAaZW4+HtIYkPzhV+ulIBnTOozQctNtI45XPHW+OpdTwhpveXP/ROnicfj3Sn1FDWpdS1RX 0alRA+7DqMOawDypnjbG/AUgVOwjqT4lVLagi1Pyr/Gt3yvJkpCz72TUkXQ21HUnwl2V62Xj7 jL4BwumZNu2UoX45gcFlljjVm57rLec+KBFO3FMExV9yDuNTR51kB7RKbMJc/9lw9N+R6JIGe WLORDgCIahfMTU+in4k1nI/h4sdigkeU8WVnlR6OSy8EqAXrK0ji+OYbGI51UCzC/9is6kIGD ta0hdyxFKj5a9UN/YwlLV2J+qXZYCCCb/PF8vXVtKzJoIgvb51semmQiirCdVnhv+DEvp28L8 BTmhzaWp3azU3t8RXe/TabAnGz8Mjds1/nNbMv3jFmd6Kgx6MIC3mGyRGvjjk4jOs6wOgT/x0 v2CmvW52JXK3bToXZQnA4ynIJf/yQznIgpJdoFmZwiWvK+zaB1TObDq5x5i7aPiTzvNR47Lxg mCyjfnmFG6Yj2+gTH26pGAjThvzV69/rxqjp83Q1lKAIlQSR1objdvqBxJhFmexk34QoZjc/j csoQnl6VHwNBN6wReDNM3PY/ZmCw0HiPuuxmgmYrU17sm36IXsYc/+Jrc0Wir0KmU++KQz9BU AGUgUa7sw5/Y0eOYOJZIiai/hA5DmdwaBYwis7EucB5aOWlhLzQNlwOM/rVAOTtJhqD0GqEo8 rwajmSeQIIhMDST5uUwmVzjX6n7scXubB7TAMJB95uwOlON/yoRuUOCVb1+grPCG0ZgAvm7p4 IPtxjZqiifuTJ4NEv5t2gNf3X/rSffb1lf2ZcUZe+T3MMO3ZkkWlQiHKKAQQgjrGMUD73hE16 ce6wA+S8JpBY3qKvhivCBRaKZbvS9MiN1d+gnh0JoRNPPoYWyRmH0k7prN3YwWXRkoSyAxUm3 U6ZImAhVPlnZFDg9Fi9Cw8yNUhAcYb6Cg2+F+HI6MuqjuMpM1pQeAcW1hLdOIH/SDqXKb0+SK E5G4NmqO4KR9jCU00d32jWI5UjpZ66pQvwVUqcpYQU9gVcQuHsvdcSEh4AJGR1IKS4GOiVVoN KxWJmEZwfRw5F1rpiKrrjr0E+qa+62qH99htQITR7bpt7PYxj8dqj97nOmKrvceKLDvPhrv+m oMaEcghCVTUVVVEmR X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.15.18 X-Spam-Score: 0.2 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Rainer Gemulla Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.8 (/) --------=_MB0BE8C248-8358-4AA5-8CC8-B74AA9D2AEC7 Content-Type: multipart/alternative; boundary="------=_MBC8DD49D3-5B1B-4C29-8C99-FAAFE030DDF1" --------=_MBC8DD49D3-5B1B-4C29-8C99-FAAFE030DDF1 Content-Type: text/plain; format=flowed; charset=utf-8 Content-Transfer-Encoding: quoted-printable I am composing emails using Emacs message mode. Shortly after switching=20 to Emacs 27, some people complained to me that they could not read some=20 of emails I sent them. I checked in my local email archive: even my=20 archived emails were not readable with Emacs any more. This is a major=20 bug, and for this reason I switched back to Emacs 26. It is my current=20 understanding that the bug occurs when (1) forwarding messages and (2)=20 signing the forwarded messages using GPG. So not everyone seems to be=20 affected. Nevertheless, I experienced this bug on multiple machines (in=20 fact, on all machines that I tried). The rest of this email explains where the bug arises and how to=20 reproduce it. Before sending an email, Emacs converts the email text to MIME. This=20 conversion process is performed by a function called mml-to-mime. I=20 found that this function (or it's interaction with signing) is=20 responsible for Emacs 27 destroying emails: the produced MIME can be=20 invalid. This happens mostly when there are multiple mml parts in the=20 original email, which is the case when forwarding an email. After some playing around, I found a way to reproduce the bug. It's=20 somewhat painful, but the error consistently arises. I first list the=20 steps, then the original email, then its correct MIME encoding, and the=20 incorrect MIME encoding that Emacs may produce. Note that step 3+4=20 encode the message for the first time (all fine), steps 5-7 add signing,=20 steps 8-9 encode the orginal message again (without signing, now=20 broken). 1. Run: emacs -Q 2. M-x message-mode 3. Clear scratch buffer, paste original message 4. M-: (mml-to-mime) --> gives CORRECT result 5. Clear scratch buffer, paste original message 6. Insert a new line "<#secure method=3Dpgpmime mode=3Dsign>" at start of= =20 message (after line "--text follows this line--"). This makes Emacs try=20 to sign the mail. 7. M-: (mml-to-mime) --> throws (expected) signer name error 8. Clear scratch buffer, paste original message 9. M-: (mml-to-mime) --> broken result (first Content-Type after "text follows..." is=20 wrong) I tried to track down the bug further and found this piece of code in=20 mml-parse-1, line 284: (setq tag (list 'part '(type . "text/plain")) no-markup-p t warn t) During step 9, this statement is executed, but afterwards, the tag=20 variable is not set to the list mentioned in the statement (seriously!).=20 In my case, it had value 'Content-Type: multipart/alternative;=20 boundary=3D"=3D=3D=3D=3D-=3D-=3D"' right afterwards (as in the incorrect re= sult=20 below). At this point I gave up, looks like a deeper problem. ORIGINAL MESSAGE From: a@b.ce To: c@d.de Subject: Test --text follows this line-- Test <#mml type=3Dmessage/rfc822 disposition=3Dinline> <#multipart type=3Dalternative> <#part type=3Dtext/plain charset=3D"UTF-8" disposition=3Dinline nofile=3Dye= s> Some text. <#part type=3Dtext/html charset=3D"UTF-8" nofile=3Dyes> Some more text. <#/multipart> <#/mml> CORRECT RESULT From: a b.ce To: c d.de Subject: Test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=3D"=3D-=3D-=3D" --text follows this line-- --=3D-=3D-=3D Content-Type: text/plain Test --=3D-=3D-=3D Content-Type: message/rfc822 Content-Disposition: inline --=3D=3D=3D=3D-=3D-=3D Content-Disposition: inline MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=3D"=3D=3D=3D=3D-=3D-=3D" Some text. --=3D=3D=3D=3D-=3D-=3D Content-Type: text/html; charset=3Dutf-8 Some more text. --=3D=3D=3D=3D-=3D-=3D-- --=3D-=3D-=3D-- INCORRECT RESULT AFTER STEP 9 From: a b.ce To: c d.de Subject: Test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=3D"=3D-=3D-=3D" --text follows this line-- --=3D-=3D-=3D Content-Type: multipart/alternative; boundary=3D"=3D=3D=3D=3D-=3D-=3D" Content-Transfer-Encoding: base64 VGV4dAoK --=3D-=3D-=3D Content-Type: message/rfc822 Content-Disposition: inline --=3D=3D=3D=3D-=3D-=3D Content-Disposition: inline MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=3D"=3D=3D=3D=3D-=3D-=3D" Some text. --=3D=3D=3D=3D-=3D-=3D Content-Type: text/html; charset=3Dutf-8 Some more text. --=3D=3D=3D=3D-=3D-=3D-- --=3D-=3D-=3D-- --------=_MBC8DD49D3-5B1B-4C29-8C99-FAAFE030DDF1 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
I am composin= g emails using Emacs message mode. Shortly after switching to Emacs 27, som= e people complained to me that they could not read some of emails I sent th= em. I checked in my local email archive: even my archived emails were not r= eadable with Emacs any more. This is a major bug, and for this reason I swi= tched back to Emacs 26.=C2=A0It is my current understanding that the bug oc= curs when (1) forwarding messages and (2) signing the forwarded messages us= ing GPG. So not everyone seems to be affected. Nevertheless, I experienced= this bug on multiple machines (in fact, on all machines that I tried).

The rest of this ema= il explains where the bug arises and how to reproduce it.

<= /div>
Before sending an email, Emacs conv= erts the email text to MIME. This conversion process is performed by a func= tion called mml-to-mime. I found that this function (or it's interaction wi= th signing) is responsible for Emacs 27 destroying emails: the produced MIM= E can be invalid. This happens mostly when there are multiple mml parts in= the original email, which is the case when forwarding an email.
<= /div>

After some playing around, I found a way to reproduce the bug. It's some= what painful, but the error consistently arises. I first list the steps, th= en the original email, then its correct MIME encoding, and the incorrect MI= ME encoding that Emacs may produce. Note that step 3+4 encode the message f= or the first time (all fine), steps 5-7 add signing, steps 8-9 encode the o= rginal message again (without signing, now broken).

1. Run: emac= s -Q

2. M-x message-mode
3. Clear scratch buffer= , paste original message=C2=A0
4. M-: (mml-to-mime)=C2=A0--> gives= CORRECT result

5. Clear scratch buffer, paste or= iginal message=C2=A0
6. Insert a new line "<#secure method=3Dp= gpmime mode=3Dsign>" at start of message (after line "--text follows thi= s line--"). This makes Emacs try to sign the mail.
7. M-: (mml-to-mime= )=C2=A0--> throws (expected) signer name error

=
8. Clear scratch buffer, paste original message=C2=A0
9. M-: (mml-to-mime)=C2=A0
=C2=A0 = --> broken result (first Content-Type after "text follows..." is wrong)=

I tried to track down the bug further and found this piece of cod= e in mml-parse-1, line 284:

(setq tag (list 'part '(type . "text= /plain"))
=C2=A0 =C2=A0=C2=A0 =C2=A0no-markup-p t
=C2=A0 =C2=A0= =C2=A0 =C2=A0warn t)

During step 9, this statement is executed,= but afterwards, the tag variable is not set to the list mentioned in the st= atement (seriously!). In my case, it had value 'Content-Type: multipart/alt= ernative; boundary=3D"=3D=3D=3D=3D-=3D-=3D"' right afterwards (as in the in= correct result below). At this point I gave up, looks like a deeper problem= .


ORIGINAL MESSA= GE
From: <= a href=3D"mailto:a@b.ce">a@b.ce
To: c@d.= de
Subject: Test
--text follows this line--
Test
<#mml type=3Dmessage/rfc822 disposition=3Dinline>
<#multi= part type=3Dalternative>
<#part type=3Dtext/plain charset=3D"UTF= -8" disposition=3Dinline nofile=3Dyes>
Some text.
<#part ty= pe=3Dtext/html charset=3D"UTF-8" nofile=3Dyes>
Some more text.
<#/multipart>
<#/mml>


<= div>
CORRECT RESULT
From: a <at> b.ce
To: c <at> d.de
Subject= : Test
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary= =3D"=3D-=3D-=3D"
--text follows this line--
--=3D-=3D-=3D
Content-Type: text/plain

Test

<= /font>
--=3D-=3D-=3D
Content-Type: message/rfc822
Content-Di= sposition: inline

--=3D=3D=3D=3D-=3D-=3D
Content-Dispositio= n: inline
MIME-Version: 1.0
Content-Type: multipart/alternative;= boundary=3D"=3D=3D=3D=3D-=3D-=3D"

Some text.

--=3D=3D= =3D=3D-=3D-=3D
Content-Type: text/html; charset=3Dutf-8

Som= e more text.

--=3D=3D=3D=3D-=3D-=3D--

--=3D-=3D-=3D--=


INCORRECT RESULT AFTER ST=
EP 9
From: a <at> b.ce
To: c <at> d.de
Subject: Test
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=3D"=3D-=3D-=3D"
--text follows this line--
--=3D-=3D-=3D
Content-Type: multipart/alternative; boundary=3D"=3D=3D=3D=3D-=3D-=3D"
Content-Transfer-Encoding: base64

VGV4dAoK
--=3D-=3D-=3D
Content-Type: message/rfc822
Content-Disposition: inline

--=3D=3D=3D=3D-=3D-=3D
Content-Disposition: inline
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=3D"=3D=3D=3D=3D-=3D-=3D"

Some text.

--=3D=3D=3D=3D-=3D-=3D
Content-Type: text/html; charset=3Dutf-8

Some more text.

--=3D=3D=3D=3D-=3D-=3D--

--=3D-=3D-=3D--

--------=_MBC8DD49D3-5B1B-4C29-8C99-FAAFE030DDF1-- --------=_MB0BE8C248-8358-4AA5-8CC8-B74AA9D2AEC7 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: BCPG C# v1.8.1.0 iQI+BAABCAAoBQJeXnmKIRxSYWluZXIgR2VtdWxsYSA8cmdlbXVsbGFAZ214LmRl PgAKCRB0pw6+EqKRW8KaEACeLdMW3wF6W77D2dki4IeSP+en6Ykfyv7cQ0mLuVHU 4eEdsFx+Pa8edewh8ADWHS9XZ+QvYxQpVlpD3rNyLPeRgsCYbC0n+hqEnbxOEwzC eXCWlYHDLDE14lKXzNgPRsCpJFD2R7B21sxbG2QWUvX9ZLAB25qQanG2rLbohv7k 7xRI9PB2BuPD4UEu1aipQ0EBSxV1j52kYTx2rwIeC/F2iVaOR/nSs4N3jI3gRdv4 +KBl3OnFdy6nIHUl5iiW2OoLCvjW1KrEGbw1g3TFvZ+VgpW7IrJKnrVoVnsg2QUi n9LOIsbrQD7bnpp1tG8Ln3qa7MbSENxH34TaynNd4RrJcG3Q2f0JFKWhaxT9PD+w A0OarDNINqsqpN/sfwwwlg/0gorvvjBHRGdKIWxKGZyeUvTXoR5S373fes3sXbZT vTg5bdAXVVDVfBuU3OB7AfZcQ8j2wCnbeJMHMzutSyU/BDkJ/1z99x/OmH6JVOdo 3c0xBU1k09YAq29HdVs2pWpDoLo0rpPqZyEa9HM6DfymPrr3jAbO2QJYUpHAAJvY uRShsKER6aRBPqfAKpp/GOhAoD68fomOyM5D5Y70++YXBFTaJuSaCIqLDmTmDw1p 1MRE3Vw5tZBoM/x/M29nez/UqVemrHdVgBLpzYC7h5cUObO4QG8J/NPWngXRqixI HQ== =ufqc -----END PGP SIGNATURE----- --------=_MB0BE8C248-8358-4AA5-8CC8-B74AA9D2AEC7-- From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 15 03:52:42 2020 Received: (at 39884) by debbugs.gnu.org; 15 Apr 2020 07:52:42 +0000 Received: from localhost ([127.0.0.1]:35187 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOcqg-0006TK-Hr for submit@debbugs.gnu.org; Wed, 15 Apr 2020 03:52:42 -0400 Received: from mout.gmx.net ([212.227.15.18]:39619) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOcqd-0006T7-Uz for 39884@debbugs.gnu.org; Wed, 15 Apr 2020 03:52:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1586937153; bh=jSMsWjYeVUsTCPhHM3yYFEi9TEtx1CmyiF3HCczmomk=; h=X-UI-Sender-Class:From:To:Subject:Date; b=EDCa5sUKszQaBmCpOaViWcpGQtmS7IGsX4FgFDuD3NcFzEjoV4msEUyKnoyA8twZp Gwf+yESaUIhxgB+Vc4JPTniU1usyQcM/NrhL6gcNXSXQsOsL1nL49z/KNYpDgWji3u GDkcQ+si/gRyQ4rt1YzIS9P6JIqtS4v0cOL8AQEI= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost ([88.130.159.147]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MrQEn-1isGFa2NIF-00oXVo for <39884@debbugs.gnu.org>; Wed, 15 Apr 2020 09:52:33 +0200 From: Rainer Gemulla To: 39884@debbugs.gnu.org Subject: Simple fix Date: Wed, 15 Apr 2020 09:51:46 +0200 Message-ID: <87pnc95gq5.fsf@macho> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Provags-ID: V03:K1:oMtCPfxLuxkhmk7UbXpQlsS8Sw6YwQL9XwOOftytvTU1hrOZTqs jhcFDd8xgvcmvbUSGNxicTm8emA6YJGKU34wJiXzfW6+JdagPA2rjgCERo2lugdMi4pFXUI qatVM7E6kCTDeHfEBvlwqMWxVfULAJMYX/e9oWyuMbnScotgIEsSA4Ajh6dZPemdP3wwHdK omvO4UjzGzXnPd+FZLIXA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:un0MC2fw7ZA=:s003Am5mMpOLIPpXSdK7ai s6MbDbQrZdi/QyoMnwmZgj/keLsyyHCTN/RWkK/MDQsdOyzw5ow1stIy+b4JfZ7Go+C5akGaR QPAD9L4u4rlPDq/2xsvRkguwpQG93+5yw4A6isZYbnptCqooe1Ikd18FYtmVSePDa7geuNBBS SzuYGOT9o6NnKT5MRDAep0WjaQ8R+rQIeub9iJWncPHI394nqPXy3z45vaZpR/1qzwGl6SGhD RL/+xygyMufGzqkLDezgo4Cn3f6TKyW0Iu0RSfwLwAbrns/U155OLi6Px66diqK8NQTcICXYU 7pDsJM7LJQv/PugechQqaNG7YzYB7hzLvuWTux1Cmf0A4uMAnCgP1FrB2N5fFa5cw6k6blfmq uxmks/fOK8PWhvFxd2JB6RO7IKTMVHspVXHkwo1bvF8xiysn68dBBbKDCxg4+sG2s8u3N2LFe f9Pd/9ncxX8HHkNH45X0P4HmhkuuaRULKRWaAM8EsGz0PIYoyfQioGRY3Xr0YaJ1RsedUBeah 5f6OEXAEgS8vWYRPqebpU0Fzj02/0fuw9vvZwwTKg6+OhfDKxB1gVNhfyfjd4AXRMbE4Hhxd9 +OhwZ18abSgtJ1h8kjjd4fApUWB62vNHHQ6ivrkcGJGOzIE94p22X/w6ZmmSNBT2wKQhvNbJu YCmOPisRvPeWenmgBzWA8yXKnNbh2oGUhd+buXJ3M2fRWyuEVsk3tB14MONbVNl9VAhxUfwFX mBMRaf/Rm59RtcoFQPjrwqqbBf0KT/fFLGcT8GJ53ZjzsbqEpvGk0Eg7XAWCKVLRC/9JCo1hr Jm/qXgobgRueSZKdYlGOGWpeU6JE11Q1c0NxeKRrkCB3p0BOd4hbO/+xFdIAeQSLqH/U9Q7Z6 pKkit/NH1bwxhtvpyBrpwIYRB3LOD7KGSxrXWj8su7pqPCVy9EUrTP82+WbkyvstY6qtKPK/R j2z0LgFsQ7qPOxDMjmfQhfWy04f2WhCk+Gi1kwYElM9M6XknQwLPgenF0bMFDvden9zHbeVrw jH6t56qvfr0lYyxeDsZv05l6+bOqhfy8tkC5nJ4wy7n2nCEkOB0DlQHupwx1PdRMA9A6k2SQy IcAlY9klJ3KQKONgjEy0xuL9M2pWNIe5H1CWhKXDdR6CQI3OvQn4LA8l4jQKdMoOTsi2twYZd NkIIwMVxuw6oIZg6RUXT2L3BS5r5WZn4cCsF8D32h3sWi7s2mbmm7J5vi+VFt2ksRM1kXz6+6 FoyrXoJNI0aUguAUh X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 39884 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain Replacing in function mml-parse-1 (mml.el, line 284): (setq tag (list 'part '(type . "text/plain")) no-markup-p t warn t) with (setq tag `(part (type . ,"text/plain")) no-markup-p t warn t) seems to fix this bug. It's not clear to me why though. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJEBAEBCgAuFiEEmtshwn9RGtTGGzefdKcOvhKikVsFAl6WvRIQHHJnZW11bGxh QGdteC5kZQAKCRB0pw6+EqKRW3HNEACoJxvRr8nAk3mAuRy1CSaKNlMrg9uCR8T/ ssFvh7uXrV5YC1JvtlgL6TNlLafUWau1pc/20LmG3F49Ft11NQk2qiruJQoT4kKS AMqfMu0YXECh6Kdn0QRFtDB2/mw3eSATxT9tRt7CtZpUWh5RKlsdhCP1Cu3SnJ+L ipU1REfK+uvDGmZi2LCEhI9dh2YNn2Xcvd2QcANa7z6o6QiRJflXwf13/eSmgp4W 7vmcix6s52OdMJApatzrLNtQWtGteTodc4HYUq2N69ErTZyEImXy0GQQEAQRBTTa S5TrSO24wxtsfsuZ6aoIHiRasHAHXbudtQnoa8AH7b+Re6DdddlU24tjEaaijVPd W5TqrvlewetcRZ/0f26PGWnq1HhDA2mhq4ccAuzdimrwRZVM0+XAdiLwpqs01ctR oNslfv0BWeHyJrei/GtjFMMTiKkvUgXLDxrFBTWERaemQxhfaclMElPw2Qvc6Dov FScFfTP5zZ37HRxXU9J0u1A3MPnm3eUi4GROO1FOaiRpKB//VUbuR3QyRnQFFFvW f6oXQjzijaOeOXQW8VafHTmLlvI1s2yGVEd09DhzRBIJdPDJzshQxSRErgixUUK0 ydeAmQHnaFGkMO8Q6O3b2WC9CkluezBnu37ZNynMhycCmtMyN3qBtuIiiE/K05B3 ltIyLXGTRg== =RXVP -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 15 08:25:16 2020 Received: (at 39884) by debbugs.gnu.org; 15 Apr 2020 12:25:16 +0000 Received: from localhost ([127.0.0.1]:35355 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOh6S-0002yO-EY for submit@debbugs.gnu.org; Wed, 15 Apr 2020 08:25:16 -0400 Received: from mail-oi1-f177.google.com ([209.85.167.177]:43242) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOh6Q-0002yA-RC for 39884@debbugs.gnu.org; Wed, 15 Apr 2020 08:25:15 -0400 Received: by mail-oi1-f177.google.com with SMTP id j16so13265304oih.10 for <39884@debbugs.gnu.org>; Wed, 15 Apr 2020 05:25:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=JetNGCGAnc+TIDsyKCR37n3adH4p2JQ/o6K37aLo7kc=; b=FH6KuAleAceFYIQ3aYdzFKmgJAzT3ZJq2X7muW6c+Rwb2e2zzdvKk7vHaT5uJZAJcb vcbeM97gFbnuEAJNJstwvPTZcy58tH+FA5hvD88ji4hlgmdA3qMvfOaI21KWKgkWBy7V NMatvXyFZjvx05bmQ1HBIHH4btnVRN0VDlaXaL84O7GV+Luooo+pOD2A2ThjbbouTLs8 O5CkqtDg0LSdsbzXlKmtLSIxDOhKklI7x7kl3UHlL4NRefeI+Zv378KF2e0idGZY8HCG HV5u2qB0bV6f1nh3zg6ep6MEHnvKVB7C+mHzuHF5ZgX7x4No0Xx+lG4iIYCY6/U4uJXF bTkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=JetNGCGAnc+TIDsyKCR37n3adH4p2JQ/o6K37aLo7kc=; b=t6GGDu1f7BsE3ze5pq/5ImCwlJpeluowpZfnd1ApBFWaxDbKvMLLiCQZGkocn6bdeH u+g7R9SNJBwB6AuqHmfspO0rj/NdE54L57ruIvIXSgCvwF0Jgvyy9TBwad+Gx9YtWsU0 zPSpvveIzG9RJMn7DoxeEIyNxd3Bd14rktLoM3+qTxtebhXmr1kNrM+Iap57iydFUeXg jVnH+67C2dqMnhj1JSjVlEdw66dJ0SxY4YMC9zANLB6B4lopMOqsvQVn3Oy+qiKQKyP7 xGgXSWZm1qrmFuJGPoQpxCHXrfShKnrSxOnVA4KkQNfDv40BjnHdZzFMTlAGFmXKc125 YdvQ== X-Gm-Message-State: AGi0Puaope+bU/IDdW6TkMHCmvXLIejcvBwV9beYE3Sm48d2Poeujzyj uJwG8KrjjTWBJpBlgtYZ8VNtl9tb06NpKuyuRF4= X-Google-Smtp-Source: APiQypLVvd/JH0uJVukdlfsPpMGY24yJmCFdgDpu/HGc8rQqXpo4yIH8VcSTO+lwEF63oYNKBPG5cGhQvLjQuKL6rqM= X-Received: by 2002:aca:b984:: with SMTP id j126mr3668775oif.87.1586953509254; Wed, 15 Apr 2020 05:25:09 -0700 (PDT) MIME-Version: 1.0 References: <87pnc95gq5.fsf@macho> In-Reply-To: <87pnc95gq5.fsf@macho> From: Noam Postavsky Date: Wed, 15 Apr 2020 08:24:52 -0400 Message-ID: Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending To: Rainer Gemulla Content-Type: multipart/mixed; boundary="00000000000031e46d05a353684e" X-Spam-Score: -0.8 (/) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.8 (-) --00000000000031e46d05a353684e Content-Type: text/plain; charset="UTF-8" On Wed, 15 Apr 2020 at 03:55, Rainer Gemulla wrote: > > Replacing in function mml-parse-1 (mml.el, line 284): > > (setq tag (list 'part '(type . "text/plain")) > no-markup-p t > warn t) > > with > > (setq tag `(part (type . ,"text/plain")) > no-markup-p t > warn t) > > seems to fix this bug. It's not clear to me why though. mml-parse-1 calls nconc on tag, so it's likely some destructive modification of code literals is happening. However, I'm not able to reproduce the bug following your instructions on the latest emacs-27 checkout. I'm attaching a lisp file which automates the process (I also tried doing it manually, in case that makes a difference). --00000000000031e46d05a353684e Content-Type: text/x-emacs-lisp; charset="US-ASCII"; name="bug-39884-bad-mml-parsing.el" Content-Disposition: attachment; filename="bug-39884-bad-mml-parsing.el" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k91b34610 KGRlZmNvbnN0IGJ1Zy0zOTg4NC1vcmlnLW1lc3NhZ2UgIlwKRnJvbTogYSA8YXQ+IGIuY2UKVG86 IGMgPGF0PiBkLmRlClN1YmplY3Q6IFRlc3QKLS10ZXh0IGZvbGxvd3MgdGhpcyBsaW5lLS0KVGVz dAoKPCNtbWwgdHlwZT1tZXNzYWdlL3JmYzgyMiBkaXNwb3NpdGlvbj1pbmxpbmU+CjwjbXVsdGlw YXJ0IHR5cGU9YWx0ZXJuYXRpdmU+CjwjcGFydCB0eXBlPXRleHQvcGxhaW4gY2hhcnNldD1cIlVU Ri04XCIgZGlzcG9zaXRpb249aW5saW5lIG5vZmlsZT15ZXM+ClNvbWUgdGV4dC4KPCNwYXJ0IHR5 cGU9dGV4dC9odG1sIGNoYXJzZXQ9XCJVVEYtOFwiIG5vZmlsZT15ZXM+ClNvbWUgbW9yZSB0ZXh0 Lgo8Iy9tdWx0aXBhcnQ+CjwjL21tbD4KIikKCihkZWZjb25zdCBidWctMzk4ODQtY29ycmVjdC1y ZXN1bHQgIlwKRnJvbTogYSA8YXQ+IGIuY2UKVG86IGMgPGF0PiBkLmRlClN1YmplY3Q6IFRlc3QK TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5 PVwiPS09LT1cIgotLXRleHQgZm9sbG93cyB0aGlzIGxpbmUtLQotLT0tPS09CkNvbnRlbnQtVHlw ZTogdGV4dC9wbGFpbgoKVGVzdAoKCi0tPS09LT0KQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgy MgpDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKCi0tPT09PS09LT0KQ29udGVudC1EaXNwb3Np dGlvbjogaW5saW5lCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2Fs dGVybmF0aXZlOyBib3VuZGFyeT1cIj09PT0tPS09XCIKClNvbWUgdGV4dC4KCi0tPT09PS09LT0K Q29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgKClNvbWUgbW9yZSB0ZXh0LgoK LS09PT09LT0tPS0tCgotLT0tPS09LS0KIikKCihkZWZjb25zdCAzOTg4NC1jb3JyZWN0LXJlc3Vs dHMtb2Ytc3RlcC05CiAgIlwKRnJvbTogYSA8YXQ+IGIuY2UKVG86IGMgPGF0PiBkLmRlClN1Ympl Y3Q6IFRlc3QKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7 IGJvdW5kYXJ5PVwiPS09LT1cIgotLXRleHQgZm9sbG93cyB0aGlzIGxpbmUtLQotLT0tPS09CkNv bnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT1cIj09PT0tPS09XCIK Q29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CgpWR1Y0ZEFvSwotLT0tPS09CkNvbnRl bnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCgotLT09 PT0tPS09CkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQpNSU1FLVZlcnNpb246IDEuMApDb250 ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9XCI9PT09LT0tPVwiCgpT b21lIHRleHQuCgotLT09PT0tPS09CkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0 Zi04CgpTb21lIG1vcmUgdGV4dC4KCi0tPT09PS09LT0tLQoKLS09LT0tPS0tCiIpCgo7OyAyLiBN LXggbWVzc2FnZS1tb2RlCihtZXNzYWdlLW1vZGUpCjs7IDMuIENsZWFyIHNjcmF0Y2ggYnVmZmVy LCBwYXN0ZSBvcmlnaW5hbCBtZXNzYWdlCihlcmFzZS1idWZmZXIpCihpbnNlcnQgYnVnLTM5ODg0 LW9yaWctbWVzc2FnZSkKCjs7IDQuIE0tOiAobW1sLXRvLW1pbWUpIC0tPiBnaXZlcyBDT1JSRUNU IHJlc3VsdAooZ290by1jaGFyIChwb2ludC1taW4pKQoobW1sLXRvLW1pbWUpCihjbC1hc3NlcnQg KGVxdWFsIChidWZmZXItc3RyaW5nKSBidWctMzk4ODQtY29ycmVjdC1yZXN1bHQpKQoKOzsgNS4g Q2xlYXIgc2NyYXRjaCBidWZmZXIsIHBhc3RlIG9yaWdpbmFsIG1lc3NhZ2UKKGVyYXNlLWJ1ZmZl cikKKGluc2VydCBidWctMzk4ODQtb3JpZy1tZXNzYWdlKQoKOzsgNi4gSW5zZXJ0IGEgbmV3IGxp bmUgIjwjc2VjdXJlIG1ldGhvZD1wZ3BtaW1lIG1vZGU9c2lnbj4iIGF0IHN0YXJ0IG9mIAo7OyBt ZXNzYWdlIChhZnRlciBsaW5lICItLXRleHQgZm9sbG93cyB0aGlzIGxpbmUtLSIpLiBUaGlzIG1h a2VzIEVtYWNzIHRyeSAKOzsgdG8gc2lnbiB0aGUgbWFpbC4KKHNlYXJjaC1iYWNrd2FyZCAiLS10 ZXh0IGZvbGxvd3MgdGhpcyBsaW5lLS0iKQooZm9yd2FyZC1saW5lKQooaW5zZXJ0ICI8I3NlY3Vy ZSBtZXRob2Q9cGdwbWltZSBtb2RlPXNpZ24+XG4iKQoKOzsgNy4gTS06IChtbWwtdG8tbWltZSkg LS0+IHRocm93cyAoZXhwZWN0ZWQpIHNpZ25lciBuYW1lIGVycm9yCihjbC1hc3NlcnQgKGNvbmRp dGlvbi1jYXNlICgpCiAgICAgICAgICAgICAgIChwcm9nbiAoZ290by1jaGFyIChwb2ludC1taW4p KQogICAgICAgICAgICAgICAgICAgICAgKG1tbC10by1taW1lKQogICAgICAgICAgICAgICAgICAg ICAgbmlsKQogICAgICAgICAgICAgKGVycm9yIHQpKSkKCjs7IDguIENsZWFyIHNjcmF0Y2ggYnVm ZmVyLCBwYXN0ZSBvcmlnaW5hbCBtZXNzYWdlCihlcmFzZS1idWZmZXIpCihpbnNlcnQgYnVnLTM5 ODg0LW9yaWctbWVzc2FnZSkKCjs7IDkuIE0tOiAobW1sLXRvLW1pbWUpCjs7ICAgLS0+IGJyb2tl biByZXN1bHQgKGZpcnN0IENvbnRlbnQtVHlwZSBhZnRlciAidGV4dCBmb2xsb3dzLi4uIiBpcyAK Ozsgd3JvbmcpCihnb3RvLWNoYXIgKHBvaW50LW1pbikpCihtbWwtdG8tbWltZSkK --00000000000031e46d05a353684e-- From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 15 08:58:31 2020 Received: (at 39884) by debbugs.gnu.org; 15 Apr 2020 12:58:31 +0000 Received: from localhost ([127.0.0.1]:35370 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOhcd-0003pn-H3 for submit@debbugs.gnu.org; Wed, 15 Apr 2020 08:58:31 -0400 Received: from mout.gmx.net ([212.227.15.18]:59513) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOhcb-0003pa-ON for 39884@debbugs.gnu.org; Wed, 15 Apr 2020 08:58:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1586955503; bh=i6qdiy4wU/j7VpQSEcP4xCage4MOGLO7c/q+a9dbtU0=; h=X-UI-Sender-Class:From:To:Subject:In-Reply-To:References:Date; b=YLWxom851+JfUTv3jAuZf/ZCT5GBrmJs2tWE7tWmnslLISnQGAhk6cJq6N/A+eAI+ ynDWBJe+NaVptYsqzZk9XAYv+qM2XNJpSWF80GFh0OnS7Oah09i5wwXWbVilTLm5sJ J6bAE6ddvSJh3kch4L5OcDMgcSgEQI3NNI6PSz4U= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost ([88.130.159.147]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mk0Ne-1j0gSd1dTE-00kQHi for <39884@debbugs.gnu.org>; Wed, 15 Apr 2020 14:58:23 +0200 From: Rainer Gemulla To: 39884@debbugs.gnu.org Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending In-Reply-To: References: <87pnc95gq5.fsf@macho> Date: Wed, 15 Apr 2020 14:57:24 +0200 Message-ID: <871rooucsr.fsf@macho> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Provags-ID: V03:K1:YPMC/2HHmq7uS9UhWeknymSTGEPFWIxaqbLvfBFXQrONiKDvtbD eGp7rk2E7N/6Whfv89sb/jxOKLY9txD6KrMtLikf5BxjjF1YhwNkt2A/RPSmrS8WCtV3GhF 4FzeXtvzQ14+IwA4E3Yd8E0Fw0+260M7B7fzm/GNdkW+AhSDxBCfCwpRMoKQ5pKX40NB0xV +xVVM/6AqLKXTXcrMqMOA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:IjtPw6AGuvA=:EeHIqP1jYu1bS1kgQ5kihx JNAi92NCOC4Ur8OUj3KTvPQLIOqMnNaTZfox6pg8voUk0F/Mvozx+7WStY9F2pgAEgdmjhq9m UCku75cZTo8DYRXCGdHYRqI8QJ9Kup6WXknl36NOUj2O6WyZA79ufVOtljj6Nqy9S6XiocYD8 JjG+DxXLnMgzcBx4uupXaxFReW9C7KTwRsJO+cdv0cn8ShtvSRH6VP3Eeyswu51l/5UMkzGnL cgUHuw84z3IdCm++CVF1bQifXlLhkNKW9YbXcL2TZKcIs3IdVUJHmwnxfKKyBVDdrQY3cbgoe lro29T7BZTb5+RpgMtXksnY1ZWkam0XsHaFWnp8HwW7kS92Q0DinzCwBgE+RoQ+WksG1zVz/D XcdVUONyIgF/7dxZpB04yhBtocxBjKC8gBkADmzf37q1DfF0ZsEXdBS+wPMoxsvq2BUajCZ0V oDgkT1Fl3DJFOuQJcGZWz/YeEwBsh5BOEGD/Pra0jhNA18E1YMC7lhaXGvwNZB4mOHsAN3xAc B/isTwFpt8Nns0tgHe02gdcXXHJd2wK80c9ns/z7jMS8aPu1wLwSCs3Ewu/tWNheOlYhA+1Z7 xrkjbbk5LWl2v7ZCFEKrJPszpPnTpUgw28nWzkyRNHy3GVJEyL1HzY3M5NV6wtt9E6fltZGvo BBY5Y5VUeAfVzmeypN7EqRZ3QqbK1h1VT1lIO+u+gEOleioZ/U9u5I6olw5p73NxQeCma3Yht cu5+6ngDZeS1zw8zBmo0ifKs0diy38UmMQ/YLtUo3B82hYw09Q4nNS+Hcy8gi0Ee/oOdljATS Ot6J8FNyx7YguK7rSIBa7e9yr9oQUbb/Fjm+5vL+uvEo74tUbxPqIFOrmrTEBaCKhDP0Q03XO kR0BhUzyZFe5s8+/QukP+6EZOjcpsWMR4qzVqEPUXy/jN4WxfkbjTD+B0EZW3GPaSERc3FYh+ YRej2H/rjp1cIhmvoEZVpT3JAKxHTKCAxQcF4L4jGlrj9E1cnTu2znx88hkEUv4A8Kb6kpC72 gADCTpnB9GkVZOHITmw+9D57aTwC7y71z8HzzQlA5FRGOyhgj642jFBjUPQMqYZBEDjG4Qwrs RI+f4aBLJu/u65gpzav9e97YE49b4wG/Y7REk4FkC8phqfKhmCBM9BhE9F7pnzXRkpxRuxiAu uBdCzP+cp2RbdE0NicBBkfoxBEQ0uzxaXoYT9pj3g9HsHclGfPAPFDWGSvcZY/tzcrsu1zrfs dvC9IXTowLf0Dl6KH X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 39884 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain Perhaps just a typo: what's called "39884-correct-results-of-step-9" in your code is actually the incorrect result. I.e., step 9 should also produce bug-39884-correct-result. I ran your lisp file via "emacs -Q -l bug-39884-bad-mml-parsing.el" using the emacs-27 branch as of this morning. At least on my machines, I am getting the incorrect result. If you don't see the bug, it may be hard to track down. I've seen it on all my machines, but I am only running Ubuntu (different versions though). So it may be related to the environment being used. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJEBAEBCgAuFiEEmtshwn9RGtTGGzefdKcOvhKikVsFAl6XBLUQHHJnZW11bGxh QGdteC5kZQAKCRB0pw6+EqKRW942EACetyPCdBgRQ2qINPe/l4nr+X+oOtryaKJp 2/gRbthORlvAuuvRiTw50R5HeqY+LDAdc1N5M0BeN2rMGxzRhapCXosPJTSL6DJP r/LsmyADYbJFfddyyMs7w6MSy97njgtgKF4WywbSRqgZBW6WVAo6R1AgcbrstgXl 1SDalGWbaAK6tmFFPZvyxkd9gYg9KBr3wp6F6e01AHNTQ3PsHNA7rUabQEJTrYzM hQvs01dD4Z/VIMwfQ6aGJzK1hEkWWAUHhmxnT0ZEIPWRo7AkvVEsIof9bDm9p4U5 Ko25Ses4uGksfnzfQGJh3asKCqGIKHotT0Q4K05m/dqc73Bvf8Gqh8wTMNCL7S1A mlIYH2gAAlSBsRBbkIiuG7HOCCKY0UZHcTcNVn8X5RdYvSndNQbcb1XTmYgRkPtq smPmqIaXlCabgLIJAeAoZlYlOEdIITxao0tucTTFex62m1i6wzdtUwixCyawhy5s DPTsgKad0HVnnSM0Dfex/43XacPLgSZDsbN6kfYjvH83085HxxNNxkxyJA+sgy0U 7+WaM2LcFFkbzoe5GS5KjhCsasq5a+TW2n+caDDXLWSQ4j55lo49m5vupCaE9ZgN fSSXDNw1kxXwLHFfP1yPw2IOun9rVm2INeaq6gS6RsYXL3SBXeKHGkOIW0qFPdPS FDgGrfnlBQ== =2XS2 -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 15 09:11:53 2020 Received: (at 39884) by debbugs.gnu.org; 15 Apr 2020 13:11:53 +0000 Received: from localhost ([127.0.0.1]:35376 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOhpY-0004CE-RZ for submit@debbugs.gnu.org; Wed, 15 Apr 2020 09:11:53 -0400 Received: from mail-qt1-f173.google.com ([209.85.160.173]:45012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jOhpW-0004Bx-V8; Wed, 15 Apr 2020 09:11:51 -0400 Received: by mail-qt1-f173.google.com with SMTP id w24so13056548qts.11; Wed, 15 Apr 2020 06:11:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=0sorYKxI9P5IRFHfkluGfmyzbo4/thyRJbwsXG5mGjY=; b=YDdw+c1PmmSJxACrL9cz4Ght9wg1fTdhcLGGWyJwYR6hY5zfRNeB4eSTv5myd3HRmT ceWbQF4jIxDVn3Jwa6ILLwLWU8GsatoVS7+MLxmTZXJek7gd63HlDOJl0lPB1C4kpqt/ O7cF8O5z5+vPUkvmE+CD3qRzvkoNvZS7BdAW1NgasL0lSksGMxffUjlH0xO2b5bGtaMw 4aFfrkmzeHQJdyL4G8hvNJw8k2Xlk5VmDOqt9y4eP+NXRMx3z15Woz9fhuSVTB0v5QWB oFFuHNriCY5t7Qj+sfuDkC9FbbMBYdtmK+tbpFcOylgOmKSf1MLJ5I2n5bSya6dUlhNf SMRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=0sorYKxI9P5IRFHfkluGfmyzbo4/thyRJbwsXG5mGjY=; b=anr9NGk/N6if3SX9TkYePg7VDpqQG2Jer4OiFDbf0FMJ4zH6dvfq8KQAP3VyuTwxTF XomWiIugO4Gz1odKQT7hfBNhOlCIExoJQ0IkqHMTgLK+c2hUQEwax+1RPcW9pe8ytPzu 8BpMyQDGOKR6ASu1XaQbYomnS+hQICIk40YIDpoK7Vnpi+uefj2t2i3JKv7oEj5EGPMY eOYi2IUOr6fsZbJ5oKg/vosxZ86Jy9kSTuQWs9ZXeeGiJKPhQC9uB40ns45Dw/15ipao Mboo8jYJyTdhBVywyoBKpNwcPFvG9zoT3TtlFhWh1gGHZLYX7se5G+5HgBNupWsFW92o u4Sg== X-Gm-Message-State: AGi0PuZAc/re8VgeXQQEuizQ4tLlVStK64P0uJoi2mKIvyKGfJ9BoO+I yMsYgR1q5c7DOVP3YWEJbyPB/eUM X-Google-Smtp-Source: APiQypJ6XOr+ioMPZOt2HT7b+mVrjTf1f++deXb5hpWmw5b1ZTdj3d+cEtyXpOnaFda58q58ax+50g== X-Received: by 2002:ac8:60d6:: with SMTP id i22mr21188228qtm.249.1586956304518; Wed, 15 Apr 2020 06:11:44 -0700 (PDT) Received: from minid (cbl-45-2-119-47.yyz.frontiernetworks.ca. [45.2.119.47]) by smtp.gmail.com with ESMTPSA id a196sm11958033qkc.108.2020.04.15.06.11.41 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 15 Apr 2020 06:11:42 -0700 (PDT) From: Noam Postavsky To: Rainer Gemulla Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending References: <87pnc95gq5.fsf@macho> <871rooucsr.fsf@macho> Date: Wed, 15 Apr 2020 09:11:41 -0400 In-Reply-To: <871rooucsr.fsf@macho> (Rainer Gemulla's message of "Wed, 15 Apr 2020 14:57:24 +0200") Message-ID: <87pnc83nci.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.90 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 39884 + confirmed quit Rainer Gemulla writes: > Perhaps just a typo: what's called "39884-correct-results-of-step-9" > in your code is actually the incorrect result. I.e., step 9 should > also produce bug-39884-correct-result. Aha, I misread. > I ran your lisp file via "emacs -Q -l bug-39884-bad-mml-parsing.el" > using the emacs-27 branch as of this morning. At least on my machines, > I am getting the incorrect result. Yes, me too. For some reason, I was expecting to get an error on step 9. Upon re-reading your original report, I can't see how I thought that. I'll look into the code later today or tonight. From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 16 20:30:29 2020 Received: (at 39884) by debbugs.gnu.org; 17 Apr 2020 00:30:29 +0000 Received: from localhost ([127.0.0.1]:39587 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPEtn-0005Xp-NF for submit@debbugs.gnu.org; Thu, 16 Apr 2020 20:30:29 -0400 Received: from mail-qv1-f51.google.com ([209.85.219.51]:42947) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPEti-0005XT-TV; Thu, 16 Apr 2020 20:30:24 -0400 Received: by mail-qv1-f51.google.com with SMTP id v18so94785qvx.9; Thu, 16 Apr 2020 17:30:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=D7qivBy/nKeIMJcLibViUCSJCJfQCr58xrZkb+1uQts=; b=ZKwceTjF3mJRLXH1GzpHO8Ar6uDK2+11sgTvihPgs5PJKWolJduI2UbzopAO4R0DIK FHZle2Ltxo4iOam8opqKfYEHluH0rnPImCC5qhk/ZMM60QpOZ21skYWY6eA1AAUhvwZS 8TyLliCEtPfL9+dgOUYLqIDbNyWxP6R/ZcCsWl1SZUOKfXLBdQpXQA9DGQYHN7eHmXkx TdVdiqRD8+jNgHpwp4cfgezzBJnYZG6xj8ei9kQn1sGNmYuOUB/cwi+YxNP+SGjrpdVi zue/ZqaJElWdioImz3RIVxBNzJDo8xyl7FgEO3NokZPhbpKTeG1zFa6yuJMEiUID6RBq NbYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=D7qivBy/nKeIMJcLibViUCSJCJfQCr58xrZkb+1uQts=; b=NhevO26C1IDPPoBtWxM8NX7yoaHscXNqC90zSbHDgZ0JzS2MC8jDEBGq8//V8rEGFe zxOlLRi6J5F4svWA6r2lWBO4E9YaY466Hlvq+uobjlC8oTphCjFlIJ5yIB9kd5jQEyRv 5LVFO4MRmOggtDOs3k5PZJ3t5gxRSrgP+sAnSKxyofWBpvsYzQjMZC+3174yUa8wwxE6 XSJWuRvWUISMHavKz0zDRk/lyeeykiGk1ZYt33KKGvOeDRFty+xCXsTZhH2eFseYmPol aVFxNvdOa7RPdZzPvXdYO90k9xJWMuHaIGqdxLKMxyLHO29U2iRTi2iIRLYLQgOemyPz RABg== X-Gm-Message-State: AGi0PuYiqr2QgHtd3i1Hdn7BZY5/qSKXGDeDiMJKRdkiiekjRB5tZkih GxkgFgCjebEZFPMf+8Dtf5ZKe8XU X-Google-Smtp-Source: APiQypKAFkBxTKM5ZEE97LlwAnMJklRFioPgTaUvdXn2d0dOYYHDHoH1Esd1K2VOogITeuR/bgp+Ug== X-Received: by 2002:a0c:b651:: with SMTP id q17mr277269qvf.135.1587083417198; Thu, 16 Apr 2020 17:30:17 -0700 (PDT) Received: from minid (cbl-45-2-119-47.yyz.frontiernetworks.ca. [45.2.119.47]) by smtp.gmail.com with ESMTPSA id 134sm3090089qki.16.2020.04.16.17.30.15 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 16 Apr 2020 17:30:16 -0700 (PDT) From: Noam Postavsky To: "Rainer Gemulla" Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending References: Date: Thu, 16 Apr 2020 20:30:14 -0400 In-Reply-To: (Rainer Gemulla's message of "Tue, 03 Mar 2020 15:36:37 +0000") Message-ID: <87mu7b2bu1.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.90 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==-=-=" X-Spam-Score: -0.8 (/) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.8 (-) --==-=-= Content-Type: text/plain tags 39884 + patch quit "Rainer Gemulla" 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. --==-=-= Content-Type: text/plain Content-Disposition: attachment; filename=bug-39884-bad-mml-parsing.el Content-Description: bug reproducer (defconst bug-39884-orig-message "\ From: a b.ce To: c d.de Subject: Test --text follows this line-- Test <#mml type=message/rfc822 disposition=inline> <#multipart type=alternative> <#part type=text/plain charset=\"UTF-8\" disposition=inline nofile=yes> Some text. <#part type=text/html charset=\"UTF-8\" nofile=yes> Some more text. <#/multipart> <#/mml> ") (defconst bug-39884-correct-result "\ From: a b.ce To: c d.de Subject: Test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=\"=-=-=\" --text follows this line-- --=-=-= Content-Type: text/plain Test --=-=-= Content-Type: message/rfc822 Content-Disposition: inline --====-=-= Content-Disposition: inline MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=\"====-=-=\" Some text. --====-=-= Content-Type: text/html; charset=utf-8 Some more text. --====-=-=-- --=-=-=-- ") (defconst 39884-incorrect-results-of-step-9 "\ From: a b.ce To: c d.de Subject: Test MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=\"=-=-=\" --text follows this line-- --=-=-= Content-Type: multipart/alternative; boundary=\"====-=-=\" Content-Transfer-Encoding: base64 VGV4dAoK --=-=-= Content-Type: message/rfc822 Content-Disposition: inline --====-=-= Content-Disposition: inline MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=\"====-=-=\" Some text. --====-=-= Content-Type: text/html; charset=utf-8 Some more text. --====-=-=-- --=-=-=-- ") ;; (defvar mml-text/plain-tag-literal-constant) ;; (defun check-setcdr (fun cell newcdr) ;; (when (eq cell mml-text/plain-tag-literal-constant) ;; (debug nil)) ;; (funcall fun cell newcdr)) ;; (advice-add 'setcdr :around #'check-setcdr) ;; (load-library "mml.el") ;; `setcdr' has an opcode, so must run from source to advise it. ;; 2. M-x message-mode (message-mode) (setq buffer-file-name nil) (setq buffer-auto-save-file-name nil) ;; 3. Clear scratch buffer, paste original message (erase-buffer) (insert bug-39884-orig-message) ;; 4. M-: (mml-to-mime) --> gives CORRECT result (goto-char (point-min)) (mml-to-mime) (cl-assert (equal (buffer-string) bug-39884-correct-result)) ;; 5. Clear scratch buffer, paste original message (erase-buffer) (insert bug-39884-orig-message) ;; 6. Insert a new line "<#secure method=pgpmime mode=sign>" at start of ;; message (after line "--text follows this line--"). This makes Emacs try ;; to sign the mail. (search-backward "--text follows this line--") (forward-line) (insert "<#secure method=pgpmime mode=sign>\n") ;; 7. M-: (mml-to-mime) --> throws (expected) signer name error (cl-assert (condition-case () (progn (goto-char (point-min)) (mml-to-mime) nil) (error t))) ;; 8. Clear scratch buffer, paste original message (erase-buffer) (insert bug-39884-orig-message) ;; 9. M-: (mml-to-mime) ;; --> broken result (first Content-Type after "text follows..." is ;; wrong) (goto-char (point-min)) (mml-to-mime) --==-=-= Content-Type: text/plain This gives the backtrace: --==-=-= Content-Type: text/plain Content-Disposition: attachment; filename=setcdr-backtrace.txt Content-Transfer-Encoding: quoted-printable Content-Description: backtrace from the guilty setcdr Debugger entered: nil (progn (debug nil)) (if (eq cell mml-text/plain-tag-literal-constant) (progn (debug nil))) check-setcdr(# (type . "text/plain") "multipart/alternative;= boundary=3D\"=3D=3D=3D=3D-=3D-=3D\"") apply(check-setcdr # ((type . "text/plain") "multipart/alter= native; boundary=3D\"=3D=3D=3D=3D-=3D-=3D\"")) setcdr((type . "text/plain") "multipart/alternative; boundary=3D\"=3D=3D= =3D=3D-=3D-=3D\"") (progn (setcdr (assq 'type (cdr (car cont))) content-type)) (if (and (consp (car cont)) (=3D (length cont) 1) content-type) (progn (s= etcdr (assq 'type (cdr (car cont))) content-type))) (if (not cont) nil (if (and (consp (car cont)) (=3D (length cont) 1) cont= ent-type) (progn (setcdr (assq 'type (cdr (car cont))) content-type))) (if = (and (consp (car cont)) (=3D (length cont) 1) (fboundp 'libxml-parse-html-r= egion) (equal (cdr (assq 'type (car cont))) "text/html")) (progn (setq cont= (mml-expand-html-into-multipart-related (car cont))))) (prog1 (let ((temp-= buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer t= emp-buffer) (unwind-protect (progn (set-buffer-multibyte nil) (setq message= -options options) (cond (... ...) (... ...) (t ...)) (setq options message-= options) (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer temp-= buffer))))) (setq message-options options))) (let ((cont (mml-parse)) (mml-multipart-number mml-multipart-number) (opt= ions message-options)) (if (not cont) nil (if (and (consp (car cont)) (=3D = (length cont) 1) content-type) (progn (setcdr (assq 'type (cdr (car cont)))= content-type))) (if (and (consp (car cont)) (=3D (length cont) 1) (fboundp= 'libxml-parse-html-region) (equal (cdr (assq 'type (car cont))) "text/html= ")) (progn (setq cont (mml-expand-html-into-multipart-related (car cont))))= ) (prog1 (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current= -buffer (set-buffer temp-buffer) (unwind-protect (progn (set-buffer-multiby= te nil) (setq message-options options) (cond ... ... ...) (setq options mes= sage-options) (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer))))) (setq message-options options)))) mml-generate-mime(nil "multipart/alternative; boundary=3D\"=3D=3D=3D=3D-= =3D-=3D\"") message-encode-message-body() mml-to-mime() (let ((mml-boundary (mml-compute-boundary cont)) (mml-generate-default-ty= pe "text/plain")) (mml-to-mime) (if mml-inhibit-compute-boundary nil (setcd= r (assoc 'contents cont) (buffer-string)))) (cond ((eq (car cont) 'mml) (let ((mml-boundary (mml-compute-boundary con= t)) (mml-generate-default-type "text/plain")) (mml-to-mime) (if mml-inhibit= -compute-boundary nil (setcdr (assoc 'contents cont) (buffer-string)))) (le= t ((mm-7bit-chars (concat mm-7bit-chars "\33"))) (setq encoding (mm-body-7-= or-8)))) ((string=3D (car (split-string type "/")) "message") (let ((mm-7bi= t-chars (concat mm-7bit-chars "\33"))) (setq encoding (mm-body-7-or-8)))) (= t (let (use-hard-newlines) (if (and mml-enable-flowed (string=3D type "text= /plain") (not (string=3D (cdr ...) "pgp")) (or (null (assq ... cont)) (stri= ng=3D (cdr ...) "flowed")) (setq use-hard-newlines (text-property-any (poin= t-min) (point-max) 'hard 't))) (progn (fill-flowed-encode) (setq flowed (nu= ll (assq ... cont)))))) (if (or charset (not (string=3D type "text/calendar= "))) (setq charset (mm-encode-body charset)) (let ((mm-coding-system-priori= ties (cons 'utf-8 mm-coding-system-priorities))) (setq charset (mm-encode-b= ody)))) (setq encoding (mm-body-encoding charset (cdr (assq 'encoding cont)= ))))) (progn (cond ((cdr (assq 'buffer cont)) (insert-buffer-substring (cdr (as= sq 'buffer cont)))) ((and filename (not (equal (cdr (assq ... cont)) "yes")= )) (let ((coding-system-for-read coding)) (mm-insert-file-contents filename= ))) ((eq 'mml (car cont)) (insert (cdr (assq 'contents cont)))) (t (save-re= striction (narrow-to-region (point) (point)) (insert (cdr (assq 'contents c= ont))) (goto-char (point-min)) (while (re-search-forward "<#!+/?\\(part\\|m= ultipart\\|external\\|mml\\|secure\\)" nil t) (delete-region (+ (match-begi= nning 0) 2) (+ (match-beginning 0) 3)))))) (cond ((eq (car cont) 'mml) (let= ((mml-boundary (mml-compute-boundary cont)) (mml-generate-default-type "te= xt/plain")) (mml-to-mime) (if mml-inhibit-compute-boundary nil (setcdr (ass= oc 'contents cont) (buffer-string)))) (let ((mm-7bit-chars (concat mm-7bit-= chars "\33"))) (setq encoding (mm-body-7-or-8)))) ((string=3D (car (split-s= tring type "/")) "message") (let ((mm-7bit-chars (concat mm-7bit-chars "\33= "))) (setq encoding (mm-body-7-or-8)))) (t (let (use-hard-newlines) (if (an= d mml-enable-flowed (string=3D type "text/plain") (not (string=3D ... "pgp"= )) (or (null ...) (string=3D ... "flowed")) (setq use-hard-newlines (text-p= roperty-any ... ... ... ...))) (progn (fill-flowed-encode) (setq flowed (nu= ll ...))))) (if (or charset (not (string=3D type "text/calendar"))) (setq c= harset (mm-encode-body charset)) (let ((mm-coding-system-priorities (cons .= .. mm-coding-system-priorities))) (setq charset (mm-encode-body)))) (setq e= ncoding (mm-body-encoding charset (cdr (assq 'encoding cont)))))) (setq cod= ed (buffer-string))) (unwind-protect (progn (cond ((cdr (assq 'buffer cont)) (insert-buffer-su= bstring (cdr (assq 'buffer cont)))) ((and filename (not (equal (cdr ...) "y= es"))) (let ((coding-system-for-read coding)) (mm-insert-file-contents file= name))) ((eq 'mml (car cont)) (insert (cdr (assq 'contents cont)))) (t (sav= e-restriction (narrow-to-region (point) (point)) (insert (cdr (assq ... con= t))) (goto-char (point-min)) (while (re-search-forward "<#!+/?\\(part\\|mul= tipart\\|external\\|mml\\|secure\\)" nil t) (delete-region (+ ... 2) (+ ...= 3)))))) (cond ((eq (car cont) 'mml) (let ((mml-boundary (mml-compute-bound= ary cont)) (mml-generate-default-type "text/plain")) (mml-to-mime) (if mml-= inhibit-compute-boundary nil (setcdr (assoc ... cont) (buffer-string)))) (l= et ((mm-7bit-chars (concat mm-7bit-chars "\33"))) (setq encoding (mm-body-7= -or-8)))) ((string=3D (car (split-string type "/")) "message") (let ((mm-7b= it-chars (concat mm-7bit-chars "\33"))) (setq encoding (mm-body-7-or-8)))) = (t (let (use-hard-newlines) (if (and mml-enable-flowed (string=3D type "tex= t/plain") (not ...) (or ... ...) (setq use-hard-newlines ...)) (progn (fill= -flowed-encode) (setq flowed ...)))) (if (or charset (not (string=3D type "= text/calendar"))) (setq charset (mm-encode-body charset)) (let ((mm-coding-= system-priorities ...)) (setq charset (mm-encode-body)))) (setq encoding (m= m-body-encoding charset (cdr (assq ... cont)))))) (setq coded (buffer-strin= g))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (con= d ((cdr (assq 'buffer cont)) (insert-buffer-substring (cdr (assq ... cont))= )) ((and filename (not (equal ... "yes"))) (let ((coding-system-for-read co= ding)) (mm-insert-file-contents filename))) ((eq 'mml (car cont)) (insert (= cdr (assq ... cont)))) (t (save-restriction (narrow-to-region (point) (poin= t)) (insert (cdr ...)) (goto-char (point-min)) (while (re-search-forward "<= #!+/?\\(part\\|multipart\\|external\\|mml\\|secure\\)" nil t) (delete-regio= n ... ...))))) (cond ((eq (car cont) 'mml) (let ((mml-boundary ...) (mml-ge= nerate-default-type "text/plain")) (mml-to-mime) (if mml-inhibit-compute-bo= undary nil (setcdr ... ...))) (let ((mm-7bit-chars ...)) (setq encoding (mm= -body-7-or-8)))) ((string=3D (car (split-string type "/")) "message") (let = ((mm-7bit-chars ...)) (setq encoding (mm-body-7-or-8)))) (t (let (use-hard-= newlines) (if (and mml-enable-flowed ... ... ... ...) (progn ... ...))) (if= (or charset (not ...)) (setq charset (mm-encode-body charset)) (let (...) = (setq charset ...))) (setq encoding (mm-body-encoding charset (cdr ...)))))= (setq coded (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer)))) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer= (set-buffer temp-buffer) (unwind-protect (progn (cond ((cdr (assq ... cont= )) (insert-buffer-substring (cdr ...))) ((and filename (not ...)) (let (...= ) (mm-insert-file-contents filename))) ((eq 'mml (car cont)) (insert (cdr .= ..))) (t (save-restriction (narrow-to-region ... ...) (insert ...) (goto-ch= ar ...) (while ... ...)))) (cond ((eq (car cont) 'mml) (let (... ...) (mml-= to-mime) (if mml-inhibit-compute-boundary nil ...)) (let (...) (setq encodi= ng ...))) ((string=3D (car ...) "message") (let (...) (setq encoding ...)))= (t (let (use-hard-newlines) (if ... ...)) (if (or charset ...) (setq chars= et ...) (let ... ...)) (setq encoding (mm-body-encoding charset ...)))) (se= tq coded (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp= -buffer))))) (progn (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current= -buffer (set-buffer temp-buffer) (unwind-protect (progn (cond ((cdr ...) (i= nsert-buffer-substring ...)) ((and filename ...) (let ... ...)) ((eq ... ..= .) (insert ...)) (t (save-restriction ... ... ... ...))) (cond ((eq ... ...= ) (let ... ... ...) (let ... ...)) ((string=3D ... "message") (let ... ...)= ) (t (let ... ...) (if ... ... ...) (setq encoding ...))) (setq coded (buff= er-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))) (= mml-insert-mime-headers cont type charset encoding flowed) (insert "\n") (i= nsert coded)) (if (and (not raw) (member (car (split-string type "/")) '("text" "messag= e"))) (progn (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-cur= rent-buffer (set-buffer temp-buffer) (unwind-protect (progn (cond (... ...)= (... ...) (... ...) (t ...)) (cond (... ... ...) (... ...) (t ... ... ...)= ) (setq coded (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer= temp-buffer))))) (mml-insert-mime-headers cont type charset encoding flowe= d) (insert "\n") (insert coded)) (let ((temp-buffer (generate-new-buffer " = *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (p= rogn (set-buffer-multibyte nil) (cond ((cdr ...) (insert ...)) ((and filena= me ...) (let ... ...) (if charset nil ...)) (t (let ... ...))) (if (setq en= coding (cdr ...)) (setq encoding (intern ...))) (setq encoding (mm-encode-b= uffer type encoding)) (setq coded (decode-coding-string (buffer-string) 'us= -ascii))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))) (mml= -insert-mime-headers cont type charset encoding nil) (insert "\n" coded)) (let* ((raw (cdr (assq 'raw cont))) (filename (cdr (assq 'filename cont))= ) (type (or (cdr (assq 'type cont)) (if filename (or (mm-default-file-encod= ing filename) "application/octet-stream") "text/plain"))) (charset (cdr (as= sq 'charset cont))) (coding (mm-charset-to-coding-system charset)) encoding= flowed coded) (cond ((eq coding 'ascii) (setq charset nil coding nil)) (ch= arset (setq charset (or (mm-coding-system-to-mime-charset coding) (intern (= downcase charset)))))) (if (and (not raw) (member (car (split-string type "= /")) '("text" "message"))) (progn (let ((temp-buffer (generate-new-buffer "= *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (= progn (cond ... ... ... ...) (cond ... ... ...) (setq coded ...)) (and (buf= fer-name temp-buffer) (kill-buffer temp-buffer))))) (mml-insert-mime-header= s cont type charset encoding flowed) (insert "\n") (insert coded)) (let ((t= emp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buff= er temp-buffer) (unwind-protect (progn (set-buffer-multibyte nil) (cond (..= . ...) (... ... ...) (t ...)) (if (setq encoding ...) (setq encoding ...)) = (setq encoding (mm-encode-buffer type encoding)) (setq coded (decode-coding= -string ... ...))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)= )))) (mml-insert-mime-headers cont type charset encoding nil) (insert "\n" = coded))) (cond ((or (eq (car cont) 'part) (eq (car cont) 'mml)) (let* ((raw (cdr (= assq 'raw cont))) (filename (cdr (assq 'filename cont))) (type (or (cdr (as= sq ... cont)) (if filename (or ... "application/octet-stream") "text/plain"= ))) (charset (cdr (assq 'charset cont))) (coding (mm-charset-to-coding-syst= em charset)) encoding flowed coded) (cond ((eq coding 'ascii) (setq charset= nil coding nil)) (charset (setq charset (or (mm-coding-system-to-mime-char= set coding) (intern ...))))) (if (and (not raw) (member (car (split-string = type "/")) '("text" "message"))) (progn (let ((temp-buffer ...)) (save-curr= ent-buffer (set-buffer temp-buffer) (unwind-protect ... ...))) (mml-insert-= mime-headers cont type charset encoding flowed) (insert "\n") (insert coded= )) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffe= r (set-buffer temp-buffer) (unwind-protect (progn ... ... ... ... ...) (and= ... ...)))) (mml-insert-mime-headers cont type charset encoding nil) (inse= rt "\n" coded)))) ((eq (car cont) 'external) (insert "Content-Type: message= /external-body") (let ((parameters (mml-parameter-string cont '(expiration = size permission))) (name (cdr (assq 'name cont))) (url (cdr (assq 'url cont= )))) (if name (progn (setq name (mml-parse-file-name name)) (if (stringp na= me) (mml-insert-parameter (mail-header-encode-parameter "name" name) "acces= s-type=3Dlocal-file") (mml-insert-parameter (mail-header-encode-parameter "= name" ...) (mail-header-encode-parameter "site" ...) (mail-header-encode-pa= rameter "directory" ...)) (mml-insert-parameter (concat "access-type=3D" ..= .))))) (if url (progn (mml-insert-parameter (mail-header-encode-parameter "= url" url) "access-type=3Durl"))) (if parameters (progn (mml-insert-paramete= r-string cont '(expiration size permission)))) (insert "\n\n") (insert "Con= tent-Type: " (or (cdr (assq 'type cont)) (if name (or (mm-default-file-enco= ding name) "application/octet-stream") "text/plain")) "\n") (insert "Conten= t-ID: " (message-make-message-id) "\n") (insert "Content-Transfer-Encoding:= " (or (cdr (assq 'encoding cont)) "binary")) (insert "\n\n") (insert (or (= cdr (assq 'contents cont)))) (insert "\n"))) ((eq (car cont) 'multipart) (l= et* ((type (or (cdr (assq ... cont)) "mixed")) (mml-generate-default-type (= if (equal type "digest") "message/rfc822" "text/plain")) (handler (assoc ty= pe mml-generate-multipart-alist))) (if handler (funcall (cdr handler) cont)= (let ((mml-boundary (mml-compute-boundary cont))) (insert (format "Content= -Type: multipart/%s; boundary=3D\"%s\"" type mml-boundary) (if (cdr ...) (f= ormat "; start=3D\"%s\"\n" ...) "\n")) (let ((cont cont) part) (while (setq= part ...) (if ... ...))) (insert "\n--" mml-boundary "--\n"))))) (t (error= "Invalid element: %S" cont))) (save-restriction (narrow-to-region (point) (point)) (mml-tweak-part cont= ) (cond ((or (eq (car cont) 'part) (eq (car cont) 'mml)) (let* ((raw (cdr (= assq ... cont))) (filename (cdr (assq ... cont))) (type (or (cdr ...) (if f= ilename ... "text/plain"))) (charset (cdr (assq ... cont))) (coding (mm-cha= rset-to-coding-system charset)) encoding flowed coded) (cond ((eq coding 'a= scii) (setq charset nil coding nil)) (charset (setq charset (or ... ...))))= (if (and (not raw) (member (car ...) '...)) (progn (let (...) (save-curren= t-buffer ... ...)) (mml-insert-mime-headers cont type charset encoding flow= ed) (insert "\n") (insert coded)) (let ((temp-buffer ...)) (save-current-bu= ffer (set-buffer temp-buffer) (unwind-protect ... ...))) (mml-insert-mime-h= eaders cont type charset encoding nil) (insert "\n" coded)))) ((eq (car con= t) 'external) (insert "Content-Type: message/external-body") (let ((paramet= ers (mml-parameter-string cont '...)) (name (cdr (assq ... cont))) (url (cd= r (assq ... cont)))) (if name (progn (setq name (mml-parse-file-name name))= (if (stringp name) (mml-insert-parameter ... "access-type=3Dlocal-file") (= mml-insert-parameter ... ... ...) (mml-insert-parameter ...)))) (if url (pr= ogn (mml-insert-parameter (mail-header-encode-parameter "url" url) "access-= type=3Durl"))) (if parameters (progn (mml-insert-parameter-string cont '...= ))) (insert "\n\n") (insert "Content-Type: " (or (cdr (assq ... cont)) (if = name (or ... "application/octet-stream") "text/plain")) "\n") (insert "Cont= ent-ID: " (message-make-message-id) "\n") (insert "Content-Transfer-Encodin= g: " (or (cdr (assq ... cont)) "binary")) (insert "\n\n") (insert (or (cdr = (assq ... cont)))) (insert "\n"))) ((eq (car cont) 'multipart) (let* ((type= (or (cdr ...) "mixed")) (mml-generate-default-type (if (equal type "digest= ") "message/rfc822" "text/plain")) (handler (assoc type mml-generate-multip= art-alist))) (if handler (funcall (cdr handler) cont) (let ((mml-boundary .= ..)) (insert (format "Content-Type: multipart/%s; boundary=3D\"%s\"" type m= ml-boundary) (if ... ... "\n")) (let (... part) (while ... ...)) (insert "\= n--" mml-boundary "--\n"))))) (t (error "Invalid element: %S" cont))) (let = ((sign-item (assoc (cdr (assq 'sign cont)) mml-sign-alist)) (encrypt-item (= assoc (cdr (assq 'encrypt cont)) mml-encrypt-alist)) sender recipients) (if= (or sign-item encrypt-item) (progn (if (setq sender (cdr (assq ... cont)))= (progn (message-options-set 'mml-sender sender) (message-options-set 'mess= age-sender sender))) (if (setq recipients (cdr (assq ... cont))) (message-o= ptions-set 'message-recipients recipients)) (let ((style (mml-signencrypt-s= tyle ...))) (if (and sign-item encrypt-item (equal ... ...) (equal style ..= .)) (funcall (nth 1 encrypt-item) cont t) (if sign-item (progn ...)) (if en= crypt-item (progn ...)))))))) (let ((mm-use-ultra-safe-encoding (or mm-use-ultra-safe-encoding (assq 's= ign cont)))) (save-restriction (narrow-to-region (point) (point)) (mml-twea= k-part cont) (cond ((or (eq (car cont) 'part) (eq (car cont) 'mml)) (let* (= (raw (cdr ...)) (filename (cdr ...)) (type (or ... ...)) (charset (cdr ...)= ) (coding (mm-charset-to-coding-system charset)) encoding flowed coded) (co= nd ((eq coding ...) (setq charset nil coding nil)) (charset (setq charset .= ..))) (if (and (not raw) (member ... ...)) (progn (let ... ...) (mml-insert= -mime-headers cont type charset encoding flowed) (insert "\n") (insert code= d)) (let (...) (save-current-buffer ... ...)) (mml-insert-mime-headers cont= type charset encoding nil) (insert "\n" coded)))) ((eq (car cont) 'externa= l) (insert "Content-Type: message/external-body") (let ((parameters (mml-pa= rameter-string cont ...)) (name (cdr ...)) (url (cdr ...))) (if name (progn= (setq name ...) (if ... ... ... ...))) (if url (progn (mml-insert-paramete= r ... "access-type=3Durl"))) (if parameters (progn (mml-insert-parameter-st= ring cont ...))) (insert "\n\n") (insert "Content-Type: " (or (cdr ...) (if= name ... "text/plain")) "\n") (insert "Content-ID: " (message-make-message= -id) "\n") (insert "Content-Transfer-Encoding: " (or (cdr ...) "binary")) (= insert "\n\n") (insert (or (cdr ...))) (insert "\n"))) ((eq (car cont) 'mul= tipart) (let* ((type (or ... "mixed")) (mml-generate-default-type (if ... "= message/rfc822" "text/plain")) (handler (assoc type mml-generate-multipart-= alist))) (if handler (funcall (cdr handler) cont) (let (...) (insert ... ..= .) (let ... ...) (insert "\n--" mml-boundary "--\n"))))) (t (error "Invalid= element: %S" cont))) (let ((sign-item (assoc (cdr (assq ... cont)) mml-sig= n-alist)) (encrypt-item (assoc (cdr (assq ... cont)) mml-encrypt-alist)) se= nder recipients) (if (or sign-item encrypt-item) (progn (if (setq sender (c= dr ...)) (progn (message-options-set ... sender) (message-options-set ... s= ender))) (if (setq recipients (cdr ...)) (message-options-set 'message-reci= pients recipients)) (let ((style ...)) (if (and sign-item encrypt-item ... = ...) (funcall ... cont t) (if sign-item ...) (if encrypt-item ...)))))))) mml-generate-mime-1((mml (type . "message/rfc822") (disposition . "inline= ") (tag-location . 108) (contents . "--=3D=3D=3D=3D-=3D-=3D\nContent-Dispos= ition: inline\nMIME-Versio..."))) (let ((mml-inhibit-compute-boundary t) (mml-multipart-number 0) mml-sign-= alist mml-encrypt-alist) (mml-generate-mime-1 cont)) (progn (mm-enable-multibyte) (let ((mml-inhibit-compute-boundary t) (mml-= multipart-number 0) mml-sign-alist mml-encrypt-alist) (mml-generate-mime-1 = cont)) (goto-char (point-min)) (if (re-search-forward (concat "^--" (regexp= -quote mml-boundary)) nil t) (progn (setq mml-boundary (funcall mml-boundar= y-function (setq mml-multipart-number (1+ mml-multipart-number)))) (throw '= not-unique nil)))) (unwind-protect (progn (mm-enable-multibyte) (let ((mml-inhibit-compute-b= oundary t) (mml-multipart-number 0) mml-sign-alist mml-encrypt-alist) (mml-= generate-mime-1 cont)) (goto-char (point-min)) (if (re-search-forward (conc= at "^--" (regexp-quote mml-boundary)) nil t) (progn (setq mml-boundary (fun= call mml-boundary-function (setq mml-multipart-number (1+ mml-multipart-num= ber)))) (throw 'not-unique nil)))) (and (buffer-name temp-buffer) (kill-buf= fer temp-buffer))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (mm-= enable-multibyte) (let ((mml-inhibit-compute-boundary t) (mml-multipart-num= ber 0) mml-sign-alist mml-encrypt-alist) (mml-generate-mime-1 cont)) (goto-= char (point-min)) (if (re-search-forward (concat "^--" (regexp-quote mml-bo= undary)) nil t) (progn (setq mml-boundary (funcall mml-boundary-function (s= etq mml-multipart-number ...))) (throw 'not-unique nil)))) (and (buffer-nam= e temp-buffer) (kill-buffer temp-buffer)))) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer= (set-buffer temp-buffer) (unwind-protect (progn (mm-enable-multibyte) (let= ((mml-inhibit-compute-boundary t) (mml-multipart-number 0) mml-sign-alist = mml-encrypt-alist) (mml-generate-mime-1 cont)) (goto-char (point-min)) (if = (re-search-forward (concat "^--" (regexp-quote mml-boundary)) nil t) (progn= (setq mml-boundary (funcall mml-boundary-function ...)) (throw 'not-unique= nil)))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))) (cond ((member (car cont) '(part mml)) (let ((temp-buffer (generate-new-b= uffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-pr= otect (progn (mm-enable-multibyte) (let (... ... mml-sign-alist mml-encrypt= -alist) (mml-generate-mime-1 cont)) (goto-char (point-min)) (if (re-search-= forward ... nil t) (progn ... ...))) (and (buffer-name temp-buffer) (kill-b= uffer temp-buffer)))))) ((eq (car cont) 'multipart) (mapc 'mml-compute-boun= dary-1 (cdr (cdr cont))))) mml-compute-boundary-1((mml (type . "message/rfc822") (disposition . "inl= ine") (tag-location . 108) (contents . "--=3D=3D=3D=3D-=3D-=3D\nContent-Dis= position: inline\nMIME-Versio..."))) mapc(mml-compute-boundary-1 ((tag-location . 76) (part (type . "text/plai= n") (contents . "Test\n\n")) (mml (type . "message/rfc822") (disposition . = "inline") (tag-location . 108) (contents . "--=3D=3D=3D=3D-=3D-=3D\nContent= -Disposition: inline\nMIME-Versio...")))) (cond ((member (car cont) '(part mml)) (let ((temp-buffer (generate-new-b= uffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-pr= otect (progn (mm-enable-multibyte) (let (... ... mml-sign-alist mml-encrypt= -alist) (mml-generate-mime-1 cont)) (goto-char (point-min)) (if (re-search-= forward ... nil t) (progn ... ...))) (and (buffer-name temp-buffer) (kill-b= uffer temp-buffer)))))) ((eq (car cont) 'multipart) (mapc 'mml-compute-boun= dary-1 (cdr (cdr cont))))) mml-compute-boundary-1((multipart (sign . "pgpmime") (tag-location . 76) = (part (type . "text/plain") (contents . "Test\n\n")) (mml (type . "message/= rfc822") (disposition . "inline") (tag-location . 108) (contents . "--=3D= =3D=3D=3D-=3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) (catch 'not-unique (mml-compute-boundary-1 cont)) (not (catch 'not-unique (mml-compute-boundary-1 cont))) (while (not (catch 'not-unique (mml-compute-boundary-1 cont)))) (if mml-inhibit-compute-boundary nil (while (not (catch 'not-unique (mml-= compute-boundary-1 cont))))) (let ((mml-boundary (funcall mml-boundary-function (setq mml-multipart-nu= mber (1+ mml-multipart-number))))) (if mml-inhibit-compute-boundary nil (wh= ile (not (catch 'not-unique (mml-compute-boundary-1 cont))))) mml-boundary) mml-compute-boundary((multipart (sign . "pgpmime") (tag-location . 76) (p= art (type . "text/plain") (contents . "Test\n\n")) (mml (type . "message/rf= c822") (disposition . "inline") (tag-location . 108) (contents . "--=3D=3D= =3D=3D-=3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) mml2015-epg-sign((multipart (sign . "pgpmime") (tag-location . 76) (part = (type . "text/plain") (contents . "Test\n\n")) (mml (type . "message/rfc822= ") (disposition . "inline") (tag-location . 108) (contents . "--=3D=3D=3D= =3D-=3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) mml2015-sign((multipart (sign . "pgpmime") (tag-location . 76) (part (typ= e . "text/plain") (contents . "Test\n\n")) (mml (type . "message/rfc822") (= disposition . "inline") (tag-location . 108) (contents . "--=3D=3D=3D=3D-= =3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) mml-pgpmime-sign-buffer((multipart (sign . "pgpmime") (tag-location . 76)= (part (type . "text/plain") (contents . "Test\n\n")) (mml (type . "message= /rfc822") (disposition . "inline") (tag-location . 108) (contents . "--=3D= =3D=3D=3D-=3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) funcall(mml-pgpmime-sign-buffer (multipart (sign . "pgpmime") (tag-locati= on . 76) (part (type . "text/plain") (contents . "Test\n\n")) (mml (type . = "message/rfc822") (disposition . "inline") (tag-location . 108) (contents .= "--=3D=3D=3D=3D-=3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) (progn (funcall (nth 1 sign-item) cont)) (if sign-item (progn (funcall (nth 1 sign-item) cont))) (if (and sign-item encrypt-item (equal (car sign-item) (car encrypt-item)= ) (equal style 'combined)) (funcall (nth 1 encrypt-item) cont t) (if sign-i= tem (progn (funcall (nth 1 sign-item) cont))) (if encrypt-item (progn (func= all (nth 1 encrypt-item) cont)))) (let ((style (mml-signencrypt-style (car (or sign-item encrypt-item))))) = (if (and sign-item encrypt-item (equal (car sign-item) (car encrypt-item)) = (equal style 'combined)) (funcall (nth 1 encrypt-item) cont t) (if sign-ite= m (progn (funcall (nth 1 sign-item) cont))) (if encrypt-item (progn (funcal= l (nth 1 encrypt-item) cont))))) (progn (if (setq sender (cdr (assq 'sender cont))) (progn (message-option= s-set 'mml-sender sender) (message-options-set 'message-sender sender))) (i= f (setq recipients (cdr (assq 'recipients cont))) (message-options-set 'mes= sage-recipients recipients)) (let ((style (mml-signencrypt-style (car (or s= ign-item encrypt-item))))) (if (and sign-item encrypt-item (equal (car sign= -item) (car encrypt-item)) (equal style 'combined)) (funcall (nth 1 encrypt= -item) cont t) (if sign-item (progn (funcall (nth 1 sign-item) cont))) (if = encrypt-item (progn (funcall (nth 1 encrypt-item) cont)))))) (if (or sign-item encrypt-item) (progn (if (setq sender (cdr (assq 'sende= r cont))) (progn (message-options-set 'mml-sender sender) (message-options-= set 'message-sender sender))) (if (setq recipients (cdr (assq 'recipients c= ont))) (message-options-set 'message-recipients recipients)) (let ((style (= mml-signencrypt-style (car (or sign-item encrypt-item))))) (if (and sign-it= em encrypt-item (equal (car sign-item) (car encrypt-item)) (equal style 'co= mbined)) (funcall (nth 1 encrypt-item) cont t) (if sign-item (progn (funcal= l (nth 1 sign-item) cont))) (if encrypt-item (progn (funcall (nth 1 encrypt= -item) cont))))))) (let ((sign-item (assoc (cdr (assq 'sign cont)) mml-sign-alist)) (encrypt= -item (assoc (cdr (assq 'encrypt cont)) mml-encrypt-alist)) sender recipien= ts) (if (or sign-item encrypt-item) (progn (if (setq sender (cdr (assq 'sen= der cont))) (progn (message-options-set 'mml-sender sender) (message-option= s-set 'message-sender sender))) (if (setq recipients (cdr (assq 'recipients= cont))) (message-options-set 'message-recipients recipients)) (let ((style= (mml-signencrypt-style (car ...)))) (if (and sign-item encrypt-item (equal= (car sign-item) (car encrypt-item)) (equal style 'combined)) (funcall (nth= 1 encrypt-item) cont t) (if sign-item (progn (funcall ... cont))) (if encr= ypt-item (progn (funcall ... cont)))))))) (save-restriction (narrow-to-region (point) (point)) (mml-tweak-part cont= ) (cond ((or (eq (car cont) 'part) (eq (car cont) 'mml)) (let* ((raw (cdr (= assq ... cont))) (filename (cdr (assq ... cont))) (type (or (cdr ...) (if f= ilename ... "text/plain"))) (charset (cdr (assq ... cont))) (coding (mm-cha= rset-to-coding-system charset)) encoding flowed coded) (cond ((eq coding 'a= scii) (setq charset nil coding nil)) (charset (setq charset (or ... ...))))= (if (and (not raw) (member (car ...) '...)) (progn (let (...) (save-curren= t-buffer ... ...)) (mml-insert-mime-headers cont type charset encoding flow= ed) (insert "\n") (insert coded)) (let ((temp-buffer ...)) (save-current-bu= ffer (set-buffer temp-buffer) (unwind-protect ... ...))) (mml-insert-mime-h= eaders cont type charset encoding nil) (insert "\n" coded)))) ((eq (car con= t) 'external) (insert "Content-Type: message/external-body") (let ((paramet= ers (mml-parameter-string cont '...)) (name (cdr (assq ... cont))) (url (cd= r (assq ... cont)))) (if name (progn (setq name (mml-parse-file-name name))= (if (stringp name) (mml-insert-parameter ... "access-type=3Dlocal-file") (= mml-insert-parameter ... ... ...) (mml-insert-parameter ...)))) (if url (pr= ogn (mml-insert-parameter (mail-header-encode-parameter "url" url) "access-= type=3Durl"))) (if parameters (progn (mml-insert-parameter-string cont '...= ))) (insert "\n\n") (insert "Content-Type: " (or (cdr (assq ... cont)) (if = name (or ... "application/octet-stream") "text/plain")) "\n") (insert "Cont= ent-ID: " (message-make-message-id) "\n") (insert "Content-Transfer-Encodin= g: " (or (cdr (assq ... cont)) "binary")) (insert "\n\n") (insert (or (cdr = (assq ... cont)))) (insert "\n"))) ((eq (car cont) 'multipart) (let* ((type= (or (cdr ...) "mixed")) (mml-generate-default-type (if (equal type "digest= ") "message/rfc822" "text/plain")) (handler (assoc type mml-generate-multip= art-alist))) (if handler (funcall (cdr handler) cont) (let ((mml-boundary .= ..)) (insert (format "Content-Type: multipart/%s; boundary=3D\"%s\"" type m= ml-boundary) (if ... ... "\n")) (let (... part) (while ... ...)) (insert "\= n--" mml-boundary "--\n"))))) (t (error "Invalid element: %S" cont))) (let = ((sign-item (assoc (cdr (assq 'sign cont)) mml-sign-alist)) (encrypt-item (= assoc (cdr (assq 'encrypt cont)) mml-encrypt-alist)) sender recipients) (if= (or sign-item encrypt-item) (progn (if (setq sender (cdr (assq ... cont)))= (progn (message-options-set 'mml-sender sender) (message-options-set 'mess= age-sender sender))) (if (setq recipients (cdr (assq ... cont))) (message-o= ptions-set 'message-recipients recipients)) (let ((style (mml-signencrypt-s= tyle ...))) (if (and sign-item encrypt-item (equal ... ...) (equal style ..= .)) (funcall (nth 1 encrypt-item) cont t) (if sign-item (progn ...)) (if en= crypt-item (progn ...)))))))) (let ((mm-use-ultra-safe-encoding (or mm-use-ultra-safe-encoding (assq 's= ign cont)))) (save-restriction (narrow-to-region (point) (point)) (mml-twea= k-part cont) (cond ((or (eq (car cont) 'part) (eq (car cont) 'mml)) (let* (= (raw (cdr ...)) (filename (cdr ...)) (type (or ... ...)) (charset (cdr ...)= ) (coding (mm-charset-to-coding-system charset)) encoding flowed coded) (co= nd ((eq coding ...) (setq charset nil coding nil)) (charset (setq charset .= ..))) (if (and (not raw) (member ... ...)) (progn (let ... ...) (mml-insert= -mime-headers cont type charset encoding flowed) (insert "\n") (insert code= d)) (let (...) (save-current-buffer ... ...)) (mml-insert-mime-headers cont= type charset encoding nil) (insert "\n" coded)))) ((eq (car cont) 'externa= l) (insert "Content-Type: message/external-body") (let ((parameters (mml-pa= rameter-string cont ...)) (name (cdr ...)) (url (cdr ...))) (if name (progn= (setq name ...) (if ... ... ... ...))) (if url (progn (mml-insert-paramete= r ... "access-type=3Durl"))) (if parameters (progn (mml-insert-parameter-st= ring cont ...))) (insert "\n\n") (insert "Content-Type: " (or (cdr ...) (if= name ... "text/plain")) "\n") (insert "Content-ID: " (message-make-message= -id) "\n") (insert "Content-Transfer-Encoding: " (or (cdr ...) "binary")) (= insert "\n\n") (insert (or (cdr ...))) (insert "\n"))) ((eq (car cont) 'mul= tipart) (let* ((type (or ... "mixed")) (mml-generate-default-type (if ... "= message/rfc822" "text/plain")) (handler (assoc type mml-generate-multipart-= alist))) (if handler (funcall (cdr handler) cont) (let (...) (insert ... ..= .) (let ... ...) (insert "\n--" mml-boundary "--\n"))))) (t (error "Invalid= element: %S" cont))) (let ((sign-item (assoc (cdr (assq ... cont)) mml-sig= n-alist)) (encrypt-item (assoc (cdr (assq ... cont)) mml-encrypt-alist)) se= nder recipients) (if (or sign-item encrypt-item) (progn (if (setq sender (c= dr ...)) (progn (message-options-set ... sender) (message-options-set ... s= ender))) (if (setq recipients (cdr ...)) (message-options-set 'message-reci= pients recipients)) (let ((style ...)) (if (and sign-item encrypt-item ... = ...) (funcall ... cont t) (if sign-item ...) (if encrypt-item ...)))))))) mml-generate-mime-1((multipart (sign . "pgpmime") (tag-location . 76) (pa= rt (type . "text/plain") (contents . "Test\n\n")) (mml (type . "message/rfc= 822") (disposition . "inline") (tag-location . 108) (contents . "--=3D=3D= =3D=3D-=3D-=3D\nContent-Disposition: inline\nMIME-Versio...")))) (cond ((and (consp (car cont)) (=3D (length cont) 1)) (mml-generate-mime-= 1 (car cont))) ((eq (car cont) 'multipart) (mml-generate-mime-1 cont)) (t (= mml-generate-mime-1 (nconc (list 'multipart (cons 'type (or multipart-type = "mixed"))) cont)))) (progn (set-buffer-multibyte nil) (setq message-options options) (cond ((= and (consp (car cont)) (=3D (length cont) 1)) (mml-generate-mime-1 (car con= t))) ((eq (car cont) 'multipart) (mml-generate-mime-1 cont)) (t (mml-genera= te-mime-1 (nconc (list 'multipart (cons 'type (or multipart-type "mixed")))= cont)))) (setq options message-options) (buffer-string)) (unwind-protect (progn (set-buffer-multibyte nil) (setq message-options o= ptions) (cond ((and (consp (car cont)) (=3D (length cont) 1)) (mml-generate= -mime-1 (car cont))) ((eq (car cont) 'multipart) (mml-generate-mime-1 cont)= ) (t (mml-generate-mime-1 (nconc (list 'multipart (cons ... ...)) cont)))) = (setq options message-options) (buffer-string)) (and (buffer-name temp-buff= er) (kill-buffer temp-buffer))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (set= -buffer-multibyte nil) (setq message-options options) (cond ((and (consp (c= ar cont)) (=3D (length cont) 1)) (mml-generate-mime-1 (car cont))) ((eq (ca= r cont) 'multipart) (mml-generate-mime-1 cont)) (t (mml-generate-mime-1 (nc= onc (list ... ...) cont)))) (setq options message-options) (buffer-string))= (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))) (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer= (set-buffer temp-buffer) (unwind-protect (progn (set-buffer-multibyte nil)= (setq message-options options) (cond ((and (consp ...) (=3D ... 1)) (mml-g= enerate-mime-1 (car cont))) ((eq (car cont) 'multipart) (mml-generate-mime-= 1 cont)) (t (mml-generate-mime-1 (nconc ... cont)))) (setq options message-= options) (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer temp-= buffer))))) (prog1 (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current= -buffer (set-buffer temp-buffer) (unwind-protect (progn (set-buffer-multiby= te nil) (setq message-options options) (cond ((and ... ...) (mml-generate-m= ime-1 ...)) ((eq ... ...) (mml-generate-mime-1 cont)) (t (mml-generate-mime= -1 ...))) (setq options message-options) (buffer-string)) (and (buffer-name= temp-buffer) (kill-buffer temp-buffer))))) (setq message-options options)) (if (not cont) nil (if (and (consp (car cont)) (=3D (length cont) 1) cont= ent-type) (progn (setcdr (assq 'type (cdr (car cont))) content-type))) (if = (and (consp (car cont)) (=3D (length cont) 1) (fboundp 'libxml-parse-html-r= egion) (equal (cdr (assq 'type (car cont))) "text/html")) (progn (setq cont= (mml-expand-html-into-multipart-related (car cont))))) (prog1 (let ((temp-= buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer t= emp-buffer) (unwind-protect (progn (set-buffer-multibyte nil) (setq message= -options options) (cond (... ...) (... ...) (t ...)) (setq options message-= options) (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer temp-= buffer))))) (setq message-options options))) (let ((cont (mml-parse)) (mml-multipart-number mml-multipart-number) (opt= ions message-options)) (if (not cont) nil (if (and (consp (car cont)) (=3D = (length cont) 1) content-type) (progn (setcdr (assq 'type (cdr (car cont)))= content-type))) (if (and (consp (car cont)) (=3D (length cont) 1) (fboundp= 'libxml-parse-html-region) (equal (cdr (assq 'type (car cont))) "text/html= ")) (progn (setq cont (mml-expand-html-into-multipart-related (car cont))))= ) (prog1 (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current= -buffer (set-buffer temp-buffer) (unwind-protect (progn (set-buffer-multiby= te nil) (setq message-options options) (cond ... ... ...) (setq options mes= sage-options) (buffer-string)) (and (buffer-name temp-buffer) (kill-buffer = temp-buffer))))) (setq message-options options)))) mml-generate-mime(nil nil) message-encode-message-body() mml-to-mime() (progn (goto-char (point-min)) (mml-to-mime) nil) (condition-case nil (progn (goto-char (point-min)) (mml-to-mime) nil) (er= ror t)) (or (condition-case nil (progn (goto-char (point-min)) (mml-to-mime) nil)= (error t)) (cl--assertion-failed '(condition-case nil (progn (goto-char (p= oint-min)) (mml-to-mime) nil) (error t)))) eval-buffer(# nil "/home/npostavs/src/emacs/bug-39884-bad= -mml-parsing..." nil t) ; Reading at buffer position 2861 load-with-code-conversion("/home/npostavs/src/emacs/bug-39884-bad-mml-par= sing..." "/home/npostavs/src/emacs/bug-39884-bad-mml-parsing..." nil nil) load("/home/npostavs/src/emacs/bug-39884-bad-mml-parsing..." nil nil t) load-file("~/src/emacs/bug-39884-bad-mml-parsing.el") funcall-interactively(load-file "~/src/emacs/bug-39884-bad-mml-parsing.el= ") call-interactively(load-file record nil) command-execute(load-file record) execute-extended-command(nil "load-file" "load-fi") funcall-interactively(execute-extended-command nil "load-file" "load-fi") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command) --==-=-= Content-Type: text/plain 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: --==-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-Don-t-let-a-code-literal-get-modified-in-mml-parsing.patch Content-Description: patch >From 16c77ed31d836c374b37cbdf03947567fc7b8581 Mon Sep 17 00:00:00 2001 From: Noam Postavsky 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 --==-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Apr 17 03:49:06 2020 Received: (at 39884) by debbugs.gnu.org; 17 Apr 2020 07:49:06 +0000 Received: from localhost ([127.0.0.1]:39866 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPLkH-0005qY-QM for submit@debbugs.gnu.org; Fri, 17 Apr 2020 03:49:05 -0400 Received: from mout.gmx.net ([212.227.17.22]:54421) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPLkG-0005q5-6k for 39884@debbugs.gnu.org; Fri, 17 Apr 2020 03:49:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1587109737; bh=auwnl27xkjT0tPoTIcB+E4qBUENdM83S29v7d6KD9eE=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=UCRcdzPETFiIgK38c9GBVO+bs+d/HZT5k5Uy9l66u8SX/ndQXLFSVWyjD1N9c3Kg2 3AgA/CuNjvYf6/agEOOOFTZ62ZUZYRZuPN/b5DPg6evG5vej2ov9+T1i34mBxlTxrn M1u8GN2VvwroHwAGOxf2sS9FCi/UqLFLEwWGzgoQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost ([89.247.252.18]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mt79F-1j5Kqm24Jl-00tWXe; Fri, 17 Apr 2020 09:48:57 +0200 From: Rainer Gemulla To: Noam Postavsky Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending In-Reply-To: <87mu7b2bu1.fsf@gmail.com> References: <87mu7b2bu1.fsf@gmail.com> Date: Fri, 17 Apr 2020 09:48:54 +0200 Message-ID: <87imhysgbd.fsf@macho> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Provags-ID: V03:K1:fOt0D+4+sWFvp+5uvEoGJM7ImCNpIIg+avZpst4NKoIX4r0wLtL 1Kf6NxPotAw54BoJBfLc7g07ZIQ8/Yir+h4CX2oM5E4SMTuPjCD2vpUyYylvB/vs5luMd0E 707ufrcQm8jTbL4OqtkizOqtm7dJtJAKCnQHIudGRmwXlFASosvAoFoUHfJY6Dsplqgqx9n 8fL2+zay3OZpos9EcSfuQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:P7C7lI2wm5g=:5CvIPNt99C7Cm0T9sgD/OS C5mD2wkPRcXhfK1FyZJpzbuo4WRakEh8AWeChXrT0ZGc/9GNlryG1IAYxbyVvkfRmoMMQe+MQ RgZL1FRIH7OE/wKcU3k6HqUQyw48+kxMIWf3wycxvQAtupyuBWlcE16DnSDaYWbqtAhBwiKgm Sl5/n0gSGTE+0TL57Tg8aDrnVQe+mdVbbs8qqY/at41nMfB9b/UYU6pq2+uM3vI2ExJ/zXutf eg6vh1o6FKUek5hQjwMJEgIf9IAheKMA2XhxbfG2XH3uFY4gu/MB4I73SQbLMM3YS11udC1r3 poEzOBe/hc868M97hKA8hWEKxG2XGFA/IXg5XKyBMcXmtGmbEXXjq1z0KY7U8W8QBe2Mp2PMc /79kqfPcp/H4/Pyug20PsI1XqN5L1M9eEWv41y07DTPZk1xKICl+zAb2COzsX+DsENQ4RSBPJ KRlkdJA1hX+qH1q2xkmOxilQv/uf4ImpeGbaYoJrfXKPRqCDcfuLzDsKCLC5R9Ji3dEEinBO8 GG9PZXkQU35DXyfLa0A5TbVWFNuVikbYLr0Ek0udcWgDGC1ZMu19D4VQ0+BUvS63AicuVBTZ6 kV1jQFbhQWgvvPpfRph/5lX7UEtJ8skSeKMuGM+VI5agSw6EB+Afu3S6ikfRUmeIouyRzkjIl DbQlc1BA1ypONdOeamMenil6P6KjXnfXWBp/+I7kehCvmNvv37hrAkJS/NkiFv4fv+9tIuDFO 3wSMXds0EX21plo1CMQfbOnUEhXlUeLgJybhkmztSsCxn0J+8qSxZzmsi6WxpiWsh6eo2Y5El 4wftjLVczcuhQFjFAQ1flxqMRb8ytWtdqzodRl5SymVF4WUdRqxiZtWhAzaSMqRxTzJryMxCe LDQq8UevqjTmUEkwqMnfhQ7egNLmqCIPgd+lDoHlkE8DfY3n+wkCD5NSyAy1G2+elgH0MvYpN DdDBmkgJMQx5soieTK3FVqJC7zi35FX6FBUJ2M5An7tWrdCoQ+GYBoIYLcHG06jbtvZzmuZFz +UDTxWj4Qe4q3GI9YZXQmMc9TYac08AE/CbZzWa2JJiyb96iaEjRfEWpnO9NdXIT3h4jQaWyj 9C8x+RQ4gUXtvKzhHBQLfn3C0ZK2q0cfkQB7Xr5Fs+ekRYMVxjNVAVeU7vU+vIZdpLJoIhkla +8QnmXR25wj71vxCz1ZWEL6/FqH3ZNp0wZSU9ltxwapDZd0QsgGuM4pZEAVvn7u4HdLdhuJW0 8B6CPCNG0iD21npYd X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain > 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: Thanks! Your patch also works for me. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJEBAEBCgAuFiEEmtshwn9RGtTGGzefdKcOvhKikVsFAl6ZX2YQHHJnZW11bGxh QGdteC5kZQAKCRB0pw6+EqKRW8EPEACigJa2azgcdesXM2EoIEvmEcmJ7K2G8Rdy zK/eppp0CnsWEv2YYCUPizViiDoKu0a9k9S246ndx6Hf8GG4Ds8aS7zMvpg8HV66 fyn8tcgNL9p25Vt+isipszFaQIaRQY3TUgulLaZ1R7U+fVEkUUcmhpUHZbOSZYWy KjO4h6EOsCowoRwXFIqKohUMpJrw1yHjYXtYowWmoxNmXExxELDhn8vZXtJHprjl VRustpzEWSW31DHZ5cwPafPj2jxfjNs5DpeDTcxzH1PpGCEfuKUmdplFBlH7MPKq eJMTvVwZbI7mL4W26v36MfiDWo7cSzWXIPQl3mvdfm+vs3zUEl0kiT42k03nkD20 dhJMG6oRh5ITTZ6/+RhSLfhRWc/0syfD/b1i/ngcA+12zXBlR5tkPh4qE7ilmtqP Ygh6Fue49jGz1U7wRSASwrZS/TvedNHvTAVSTIJp+/gu+ftENU5xzxH2IJL0DzA/ wd1M6sK7ImthLWopBfqMIagz1nWlZ4Vt1BCgH+mcc/z9p9fY8qqwt2kMtstzc+h1 UGfTwR/0tNOCU0M3y9bSLlNKwbk33piBrxnxb2oGJrxl85I3yS/sNQ/7rR+A9FL+ igBd4N6k8l+ic1A4QMdVisgksWNMlwD5df1oTmLn39oBB1jdc/8QQBEeSuN8rbPE xu2+vOPQdw== =pW0C -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Apr 17 03:49:17 2020 Received: (at 39884) by debbugs.gnu.org; 17 Apr 2020 07:49:17 +0000 Received: from localhost ([127.0.0.1]:39869 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPLkT-0005r0-0y for submit@debbugs.gnu.org; Fri, 17 Apr 2020 03:49:17 -0400 Received: from mout.gmx.net ([212.227.17.21]:37725) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPLkR-0005qj-35 for 39884@debbugs.gnu.org; Fri, 17 Apr 2020 03:49:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1587109748; bh=Ptco8KQW9Le/dXrWnZnvdC1SUr4JieswUAH/oALjtr0=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=F7d5TwHk/qGWdZ4G9CSv7oNPx0Rssd8gNXPm2edxNOr9iiAyzvZl67LwDjppv5pEq xC1IXiGrp4r8C7pwd1EGAd7ZBGXw1e+bySeFgVkec08RnjN0rHB4cj1ALDQjxbm68e c9vdQfrbn79/1e5o7uAFdN/lXMqmGmtaxBO22n/o= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost ([89.247.252.18]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MA7KU-1jWWTe2Rv0-00BbP6; Fri, 17 Apr 2020 09:49:08 +0200 From: Rainer Gemulla To: Noam Postavsky Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending In-Reply-To: <87mu7b2bu1.fsf@gmail.com> References: <87mu7b2bu1.fsf@gmail.com> Date: Fri, 17 Apr 2020 09:49:05 +0200 Message-ID: <87h7xisgb2.fsf@macho> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-Provags-ID: V03:K1:qWOUUXJN8dTyS2mbvdmJ6WidEshe0hRiiYov2qo3PRK24R17eBo hZgj4yURQ99JzfcbU78GLk1RUbZM63+2M+qhd7NvDVRZnH9xaP7u+XJSAOrn9E+vCp3i6sw d9aDTSNEpOFtSlBPPCKBsvPlQ25tt9N1UouG7ygMwYdCG08rTRATaXjUFJvD1H7jxCKGe5Y rmqCvFjhjrN3cq9LhKUXw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:8xAfjfZfuMk=:aN32N2xK1ZY/gtNVCZwaer hQ1l8kHCb6yh0b4wPCYVNMRqbuPptlm1DqAdc1HF4jKRaoxjcGHIBYPH9nwRZI1W1NQ9JMf3T 0OjgopGb7hvSQGoraP7Li3vmsAdS17G4qazlHCU64f5+a35R8HvJSaj8AjmCAczv9RbjlU0g4 Qgla9rXcg1Cs4vGiHGraQgSQQbKQ+dIKdrfJelNdexSgvWShp/qttG5+ulPysMBlsayNQOggR pRFl0EEpgGz3VoXKlYWqkN5hr1RY7ST8ec4dzyrq12pw3LjjPdt9pRSrWEWsSDSpKaKfzPJCV 7tln52ccyl/U8esRn1L/2+E0DP3v9P8lQR/TmZxrm2g9Fde5tGmxmVXJm/BWJkCjr0zhcCoc2 DwydHgQX0ikDAqpfFqXFl40++TemzznzazSN14Oxx0L0SpWlbPSmAsRTL6R0DlO8/CtvqDDc1 A7ssvSYcHZzlvjJiDwbsBuUkl8Ge2jM+VD0dsUM4HvRpLei1Y+8/IJEC5z2QIbEXpJUKbdZ+P aLHhpyNT/asQv3OJiUa84pBLSwKCaMJ+CWcZAkB5OygvFxTb4R36xyxAGnuEtJr69nfkVoQ/5 P0zGfE/2aMdwlGpBlzjjhJjWBGyP618J9yFvM6/rAYlEhyn17H8N97cnOhnNcJoyXHfsk0UmG neBAOJFRENSYyid4C9OIIjXjJyLYuOC3+g8Fb8zLXDq9GlIUjkJfu93OElNy/N/22m615JN0T 4py0ijsqHT5oC+k3HW9v41BmdTHOn5Mo0SajE406ucmUTU6qBmmn+Wl9Sd5dMazlBR7g0Ttd8 jgp9Jj0CyMK1oCjjNj5bCes+36XQ2t5ES5WYzkItbKeDmn1uxhDiiNAfew9Afm05S17xpVXxE hJWojZsU1ptLz1DQAPaVixA8HA1+ScsSL3RxmhD2MX95xAmOrlG594/rQHuLrOLzAoWbLbu/r ERqCwbz2SMhGHQVUrxtRnWYePlFGYmLj/W7lUT7VTVkpL3Fo7rWajHjMfywkUsWcIk5+7IwAS UZvgj22sCBqK9U4Yf7DKzqpL1g1AFmStVnY0/qcgHJ74ISJln5J5twBryWz88sWwmK0hNQkkG vW6obdePU3zyUc/iWPQGFczqbOWd/EE6n+18wERJnqGujKDbE0L7N9OUXgevW8oUtRWMsV6be 5SBtcU+64FG1tRFvM5X2a6EvKO80vewbbstsC/BlNTmlRRgRHKQuHks+E7BB7rkHqjVDqIZun EZQVawfJl2PqOJVEN X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) --=-=-= Content-Type: text/plain > 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: Thanks! Your patch also works for me. --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJEBAEBCgAuFiEEmtshwn9RGtTGGzefdKcOvhKikVsFAl6ZX3EQHHJnZW11bGxh QGdteC5kZQAKCRB0pw6+EqKRW1O0EADMzCGASGZp9N689+EkHY88pq3+6oywp7UA BjhPtAc01pWoXZOXIQsoXSyA0IoV5LNnCInqyJM3Kum0mwhrTluP1AOO33EbYm+9 p9zlEMOqrQTo6lpn8Ei0FL+vgnwW9gi/bC2gVPnpq0ffpG9Ym/kRrgEJRW1uEhVa 5PFWHNZFfymrlqaGpfFeDR0xNdH5njnPKF9xOra9WU45fOr8X6aoU3r+LYtlfQje Ab3aB6Osi1rCOceilflxkkIRAaKvfAaZEK3+T6fjJuYEZa5TD6+as/kk6MaIxOiH v98CDXs1LM7DRjq5Getfd90rAtqeLacLrzrIJ4u/mjYqv5cIz59jEYts36VzJJEV ltnB3r1ON0jPqnRNtcI75//8MjUxfzhdbvVvmRYB74ESow9JmXzDz3HVvL3+iD38 Ts7N9y0P4EQsC6JsFlq7pcH36XgpPon9KXzZ7Ph1MA3wfltB2JOE7J6/xBb5F6pb TiGzy/yKUt8Tp1oiVwYjpxwtLyMiqOwnzLmj9dsopLLlu7EKVx07c2KnV5P5Z0zQ Dj8c+vEhtg8H2BLWAxp+xSm5mt8lFM4Z7oetTLa902aPKbntmPO9/Ws46vBhcLor lU6Y9erYrCb0Q8BT/siuNM1WeOW9Dj8v11qk9i0L97rfnHtiw4w09KtnSvr8c1zn 9JOWf3NCmQ== =2qFb -----END PGP SIGNATURE----- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Fri Apr 17 05:54:25 2020 Received: (at 39884) by debbugs.gnu.org; 17 Apr 2020 09:54:25 +0000 Received: from localhost ([127.0.0.1]:39943 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPNhY-0000yF-Sx for submit@debbugs.gnu.org; Fri, 17 Apr 2020 05:54:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47165) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPNhW-0000y2-Kj for 39884@debbugs.gnu.org; Fri, 17 Apr 2020 05:54:23 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52347) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1jPNhR-0002Ta-8T; Fri, 17 Apr 2020 05:54:17 -0400 Received: from [176.228.60.248] (port=2457 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jPNhQ-0003yt-KS; Fri, 17 Apr 2020 05:54:17 -0400 Date: Fri, 17 Apr 2020 12:54:05 +0300 Message-Id: <83eesmcu9u.fsf@gnu.org> From: Eli Zaretskii To: Noam Postavsky In-Reply-To: <87mu7b2bu1.fsf@gmail.com> (message from Noam Postavsky on Thu, 16 Apr 2020 20:30:14 -0400) Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending References: <87mu7b2bu1.fsf@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Spam-Score: -1.5 (-) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org, rgemulla@gmx.de X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.5 (--) > From: Noam Postavsky > Date: Thu, 16 Apr 2020 20:30:14 -0400 > Cc: 39884@debbugs.gnu.org > > 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: Fine with me, thanks. From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 25 09:59:34 2020 Received: (at 39884) by debbugs.gnu.org; 25 Apr 2020 13:59:34 +0000 Received: from localhost ([127.0.0.1]:60094 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jSLLC-0001DP-DE for submit@debbugs.gnu.org; Sat, 25 Apr 2020 09:59:34 -0400 Received: from mail-qt1-f171.google.com ([209.85.160.171]:41584) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jSLLA-0001D5-JA; Sat, 25 Apr 2020 09:59:32 -0400 Received: by mail-qt1-f171.google.com with SMTP id h26so10099914qtu.8; Sat, 25 Apr 2020 06:59:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=xTxoF0CYzi6e/QaWF9DYFN6UlKg3vNEuWsdn93wUqrQ=; b=ig9j/ucHgXK9GyYGpuxbdZ3A8AuFHBjDCXxdrlx/qwQA+Fv8GCjNZdrh5pSpfcDf06 qYTrGSgUpdXLLkIS0uJCXp2fu9A6J8u+6EsWBcPVqaN/fgB+R7dnBlG5a4QCKTn1i5+i 7xfAWJLS+V1lnmZokC8lD+VQR7AfUmtO5WZ8mUqvJ75QJeiPeDoBELJSuvY4q/V8L4y4 qS4I82/SrkvJa5o0+aGKPzbeY+nGBViWx9TNWcbJoGAEC7TZpjwDIrlmiIZRpa3hnpiC sHBcBia08JBZWRMuMkuOdjDN182ZhcfECTxVJkTfDJKHUnAp3MYGJCWCOmcrnrPDGN/e xN+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=xTxoF0CYzi6e/QaWF9DYFN6UlKg3vNEuWsdn93wUqrQ=; b=rjyLEAxdlKBxWoN0/9+2zvvJtdL83c1j0kChOqVlQvnLOeIRLxMsL+Fcl6ffsEDiyI Rsn+zm2Hd6YKU0fTf2U+HV5n7uTuXYI2Kyroc8ADRbbm75ImIpmKbmKGM0p826W5w50j 02YkvPYDDvbm9RWmv662QSIIJtmOYa+4XESQHzzOPGpNcydBrsgGy/ti6VRfNAMR+fJF Er9jgipiC/DKQeBBHBjp3oAgILaapumMWI1JWuw9PdtMnoOdd/IXQGmoQklaBaPpDQ5U lS0KBCXIrUKOik9Vj4GrCLPIhxvVxS/icZS+PA4PJejK/8p9TBkkf46OjNzZTn1EWHgJ dy4w== X-Gm-Message-State: AGi0PubjrIuJ7UugAzVxSLmbm+qJ0cnTKtrP0NYFz6NkG/xplWooyG1B o4WkyZK0FLurREReQZSm9G7kOxo1 X-Google-Smtp-Source: APiQypIEyYLVp5W9yrkdpzrkAI5oOFvILKwNyc1j+0EEUBsXZefsu8JpQUm6bYr9gOoTtgHHkan9Qw== X-Received: by 2002:ac8:4b5b:: with SMTP id e27mr14252762qts.46.1587823166696; Sat, 25 Apr 2020 06:59:26 -0700 (PDT) Received: from minid (cbl-45-2-119-47.yyz.frontiernetworks.ca. [45.2.119.47]) by smtp.gmail.com with ESMTPSA id j14sm5724850qkk.92.2020.04.25.06.59.25 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 25 Apr 2020 06:59:26 -0700 (PDT) From: Noam Postavsky To: Eli Zaretskii Subject: Re: bug#39884: 27.0.50; Emacs may destroy outgoing email messages during sending References: <87mu7b2bu1.fsf@gmail.com> <83eesmcu9u.fsf@gnu.org> Date: Sat, 25 Apr 2020 09:59:18 -0400 In-Reply-To: <83eesmcu9u.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 17 Apr 2020 12:54:05 +0300") Message-ID: <87y2qjfyyx.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 39884 Cc: 39884@debbugs.gnu.org, rgemulla@gmx.de X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 39884 fixed close 39884 27.1 quit Eli Zaretskii writes: >> From: Noam Postavsky >> Date: Thu, 16 Apr 2020 20:30:14 -0400 >> Cc: 39884@debbugs.gnu.org >> >> 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: > > Fine with me, thanks. Pushed to emacs-27. [1: 821760fdc4]: 2020-04-25 09:55:36 -0400 Don't let a code literal get modified in mml parsing (Bug#39884) https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=821760fdc439214f57212708e23d5c87088d34ee From unknown Sat Jun 14 19:29:33 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 24 May 2020 11:24:08 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator