BUGFIX Sanitise keys and tags before using them with Zend_Cache.

This commit is contained in:
Simon Welsh 2011-12-23 10:38:37 +13:00
parent 27a51ed7ed
commit f7516481b1
2 changed files with 8 additions and 4 deletions

View File

@ -48,9 +48,12 @@ class Aggregate extends ViewableData {
if (!$class || $class == 'DataObject') { if (!$class || $class == 'DataObject') {
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('aggregate')); $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('aggregate'));
} } else {
else { $tags = ClassInfo::ancestry($class);
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG, ClassInfo::ancestry($class)); foreach($tags as &$tag) {
$tag = preg_replace('/[^a-zA-Z0-9_]/', '_', $tag);
}
$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG, $tags);
} }
} }
@ -108,7 +111,7 @@ class Aggregate extends ViewableData {
if (!($result = $cache->load($cachekey))) { if (!($result = $cache->load($cachekey))) {
$result = (string)$query->execute()->value(); if (!$result) $result = '0'; $result = (string)$query->execute()->value(); if (!$result) $result = '0';
$cache->save($result, null, array('aggregate', $this->type)); $cache->save($result, null, array('aggregate', preg_replace('/[^a-zA-Z0-9_]/', '_', $this->type)));
} }
return $result; return $result;

View File

@ -490,6 +490,7 @@ class SSTemplateParser extends Parser {
$block = ++$res['subblocks']; $block = ++$res['subblocks'];
// Build the key for this block from the passed cache key, the block index, and the sha hash of the template itself // Build the key for this block from the passed cache key, the block index, and the sha hash of the template itself
$key = "'" . sha1($sub['php']) . (isset($res['key']) && $res['key'] ? "_'.sha1(".$res['key'].")" : "'") . ".'_$block'"; $key = "'" . sha1($sub['php']) . (isset($res['key']) && $res['key'] ? "_'.sha1(".$res['key'].")" : "'") . ".'_$block'";
$key = preg_replace('/[^a-zA-Z0-9_]/', '_', $key);
// Get any condition // Get any condition
$condition = isset($res['condition']) ? $res['condition'] : ''; $condition = isset($res['condition']) ? $res['condition'] : '';