From b6be23ac4bb9ebe8fd90f347e3f209c2e0e5f24e Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 3 Sep 2013 15:16:17 +0200 Subject: Fix issue where too big message data was stored in cache causing sql errors (#1489316) --- CHANGELOG | 1 + program/lib/Roundcube/rcube_imap_cache.php | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 796bbc5b5..523314a02 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix issue where too big message data was stored in cache causing sql errors (#1489316) - Log also failed logins to userlogins log - Add temp_dir_ttl configuration option (#1489304) - Allow setting INBOX as Sent folder (#1489219) diff --git a/program/lib/Roundcube/rcube_imap_cache.php b/program/lib/Roundcube/rcube_imap_cache.php index 061ac546d..33e45c365 100644 --- a/program/lib/Roundcube/rcube_imap_cache.php +++ b/program/lib/Roundcube/rcube_imap_cache.php @@ -1155,13 +1155,13 @@ class rcube_imap_cache // Save current message from internal cache if ($message = $this->icache['__message']) { // clean up some object's data - $object = $this->message_object_prepare($message['object']); + $this->message_object_prepare($message['object']); // calculate current md5 sum - $md5sum = md5(serialize($object)); + $md5sum = md5(serialize($message['object'])); if ($message['md5sum'] != $md5sum) { - $this->add_message($message['mailbox'], $object, !$message['exists']); + $this->add_message($message['mailbox'], $message['object'], !$message['exists']); } $this->icache['__message']['md5sum'] = $md5sum; @@ -1171,8 +1171,10 @@ class rcube_imap_cache /** * Prepares message object to be stored in database. + * + * @param rcube_message_header|rcube_message_part */ - private function message_object_prepare($msg) + private function message_object_prepare(&$msg) { // Remove body too big (>25kB) if ($msg->body && strlen($msg->body) > 25 * 1024) { @@ -1186,13 +1188,19 @@ class rcube_imap_cache list($msg->ctype_primary, $msg->ctype_secondary) = explode('/', $msg->mimetype); } + unset($msg->replaces); + if (is_array($msg->structure->parts)) { - foreach ($msg->structure->parts as $idx => $part) { - $msg->structure->parts[$idx] = $this->message_object_prepare($part); + foreach ($msg->structure->parts as $part) { + $this->message_object_prepare($part); } } - return $msg; + if (is_array($msg->parts)) { + foreach ($msg->parts as $part) { + $this->message_object_prepare($part); + } + } } -- cgit v1.2.3