Skip to content

Commit 8b6c974

Browse files
committed
Making FileEngine not greedily clear files in a directory that may belong to another cache configuration. Tests added. Fixes #754
1 parent cd255d5 commit 8b6c974

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

cake/libs/cache/file.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,11 @@ function clear($check) {
209209
$now = time();
210210
$threshold = $now - $this->settings['duration'];
211211
}
212+
$prefixLength = strlen($this->settings['prefix']);
212213
while (($entry = $dir->read()) !== false) {
214+
if (substr($entry, 0, $prefixLength) !== $this->settings['prefix']) {
215+
continue;
216+
}
213217
if ($this->_setKey($entry) === false) {
214218
continue;
215219
}

cake/tests/cases/libs/cache/file.test.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,34 @@ function testClear() {
273273
Cache::config('default', array('engine' => 'File', 'path' => CACHE));
274274
}
275275

276+
/**
277+
* test that clear() doesn't wipe files not in the current engine's prefix.
278+
*
279+
* @return void
280+
*/
281+
function testClearWithPrefixes() {
282+
$FileOne =& new FileEngine();
283+
$FileOne->init(array(
284+
'prefix' => 'prefix_one_',
285+
'duration' => DAY
286+
));
287+
$FileTwo =& new FileEngine();
288+
$FileTwo->init(array(
289+
'prefix' => 'prefix_two_',
290+
'duration' => DAY
291+
));
292+
293+
$data1 = $data2 = $expected = 'content to cache';
294+
$FileOne->write('key_one', $data1, DAY);
295+
$FileTwo->write('key_two', $data2, DAY);
296+
297+
$this->assertEqual($FileOne->read('key_one'), $expected);
298+
$this->assertEqual($FileTwo->read('key_two'), $expected);
299+
300+
$FileOne->clear(false);
301+
$this->assertEqual($FileTwo->read('key_two'), $expected, 'secondary config was cleared by accident.');
302+
}
303+
276304
/**
277305
* testKeyPath method
278306
*

0 commit comments

Comments
 (0)