diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2019-12-02 23:47:40 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2019-12-02 23:50:23 -0500 |
commit | 282cdd6bafecd5b406f39151e6fba686f9e7f3c3 (patch) | |
tree | 449d1dfd874e73d363d639783b538164e2fce450 /mailnews/mime | |
parent | b797607a8fcdbdc8e9690e871a86aeed5f6517bd (diff) | |
download | UXP-282cdd6bafecd5b406f39151e6fba686f9e7f3c3.tar UXP-282cdd6bafecd5b406f39151e6fba686f9e7f3c3.tar.gz UXP-282cdd6bafecd5b406f39151e6fba686f9e7f3c3.tar.lz UXP-282cdd6bafecd5b406f39151e6fba686f9e7f3c3.tar.xz UXP-282cdd6bafecd5b406f39151e6fba686f9e7f3c3.zip |
Bug 1571481 - Improve multipart/alternative.
w/ Fixup for 1464056 - Follow-up: rename pref to align with mailnews.p7m_external (which was already in 52.x but missing a single line)
Tag #1311
Diffstat (limited to 'mailnews/mime')
-rw-r--r-- | mailnews/mime/src/mimei.cpp | 38 | ||||
-rw-r--r-- | mailnews/mime/src/mimemalt.cpp | 4 | ||||
-rw-r--r-- | mailnews/mime/src/mimesun.cpp | 3 |
3 files changed, 25 insertions, 20 deletions
diff --git a/mailnews/mime/src/mimei.cpp b/mailnews/mime/src/mimei.cpp index 015830a80..568b6bca5 100644 --- a/mailnews/mime/src/mimei.cpp +++ b/mailnews/mime/src/mimei.cpp @@ -725,21 +725,20 @@ mime_find_class (const char *content_type, MimeHeaders *hdrs, else if (!PL_strcasecmp(content_type, APPLICATION_XPKCS7_MIME) || !PL_strcasecmp(content_type, APPLICATION_PKCS7_MIME)) { - if (Preferences::GetBool("mailnews.p7m_subparts_external", false) && - opts->is_child) { - // We do not allow encrypted parts except as top level. - // Allowing them would leak the plain text in case the part is - // cleverly hidden and the decrypted content gets included in - // replies and forwards. - clazz = (MimeObjectClass *)&mimeSuppressedCryptoClass; - return clazz; - } - - char *ct = (hdrs ? MimeHeaders_get(hdrs, HEADER_CONTENT_TYPE, - false, false) - : nullptr); - char *st = (ct ? MimeHeaders_get_parameter(ct, "smime-type", NULL, NULL) - : nullptr); + if (Preferences::GetBool("mailnews.p7m_subparts_external", true) && + opts->is_child) { + // We do not allow encrypted parts except as top level. + // Allowing them would leak the plain text in case the part is + // cleverly hidden and the decrypted content gets included in + // replies and forwards. + clazz = (MimeObjectClass *)&mimeSuppressedCryptoClass; + } else { + char *ct = + hdrs ? MimeHeaders_get(hdrs, HEADER_CONTENT_TYPE, false, false) + : nullptr; + char *st = + ct ? MimeHeaders_get_parameter(ct, "smime-type", nullptr, nullptr) + : nullptr; /* by default, assume that it is an encrypted message */ clazz = (MimeObjectClass *)&mimeEncryptedCMSClass; @@ -747,9 +746,8 @@ mime_find_class (const char *content_type, MimeHeaders *hdrs, /* if the smime-type parameter says that it's a certs-only or compressed file, then show it as an attachment, however (MimeEncryptedCMS doesn't handle these correctly) */ - if (st && - (!PL_strcasecmp(st, "certs-only") || - !PL_strcasecmp(st, "compressed-data"))) + if (st && (!PL_strcasecmp(st, "certs-only") || + !PL_strcasecmp(st, "compressed-data"))) clazz = (MimeObjectClass *)&mimeExternalObjectClass; else { /* look at the file extension... less reliable, but still covered @@ -763,14 +761,14 @@ mime_find_class (const char *content_type, MimeHeaders *hdrs, prefBranch->GetBoolPref("mailnews.p7m_external", &p7mExternal); if (suf && ((!PL_strcasecmp(suf, ".p7m") && p7mExternal) || - !PL_strcasecmp(suf, ".p7c") || - !PL_strcasecmp(suf, ".p7z"))) + !PL_strcasecmp(suf, ".p7c") || !PL_strcasecmp(suf, ".p7z"))) clazz = (MimeObjectClass *)&mimeExternalObjectClass; } PR_Free(name); } PR_Free(st); PR_Free(ct); + } } #endif /* A few types which occur in the real world and which we would otherwise diff --git a/mailnews/mime/src/mimemalt.cpp b/mailnews/mime/src/mimemalt.cpp index 3354b1f9b..9ad750cd7 100644 --- a/mailnews/mime/src/mimemalt.cpp +++ b/mailnews/mime/src/mimemalt.cpp @@ -282,6 +282,10 @@ MimeMultipartAlternative_parse_eof (MimeObject *obj, bool abort_p) static int MimeMultipartAlternative_create_child(MimeObject *obj) { + if (obj->options) { + obj->options->is_child = true; + } + MimeMultipart *mult = (MimeMultipart *) obj; MimeMultipartAlternative *malt = (MimeMultipartAlternative *) obj; diff --git a/mailnews/mime/src/mimesun.cpp b/mailnews/mime/src/mimesun.cpp index 84f06a885..aa7809b24 100644 --- a/mailnews/mime/src/mimesun.cpp +++ b/mailnews/mime/src/mimesun.cpp @@ -90,6 +90,9 @@ MimeSunAttachment_check_boundary(MimeObject *obj, const char *line, static int MimeSunAttachment_create_child(MimeObject *obj) { + if (obj->options) { + obj->options->is_child = true; + } MimeMultipart *mult = (MimeMultipart *) obj; int status = 0; |