[Cache] Hash using B64+MD5 in FilesystemAdapter

This commit is contained in:
Nicolas Grekas 2016-03-10 09:59:31 +01:00
parent 6fb9fee200
commit e96bb10af4

View File

@ -34,7 +34,7 @@ class FilesystemAdapter extends AbstractAdapter
throw new InvalidArgumentException(sprintf('Cache directory is not writable (%s)', $directory));
}
// On Windows the whole path is limited to 258 chars
if ('\\' === DIRECTORY_SEPARATOR && strlen($dir) > 190) {
if ('\\' === DIRECTORY_SEPARATOR && strlen($dir) > 234) {
throw new InvalidArgumentException(sprintf('Cache directory too long (%s)', $directory));
}
@ -62,10 +62,13 @@ class FilesystemAdapter extends AbstractAdapter
@unlink($file);
}
} else {
$i = rawurldecode(rtrim(fgets($h)));
$value = stream_get_contents($h);
flock($h, LOCK_UN);
fclose($h);
$values[$id] = unserialize($value);
if ($i === $id) {
$values[$id] = unserialize($value);
}
}
}
@ -125,7 +128,7 @@ class FilesystemAdapter extends AbstractAdapter
if (!file_exists($dir)) {
@mkdir($dir, 0777, true);
}
$value = $expiresAt."\n".serialize($value);
$value = $expiresAt."\n".rawurlencode($id)."\n".serialize($value);
if (false !== @file_put_contents($file, $value, LOCK_EX)) {
@touch($file, $expiresAt);
} else {
@ -138,8 +141,8 @@ class FilesystemAdapter extends AbstractAdapter
private function getFile($id)
{
$hash = hash('sha256', $id);
$hash = str_replace('/', '-', base64_encode(md5($id, true)));
return $this->directory.$hash[0].DIRECTORY_SEPARATOR.$hash[1].DIRECTORY_SEPARATOR.$hash;
return $this->directory.$hash[0].DIRECTORY_SEPARATOR.$hash[1].DIRECTORY_SEPARATOR.substr($hash, 2, -2);
}
}