From 4f008d190f871ad218d10d72e7566c2dd8f0353e Mon Sep 17 00:00:00 2001
From: Bradley M. Froehle <brad.froehle@gmail.com>
Date: Wed, 17 Nov 2010 13:02:41 -0800
Subject: [PATCH] 935036: Use SKIP_DOTS flag to avoid creating or deleting . or .. directories

---
 includes/filetransfer/filetransfer.inc |    2 +-
 includes/filetransfer/local.inc        |    4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git includes/filetransfer/filetransfer.inc includes/filetransfer/filetransfer.inc
index 1afaa9e..db06436 100644
--- includes/filetransfer/filetransfer.inc
+++ includes/filetransfer/filetransfer.inc
@@ -208,7 +208,7 @@ abstract class FileTransfer {
       $destination = $destination . '/' . basename($source);
     }
     $this->createDirectory($destination);
-    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) {
+    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) {
       $relative_path = substr($filename, strlen($source));
       if ($file->isDir()) {
         $this->createDirectory($destination . $relative_path);
diff --git includes/filetransfer/local.inc includes/filetransfer/local.inc
index 8cad200..7734b2d 100644
--- includes/filetransfer/local.inc
+++ includes/filetransfer/local.inc
@@ -31,7 +31,7 @@ class FileTransferLocal extends FileTransfer implements FileTransferChmodInterfa
       // Programmer error assertion, not something we expect users to see.
       throw new FileTransferException('removeDirectoryJailed() called with a path (%directory) that is not a directory.', NULL, array('%directory' => $directory));
     }
-    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory), RecursiveIteratorIterator::CHILD_FIRST) as $filename => $file) {
+    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $filename => $file) {
       if ($file->isDir()) {
         if (@!drupal_rmdir($filename)) {
           throw new FileTransferException('Cannot remove directory %directory.', NULL, array('%directory' => $filename));
@@ -64,7 +64,7 @@ class FileTransferLocal extends FileTransfer implements FileTransferChmodInterfa
 
   public function chmodJailed($path, $mode, $recursive) {
     if ($recursive && is_dir($path)) {
-      foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) {
+      foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) {
         if (@!chmod($filename, $mode)) {
           throw new FileTransferException('Cannot chmod %path.', NULL, array('%path' => $filename));
         }
-- 
1.7.3.2

