From 01ae5c3c2ff47ca66031ec4a750a30d97c64c492 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sun, 17 Feb 2013 11:04:36 +0800 Subject: Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS) --- NEWS | 4 ++++ ext/spl/spl_directory.c | 3 ++- ext/spl/tests/bug64228.phpt | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 ext/spl/tests/bug64228.phpt diff --git a/NEWS b/NEWS index e4ee218827..26d56cc125 100644 --- a/NEWS +++ b/NEWS @@ -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-- + $value) { + $dirs[] = $value->getFileName(); +} + +@rmdir($empty_dir); + +sort($dirs); +print_r($dirs); +?> +--EXPECT-- +Array +( + [0] => . + [1] => .. +) + -- cgit v1.2.1