From 4f42d85c1c096dcd8f68b44beffcf4fad01191d8 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 13 Feb 2013 14:45:57 -0800 Subject: [PATCH] Use a serialize()-based cache instead of a JSON-based cache for changesets Summary: These are full of PhutilSafeHTML objects now, which are destroyed by JSON serialization. Test Plan: Dropped cache, then reloaded pages. Reviewers: vrana Reviewed By: vrana CC: aran Differential Revision: https://secure.phabricator.com/D4942 --- .../parser/DifferentialChangesetParser.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/applications/differential/parser/DifferentialChangesetParser.php b/src/applications/differential/parser/DifferentialChangesetParser.php index 479af1b778..14b6b17ed1 100644 --- a/src/applications/differential/parser/DifferentialChangesetParser.php +++ b/src/applications/differential/parser/DifferentialChangesetParser.php @@ -63,7 +63,7 @@ final class DifferentialChangesetParser { return $this->disableCache; } - const CACHE_VERSION = 10; + const CACHE_VERSION = 11; const CACHE_MAX_SIZE = 8e6; const ATTR_GENERATED = 'attr:generated'; @@ -270,7 +270,13 @@ final class DifferentialChangesetParser { return false; } - $data = json_decode($data['cache'], true); + if ($data['cache'][0] == '{') { + // This is likely an old-style JSON cache which we will not be able to + // deserialize. + return false; + } + + $data = unserialize($data['cache']); if (!is_array($data) || !$data) { return false; } @@ -340,7 +346,7 @@ final class DifferentialChangesetParser { break; } } - $cache = json_encode($cache); + $cache = serialize($cache); // We don't want to waste too much space by a single changeset. if (strlen($cache) > self::CACHE_MAX_SIZE) {