]> source.dussan.org Git - nextcloud-server.git/commitdiff
Make FileCache upgrade more robust, fixes #2650
authorArthur Schiwon <blizzz@owncloud.com>
Fri, 5 Apr 2013 09:27:08 +0000 (11:27 +0200)
committerArthur Schiwon <blizzz@owncloud.com>
Mon, 15 Apr 2013 09:56:30 +0000 (11:56 +0200)
lib/files/cache/legacy.php
lib/files/cache/upgrade.php

index 9556a2639a3fdb511f567554e66e2236541386ca..b8e2548639baf4171327009f26eaa8238f839f1e 100644 (file)
@@ -80,7 +80,7 @@ class Legacy {
                }
                $result = $query->execute(array($path));
                $data = $result->fetchRow();
-               $data['etag'] = $this->getEtag($data['path']);
+               $data['etag'] = $this->getEtag($data['path'], $data['user']);
                return $data;
        }
 
@@ -90,12 +90,24 @@ class Legacy {
         * @param type $path
         * @return string
         */
-       function getEtag($path) {
+       function getEtag($path, $user = null) {
                static $query = null;
-               list(, $user, , $relativePath) = explode('/', $path, 4);
-               if (is_null($relativePath)) {
+
+               $pathDetails = explode('/', $path, 4);
+               if((!$user) && !isset($pathDetails[1])) {
+                       //no user!? Too odd, return empty string.
+                       return '';
+               } else if(!$user) {
+                       //guess user from path, if no user passed.
+                       $user = $pathDetails[1];
+               }
+
+               if(!isset($pathDetails[3]) || is_null($pathDetails[3])) {
                        $relativePath = '';
+               } else {
+                       $relativePath = $pathDetails[3];
                }
+
                if(is_null($query)){
                        $query = \OC_DB::prepare('SELECT `propertyvalue` FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = \'{DAV:}getetag\'');
                }
@@ -118,7 +130,7 @@ class Legacy {
                $result = $query->execute(array($id));
                $data = $result->fetchAll();
                foreach ($data as $i => $item) {
-                       $data[$i]['etag'] = $this->getEtag($item['path']);
+                       $data[$i]['etag'] = $this->getEtag($item['path'], $item['user']);
                }
                return $data;
        }
index 797f4e6ba8c5bc84ee1b552e5611f80fc317200d..ca044ba81dedef005ac0392862e0e85617c9a04e 100644 (file)
@@ -127,6 +127,10 @@ class Upgrade {
         * @return array
         */
        function getNewData($data) {
+               //Make sure there is a path, otherwise we can do nothing.
+               if(!isset($data['path'])) {
+                       return false;
+               }
                $newData = $data;
                /**
                 * @var \OC\Files\Storage\Storage $storage