backport of Christian Binders patch: little helper for prefs if unserialize failed - this can happen if the pref comes from an installation with another charset than the current system charset, ported to handle config as well

This commit is contained in:
Klaus Leithoff 2009-11-02 10:51:51 +00:00
parent a08a1887a4
commit a276e48d48
2 changed files with 10 additions and 0 deletions

View File

@ -218,6 +218,11 @@ class config
$value = $row['config_value'];
$test = @unserialize($value);
if($test === false)
{
// manually retrieve the string lengths of the serialized array if unserialize failed
$test = @unserialize(preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.mb_strlen('$2','8bit').':\"$2\";'", $value));
}
$config[$name] = is_array($test) ? $test : $value;
}

View File

@ -248,6 +248,11 @@ class preferences
// The following replacement is required for PostgreSQL to work
$app = trim($row['preference_app']);
$value = unserialize($row['preference_value']);
if($value === false)
{
// manually retrieve the string lengths of the serialized array if unserialize failed
$value = unserialize(preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.mb_strlen('$2','8bit').':\"$2\";'", $row['preference_value']));
}
$this->unquote($value);
if (!is_array($value))
{