diff --git a/mozilla/mailnews/base/public/msgCore.h b/mozilla/mailnews/base/public/msgCore.h index 728837a411e..39e1f3ce02d 100644 --- a/mozilla/mailnews/base/public/msgCore.h +++ b/mozilla/mailnews/base/public/msgCore.h @@ -158,6 +158,8 @@ NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_MAILNEWS, value) conflict, I reserve values between 12500 and 12999 for it. */ #define NS_MSG_CUSTOM_HEADERS_OVERFLOW NS_MSG_GENERATE_FAILURE(28) //when num of custom headers exceeds 50 +#define NS_MSG_INVALID_CUSTOM_HEADER NS_MSG_GENERATE_FAILURE(29) //when custom header has invalid characters (as per rfc 2822) + #define NS_MSGCOMP_ERROR_BEGIN 12500 /* NS_ERROR_NNTP_NO_CROSS_POSTING lives here, and not in nsMsgComposeStringBundle.h, because it is used in news and compose. */ #define NS_ERROR_NNTP_NO_CROSS_POSTING NS_MSG_GENERATE_FAILURE(12554) diff --git a/mozilla/mailnews/base/resources/content/mailWidgets.xml b/mozilla/mailnews/base/resources/content/mailWidgets.xml index e3a3c18b7f3..f38b425159f 100644 --- a/mozilla/mailnews/base/resources/content/mailWidgets.xml +++ b/mozilla/mailnews/base/resources/content/mailWidgets.xml @@ -422,7 +422,13 @@ } var hdrsArray = new Array; if (hdrs) - hdrsArray = hdrs.split(": "); + { + hdrs = hdrs.replace(/\s+/g,''); //remove white spaces before splitting + hdrsArray = hdrs.split(":"); + for (var i = 0; i< hdrsArray.length; i++) + if (!hdrsArray[i]) + hdrsArray.splice(i,1); //remove any null elements + } var bundle = this.stringBundle; var j=0; for (var i=0; iSetAvailable (i, nsMsgSearchOp::Contains, 1); // added for arbitrary headers aTable->SetEnabled (i, nsMsgSearchOp::Contains, 1); diff --git a/mozilla/mailnews/base/search/src/nsMsgSearchTerm.cpp b/mozilla/mailnews/base/search/src/nsMsgSearchTerm.cpp index 166afbba44b..78d03ec5a30 100644 --- a/mozilla/mailnews/base/search/src/nsMsgSearchTerm.cpp +++ b/mozilla/mailnews/base/search/src/nsMsgSearchTerm.cpp @@ -108,6 +108,10 @@ nsresult NS_MsgGetAttributeFromString(const char *string, PRInt16 *attrib) if (!found) { nsresult rv; + PRBool goodHdr; + IsRFC822HeaderFieldName(string, &goodHdr); + if (!goodHdr) + return NS_MSG_INVALID_CUSTOM_HEADER; //49 is for showing customize... in ui, headers start from 50 onwards up until 99. *attrib = nsMsgSearchAttrib::OtherHeader+1; @@ -124,32 +128,33 @@ nsresult NS_MsgGetAttributeFromString(const char *string, PRInt16 *attrib) if (!headers.IsEmpty()) { char *headersString = ToNewCString(headers); + + nsCAutoString hdrStr; + hdrStr.Adopt(headersString); + hdrStr.StripWhitespace(); //remove whitespace before parsing + char *newStr=nsnull; - char *token = nsCRT::strtok(headersString,": ", &newStr); + char *token = nsCRT::strtok(headersString,":", &newStr); PRUint32 i=0; while (token) { if (nsCRT::strcasecmp(token, string) == 0) { - *attrib += i; - nsMemory::Free(headersString); //we found custom header in the pref + *attrib += i; //we found custom header in the pref return NS_OK; } - token = nsCRT::strtok(newStr,": ", &newStr); + token = nsCRT::strtok(newStr,":", &newStr); i++; //we know we can have a max of 50 custom headers if ( nsMsgSearchAttrib::OtherHeader + i >= nsMsgSearchAttrib::kNumMsgSearchAttributes -1) { - nsMemory::Free(headersString); NS_ASSERTION(0, "pref has more headers than the table can hold"); return NS_MSG_CUSTOM_HEADERS_OVERFLOW; } } *attrib += i; //this is *attrib for the new custom header - - nsMemory::Free(headersString); headers.Append(": "); //Adding additonal header to the pref so append the separator }