From 066c35c03c4a61028e8c62e34649a89ba758761d Mon Sep 17 00:00:00 2001 From: "naving%netscape.com" Date: Fri, 3 May 2002 01:00:21 +0000 Subject: [PATCH] 141152 r=ducarroz sr=bienvenu fix the partial msg display code in mime to use escaped uidl and then unescape this uidl in pop3 code. fixes truncated pop3 msg download problems with uidl having quotes(") --- mailnews/local/src/nsPop3Protocol.cpp | 4 +- mailnews/mime/src/mimemsg.cpp | 58 ++++++++++++++------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/mailnews/local/src/nsPop3Protocol.cpp b/mailnews/local/src/nsPop3Protocol.cpp index bb1584f85bed..88dce2ac6adf 100644 --- a/mailnews/local/src/nsPop3Protocol.cpp +++ b/mailnews/local/src/nsPop3Protocol.cpp @@ -55,6 +55,7 @@ #include "nsIMsgWindow.h" #include "nsIMsgFolder.h" // TO include biffState enum. Change to bool later... #include "nsIDocShell.h" +#include "nsEscape.h" #define EXTRA_SAFETY_SPACE 3096 @@ -732,7 +733,8 @@ nsresult nsPop3Protocol::LoadUrl(nsIURI* aURL, nsISupports * /* aConsumer */) if (uidl) { uidl += 5; - m_pop3ConData->only_uidl = PL_strdup(uidl); + char *only_uidl = PL_strdup(uidl); + m_pop3ConData->only_uidl = nsUnescape(only_uidl); mSuppressListenerNotifications = PR_TRUE; // suppress on start and on stop because this url won't have any content to display } diff --git a/mailnews/mime/src/mimemsg.cpp b/mailnews/mime/src/mimemsg.cpp index 888dc67a6d5e..cc3342fdb795 100644 --- a/mailnews/mime/src/mimemsg.cpp +++ b/mailnews/mime/src/mimemsg.cpp @@ -774,38 +774,40 @@ static char * MimeMessage_partial_message_html(const char *data, void *closure, MimeHeaders *headers) { - nsCAutoString orig_url(data); - char *partialMsgHtml = nsnull; - char *uidl = MimeHeaders_get(headers, HEADER_X_UIDL, PR_FALSE, PR_FALSE); - char *msgId = MimeHeaders_get(headers, HEADER_MESSAGE_ID, PR_FALSE, + nsCAutoString orig_url(data); + char *partialMsgHtml = nsnull; + char *uidl = MimeHeaders_get(headers, HEADER_X_UIDL, PR_FALSE, PR_FALSE); + char *msgId = MimeHeaders_get(headers, HEADER_MESSAGE_ID, PR_FALSE, PR_FALSE); - char *msgIdPtr = PL_strstr(msgId, "<"); + char *msgIdPtr = PL_strstr(msgId, "<"); - orig_url.ReplaceSubstring("mailbox-message", "mailbox"); - orig_url.ReplaceSubstring("#", "?number="); + orig_url.ReplaceSubstring("mailbox-message", "mailbox"); + orig_url.ReplaceSubstring("#", "?number="); - if (msgIdPtr) - msgIdPtr++; - else - msgIdPtr = msgId; - char *gtPtr = PL_strstr(msgIdPtr, ">"); - if (gtPtr) - *gtPtr = 0; + if (msgIdPtr) + msgIdPtr++; + else + msgIdPtr = msgId; + char *gtPtr = PL_strstr(msgIdPtr, ">"); + if (gtPtr) + *gtPtr = 0; - char *escapedMsgId = msgIdPtr ? nsEscape(msgIdPtr, url_Path) : nsnull; - char *fmt1 = MimeGetStringByID(1037); - char *fmt2 = MimeGetStringByID(1038); - char *fmt3 = MimeGetStringByID(1039); - char *msgUrl = PR_smprintf("%s&messageid=%s&uidl=%s", - orig_url.get(), escapedMsgId, uidl); - partialMsgHtml = PR_smprintf("%s%s%s%s", fmt1,fmt2, msgUrl, fmt3); - PR_FREEIF(uidl); - PR_FREEIF(msgId); - PR_FREEIF(escapedMsgId); - PR_FREEIF(msgUrl); - PR_FREEIF(fmt1); - PR_FREEIF(fmt2); - PR_FREEIF(fmt3); + char *escapedUidl = uidl ? nsEscape(uidl, url_XAlphas) : nsnull; + char *escapedMsgId = msgIdPtr ? nsEscape(msgIdPtr, url_Path) : nsnull; + char *fmt1 = MimeGetStringByID(1037); + char *fmt2 = MimeGetStringByID(1038); + char *fmt3 = MimeGetStringByID(1039); + char *msgUrl = PR_smprintf("%s&messageid=%s&uidl=%s", + orig_url.get(), escapedMsgId, escapedUidl); + partialMsgHtml = PR_smprintf("%s%s%s%s", fmt1,fmt2, msgUrl, fmt3); + PR_Free(uidl); + PR_Free(escapedUidl); + PR_Free(msgId); + PR_Free(escapedMsgId); + PR_Free(msgUrl); + PR_Free(fmt1); + PR_Free(fmt2); + PR_Free(fmt3); return partialMsgHtml; }