CHANGELOG | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_cache.php | ●●●●● patch | view | raw | blame | history | |
program/lib/Roundcube/rcube_cache_shared.php | ●●●●● patch | view | raw | blame | history |
CHANGELOG
@@ -26,6 +26,7 @@ - Fix bug where preview_pane setting wasn't always saved into user preferences (#1490362) - Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#1490372) - Fix security issue in contact photo handling (#1490379) - Fix possible memcache/apc cache data consistency issues (#1490390) RELEASE 1.1.1 ------------- program/lib/Roundcube/rcube_cache.php
@@ -265,7 +265,15 @@ } if ($this->type != 'db') { if ($this->type == 'memcache') { $this->load_index(); // Consistency check (#1490390) if (!in_array($key, $this->index)) { // we always check if the key exist in the index // to have data in consistent state. Keeping the index consistent // is needed for keys delete operation when we delete all keys or by prefix. } else if ($this->type == 'memcache') { $ckey = $this->ckey($key); $data = $this->db->get($ckey); @@ -418,13 +426,7 @@ } // Remove keys by name prefix else if ($prefix_mode) { // handle data inconsistency: it may happen that index // contains not all existing cache entries, here we could // handle at least these that were used before the index was read $index = array_merge($this->index, array_keys($this->cache)); $index = array_unique($index); foreach ($index as $k) { foreach ($this->index as $k) { if (strpos($k, $key) === 0) { $this->delete_record($k); } @@ -461,12 +463,11 @@ * Adds entry into memcache/apc DB. * * @param string $key Cache key name * @param mxied $data Serialized cache data * @param bollean $index Enables immediate index update * @param mixed $data Serialized cache data * * @param boolean True on success, False on failure */ private function add_record($key, $data, $index=false) private function add_record($key, $data) { if ($this->type == 'memcache') { $result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED, $this->ttl); @@ -484,17 +485,6 @@ if ($this->debug) { $this->debug('store', $key, $data, $result); } } // Update index if ($index && $result) { $this->load_index(); if (array_search($key, $this->index) === false) { $this->index[] = $key; $data = serialize($this->index); $this->add_record($this->ikey(), $data); } } program/lib/Roundcube/rcube_cache_shared.php
@@ -260,7 +260,15 @@ } if ($this->type != 'db') { if ($this->type == 'memcache') { $this->load_index(); // Consistency check (#1490390) if (!in_array($key, $this->index)) { // we always check if the key exist in the index // to have data in consistent state. Keeping the index consistent // is needed for keys delete operation when we delete all keys or by prefix. } else if ($this->type == 'memcache') { $ckey = $this->ckey($key); $data = $this->db->get($ckey); @@ -442,12 +450,11 @@ * Adds entry into memcache/apc DB. * * @param string $key Cache key name * @param mxied $data Serialized cache data * @param bollean $index Enables immediate index update * @param mixed $data Serialized cache data * * @param boolean True on success, False on failure */ private function add_record($key, $data, $index=false) private function add_record($key, $data) { if ($this->type == 'memcache') { $result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED, $this->ttl); @@ -466,17 +473,6 @@ if ($this->debug) { $this->debug('store', $key, $data, $result); } } // Update index if ($index && $result) { $this->load_index(); if (array_search($key, $this->index) === false) { $this->index[] = $key; $data = serialize($this->index); $this->add_record($this->ikey(), $data); } }