From f83821c388120eda258a968cc6be3e1a875ce34c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 23 Jun 2014 13:33:55 +0200
Subject: [PATCH] fix recursion on rmdirr

---
 lib/private/helper.php | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/lib/private/helper.php b/lib/private/helper.php
index 243baa4694..206c20d916 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -405,15 +405,19 @@ class OC_Helper {
 	 */
 	static function rmdirr($dir) {
 		if (is_dir($dir)) {
-			$files = scandir($dir);
-			// FIXME: use flat array instead of recursion to avoid
-			// too many levels
-			foreach ($files as $file) {
-				if ($file !== '' && $file !== "." && $file !== "..") {
-					self::rmdirr("$dir/$file");
+			$files = new RecursiveIteratorIterator(
+				new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
+				RecursiveIteratorIterator::CHILD_FIRST
+			);
+
+			foreach ($files as $fileInfo) {
+				/** @var FilesystemIterator $fileInfo */
+				if ($fileInfo->isDir()) {
+					rmdir($fileInfo->getRealPath());
+				} else {
+					unlink($fileInfo->getRealPath());
 				}
 			}
-			rmdir($dir);
 		} elseif (file_exists($dir)) {
 			unlink($dir);
 		}
-- 
GitLab