Browse Source

Fix issue writing to file cache

Reading/writing to the same file cache key multiple times
in a row during a single request would result in failed reads.

Fixes #2114
mark_story 14 years ago
parent
commit
95737d7adf

+ 1 - 0
lib/Cake/Cache/Engine/FileEngine.php

@@ -128,6 +128,7 @@ class FileEngine extends CacheEngine {
 		    $this->_File->flock(LOCK_EX);
 		}
 
+		$this->_File->rewind();
 		$success = $this->_File->ftruncate(0) && $this->_File->fwrite($contents) && $this->_File->fflush();
 
 		if ($this->settings['lock']) {

+ 17 - 0
lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php

@@ -98,6 +98,23 @@ class FileEngineTest extends CakeTestCase {
 	}
 
 /**
+ * Test read/write on the same cache key. Ensures file handles are re-wound.
+ * 
+ * @return void
+ */
+	public function testConsecutiveReadWrite() {
+		Cache::write('rw', 'first write', 'file_test');
+		$result = Cache::read('rw', 'file_test');
+
+		Cache::write('rw', 'second write', 'file_test');
+		$result2 = Cache::read('rw', 'file_test');
+
+		Cache::delete('rw', 'file_test');
+		$this->assertEquals('first write', $result);
+		$this->assertEquals('second write', $result2);
+	}
+
+/**
  * testExpiry method
  *
  * @return void