Bug 458685 - encode mime functions in nsIMimeConverter fail when scripted; r+sr=neil

This commit is contained in:
Kent James 2008-10-08 20:24:17 +02:00
Родитель c97d482cd3
Коммит 005698f1b7
5 изменённых файлов: 75 добавлений и 15 удалений

Просмотреть файл

@ -245,7 +245,7 @@ char * nsMsgI18NEncodeMimePartIIStr(const char *header, PRBool structured, const
nsresult res;
nsCOMPtr<nsIMimeConverter> converter = do_GetService(NS_MIME_CONVERTER_CONTRACTID, &res);
if (NS_SUCCEEDED(res) && nsnull != converter)
res = converter->EncodeMimePartIIStr_UTF8(header, structured, charset,
res = converter->EncodeMimePartIIStr_UTF8(nsDependentCString(header), structured, charset,
fieldnamelen, nsIMimeConverter::MIME_ENCODED_WORD_SIZE, &encodedString);
return NS_SUCCEEDED(res) ? encodedString : nsnull;

Просмотреть файл

@ -655,7 +655,7 @@ PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP, char **modifiedSub
char charset[nsIMimeConverter::MAX_CHARSET_NAME_LENGTH] = "";
if (nsIMimeConverter::MAX_CHARSET_NAME_LENGTH >= (p2 - p1))
strncpy(charset, p1, p2 - p1);
rv = mimeConverter->EncodeMimePartIIStr_UTF8(s, PR_FALSE, charset,
rv = mimeConverter->EncodeMimePartIIStr_UTF8(nsDependentCString(s), PR_FALSE, charset,
sizeof("Subject:"), nsIMimeConverter::MIME_ENCODED_WORD_SIZE,
modifiedSubject);
if (NS_SUCCEEDED(rv))

Просмотреть файл

@ -94,11 +94,11 @@ interface nsIMimeConverter : nsISupports {
*
* @return The encoded buffer (as a C string).
*/
string encodeMimePartIIStr_UTF8(in string header,
in boolean structured,
in string mailCharset,
in long fieldnamelen,
in long encodedWordSize);
string encodeMimePartIIStr_UTF8(in AUTF8String header,
in boolean structured,
in string mailCharset,
in long fieldnamelen,
in long encodedWordSize);
/**
* Decode a MIME header to UTF-8 if conversion is required. Marked as

Просмотреть файл

@ -116,19 +116,21 @@ nsMimeConverter::EncodeMimePartIIStr(const char *header,
nsAutoString tempUnicodeString;
nsresult rv = ConvertToUnicode(mailCharset, header, tempUnicodeString);
NS_ENSURE_SUCCESS(rv, rv);
rv = EncodeMimePartIIStr_UTF8(NS_ConvertUTF16toUTF8(tempUnicodeString).get(), structured, mailCharset, fieldnamelen, encodedWordSize, encodedString);
rv = EncodeMimePartIIStr_UTF8(NS_ConvertUTF16toUTF8(tempUnicodeString), structured, mailCharset, fieldnamelen, encodedWordSize, encodedString);
return rv;
}
nsresult
nsMimeConverter::EncodeMimePartIIStr_UTF8(const char *header,
PRBool structured,
const char *mailCharset,
PRInt32 fieldnamelen,
PRInt32 encodedWordSize,
char **encodedString)
nsMimeConverter::EncodeMimePartIIStr_UTF8(const nsACString &header,
PRBool structured,
const char *mailCharset,
PRInt32 fieldnamelen,
PRInt32 encodedWordSize,
char **encodedString)
{
char *retString = MIME_EncodeMimePartIIStr(header, structured, mailCharset, fieldnamelen, encodedWordSize);
char *retString = MIME_EncodeMimePartIIStr(PromiseFlatCString(header).get(),
structured, mailCharset,
fieldnamelen, encodedWordSize);
if (retString == NULL)
return NS_ERROR_FAILURE;
else

Просмотреть файл

@ -0,0 +1,58 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Kent James <kent@caspia.com>.
* Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
// This tests minimal mime encoding fixed in bug 458685
var converter = Components.classes["@mozilla.org/messenger/mimeconverter;1"]
.getService(Components.interfaces.nsIMimeConverter);
function run_test() {
var i;
var checks =
[
["", ""],
["\u0436", "=?UTF-8?B?0LY=?="], //CYRILLIC SMALL LETTER ZHE
["IamASCII", "IamASCII"],
];
for (i = 0; i < checks.length; ++i)
{
do_check_eq(
converter.encodeMimePartIIStr_UTF8(checks[i][0], false, "UTF-8", 0, 72),
checks[i][1]);
}
}