From f6c2de0141f0a4deeb22f1f2643eab03dc647ae5 Mon Sep 17 00:00:00 2001 From: ryan Date: Mon, 17 Nov 2008 21:01:12 +0000 Subject: [PATCH] Use clone to break object refs when setting and getting cache. see #8146 #8191 git-svn-id: http://svn.automattic.com/wordpress/trunk@9740 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/cache.php | 8 +++++++- wp-includes/functions.php | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/wp-includes/cache.php b/wp-includes/cache.php index a96be515d..5eef60b13 100644 --- a/wp-includes/cache.php +++ b/wp-includes/cache.php @@ -313,7 +313,10 @@ class WP_Object_Cache { if (isset ($this->cache[$group][$id])) { $this->cache_hits += 1; - return $this->cache[$group][$id]; + if ( is_object($this->cache[$group][$id]) ) + return wp_clone($this->cache[$group][$id]); + else + return $this->cache[$group][$id]; } if ( isset ($this->non_existant_objects[$group][$id]) ) @@ -373,6 +376,9 @@ class WP_Object_Cache { if (NULL === $data) $data = ''; + if ( is_object($data) ) + $data = wp_clone($data); + $this->cache[$group][$id] = $data; if(isset($this->non_existant_objects[$group][$id])) diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 0368b09cd..da927ffcf 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -2872,4 +2872,9 @@ function wp_suspend_cache_invalidation($suspend = true) { return $current_suspend; } +function wp_clone($object) { + return version_compare(phpversion(), '5.0') < 0 ? $object : clone($object); +} + + ?>