diff -ur includes/bootstrap.inc includes/bootstrap.inc --- includes/bootstrap.inc 2008-01-10 14:14:24.000000000 -0800 +++ includes/bootstrap.inc 2008-03-25 16:59:10.000000000 -0700 @@ -382,14 +382,14 @@ function variable_init($conf = array()) { // NOTE: caching the variables improves performance by 20% when serving cached pages. if ($cached = cache_get('variables', 'cache')) { - $variables = unserialize($cached->data); + $variables = $cached->data; } else { $result = db_query('SELECT * FROM {variable}'); while ($variable = db_fetch_object($result)) { $variables[$variable->name] = unserialize($variable->value); } - cache_set('variables', 'cache', serialize($variables)); + cache_set('variables', 'cache', $variables); } foreach ($conf as $name => $value) { diff -ur includes/cache.inc includes/cache.inc --- includes/cache.inc 2007-06-26 20:35:48.000000000 -0700 +++ includes/cache.inc 2008-03-25 16:59:11.000000000 -0700 @@ -21,12 +21,15 @@ variable_set('cache_flush', 0); } - $cache = db_fetch_object(db_query("SELECT data, created, headers, expire FROM {". $table ."} WHERE cid = '%s'", $key)); + $cache = db_fetch_object(db_query("SELECT data, created, headers, expire, serialized FROM {". $table ."} WHERE cid = '%s'", $key)); if (isset($cache->data)) { // If the data is permanent or we're not enforcing a minimum cache lifetime // always return the cached data. if ($cache->expire == CACHE_PERMANENT || !variable_get('cache_lifetime', 0)) { $cache->data = db_decode_blob($cache->data); + if ($cache->serialized) { + $cache->data = unserialize($cache->data); + } } // If enforcing a minimum cache lifetime, validate that the data is // currently valid for this user before we return it by making sure the @@ -40,6 +43,9 @@ } else { $cache->data = db_decode_blob($cache->data); + if ($cache->serialized) { + $cache->data = unserialize($cache->data); + } } } return $cache; @@ -78,8 +84,8 @@ * The table $table to store the data in. Valid core values are 'cache_filter', * 'cache_menu', 'cache_page', or 'cache'. * @param $data - * The data to store in the cache. Complex data types must be serialized first. - * @param $expire + * The data to store in the cache. Complex data types will be automatically serialized before insertion. + * Strings will be stored as plain text and not serialized. * @param $expire * One of the following values: * - CACHE_PERMANENT: Indicates that the item should never be removed unless * explicitly told to using cache_clear_all() with a cache ID. @@ -91,10 +97,15 @@ * A string containing HTTP header information for cached pages. */ function cache_set($cid, $table = 'cache', $data, $expire = CACHE_PERMANENT, $headers = NULL) { + $serialized = 0; + if (is_object($data) || is_array($data)) { + $data = serialize($data); + $serialized = 1; + } db_lock_table($table); - db_query("UPDATE {". $table. "} SET data = %b, created = %d, expire = %d, headers = '%s' WHERE cid = '%s'", $data, time(), $expire, $headers, $cid); + db_query("UPDATE {". $table. "} SET data = %b, created = %d, expire = %d, headers = '%s', serialized = %d WHERE cid = '%s'", $data, time(), $expire, $headers, $serialized, $cid); if (!db_affected_rows()) { - @db_query("INSERT INTO {". $table. "} (cid, data, created, expire, headers) VALUES ('%s', %b, %d, %d, '%s')", $cid, $data, time(), $expire, $headers); + @db_query("INSERT INTO {". $table. "} (cid, data, created, expire, headers, serialized) VALUES ('%s', %b, %d, %d, '%s', %d)", $cid, $data, time(), $expire, $headers, $serialized); } db_unlock_tables(); } @@ -164,4 +175,3 @@ } } } - diff -ur includes/menu.inc includes/menu.inc --- includes/menu.inc 2007-06-16 18:50:50.000000000 -0700 +++ includes/menu.inc 2008-03-25 16:59:11.000000000 -0700 @@ -208,12 +208,12 @@ $cid = "$user->uid:$locale"; if ($cached = cache_get($cid, 'cache_menu')) { - $_menu = unserialize($cached->data); + $_menu = $cached->data; } else { _menu_build(); // Cache the menu structure for this user, to expire after one day. - cache_set($cid, 'cache_menu', serialize($_menu), time() + (60 * 60 * 24)); + cache_set($cid, 'cache_menu', $_menu, time() + (60 * 60 * 24)); } // Make sure items that cannot be cached are added. diff -ur modules/locale/locale.module modules/locale/locale.module --- modules/locale/locale.module 2006-12-27 05:11:59.000000000 -0800 +++ modules/locale/locale.module 2008-03-25 16:59:11.000000000 -0700 @@ -172,7 +172,7 @@ locale_refresh_cache(); $cache = cache_get("locale:$locale", 'cache'); } - $locale_t = unserialize($cache->data); + $locale_t = $cache->data; } // We have the translation cached (if it is TRUE, then there is no @@ -231,7 +231,7 @@ while ($data = db_fetch_object($result)) { $t[$data->source] = (empty($data->translation) ? TRUE : $data->translation); } - cache_set("locale:$locale", 'cache', serialize($t)); + cache_set("locale:$locale", 'cache', $t); } }