Application Octet Stream
11 years ago User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/ Iceweasel/3.0.1 (Debian-3.0.1-1) Build Identifier: Some mail applications out there (especially web mailers) send PDF attachments with content-type application/octet-stream instead of application/pdf. When you open such a mail, Thunderbird only looks at the MIME header and does not open acroread when it encounters application/octet-stream.
As PDF is an often used format and there are somany broken mailers I'd propose to use the attached patch (or any adaption of it) that let Thunderbird check whether the attachment with the type octet-stream has a name that ends with '.pdf' and in that case resets the content-type to application/pdf. Reproducible: Always Steps to Reproduce: 1.Send yourself a mail with PDF attachment and content-type 'application/octet-stream' 2.Open the mail in the viewer window 3.Click on attachment Actual Results: A dialog opens where the found attachment is recognized as 'binary data' and you get asked what to do with it.
Application Octet Stream Google
Expected Results: The attachment should be recognized as PDF (from the file name) and the user be asked whether to open it with acroread (or what ever). 11 years ago @Magnus no, unfortunately it doesn't work. I tried to add code like that at other places as well (mimemsg.cpp or mimemult.cpp) but there seems to be other places where the content-type header is accessed directly via MimeHeadersget and the rewrite has no effect. The only way I see is to make the rewrite inside MimeHeadersget, however there is no MimeDisplayOptions argument available to query the filename via MimeHeadersgetname. Any idea how to fix that? Where is the best place to add such a rewrite check?
10 years ago Comment on patch, v3 This looks good. + // some mailer use application/octet-stream wrongly as content-type, + // fix it here by determine content type from name extension + if (contentType nsCAutoString(APPLICATIONOCTETSTREAM)) It's possible to avoid constructing a new string object here by taking advantage of nsCAutoString.Equals ability to take literal arguments. + char.name = MimeHeadersgetname(headers, mdd-options); + if (name) + contentType = nsCAutoString(mimefiletype(name, mdd-options-streamclosure)); nsCAutoString.Assign can be used similarly. + PRFree(name); Since MimeHeadersgetname allocates using PLstrdup, its return values want to be freed with PLstrfree. The same applies to the code added in mimemult.cpp. +// Utility to get mime type from file name +extern 'C' char.mimefiletype (const char.filename, void.streamclosure); We're trying to move towards a better world of automatically generated documentation by using doxygen-style comments when possible.
I've made the above tweaks in a new iteration of the patch which I'll upload momentarily. 10 years ago Created patch, v4 I think it's important that bienvenu do the superreview here, as he seems most likely to catch any unintended consequences this patch could have. Relevant stuff:. I haven't been able to test this meaningfully, since this bug doesn't seem to occur on Mac.
Are both of the application/octet-stream override clauses actually required?. I spent some time a little while back talking to dveditz, sayre, and bz about whether there was any obvious security risk of overriding the sender-specified content type. After talking this over a bunch, we didn't see one. One use case that I asuth and I concocted last night was that of a security researcher emailing known malware around and typing it as application/octet-stream as a way of making it slightly less likely to be accidentally invoked. But this seems like the.000001% use case, so optimizing for that rather than optimizing for usability seems like a bad idea. Finally, Tobias, I'm very sorry that it's taken me so long to get this, and thanks for the patch!