avoid fread on directories and unencrypted files
Reworking the logic in order to first check the filecache and only then reading the fileheader. This in order to solve #21578.
This commit is contained in:
parent
39c67d9868
commit
81e3ae4753
|
@ -929,19 +929,22 @@ class Encryption extends Wrapper {
|
|||
$path = $realFile;
|
||||
}
|
||||
|
||||
$firstBlock = $this->readFirstBlock($path);
|
||||
$result = $this->parseRawHeader($firstBlock);
|
||||
$result = [];
|
||||
|
||||
// first check if it is an encrypted file at all
|
||||
// We would do query to filecache only if we know that entry in filecache exists
|
||||
|
||||
$info = $this->getCache()->get($path);
|
||||
if (isset($info['encrypted']) && $info['encrypted'] === true) {
|
||||
$firstBlock = $this->readFirstBlock($path);
|
||||
$result = $this->parseRawHeader($firstBlock);
|
||||
|
||||
// if the header doesn't contain a encryption module we check if it is a
|
||||
// legacy file. If true, we add the default encryption module
|
||||
if (!isset($result[Util::HEADER_ENCRYPTION_MODULE_KEY])) {
|
||||
if (!empty($result)) {
|
||||
$result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE';
|
||||
} elseif ($exists) {
|
||||
// if the header was empty we have to check first if it is a encrypted file at all
|
||||
// We would do query to filecache only if we know that entry in filecache exists
|
||||
$info = $this->getCache()->get($path);
|
||||
if (isset($info['encrypted']) && $info['encrypted'] === true) {
|
||||
// if the header doesn't contain a encryption module we check if it is a
|
||||
// legacy file. If true, we add the default encryption module
|
||||
if (!isset($result[Util::HEADER_ENCRYPTION_MODULE_KEY])) {
|
||||
if (!empty($result)) {
|
||||
$result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE';
|
||||
} elseif ($exists) {
|
||||
$result[Util::HEADER_ENCRYPTION_MODULE_KEY] = 'OC_DEFAULT_MODULE';
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue