diff options
author | alecpl <alec@alec.pl> | 2011-06-17 06:39:39 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2011-06-17 06:39:39 +0000 |
commit | 3ddca3b945ecf36d799dfa9c772437a7dad62c5d (patch) | |
tree | 2bb0ac7b9417ae0d998a13f75e4a62d87fd26698 | |
parent | cc90ed1f84174a89039feb6906775778e0c4eb18 (diff) |
- Don't log errors when charset conversion fails
-rw-r--r-- | program/include/main.inc | 64 |
1 files changed, 24 insertions, 40 deletions
diff --git a/program/include/main.inc b/program/include/main.inc index ab529d74b..7e2875ae9 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -136,26 +136,24 @@ function rcmail_url($action, $p=array(), $task=null) * Remove temp files older than two days */ function rcmail_temp_gc() - { +{ $rcmail = rcmail::get_instance(); $tmp = unslashify($rcmail->config->get('temp_dir')); $expire = mktime() - 172800; // expire in 48 hours - if ($dir = opendir($tmp)) - { - while (($fname = readdir($dir)) !== false) - { + if ($dir = opendir($tmp)) { + while (($fname = readdir($dir)) !== false) { if ($fname{0} == '.') continue; if (filemtime($tmp.'/'.$fname) < $expire) @unlink($tmp.'/'.$fname); - } + } closedir($dir); - } } +} /** @@ -164,19 +162,19 @@ function rcmail_temp_gc() * @return void */ function rcmail_cache_gc() - { +{ $rcmail = rcmail::get_instance(); $db = $rcmail->get_dbh(); - + // get target timestamp $ts = get_offset_time($rcmail->config->get('message_cache_lifetime', '30d'), -1); - + $db->query("DELETE FROM ".get_table_name('messages')." WHERE created < " . $db->fromunixtime($ts)); $db->query("DELETE FROM ".get_table_name('cache')." WHERE created < " . $db->fromunixtime($ts)); - } +} /** @@ -186,9 +184,9 @@ function rcmail_cache_gc() * @param string Error message */ function rcube_error_handler($errno, $errstr) - { +{ throw new ErrorException($errstr, 0, $errno); - } +} /** @@ -201,11 +199,10 @@ function rcube_error_handler($errno, $errstr) * @return string Converted string */ function rcube_charset_convert($str, $from, $to=NULL) - { +{ static $iconv_options = null; static $mbstring_loaded = null; static $mbstring_list = null; - static $convert_warning = false; static $conv = null; $error = false; @@ -243,11 +240,11 @@ function rcube_charset_convert($str, $from, $to=NULL) if ($mbstring_loaded === null) $mbstring_loaded = extension_loaded('mbstring'); - + // convert charset using mbstring module if ($mbstring_loaded) { $aliases['WINDOWS-1257'] = 'ISO-8859-13'; - + if ($mbstring_list === null) { $mbstring_list = mb_list_encodings(); $mbstring_list = array_map('strtoupper', $mbstring_list); @@ -255,7 +252,7 @@ function rcube_charset_convert($str, $from, $to=NULL) $mb_from = $aliases[$from] ? $aliases[$from] : $from; $mb_to = $aliases[$to] ? $aliases[$to] : $to; - + // return if encoding found, string matches encoding and convert succeeded if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) { if (mb_check_encoding($str, $mb_from) && ($out = mb_convert_encoding($str, $mb_to, $mb_from))) @@ -310,22 +307,9 @@ function rcube_charset_convert($str, $from, $to=NULL) $error = true; } - // report error - if ($error && !$convert_warning) { - raise_error(array( - 'code' => 500, - 'type' => 'php', - 'file' => __FILE__, - 'line' => __LINE__, - 'message' => "Could not convert string from $from to $to. Make sure iconv/mbstring is installed or lib/utf8.class is available." - ), true, false); - - $convert_warning = true; - } - // return UTF-8 or original string return $str; - } +} /** @@ -337,7 +321,7 @@ function rcube_charset_convert($str, $from, $to=NULL) * @return string The validated charset name */ function rcube_parse_charset($input) - { +{ static $charsets = array(); $charset = strtoupper($input); @@ -404,11 +388,11 @@ function rcube_parse_charset($input) // some clients sends windows-1252 text as latin1, // it is safe to use windows-1252 for all latin1 $result = $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso; - } + } // handle broken charset names e.g. WINDOWS-1250HTTP-EQUIVCONTENT-TYPE else if (preg_match('/(WIN|WINDOWS)([0-9]+)/', $str, $m)) { $result = 'WINDOWS-' . $m[2]; - } + } // LATIN else if (preg_match('/LATIN(.*)/', $str, $m)) { $aliases = array('2' => 2, '3' => 3, '4' => 4, '5' => 9, '6' => 10, @@ -419,24 +403,24 @@ function rcube_parse_charset($input) // it is safe to use windows-1252 for all latin1 if ($m[1] == 1) { $result = 'WINDOWS-1252'; - } + } // if iconv is not supported we need ISO labels, it's also safe for iconv else if (!empty($aliases[$m[1]])) { $result = 'ISO-8859-'.$aliases[$m[1]]; - } + } // iconv requires convertion of e.g. LATIN-1 to LATIN1 else { $result = $str; - } } + } else { $result = $charset; - } + } $charsets[$input] = $result; return $result; - } +} /** |