From a3b95839f5cda01a6a24715489f0f02a4267f014 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 13 Mar 2014 17:11:23 +0100 Subject: [PATCH 1/6] [ticket/12268] Extension finder should not crawl through .git/ of extensions This new filter ignores .svn and .git directories. When searching for php classes and template files of extensions we don't need to look inside these directories. PHPBB3-12268 --- phpBB/phpbb/extension/finder.php | 3 +- .../extension/recursive_filter_iterator.php | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 phpBB/phpbb/extension/recursive_filter_iterator.php diff --git a/phpBB/phpbb/extension/finder.php b/phpBB/phpbb/extension/finder.php index c9c16ae6d5..fd19436c16 100644 --- a/phpBB/phpbb/extension/finder.php +++ b/phpBB/phpbb/extension/finder.php @@ -475,7 +475,8 @@ class finder } $directory_pattern = '#' . $directory_pattern . '#'; - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST); + $iterator = new \phpbb\extension\recursive_filter_iterator(new \RecursiveDirectoryIterator($path)); + $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file_info) { $filename = $file_info->getFilename(); diff --git a/phpBB/phpbb/extension/recursive_filter_iterator.php b/phpBB/phpbb/extension/recursive_filter_iterator.php new file mode 100644 index 0000000000..c2515ecbab --- /dev/null +++ b/phpBB/phpbb/extension/recursive_filter_iterator.php @@ -0,0 +1,32 @@ +current()->getFilename(), self::$ignore_folders); + } +} From 329eb7c2b1d72a6502e6c0daa78bd9e30254f4ea Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 13 Mar 2014 23:34:42 +0100 Subject: [PATCH 2/6] [ticket/12268] Use FilesystemIterator::SKIP_DOTS PHPBB3-12268 --- phpBB/phpbb/extension/finder.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/phpBB/phpbb/extension/finder.php b/phpBB/phpbb/extension/finder.php index fd19436c16..4fb46c6ffd 100644 --- a/phpBB/phpbb/extension/finder.php +++ b/phpBB/phpbb/extension/finder.php @@ -475,15 +475,19 @@ class finder } $directory_pattern = '#' . $directory_pattern . '#'; - $iterator = new \phpbb\extension\recursive_filter_iterator(new \RecursiveDirectoryIterator($path)); - $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); + $iterator = new \RecursiveIteratorIterator( + new \phpbb\extension\recursive_filter_iterator( + new \RecursiveDirectoryIterator( + $path, + \FilesystemIterator::SKIP_DOTS + ) + ), + \RecursiveIteratorIterator::SELF_FIRST + ); + foreach ($iterator as $file_info) { $filename = $file_info->getFilename(); - if ($filename == '.' || $filename == '..') - { - continue; - } if ($file_info->isDir() == $is_dir) { From 59af5f4cbfdd19ef369308b35cf80c0f79cd73f9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 14 Mar 2014 00:30:07 +0100 Subject: [PATCH 3/6] [ticket/12268] Do not search in folders starting with a dot PHPBB3-12268 --- phpBB/phpbb/extension/recursive_filter_iterator.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/phpBB/phpbb/extension/recursive_filter_iterator.php b/phpBB/phpbb/extension/recursive_filter_iterator.php index c2515ecbab..e776942197 100644 --- a/phpBB/phpbb/extension/recursive_filter_iterator.php +++ b/phpBB/phpbb/extension/recursive_filter_iterator.php @@ -12,7 +12,7 @@ namespace phpbb\extension; /** * Class recursive_filter_iterator * -* This Filter ignores .svn and .git directories. +* This filter ignores directories starting with a dot. * When searching for php classes and template files of extensions * we don't need to look inside these directories. * @@ -20,13 +20,8 @@ namespace phpbb\extension; */ class recursive_filter_iterator extends \RecursiveFilterIterator { - public static $ignore_folders = array( - '.svn', - '.git', - ); - public function accept() { - return !in_array($this->current()->getFilename(), self::$ignore_folders); + return !$this->current()->isDir() || substr($this->current()->getFilename(), 0, 1) !== '.'; } } From 973f5aa8c5ef1830bc6803a0ad6c5054a762183b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 14 Mar 2014 11:08:25 +0100 Subject: [PATCH 4/6] [ticket/12268] Move class out of extension namespace and rename it PHPBB3-12268 --- phpBB/phpbb/extension/finder.php | 2 +- phpBB/phpbb/{extension => }/recursive_filter_iterator.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) rename phpBB/phpbb/{extension => }/recursive_filter_iterator.php (75%) diff --git a/phpBB/phpbb/extension/finder.php b/phpBB/phpbb/extension/finder.php index 4fb46c6ffd..6cc6e1808a 100644 --- a/phpBB/phpbb/extension/finder.php +++ b/phpBB/phpbb/extension/finder.php @@ -476,7 +476,7 @@ class finder $directory_pattern = '#' . $directory_pattern . '#'; $iterator = new \RecursiveIteratorIterator( - new \phpbb\extension\recursive_filter_iterator( + new \phpbb\recursive_dot_prefix_filter_iterator( new \RecursiveDirectoryIterator( $path, \FilesystemIterator::SKIP_DOTS diff --git a/phpBB/phpbb/extension/recursive_filter_iterator.php b/phpBB/phpbb/recursive_filter_iterator.php similarity index 75% rename from phpBB/phpbb/extension/recursive_filter_iterator.php rename to phpBB/phpbb/recursive_filter_iterator.php index e776942197..28e1067d11 100644 --- a/phpBB/phpbb/extension/recursive_filter_iterator.php +++ b/phpBB/phpbb/recursive_filter_iterator.php @@ -7,18 +7,18 @@ * */ -namespace phpbb\extension; +namespace phpbb; /** -* Class recursive_filter_iterator +* Class recursive_dot_prefix_filter_iterator * * This filter ignores directories starting with a dot. * When searching for php classes and template files of extensions * we don't need to look inside these directories. * -* @package phpbb\extension +* @package phpbb */ -class recursive_filter_iterator extends \RecursiveFilterIterator +class recursive_dot_prefix_filter_iterator extends \RecursiveFilterIterator { public function accept() { From dc0bcdf8a08076f717e9e1b1f2c3ce57967dadb1 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 14 Mar 2014 12:54:28 +0100 Subject: [PATCH 5/6] [ticket/12268] Rename class file to recursive_dot_prefix_filter_iterator.php PHPBB3-12268 --- ...lter_iterator.php => recursive_dot_prefix_filter_iterator.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename phpBB/phpbb/{recursive_filter_iterator.php => recursive_dot_prefix_filter_iterator.php} (100%) diff --git a/phpBB/phpbb/recursive_filter_iterator.php b/phpBB/phpbb/recursive_dot_prefix_filter_iterator.php similarity index 100% rename from phpBB/phpbb/recursive_filter_iterator.php rename to phpBB/phpbb/recursive_dot_prefix_filter_iterator.php From 584d7b5823e8c959e921dc5b154bf535182fc32d Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 15 Mar 2014 21:00:16 +0100 Subject: [PATCH 6/6] [ticket/12268] Do not use substr but just compare the character PHPBB3-12268 --- phpBB/phpbb/recursive_dot_prefix_filter_iterator.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/phpBB/phpbb/recursive_dot_prefix_filter_iterator.php b/phpBB/phpbb/recursive_dot_prefix_filter_iterator.php index 28e1067d11..6ef63ec906 100644 --- a/phpBB/phpbb/recursive_dot_prefix_filter_iterator.php +++ b/phpBB/phpbb/recursive_dot_prefix_filter_iterator.php @@ -22,6 +22,7 @@ class recursive_dot_prefix_filter_iterator extends \RecursiveFilterIterator { public function accept() { - return !$this->current()->isDir() || substr($this->current()->getFilename(), 0, 1) !== '.'; + $filename = $this->current()->getFilename(); + return !$this->current()->isDir() || $filename[0] !== '.'; } }