unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better
@ 2023-11-08 17:35 Dirk-Jan C. Binnema
  2023-11-18  9:16 ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: Dirk-Jan C. Binnema @ 2023-11-08 17:35 UTC (permalink / raw)
  To: 67002

[-- Attachment #1: Type: text/plain, Size: 1398 bytes --]


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.


[-- Attachment #2: Example message --]
[-- Type: text/plain, Size: 50584 bytes --]

Content-Type: multipart/mixed;
 boundary=8e82eceef372fed17bd1d582bf15541db82b5db0d69bf99d382ee5e6a741c5ab
To: "me" <me@example.com>
From: "you" <you@example.com>
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

<div dir=3D"ltr">An image of the logo<br><div><div><img src=3D"cid:ii_lfzt7=
0np0" alt=3D"emacs.png" width=3D"128" height=3D"128"></div><div>An image of=
 how it looks like</div><div><img src=3D"cid:ii_lfzt7ink1" alt=3D"emacs.png=
" width=3D"220" height=3D"151"><br></div></div></div>

--86d44af49fe5a475f6277df415d92758fb287a05f23248b528e691992ed5466a
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=emacs.png
Content-Type: image/png; name=emacs.png
content-id: <ii_lfzt70np0>
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: <ii_lfzt7ink1>

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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--

^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better
  2023-11-08 17:35 bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better Dirk-Jan C. Binnema
@ 2023-11-18  9:16 ` Eli Zaretskii
  2023-11-19 19:58   ` Eric Abrahamsen
  0 siblings, 1 reply; 4+ messages in thread
From: Eli Zaretskii @ 2023-11-18  9:16 UTC (permalink / raw)
  To: Dirk-Jan C. Binnema, Eric Abrahamsen, Andrew G Cohen; +Cc: 67002

> From: "Dirk-Jan C. Binnema" <djcb@djcbsoftware.nl>
> 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?





^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better
  2023-11-18  9:16 ` Eli Zaretskii
@ 2023-11-19 19:58   ` Eric Abrahamsen
  2023-11-27 16:43     ` Eric Abrahamsen
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Abrahamsen @ 2023-11-19 19:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 67002, Dirk-Jan C. Binnema, Andrew G Cohen

Eli Zaretskii <eliz@gnu.org> writes:

>> From: "Dirk-Jan C. Binnema" <djcb@djcbsoftware.nl>
>> 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





^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better
  2023-11-19 19:58   ` Eric Abrahamsen
@ 2023-11-27 16:43     ` Eric Abrahamsen
  0 siblings, 0 replies; 4+ messages in thread
From: Eric Abrahamsen @ 2023-11-27 16:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 67002, Dirk-Jan C. Binnema, Andrew G Cohen

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: "Dirk-Jan C. Binnema" <djcb@djcbsoftware.nl>
>>> 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





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-11-27 16:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-08 17:35 bug#67002: 30.0.50; gnus-article-browse-html-save-cid-content could handle duplicate filenames better Dirk-Jan C. Binnema
2023-11-18  9:16 ` Eli Zaretskii
2023-11-19 19:58   ` Eric Abrahamsen
2023-11-27 16:43     ` Eric Abrahamsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).