Bug 1175190 - Thunderbird 38 crashes in mozilla::mailnews::EncodedHeader [msvcr120.dll | nsCOMArray_base::Adopt | mozilla::mailnews::EncodedHeader]. r=rkent, a=rkent
--- a/mailnews/mime/src/MimeHeaderParser.cpp
+++ b/mailnews/mime/src/MimeHeaderParser.cpp
@@ -66,38 +66,48 @@ void RemoveDuplicateAddresses(const nsAC
}
/////////////////////////////////////////////
// These are the core shim methods we need //
/////////////////////////////////////////////
nsCOMArray<msgIAddressObject> DecodedHeader(const nsAString &aHeader)
{
+ nsCOMArray<msgIAddressObject> retval;
+ if (aHeader.IsEmpty()) {
+ return retval;
+ }
nsCOMPtr<nsIMsgHeaderParser> headerParser(services::GetHeaderParser());
msgIAddressObject **addresses;
uint32_t length;
DebugOnly<nsresult> rv = headerParser->ParseDecodedHeader(aHeader, false,
&length, &addresses);
MOZ_ASSERT(NS_SUCCEEDED(rv), "This should never fail!");
- nsCOMArray<msgIAddressObject> retval;
- retval.Adopt(addresses, length);
+ if (length > 0) {
+ retval.Adopt(addresses, length);
+ }
return retval;
}
nsCOMArray<msgIAddressObject> EncodedHeader(const nsACString &aHeader,
const char *aCharset)
{
+ nsCOMArray<msgIAddressObject> retval;
+ if (aHeader.IsEmpty()) {
+ return retval;
+ }
nsCOMPtr<nsIMsgHeaderParser> headerParser(services::GetHeaderParser());
msgIAddressObject **addresses;
uint32_t length;
DebugOnly<nsresult> rv = headerParser->ParseEncodedHeader(aHeader, aCharset,
false, &length, &addresses);
MOZ_ASSERT(NS_SUCCEEDED(rv), "This should never fail!");
- nsCOMArray<msgIAddressObject> retval;
- retval.Adopt(addresses, length);
+ if (length > 0) {
+ retval.Adopt(addresses, length);
+ }
return retval;
}
void ExtractAllAddresses(const nsCOMArray<msgIAddressObject> &aHeader,
nsTArray<nsString> &names, nsTArray<nsString> &emails)
{
uint32_t count = aHeader.Length();