From unknown Fri Sep 12 06:30:24 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#67002 <67002@debbugs.gnu.org> To: bug#67002 <67002@debbugs.gnu.org> Subject: Status: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better Reply-To: bug#67002 <67002@debbugs.gnu.org> Date: Fri, 12 Sep 2025 13:30:24 +0000 retitle 67002 30.0.50; gnus-article-browse-html-save-cid-content could hand= le duplicate filenames better reassign 67002 emacs submitter 67002 "Dirk-Jan C. Binnema" severity 67002 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 08 12:54:53 2023 Received: (at submit) by debbugs.gnu.org; 8 Nov 2023 17:54:53 +0000 Received: from localhost ([127.0.0.1]:46273 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r0mlN-000866-6A for submit@debbugs.gnu.org; Wed, 08 Nov 2023 12:54:52 -0500 Received: from lists.gnu.org ([2001:470:142::17]:46882) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r0mlH-00085m-36 for submit@debbugs.gnu.org; Wed, 08 Nov 2023 12:54:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r0mkZ-000853-3q for bug-gnu-emacs@gnu.org; Wed, 08 Nov 2023 12:53:59 -0500 Received: from fhop.smtp.cz ([81.95.97.125]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r0mkU-0003p6-5Y for bug-gnu-emacs@gnu.org; Wed, 08 Nov 2023 12:53:58 -0500 Received: from antirelay08.smtp.cz (ahop.smtp.cz [IPv6:2a02:4a8:ac24:126::105:189]) by fhop.smtp.cz (Postfix) with ESMTPS id 673AE25B6CA for ; Wed, 8 Nov 2023 18:36:05 +0100 (CET) Received: from out.smtp.cz (email.active24.com [IPv6:2a02:4a8:ac24:101::97:6]) by ahop.smtp.cz (Postfix) with ESMTPS id 77595C0F4C for ; Wed, 8 Nov 2023 18:35:26 +0100 (CET) Received: from evergrey (85-76-72-150-nat.elisa-mobile.fi [85.76.72.150]) (Authenticated sender: djcb@djcbsoftware.nl) by out.smtp.cz (Postfix) with ESMTPSA id EB6E0C0605 for ; Wed, 8 Nov 2023 18:35:25 +0100 (CET) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 1.0.3 at clam2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=djcbsoftware.nl; s=a24; t=1699464926; bh=7I5+RlmQ5CU9BxgizXShpTa8+BnKbWSNVOH+WdQCm0E=; h=From:To:Subject:Date:From; b=qzCUclOa2HRrnEdHyPh9ajMykm/awYJKuq6oGXxj1jacpZjs18H9UckIWWxhCEpZQ mxUS6yw5yEgDHKN5zfjeCVew9GVZrNCwho/XSoFAEFJSKfPxFilCdUkgeCcOsUzvXN SUH/s8kpsvZ6xw4FapFDn4HwEnaRvDCtETVI+uag= From: "Dirk-Jan C. Binnema" To: bug-gnu-emacs@gnu.org Subject: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better User-Agent: mu4e 1.11.24; emacs 30.0.50 Date: Wed, 08 Nov 2023 19:35:24 +0200 Message-ID: <87h6lw1737.fsf@djcbsoftware.nl> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: none client-ip=81.95.97.125; envelope-from=djcb@djcbsoftware.nl; helo=fhop.smtp.cz X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_BTC_ID=0.499, PDS_LITECOIN_ID=0.5, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_MIME_MALF=0.01, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: 0.4 (/) 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: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.6 (/) --=-=-= Content-Type: text/plain Dear Gnus, This came up in a mu4e bug: https://github.com/djcb/mu/issues/2460 (for reference: mu4e is /another/ Emacs MUA, which re-uses a lot of Gnus code) Basically, in the attached html-email there are _two_ CIDs with the same filename (but with different content-ids) When doing a view-in-browser, gnus-article-browse-html-save-cid-content uses the filename in favor of the cid, and the first file will be overwritten by the second. Admittedly, a corner-case. But, it can be fixed. This fixes it for me: --8<---------------cut here---------------start------------->8--- @@ -2871,11 +2871,14 @@ gnus-article-browse-html-save-cid-content cid handle directory)) (throw 'found file))) ((equal (concat "<" cid ">") (mm-handle-id handle)) - (setq file (or (mm-handle-filename handle) - (concat - (make-temp-name "cid") - (car (rassoc (car (mm-handle-type handle)) - mailcap-mime-extensions)))) + ;; Files are randomized since declared filenames may not be unique. + (setq file (format "cid-%d-%s" + (random 99) + (or (mm-handle-filename handle) + (concat + (make-temp-name "cid") + (car (rassoc (car (mm-handle-type handle)) + mailcap-mime-extensions))))) afile (expand-file-name file directory)) --8<---------------cut here---------------end--------------->8--- Kind regards, Dirk. --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=image_issue_email.txt Content-Description: Example message Content-Type: multipart/mixed; boundary=8e82eceef372fed17bd1d582bf15541db82b5db0d69bf99d382ee5e6a741c5ab To: "me" From: "you" Subject: test X-Attached: emacs.png X-Attached: emacs.png --8e82eceef372fed17bd1d582bf15541db82b5db0d69bf99d382ee5e6a741c5ab Content-Type: multipart/related; boundary=86d44af49fe5a475f6277df415d92758fb287a05f23248b528e691992ed5466a --86d44af49fe5a475f6277df415d92758fb287a05f23248b528e691992ed5466a Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8
An image of the logo
3D"emacs.png"
An image of= how it looks like
3D"emacs.png=
--86d44af49fe5a475f6277df415d92758fb287a05f23248b528e691992ed5466a Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=emacs.png Content-Type: image/png; name=emacs.png content-id: x-pm-content-encryption: on-delivery x-pm-image-height: 128 x-pm-image-width: 128 x-attachment-id: ii_lfzt70np0 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 AABJRU5ErkJggg== --86d44af49fe5a475f6277df415d92758fb287a05f23248b528e691992ed5466a Content-Transfer-Encoding: base64 Content-Disposition: inline; filename=emacs.png Content-Type: image/png; name=emacs.png x-pm-content-encryption: on-delivery x-pm-image-height: 151 x-pm-image-width: 220 x-attachment-id: ii_lfzt7ink1 content-id: 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 Xq8jyzKLi4scP/5ADLa/vx9JknjiiSdwHIdKxQ8gGIaBbdsiAbm/vx9d16nVamItMBqNEgqF6HQ6 HD9+nJWVFb/ZXS7HyMgIsViMVqvF/Pw8+Xwex3EYGhpia2sLwzBIJBLouk6z2RTal5FIRFxLtVp9 32upVqusra2RTqeJxWKEQiG63a64lomJCfL5PIlEgtS+wlkikUBRFGKxmFA/66GHAytMAGhA37Vr 1/7j+Pj4b4fD4Ufqx7rdLpqmva/wjmVZ2LaNYRjiPdu2hUTBLyocx0/lUVUVy7LQNO1RcdgefqER 5FI2m03u3r2Lve82bWxs/Ok3vv71PwD2AOtDRyk/zODRNO0RYn1Q4ecvAhRFEUGf4D71yNbDUeh5 3D308NMwHaUe4Xro4ZMxL4FavYFpWR+OcJ7n0Ww2fYGbLrgH9utWPJzO4bQh1wKn+5CMnYmouXSc B0nLh8/jZ+4fzEKybb9CIECz6e9frfr/Hka3C/vxkA+EaZq0Wi1ardaR3znopX3QJ7UOXEyz2cR1 XarVqgi4BH5qu93ujbQexLi5eu0629vbj8Q81EenQol6vc7tO7c5O/kk22/axEf9nUJpibWXbAae VXE6LuGsX/bd3PLLdHJPKHRLHuGsxNYVh/xFhdiQTLMJf/3Xfoa+bT8oHFVVuHoVpqbg7Fl/Gr5y xS/DOXHCr2/b3vZLefJ5KJX89+/c8QtRYzG/QHV1FY4d88t90ml/e8vyt5+Y8N8DmJ+fR9d1sXZm WRaKooiAx9WrV5menubMmTNIksSVK1dEVHJnZ4fNzU2i0SjZbJZKpcLx48dZXFxkfHycxcVFnnrq qV6haQ9+MoRpYts22kMxjCMJV61WcV2HxrI/U+2+6+BaHoVLKrFhCTUMxfccojUZuw3dir94XLrp YNUhrchoUVAN35B1XX8Wu3bNJ1Oj4ZfU7Lee4949SCT819Go/3dpCd580ydLOOyTSJb94tPr1/3t QiH/WD/4gT/T3bjhF6pub/skXl729wsIVywWmZiYwPM8rl69SrvdptFo0N/fj6ZpeJ7H0tIS8Xjc V9PaL8e5e/cub731Ful0GsMwCIfDSJLEW2+9xY0bN0ilUjQaDUzTPBSh7eHT7sR9iHq4g+I94Tx0 qhKJMRmz7hEZkFEjElpcIpyVCWUknE2PSL+MVfeLTrslvz4uOiBjtzzISOi6PyPZtj/r5HIPZBNG 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 --86d44af49fe5a475f6277df415d92758fb287a05f23248b528e691992ed5466a-- --8e82eceef372fed17bd1d582bf15541db82b5db0d69bf99d382ee5e6a741c5ab-- --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Nov 18 04:16:26 2023 Received: (at 67002) by debbugs.gnu.org; 18 Nov 2023 09:16:26 +0000 Received: from localhost ([127.0.0.1]:47797 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4HRC-0007Pb-Eo for submit@debbugs.gnu.org; Sat, 18 Nov 2023 04:16:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:34662) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4HR7-0007PH-VE for 67002@debbugs.gnu.org; Sat, 18 Nov 2023 04:16:25 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r4HQz-00014m-Te; Sat, 18 Nov 2023 04:16:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=HbIm7tzX4o67yOkWE+837pPkX8OTEyP1wUD/mV4o1wY=; b=qzys5cXsiD2o pg/YMX03px6svN0GOfPprg4k/S1xVNzl3SG/m8pjmlGBRJGC6EzfKazYTE1Y+sMVNi9cAu7lsZZf/ caFqFNjDdUtm5Uc8kMQudsd9UBUo5uZRwHpoHQ5hz412tQhKeeHHrKdkrR3EHtQmu3E8Su4Qqyx65 goymcqEfH5YIV7WC4e9W+3lzgbDMKqndad3/Olg1vMSgaVqSBe9v0qPwp/4LW+tX/FPwr6I/mrkNd j+kgO9onplyT7q+pLuzdzmUYjEPwF7jontdF88PDXyUMZbC8UZPCYip6nP5m6EaQbU/9cxXp7b7mu sbcfOkn3ywzzhGIKgZFc9A==; Date: Sat, 18 Nov 2023 11:16:11 +0200 Message-Id: <83wmufmnfo.fsf@gnu.org> From: Eli Zaretskii To: "Dirk-Jan C. Binnema" , Eric Abrahamsen , Andrew G Cohen In-Reply-To: <87h6lw1737.fsf@djcbsoftware.nl> Subject: Re: bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better References: <87h6lw1737.fsf@djcbsoftware.nl> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67002 Cc: 67002@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: -3.3 (---) > From: "Dirk-Jan C. Binnema" > Date: Wed, 08 Nov 2023 19:35:24 +0200 > > Dear Gnus, > > This came up in a mu4e bug: > https://github.com/djcb/mu/issues/2460 > > (for reference: mu4e is /another/ Emacs MUA, which re-uses a lot of Gnus code) > > Basically, in the attached html-email there are _two_ CIDs with the same > filename (but with different content-ids) > > When doing a view-in-browser, gnus-article-browse-html-save-cid-content > uses the filename in favor of the cid, and the first file will be > overwritten by the second. > > Admittedly, a corner-case. But, it can be fixed. > This fixes it for me: > > --8<---------------cut here---------------start------------->8--- > @@ -2871,11 +2871,14 @@ gnus-article-browse-html-save-cid-content > cid handle directory)) > (throw 'found file))) > ((equal (concat "<" cid ">") (mm-handle-id handle)) > - (setq file (or (mm-handle-filename handle) > - (concat > - (make-temp-name "cid") > - (car (rassoc (car (mm-handle-type handle)) > - mailcap-mime-extensions)))) > + ;; Files are randomized since declared filenames may not be unique. > + (setq file (format "cid-%d-%s" > + (random 99) > + (or (mm-handle-filename handle) > + (concat > + (make-temp-name "cid") > + (car (rassoc (car (mm-handle-type handle)) > + mailcap-mime-extensions))))) > afile (expand-file-name file directory)) > --8<---------------cut here---------------end--------------->8--- Eric, Andrew: any comments? From debbugs-submit-bounces@debbugs.gnu.org Sun Nov 19 14:58:56 2023 Received: (at 67002) by debbugs.gnu.org; 19 Nov 2023 19:58:57 +0000 Received: from localhost ([127.0.0.1]:52138 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4nwW-0002Rj-GX for submit@debbugs.gnu.org; Sun, 19 Nov 2023 14:58:56 -0500 Received: from mail.ericabrahamsen.net ([52.70.2.18]:41318) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r4nwU-0002RR-2a for 67002@debbugs.gnu.org; Sun, 19 Nov 2023 14:58:55 -0500 Received: from localhost (50-245-141-81-static.hfc.comcastbusiness.net [50.245.141.81]) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id 534ECFA396; Sun, 19 Nov 2023 19:58:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericabrahamsen.net; s=mail; t=1700423926; bh=uCf2rzEEa/fze0dSaO9KULfGSB+85vCk09jKAhjsErg=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=ASyf7+JiaocXdKTYfxXaI+fk6wp1D3yxnQa1UNnCQ0pkskwfE30TRejplzofd8UcJ ILFubVdrRoM9mmOjj2OfhD18oOJ4+mRziaQzkiGhP1oBTqwPeqwHZIrpyk0WSb3aUH k3OeuNLmksK3aYd88PVZhhXsQsItlshJLTrveZeI= From: Eric Abrahamsen To: Eli Zaretskii Subject: Re: bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better In-Reply-To: <83wmufmnfo.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 18 Nov 2023 11:16:11 +0200") References: <87h6lw1737.fsf@djcbsoftware.nl> <83wmufmnfo.fsf@gnu.org> Date: Sun, 19 Nov 2023 11:58:44 -0800 Message-ID: <87ttpho6q3.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 1.2 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Eli Zaretskii writes: >> From: "Dirk-Jan C. Binnema" >> Date: Wed, 08 Nov 2023 19:35:24 +0200 >> >> Dear Gnus, >> >> This came up in a mu4e bug: >> https://github.com/djcb/mu/issues/2460 >> >> (for r [...] Content analysis details: (1.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [52.70.2.18 listed in list.dnswl.org] 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [50.245.141.81 listed in zen.spamhaus.org] -0.0 T_SCC_BODY_TEXT_LINE No description available. X-Debbugs-Envelope-To: 67002 Cc: 67002@debbugs.gnu.org, "Dirk-Jan C. Binnema" , Andrew G Cohen 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: 0.2 (/) Eli Zaretskii writes: >> From: "Dirk-Jan C. Binnema" >> Date: Wed, 08 Nov 2023 19:35:24 +0200 >> >> Dear Gnus, >> >> This came up in a mu4e bug: >> https://github.com/djcb/mu/issues/2460 >> >> (for reference: mu4e is /another/ Emacs MUA, which re-uses a lot of Gnus code) >> >> Basically, in the attached html-email there are _two_ CIDs with the same >> filename (but with different content-ids) >> >> When doing a view-in-browser, gnus-article-browse-html-save-cid-content >> uses the filename in favor of the cid, and the first file will be >> overwritten by the second. >> >> Admittedly, a corner-case. But, it can be fixed. >> This fixes it for me: >> >> --8<---------------cut here---------------start------------->8--- >> @@ -2871,11 +2871,14 @@ gnus-article-browse-html-save-cid-content >> cid handle directory)) >> (throw 'found file))) >> ((equal (concat "<" cid ">") (mm-handle-id handle)) >> - (setq file (or (mm-handle-filename handle) >> - (concat >> - (make-temp-name "cid") >> - (car (rassoc (car (mm-handle-type handle)) >> - mailcap-mime-extensions)))) >> + ;; Files are randomized since declared filenames may not be unique. >> + (setq file (format "cid-%d-%s" >> + (random 99) >> + (or (mm-handle-filename handle) >> + (concat >> + (make-temp-name "cid") >> + (car (rassoc (car (mm-handle-type handle)) >> + mailcap-mime-extensions))))) >> afile (expand-file-name file directory)) >> --8<---------------cut here---------------end--------------->8--- > > Eric, Andrew: any comments? We've already got machinery for this sort of thing, in `mm-save-part', and `gnus-article-browse-html-save-cid-content' gives me the impression that it predates the helper functions in "mm-decode.el". Give me a few days, and I'll see if it can't be refactored onto mm-decode. Thanks, Eric From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 27 11:44:17 2023 Received: (at 67002) by debbugs.gnu.org; 27 Nov 2023 16:44:18 +0000 Received: from localhost ([127.0.0.1]:44655 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r7eiX-0004yk-Ft for submit@debbugs.gnu.org; Mon, 27 Nov 2023 11:44:17 -0500 Received: from mail.ericabrahamsen.net ([52.70.2.18]:53258) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r7eiU-0004yR-H8 for 67002@debbugs.gnu.org; Mon, 27 Nov 2023 11:44:15 -0500 Received: from localhost (71-212-21-65.tukw.qwest.net [71.212.21.65]) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id 2D06EFA01F; Mon, 27 Nov 2023 16:44:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericabrahamsen.net; s=mail; t=1701103441; bh=WJCE7tQkvKtjepsCfbR+doV9UC1QKaw2CKuMpU34vNo=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=YDKtbSCWdqtpyfTDCKdAYha5HiCxtiLam7HvEL5neA8RrBDweDL1w5A4iTL341i8X K53Kk6Vqy+QB5Y1koCTdtssCqSdZn1P+58gxuwn++9H1os8NgO4QL2eStFAqoP42Pm wz6dAEaMjaCesxamTLcJwYFuuPKY/iLfETQxylnU= From: Eric Abrahamsen To: Eli Zaretskii Subject: Re: bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better In-Reply-To: <87ttpho6q3.fsf@ericabrahamsen.net> (Eric Abrahamsen's message of "Sun, 19 Nov 2023 11:58:44 -0800") References: <87h6lw1737.fsf@djcbsoftware.nl> <83wmufmnfo.fsf@gnu.org> <87ttpho6q3.fsf@ericabrahamsen.net> Date: Mon, 27 Nov 2023 08:43:59 -0800 Message-ID: <875y1np2nk.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 67002 Cc: 67002@debbugs.gnu.org, "Dirk-Jan C. Binnema" , Andrew G Cohen 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: -3.3 (---) Eric Abrahamsen writes: > Eli Zaretskii writes: > >>> From: "Dirk-Jan C. Binnema" >>> Date: Wed, 08 Nov 2023 19:35:24 +0200 >>> >>> Dear Gnus, >>> >>> This came up in a mu4e bug: >>> https://github.com/djcb/mu/issues/2460 >>> >>> (for reference: mu4e is /another/ Emacs MUA, which re-uses a lot of Gnus code) >>> >>> Basically, in the attached html-email there are _two_ CIDs with the same >>> filename (but with different content-ids) >>> >>> When doing a view-in-browser, gnus-article-browse-html-save-cid-content >>> uses the filename in favor of the cid, and the first file will be >>> overwritten by the second. >>> >>> Admittedly, a corner-case. But, it can be fixed. >>> This fixes it for me: >>> >>> --8<---------------cut here---------------start------------->8--- >>> @@ -2871,11 +2871,14 @@ gnus-article-browse-html-save-cid-content >>> cid handle directory)) >>> (throw 'found file))) >>> ((equal (concat "<" cid ">") (mm-handle-id handle)) >>> - (setq file (or (mm-handle-filename handle) >>> - (concat >>> - (make-temp-name "cid") >>> - (car (rassoc (car (mm-handle-type handle)) >>> - mailcap-mime-extensions)))) >>> + ;; Files are randomized since declared filenames may not be unique. >>> + (setq file (format "cid-%d-%s" >>> + (random 99) >>> + (or (mm-handle-filename handle) >>> + (concat >>> + (make-temp-name "cid") >>> + (car (rassoc (car (mm-handle-type handle)) >>> + mailcap-mime-extensions))))) >>> afile (expand-file-name file directory)) >>> --8<---------------cut here---------------end--------------->8--- >> >> Eric, Andrew: any comments? > > We've already got machinery for this sort of thing, in `mm-save-part', > and `gnus-article-browse-html-save-cid-content' gives me the impression > that it predates the helper functions in "mm-decode.el". Give me a few > days, and I'll see if it can't be refactored onto mm-decode. I got around to looking at this, and I'd misunderstood what was happening here -- it's kind of a non-interactive context, where the user is only expecting to view the end result. So I think this is a fine solution. I'll poke at it a bit more, and close this bug report when the fix goes in. Thanks! Eric From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 08 12:52:20 2023 Received: (at control) by debbugs.gnu.org; 8 Dec 2023 17:52:20 +0000 Received: from localhost ([127.0.0.1]:46024 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rBf1Q-000155-Fl for submit@debbugs.gnu.org; Fri, 08 Dec 2023 12:52:20 -0500 Received: from mail.ericabrahamsen.net ([52.70.2.18]:42064) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rBf1N-00014e-Jx for control@debbugs.gnu.org; Fri, 08 Dec 2023 12:52:18 -0500 Received: from localhost (71-212-21-65.tukw.qwest.net [71.212.21.65]) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id 739E7FA09E for ; Fri, 8 Dec 2023 17:51:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericabrahamsen.net; s=mail; t=1702057918; bh=wGfw2P+Qu2zpvsLDTJWqb/qB0BGy42mom0H2NR4k3L0=; h=Date:To:From:Subject:From; b=HiMh6Szc7U3vgF0VHg0gOOHMsm9igEHJ2xlFxvOe2ys9l57Nn056b2wQgdjXaxELJ hdNil5biQlMlJy3g80BaCXIyChCSjIQc8tL4jP+fWGrfaXDQ1rNxs2/1SBfCzuTrIU vKQvxDdC4i0PgHhKQI/cei+577ZobAZI7ZaadMeE= Date: Fri, 08 Dec 2023 09:51:57 -0800 Message-ID: <6097f4a2a2716204e5c507500126e6b3@ericabrahamsen.net> To: control@debbugs.gnu.org From: Eric Abrahamsen Subject: control message for bug #67002 X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control 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: -3.3 (---) close 67002 30.1 quit From unknown Fri Sep 12 06:30:24 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 06 Jan 2024 12:24:06 +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