Skip to content
Snippets Groups Projects
Commit f913b162 authored by Thomas Müller's avatar Thomas Müller
Browse files

Merge pull request #9158 from owncloud/no-recursion-on-rmdirr-master

fix recursion on rmdirr
parents e070e292 fba694ed
No related branches found
No related tags found
No related merge requests found
......@@ -405,12 +405,17 @@ 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 SplFileInfo $fileInfo */
if ($fileInfo->isDir()) {
rmdir($fileInfo->getRealPath());
} else {
unlink($fileInfo->getRealPath());
}
}
rmdir($dir);
......
......@@ -454,4 +454,28 @@ class Test_Helper extends PHPUnit_Framework_TestCase {
$this->assertEquals('http://localhost/owncloud/public.php?service=files', $result);
}
/**
* Tests recursive folder deletion with rmdirr()
*/
public function testRecursiveFolderDeletion() {
$baseDir = \OC_Helper::tmpFolder() . '/';
mkdir($baseDir . 'a/b/c/d/e', 0777, true);
mkdir($baseDir . 'a/b/c1/d/e', 0777, true);
mkdir($baseDir . 'a/b/c2/d/e', 0777, true);
mkdir($baseDir . 'a/b1/c1/d/e', 0777, true);
mkdir($baseDir . 'a/b2/c1/d/e', 0777, true);
mkdir($baseDir . 'a/b3/c1/d/e', 0777, true);
mkdir($baseDir . 'a1/b', 0777, true);
mkdir($baseDir . 'a1/c', 0777, true);
file_put_contents($baseDir . 'a/test.txt', 'Hello file!');
file_put_contents($baseDir . 'a/b1/c1/test one.txt', 'Hello file one!');
file_put_contents($baseDir . 'a1/b/test two.txt', 'Hello file two!');
\OC_Helper::rmdirr($baseDir . 'a');
$this->assertFalse(file_exists($baseDir . 'a'));
$this->assertTrue(file_exists($baseDir . 'a1'));
\OC_Helper::rmdirr($baseDir);
$this->assertFalse(file_exists($baseDir));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment