Aleksander Machniak
2013-09-03 b6be23ac4bb9ebe8fd90f347e3f209c2e0e5f24e
Fix issue where too big message data was stored in cache causing sql errors (#1489316)
2 files modified
23 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_imap_cache.php 22 ●●●●● patch | view | raw | blame | history
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)
program/lib/Roundcube/rcube_imap_cache.php
@@ -1155,13 +1155,13 @@
        // 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 @@
    /**
     * 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 @@
            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);
            }
        }
    }