From 54f482ff9cf4e0bae89a85c3c291204da5910d96 Mon Sep 17 00:00:00 2001
From: Sjors van der Pluijm <sjors@desjors.nl>
Date: Mon, 28 Apr 2014 19:32:25 +0200
Subject: [PATCH] refs #8376; added comment and applied patch on other files

---
 apps/files_trashbin/lib/trashbin.php      | 10 +++++++++-
 lib/private/files/storage/local.php       |  5 +++++
 lib/private/files/storage/mappedlocal.php | 11 ++++++++++-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 9b931333b7..495532561e 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -883,11 +883,19 @@ class Trashbin {
 		$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), \RecursiveIteratorIterator::CHILD_FIRST);
 		$size = 0;
 
-		foreach ($iterator as $path) {
+        /**
+		 * RecursiveDirectoryIterator on an NFS path isn't iterable with foreach
+		 * This bug is fixed in PHP 5.5.9 or before
+		 * See #8376
+		 */
+		$iterator->rewind();
+		while ($iterator->valid()) {
+			$path = $iterator->current();
 			$relpath = substr($path, strlen($root) - 1);
 			if (!$view->is_dir($relpath)) {
 				$size += $view->filesize($relpath);
 			}
+			$iterator->next();
 		}
 		return $size;
 	}
diff --git a/lib/private/files/storage/local.php b/lib/private/files/storage/local.php
index ed2ad87085..de940fc7cd 100644
--- a/lib/private/files/storage/local.php
+++ b/lib/private/files/storage/local.php
@@ -44,6 +44,11 @@ if (\OC_Util::runningOnWindows()) {
 					new \RecursiveDirectoryIterator($this->datadir . $path),
 					\RecursiveIteratorIterator::CHILD_FIRST
 				);
+				/**
+				 * RecursiveDirectoryIterator on an NFS path isn't iterable with foreach
+				 * This bug is fixed in PHP 5.5.9 or before
+				 * See #8376
+				 */
 				$it->rewind();
 				while ($it->valid()) {
 					/**
diff --git a/lib/private/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php
index 75582fd6c8..f995cb00c7 100644
--- a/lib/private/files/storage/mappedlocal.php
+++ b/lib/private/files/storage/mappedlocal.php
@@ -39,17 +39,26 @@ class MappedLocal extends \OC\Files\Storage\Common{
 				new \RecursiveDirectoryIterator($this->buildPath($path)),
 				\RecursiveIteratorIterator::CHILD_FIRST
 			);
-			foreach ($it as $file) {
+			/**
+			 * RecursiveDirectoryIterator on an NFS path isn't iterable with foreach
+             * This bug is fixed in PHP 5.5.9 or before
+			 * See #8376
+			 */
+			$it->rewind();
+			while ($it->valid()) {
 				/**
 				 * @var \SplFileInfo $file
 				 */
+				$file = $it->current();
 				if (in_array($file->getBasename(), array('.', '..'))) {
+					$it->next();
 					continue;
 				} elseif ($file->isDir()) {
 					rmdir($file->getPathname());
 				} elseif ($file->isFile() || $file->isLink()) {
 					unlink($file->getPathname());
 				}
+				$it->next();
 			}
 			if ($result = @rmdir($this->buildPath($path))) {
 				$this->cleanMapper($path);
-- 
GitLab