Commit ae1e82f0 authored by YANO Takashi's avatar YANO Takashi

ZP-1172 Some mails bodies or headers in Japanese may be decoded in wrong...

ZP-1172 Some mails bodies or headers in Japanese may be decoded in wrong encoding. Released under the Affero GNU General Public License (AGPL) version 3.
parent fa86299f
...@@ -1030,12 +1030,8 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1030,12 +1030,8 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
$mobj = new Mail_mimeDecode($mail); $mobj = new Mail_mimeDecode($mail);
$message = $mobj->decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'rfc_822bodies' => true, 'charset' => 'utf-8')); $message = $mobj->decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'rfc_822bodies' => true, 'charset' => 'utf-8'));
if ( strpos($message->headers["subject"], chr(0x1b).'$B') !== false ) { Utils::CheckAndFixEncoding($message->headers["subject"]);
$message->headers["subject"] = mb_convert_encoding($message->headers["subject"], "utf-8", "ISO-2022-JP-MS"); Utils::CheckAndFixEncoding($message->headers["from"]);
}
if ( strpos($message->headers["from"], chr(0x1b).'$B') !== false ) {
$message->headers["from"] = mb_convert_encoding($message->headers["from"], "utf-8", "ISO-2022-JP-MS");
}
$is_multipart = is_multipart($message); $is_multipart = is_multipart($message);
$is_smime = is_smime($message); $is_smime = is_smime($message);
...@@ -1077,9 +1073,7 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1077,9 +1073,7 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
if (Request::GetProtocolVersion() >= 12.0) { if (Request::GetProtocolVersion() >= 12.0) {
$output->asbody = new SyncBaseBody(); $output->asbody = new SyncBaseBody();
if ( strpos($textBody, chr(0x1b).'$B') !== false ) { Utils::CheckAndFixEncoding($textBody);
$textBody = mb_convert_encoding($textBody, "utf-8", "ISO-2022-JP-MS");
}
$data = ""; $data = "";
switch($bpReturnType) { switch($bpReturnType) {
......
...@@ -143,9 +143,7 @@ function change_charset_and_add_subparts(&$email, $part) { ...@@ -143,9 +143,7 @@ function change_charset_and_add_subparts(&$email, $part) {
if (isset($part->ctype_parameters['charset'])) { if (isset($part->ctype_parameters['charset'])) {
$part->ctype_parameters['charset'] = 'UTF-8'; $part->ctype_parameters['charset'] = 'UTF-8';
if ( isset($part->body) && strpos($part->body, chr(0x1b).'$B') !== false ) { Utils::CheckAndFixEncoding($part->body);
$part->body = mb_convert_encoding($part->body, "utf-8", "ISO-2022-JP-MS");
}
$new_part = add_sub_part($email, $part); $new_part = add_sub_part($email, $part);
} }
...@@ -238,9 +236,7 @@ function build_mime_message($message) { ...@@ -238,9 +236,7 @@ function build_mime_message($message) {
} }
} }
if ( isset($message->body) && strpos($message->body, chr(0x1b).'$B') !== false ) { Utils::CheckAndFixEncoding($message->body);
$message->body = mb_convert_encoding($message->body, "utf-8", "ISO-2022-JP-MS");
}
$finalEmail = new Mail_mimePart(isset($message->body) ? $message->body : "", $mimeHeaders); $finalEmail = new Mail_mimePart(isset($message->body) ? $message->body : "", $mimeHeaders);
unset($mimeHeaders); unset($mimeHeaders);
......
...@@ -335,12 +335,8 @@ class BackendMaildir extends BackendDiff { ...@@ -335,12 +335,8 @@ class BackendMaildir extends BackendDiff {
$message = Mail_mimeDecode::decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'input' => $rfc822, 'crlf' => "\n", 'charset' => 'utf-8')); $message = Mail_mimeDecode::decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'input' => $rfc822, 'crlf' => "\n", 'charset' => 'utf-8'));
if ( strpos($message->headers["subject"], chr(0x1b).'$B') !== false ) { Utils::CheckAndFixEncoding($message->headers["subject"]);
$message->headers["subject"] = mb_convert_encoding($message->headers["subject"], "utf-8", "ISO-2022-JP-MS"); Utils::CheckAndFixEncoding($message->headers["from"]);
}
if ( strpos($message->headers["from"], chr(0x1b).'$B') !== false ) {
$message->headers["from"] = mb_convert_encoding($message->headers["from"], "utf-8", "ISO-2022-JP-MS");
}
$output = new SyncMail(); $output = new SyncMail();
......
...@@ -1175,6 +1175,21 @@ class Utils { ...@@ -1175,6 +1175,21 @@ class Utils {
public static function IsFolderToBeProcessedByKoe($folder) { public static function IsFolderToBeProcessedByKoe($folder) {
return isset($folder->displayname) && substr($folder->displayname, -3) == hex2bin("e2808b"); return isset($folder->displayname) && substr($folder->displayname, -3) == hex2bin("e2808b");
} }
/**
* Check if the UTF-8 string has ISO-2022-JP esc seq
* if so, it is ISO-2022-JP, not UTF-8 and convert it into UTF-8
* string
*
* @access public
* @param $string
* @return $string
*/
public static function CheckAndFixEncoding(&$string) {
if ( isset($string) && strpos($string, chr(0x1b).'$B') !== false ) {
$string = mb_convert_encoding($string, "utf-8", "ISO-2022-JP-MS");
}
}
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment