Added extra check to avoid deleting key folders

Whenever a delete operation is called twice in a row, it could happen
that the first call already deleted the file.

The second call would return an empty $ownerPath because the file does
not exist. That empty $ownerPath would run the key deletion operation on
the wrong path.

This fix adds checks in many places to make sure we don't use $ownerPath
when it's empty or null.
This commit is contained in:
Vincent Petry 2014-09-19 19:01:02 +02:00
parent 61bb19eff0
commit 8aca127e52

View File

@ -142,6 +142,12 @@ class Trashbin {
$user = \OCP\User::getUser();
$size = 0;
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
// file has been deleted in between
if (empty($ownerPath)) {
return false;
}
self::setUpTrash($user);
$view = new \OC\Files\View('/' . $user);
@ -219,6 +225,10 @@ class Trashbin {
$rootView = new \OC\Files\View('/');
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
// file has been deleted in between
if (empty($ownerPath)) {
return 0;
}
if ($rootView->is_dir($owner . '/files_versions/' . $ownerPath)) {
$size += self::calculateSize(new \OC\Files\View('/' . $owner . '/files_versions/' . $ownerPath));
@ -262,6 +272,11 @@ class Trashbin {
list($owner, $ownerPath) = self::getUidAndFilename($file_path);
// file has been deleted in between
if (empty($ownerPath)) {
return 0;
}
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $user);
// disable proxy to prevent recursive calls
@ -440,6 +455,12 @@ class Trashbin {
list($owner, $ownerPath) = self::getUidAndFilename($target);
// file has been deleted in between
if (empty($ownerPath)) {
\OC_FileProxy::$enabled = $proxyStatus;
return false;
}
if ($timestamp) {
$versionedFile = $filename;
} else {
@ -484,6 +505,11 @@ class Trashbin {
list($owner, $ownerPath) = self::getUidAndFilename($target);
// file has been deleted in between
if (empty($ownerPath)) {
return false;
}
$util = new \OCA\Encryption\Util(new \OC\Files\View('/'), $user);
if ($util->isSystemWideMountPoint($ownerPath)) {