From a5aa1c26bfd643a839e5c132b8085bc218b3bfee Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Mon, 2 Dec 2019 22:13:37 -0500 Subject: [PATCH 1/4] Bug 1509685 - Add more bounds checking in nsMsgDBView::UpdateDisplayMessage() to avoid crashes Tag #1311 --- mailnews/base/src/nsMsgDBView.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mailnews/base/src/nsMsgDBView.cpp b/mailnews/base/src/nsMsgDBView.cpp index 6793ba95aa..5b82390c00 100644 --- a/mailnews/base/src/nsMsgDBView.cpp +++ b/mailnews/base/src/nsMsgDBView.cpp @@ -1136,6 +1136,8 @@ nsresult nsMsgDBView::UpdateDisplayMessage(nsMsgViewIndex viewPosition) NS_ENSURE_SUCCESS(rv,rv); nsString subject; + if (viewPosition >= (nsMsgViewIndex)m_flags.Length()) + return NS_MSG_INVALID_DBVIEW_INDEX; FetchSubject(msgHdr, m_flags[viewPosition], subject); nsCString keywords; @@ -1148,6 +1150,8 @@ nsresult nsMsgDBView::UpdateDisplayMessage(nsMsgViewIndex viewPosition) if (folder) { + if (viewPosition >= (nsMsgViewIndex)m_keys.Length()) + return NS_MSG_INVALID_DBVIEW_INDEX; rv = folder->SetLastMessageLoaded(m_keys[viewPosition]); NS_ENSURE_SUCCESS(rv,rv); } @@ -1175,6 +1179,8 @@ NS_IMETHODIMP nsMsgDBView::LoadMessageByViewIndex(nsMsgViewIndex aViewIndex) nsCOMPtr messenger (do_QueryReferent(mMessengerWeak)); NS_ENSURE_TRUE(messenger, NS_ERROR_FAILURE); messenger->OpenURL(uri); + if (aViewIndex >= (nsMsgViewIndex)m_keys.Length()) + return NS_MSG_INVALID_DBVIEW_INDEX; m_currentlyDisplayedMsgKey = m_keys[aViewIndex]; m_currentlyDisplayedMsgUri = uri; m_currentlyDisplayedViewIndex = aViewIndex; From 0c908247d6c36b9e8934eafcdf1dc36dfed12d9c Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Mon, 2 Dec 2019 22:14:49 -0500 Subject: [PATCH 2/4] Bug 1482248 - don't crash on empty file name in nsMsgLocalStoreUtils::nsShouldIgnoreFile. Tag #1311 --- mailnews/local/src/nsMsgLocalStoreUtils.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mailnews/local/src/nsMsgLocalStoreUtils.cpp b/mailnews/local/src/nsMsgLocalStoreUtils.cpp index 17d9b0f29c..642694d3b9 100644 --- a/mailnews/local/src/nsMsgLocalStoreUtils.cpp +++ b/mailnews/local/src/nsMsgLocalStoreUtils.cpp @@ -28,6 +28,9 @@ nsMsgLocalStoreUtils::AddDirectorySeparator(nsIFile *path) bool nsMsgLocalStoreUtils::nsShouldIgnoreFile(nsAString& name) { + if (name.IsEmpty()) + return true; + char16_t firstChar = name.First(); if (firstChar == '.' || firstChar == '#' || name.CharAt(name.Length() - 1) == '~') From 5199f3f3b89d69474e7944f44c7d8715bb87792d Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Mon, 2 Dec 2019 23:47:40 -0500 Subject: [PATCH 3/4] 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 --- mailnews/mime/src/mimei.cpp | 38 ++++++++++++++++------------------ mailnews/mime/src/mimemalt.cpp | 4 ++++ 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 015830a80a..568b6bca5e 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 3354b1f9b7..9ad750cd7b 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 84f06a8850..aa7809b240 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; From 70be4df40f8a01f6fee31790037f486c719aa4c6 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Mon, 9 Dec 2019 00:02:17 -0500 Subject: [PATCH 4/4] No Issue - Execute the precomplete command on *nix AltPackaging Windows does not need this as mar generation is dependent on the NSIS Installer which already contains the call --- toolkit/mozapps/installer/packager-uxp.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/toolkit/mozapps/installer/packager-uxp.mk b/toolkit/mozapps/installer/packager-uxp.mk index 8d7cb4e62d..3125c04f13 100644 --- a/toolkit/mozapps/installer/packager-uxp.mk +++ b/toolkit/mozapps/installer/packager-uxp.mk @@ -18,6 +18,10 @@ else ifeq (WINNT,$(OS_ARCH)) cd $(DIST); $(CYGWIN_WRAPPER) 7z a -t7z -m0=lzma2 -mx=9 -aoa -bb3 $(PKG_BASENAME).7z $(MOZ_PKG_DIR) else + # Other platforms such as Linux need the Package routine to spawn a pre-complete file + # Windows does not require this because it is dependent on generating the NSIS + # Installer which has its own call to generate the precomplete file + cd $(DIST)/$(MOZ_PKG_DIR); $(CREATE_PRECOMPLETE_CMD) cd $(DIST); XZ_OPT=-9e $(TAR) cfJv $(PKG_BASENAME).tar.xz $(MOZ_PKG_DIR) endif endif