summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mailnews/base/src/nsMsgDBView.cpp6
-rw-r--r--mailnews/local/src/nsMsgLocalStoreUtils.cpp3
-rw-r--r--mailnews/mime/src/mimei.cpp38
-rw-r--r--mailnews/mime/src/mimemalt.cpp4
-rw-r--r--mailnews/mime/src/mimesun.cpp3
5 files changed, 34 insertions, 20 deletions
diff --git a/mailnews/base/src/nsMsgDBView.cpp b/mailnews/base/src/nsMsgDBView.cpp
index 6793ba95a..5b82390c0 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<nsIMessenger> 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;
diff --git a/mailnews/local/src/nsMsgLocalStoreUtils.cpp b/mailnews/local/src/nsMsgLocalStoreUtils.cpp
index 17d9b0f29..642694d3b 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) == '~')
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;