]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix infinite loop if folder and subfolder has the same name
authorBjoern Schiessle <schiessle@owncloud.com>
Wed, 22 Jan 2014 15:55:04 +0000 (16:55 +0100)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 22 Jan 2014 16:15:01 +0000 (17:15 +0100)
apps/files_encryption/lib/util.php

index 8a5dfabeec1c69d9e70649b44a9fdc81c8fe7b36..8816d4d649a55ca7f834502613f3aa653a96e586 100644 (file)
@@ -2,9 +2,10 @@
 /**
  * ownCloud
  *
- * @author Sam Tuke, Frank Karlitschek
+ * @author Sam Tuke, Frank Karlitschek, Bjoern Schiessle
  * @copyright 2012 Sam Tuke <samtuke@owncloud.com>,
- * Frank Karlitschek <frank@owncloud.org>
+ * Frank Karlitschek <frank@owncloud.org>,
+ * Bjoern Schiessle <schiessle@owncloud.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -1360,59 +1361,32 @@ class Util {
                }
        }
 
-
        /**
         * @brief go recursively through a dir and collect all files and sub files.
         * @param string $dir relative to the users files folder
         * @return array with list of files relative to the users files folder
         */
        public function getAllFiles($dir) {
-
                $result = array();
+               $dirList = array($dir);
 
-               $content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath(
-                       $this->userFilesDir . '/' . $dir));
-
-               // handling for re shared folders
-               $pathSplit = explode('/', $dir);
-
-               foreach ($content as $c) {
-
-                       $sharedPart = $pathSplit[sizeof($pathSplit) - 1];
-                       $targetPathSplit = array_reverse(explode('/', $c['path']));
-
-                       $path = '';
-
-                       // rebuild path
-                       foreach ($targetPathSplit as $pathPart) {
-
-                               if ($pathPart !== $sharedPart) {
-
-                                       $path = '/' . $pathPart . $path;
+               while ($dirList) {
+                       $dir = array_pop($dirList);
+                       $content = $this->view->getDirectoryContent(\OC\Files\Filesystem::normalizePath(
+                                       $this->userFilesDir . '/' . $dir));
 
+                       foreach ($content as $c) {
+                               $usersPath = isset($c['usersPath']) ? $c['usersPath'] : $c['path'];
+                               if ($c['type'] === 'dir') {
+                                       $dirList[] = substr($usersPath, strlen("files"));
                                } else {
-
-                                       break;
-
+                                       $result[] = substr($usersPath, strlen("files"));
                                }
-
                        }
 
-                       $path = $dir . $path;
-
-                       if ($c['type'] === 'dir') {
-
-                               $result = array_merge($result, $this->getAllFiles($path));
-
-                       } else {
-
-                               $result[] = $path;
-
-                       }
                }
 
                return $result;
-
        }
 
        /**