diff options
author | Xinchen Hui <laruence@php.net> | 2013-02-17 11:04:36 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@php.net> | 2013-02-17 11:04:36 +0800 |
commit | 01ae5c3c2ff47ca66031ec4a750a30d97c64c492 (patch) | |
tree | f6148d969406ce9f416611bd54cbdf571cd77805 | |
parent | 188c196d4da60bdde9190d2fc532650d17f7af2d (diff) | |
download | php-git-01ae5c3c2ff47ca66031ec4a750a30d97c64c492.tar.gz |
Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS)
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/spl/spl_directory.c | 3 | ||||
-rw-r--r-- | ext/spl/tests/bug64228.phpt | 25 |
3 files changed, 31 insertions, 1 deletions
@@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2013, PHP 5.3.23 +- SPL: + . Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS). + (patch by kriss@krizalys.com, Laruence) + ?? ??? 2013, PHP 5.3.22 diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 1b6a0e9b7b..13af7815c5 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1431,6 +1431,7 @@ SPL_METHOD(FilesystemIterator, __construct) SPL_METHOD(FilesystemIterator, rewind) { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + int skip_dots = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_SKIPDOTS); if (zend_parse_parameters_none() == FAILURE) { return; @@ -1442,7 +1443,7 @@ SPL_METHOD(FilesystemIterator, rewind) } do { spl_filesystem_dir_read(intern TSRMLS_CC); - } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name)); + } while (skip_dots && spl_filesystem_is_dot(intern->u.dir.entry.d_name)); } /* }}} */ diff --git a/ext/spl/tests/bug64228.phpt b/ext/spl/tests/bug64228.phpt new file mode 100644 index 0000000000..3f30dd2b23 --- /dev/null +++ b/ext/spl/tests/bug64228.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS) +--FILE-- +<?php +$dirs = array(); +$empty_dir = __DIR__ . "/empty"; +@mkdir($empty_dir); + +$i = new RecursiveDirectoryIterator($empty_dir, FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO); // Note the absence of FilesystemIterator::SKIP_DOTS +foreach ($i as $key => $value) { + $dirs[] = $value->getFileName(); +} + +@rmdir($empty_dir); + +sort($dirs); +print_r($dirs); +?> +--EXPECT-- +Array +( + [0] => . + [1] => .. +) + |