diff options
author | Aleksander Machniak <alec@alec.pl> | 2013-06-02 14:33:11 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2013-06-02 14:33:11 +0200 |
commit | a6b0ca60a431b8e56d7c23246de71978d6968a79 (patch) | |
tree | 65d06e18eb4fdbc72b275f4003b1f6d03c318016 /program/lib/Roundcube/rcube_db.php | |
parent | d77e08729b812333bc22680c4072a6e41f4ba40e (diff) |
Fix bug where serialized strings were truncated in PDO::quote() (#1489142)
Diffstat (limited to 'program/lib/Roundcube/rcube_db.php')
-rw-r--r-- | program/lib/Roundcube/rcube_db.php | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php index 5da38c899..645b85adb 100644 --- a/program/lib/Roundcube/rcube_db.php +++ b/program/lib/Roundcube/rcube_db.php @@ -795,12 +795,19 @@ class rcube_db /** * Encodes non-UTF-8 characters in string/array/object (recursive) * - * @param mixed $input Data to fix + * @param mixed $input Data to fix + * @param bool $serialized Enable serialization * * @return mixed Properly UTF-8 encoded data */ - public static function encode($input) + public static function encode($input, $serialized = false) { + // use Base64 encoding to workaround issues with invalid + // or null characters in serialized string (#1489142) + if ($serialized) { + return base64_encode(serialize($input)); + } + if (is_object($input)) { foreach (get_object_vars($input) as $idx => $value) { $input->$idx = self::encode($value); @@ -811,6 +818,7 @@ class rcube_db foreach ($input as $idx => $value) { $input[$idx] = self::encode($value); } + return $input; } @@ -820,12 +828,19 @@ class rcube_db /** * Decodes encoded UTF-8 string/object/array (recursive) * - * @param mixed $input Input data + * @param mixed $input Input data + * @param bool $serialized Enable serialization * * @return mixed Decoded data */ - public static function decode($input) + public static function decode($input, $serialized = false) { + if ($serialized) { + // use Base64 encoding to workaround issues with invalid + // or null characters in serialized string (#1489142) + return @unserialize(base64_decode($input)); + } + if (is_object($input)) { foreach (get_object_vars($input) as $idx => $value) { $input->$idx = self::decode($value); |