summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-09-19 19:01:02 +0200
committerVincent Petry <pvince81@owncloud.com>2014-09-19 19:01:02 +0200
commit8aca127e52f965871bea82cb27c6ea103baf34bb (patch)
tree8ae731e8440c93785dc8c3854127e2e2184ef601 /apps
parent61bb19eff03d28b3725a6ab4841b4c54b9517576 (diff)
downloadnextcloud-server-8aca127e52f965871bea82cb27c6ea103baf34bb.tar.gz
nextcloud-server-8aca127e52f965871bea82cb27c6ea103baf34bb.zip
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.
Diffstat (limited to 'apps')
-rw-r--r--apps/files_trashbin/lib/trashbin.php26
1 files changed, 26 insertions, 0 deletions
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 5f1226d89d8..ca7e58d93bd 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -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)) {