From 39aee133d6c1bc10488a2e75b4e6ef84480ab299 Mon Sep 17 00:00:00 2001 From: "naving%netscape.com" Date: Wed, 11 Sep 2002 02:00:54 +0000 Subject: [PATCH] 166517 r=cavin sr=bienvenu Handle invalid custom headers in rules.dat and parse custom header pref in such a way that strtok and split(js) return same tokens. fixes some corruption issues git-svn-id: svn://10.0.0.236/trunk@129197 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/mailnews/base/public/msgCore.h | 2 ++ .../base/resources/content/mailWidgets.xml | 8 +++++++- .../search/resources/content/CustomHeaders.js | 12 +++++++++-- .../resources/locale/en-US/filter.properties | 1 + .../base/search/src/nsMsgFilterService.cpp | 2 ++ .../base/search/src/nsMsgSearchAdapter.cpp | 20 +++++++++++++------ .../base/search/src/nsMsgSearchTerm.cpp | 19 +++++++++++------- 7 files changed, 48 insertions(+), 16 deletions(-) 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 }