- Don't log errors when charset conversion fails

release-0.6
alecpl 14 years ago
parent cc90ed1f84
commit 3ddca3b945

@ -136,26 +136,24 @@ function rcmail_url($action, $p=array(), $task=null)
* Remove temp files older than two days * Remove temp files older than two days
*/ */
function rcmail_temp_gc() function rcmail_temp_gc()
{ {
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
$tmp = unslashify($rcmail->config->get('temp_dir')); $tmp = unslashify($rcmail->config->get('temp_dir'));
$expire = mktime() - 172800; // expire in 48 hours $expire = mktime() - 172800; // expire in 48 hours
if ($dir = opendir($tmp)) if ($dir = opendir($tmp)) {
{ while (($fname = readdir($dir)) !== false) {
while (($fname = readdir($dir)) !== false)
{
if ($fname{0} == '.') if ($fname{0} == '.')
continue; continue;
if (filemtime($tmp.'/'.$fname) < $expire) if (filemtime($tmp.'/'.$fname) < $expire)
@unlink($tmp.'/'.$fname); @unlink($tmp.'/'.$fname);
} }
closedir($dir); closedir($dir);
}
} }
}
/** /**
@ -164,19 +162,19 @@ function rcmail_temp_gc()
* @return void * @return void
*/ */
function rcmail_cache_gc() function rcmail_cache_gc()
{ {
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
$db = $rcmail->get_dbh(); $db = $rcmail->get_dbh();
// get target timestamp // get target timestamp
$ts = get_offset_time($rcmail->config->get('message_cache_lifetime', '30d'), -1); $ts = get_offset_time($rcmail->config->get('message_cache_lifetime', '30d'), -1);
$db->query("DELETE FROM ".get_table_name('messages')." $db->query("DELETE FROM ".get_table_name('messages')."
WHERE created < " . $db->fromunixtime($ts)); WHERE created < " . $db->fromunixtime($ts));
$db->query("DELETE FROM ".get_table_name('cache')." $db->query("DELETE FROM ".get_table_name('cache')."
WHERE created < " . $db->fromunixtime($ts)); WHERE created < " . $db->fromunixtime($ts));
} }
/** /**
@ -186,9 +184,9 @@ function rcmail_cache_gc()
* @param string Error message * @param string Error message
*/ */
function rcube_error_handler($errno, $errstr) function rcube_error_handler($errno, $errstr)
{ {
throw new ErrorException($errstr, 0, $errno); throw new ErrorException($errstr, 0, $errno);
} }
/** /**
@ -201,11 +199,10 @@ function rcube_error_handler($errno, $errstr)
* @return string Converted string * @return string Converted string
*/ */
function rcube_charset_convert($str, $from, $to=NULL) function rcube_charset_convert($str, $from, $to=NULL)
{ {
static $iconv_options = null; static $iconv_options = null;
static $mbstring_loaded = null; static $mbstring_loaded = null;
static $mbstring_list = null; static $mbstring_list = null;
static $convert_warning = false;
static $conv = null; static $conv = null;
$error = false; $error = false;
@ -243,11 +240,11 @@ function rcube_charset_convert($str, $from, $to=NULL)
if ($mbstring_loaded === null) if ($mbstring_loaded === null)
$mbstring_loaded = extension_loaded('mbstring'); $mbstring_loaded = extension_loaded('mbstring');
// convert charset using mbstring module // convert charset using mbstring module
if ($mbstring_loaded) { if ($mbstring_loaded) {
$aliases['WINDOWS-1257'] = 'ISO-8859-13'; $aliases['WINDOWS-1257'] = 'ISO-8859-13';
if ($mbstring_list === null) { if ($mbstring_list === null) {
$mbstring_list = mb_list_encodings(); $mbstring_list = mb_list_encodings();
$mbstring_list = array_map('strtoupper', $mbstring_list); $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_from = $aliases[$from] ? $aliases[$from] : $from;
$mb_to = $aliases[$to] ? $aliases[$to] : $to; $mb_to = $aliases[$to] ? $aliases[$to] : $to;
// return if encoding found, string matches encoding and convert succeeded // return if encoding found, string matches encoding and convert succeeded
if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) { 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))) 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; $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 UTF-8 or original string
return $str; return $str;
} }
/** /**
@ -337,7 +321,7 @@ function rcube_charset_convert($str, $from, $to=NULL)
* @return string The validated charset name * @return string The validated charset name
*/ */
function rcube_parse_charset($input) function rcube_parse_charset($input)
{ {
static $charsets = array(); static $charsets = array();
$charset = strtoupper($input); $charset = strtoupper($input);
@ -404,11 +388,11 @@ function rcube_parse_charset($input)
// some clients sends windows-1252 text as latin1, // some clients sends windows-1252 text as latin1,
// it is safe to use windows-1252 for all latin1 // it is safe to use windows-1252 for all latin1
$result = $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso; $result = $iso == 'ISO-8859-1' ? 'WINDOWS-1252' : $iso;
} }
// handle broken charset names e.g. WINDOWS-1250HTTP-EQUIVCONTENT-TYPE // handle broken charset names e.g. WINDOWS-1250HTTP-EQUIVCONTENT-TYPE
else if (preg_match('/(WIN|WINDOWS)([0-9]+)/', $str, $m)) { else if (preg_match('/(WIN|WINDOWS)([0-9]+)/', $str, $m)) {
$result = 'WINDOWS-' . $m[2]; $result = 'WINDOWS-' . $m[2];
} }
// LATIN // LATIN
else if (preg_match('/LATIN(.*)/', $str, $m)) { else if (preg_match('/LATIN(.*)/', $str, $m)) {
$aliases = array('2' => 2, '3' => 3, '4' => 4, '5' => 9, '6' => 10, $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 // it is safe to use windows-1252 for all latin1
if ($m[1] == 1) { if ($m[1] == 1) {
$result = 'WINDOWS-1252'; $result = 'WINDOWS-1252';
} }
// if iconv is not supported we need ISO labels, it's also safe for iconv // if iconv is not supported we need ISO labels, it's also safe for iconv
else if (!empty($aliases[$m[1]])) { else if (!empty($aliases[$m[1]])) {
$result = 'ISO-8859-'.$aliases[$m[1]]; $result = 'ISO-8859-'.$aliases[$m[1]];
} }
// iconv requires convertion of e.g. LATIN-1 to LATIN1 // iconv requires convertion of e.g. LATIN-1 to LATIN1
else { else {
$result = $str; $result = $str;
}
} }
}
else { else {
$result = $charset; $result = $charset;
} }
$charsets[$input] = $result; $charsets[$input] = $result;
return $result; return $result;
} }
/** /**

Loading…
Cancel
Save