Commit 9cbf4d8d by Carsten Brandt

Merge pull request #4091 from resurtm/4080-file-helper-remove-directory-symlinks

Fix possibility of non-removed symlinked directory.
parents 06f27758 9bc8c330
...@@ -277,10 +277,11 @@ class BaseFileHelper ...@@ -277,10 +277,11 @@ class BaseFileHelper
*/ */
public static function removeDirectory($dir, $options = []) public static function removeDirectory($dir, $options = [])
{ {
if (!isset($options['traverseSymlinks'])) { if (!is_dir($dir)) {
$options['traverseSymlinks'] = false; return;
} }
if (!is_dir($dir) || !($handle = opendir($dir))) { if (!is_link($dir) || isset($options['traverseSymlinks']) && $options['traverseSymlinks']) {
if (!($handle = opendir($dir))) {
return; return;
} }
while (($file = readdir($handle)) !== false) { while (($file = readdir($handle)) !== false) {
...@@ -288,21 +289,17 @@ class BaseFileHelper ...@@ -288,21 +289,17 @@ class BaseFileHelper
continue; continue;
} }
$path = $dir . DIRECTORY_SEPARATOR . $file; $path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_link($path)) { if (is_dir($path)) {
if ($options['traverseSymlinks'] && is_dir($path)) {
static::removeDirectory($path, $options); static::removeDirectory($path, $options);
}
unlink($path);
} else { } else {
if (is_file($path)) {
unlink($path); unlink($path);
} else {
static::removeDirectory($path, $options);
}
} }
} }
closedir($handle); closedir($handle);
if (!is_link($dir)) { }
if (is_link($dir)) {
unlink($dir);
} else {
rmdir($dir); rmdir($dir);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment