From: Evan Prodromou Date: Tue, 12 Jan 2010 00:23:34 +0000 (-0800) Subject: safer storage for diskcacheplugin X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=04c76fc4e5d711ba38d22ffe201bb93d40126071;p=quix0rs-gnu-social.git safer storage for diskcacheplugin --- diff --git a/plugins/DiskCachePlugin.php b/plugins/DiskCachePlugin.php index 2b788decb9..b709ea3b31 100644 --- a/plugins/DiskCachePlugin.php +++ b/plugins/DiskCachePlugin.php @@ -68,9 +68,12 @@ class DiskCachePlugin extends Plugin function onStartCacheGet(&$key, &$value) { $filename = $this->keyToFilename($key); + if (file_exists($filename)) { $data = file_get_contents($filename); - $value = unserialize($data); + if ($data !== false) { + $value = unserialize($data); + } } Event::handle('EndCacheGet', array($key, &$value)); @@ -116,7 +119,24 @@ class DiskCachePlugin extends Plugin return false; } - file_put_contents($filename, serialize($value)); + // Write to a temp file and move to destination + + $tempname = tempnam(null, 'statusnetdiskcache'); + + $result = file_put_contents($tempname, serialize($value)); + + if ($result === false) { + $this->log(LOG_ERR, "Couldn't write '$key' to temp file '$tempname'"); + return false; + } + + $result = rename($tempname, $filename); + + if (!$result) { + $this->log(LOG_ERR, "Couldn't move temp file '$tempname' to path '$filename' for key '$key'"); + @unlink($tempname); + return false; + } Event::handle('EndCacheSet', array($key, $value, $flag, $expiry));