summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2013-02-17 11:04:36 +0800
committerXinchen Hui <laruence@php.net>2013-02-17 11:04:36 +0800
commit01ae5c3c2ff47ca66031ec4a750a30d97c64c492 (patch)
treef6148d969406ce9f416611bd54cbdf571cd77805
parent188c196d4da60bdde9190d2fc532650d17f7af2d (diff)
downloadphp-git-01ae5c3c2ff47ca66031ec4a750a30d97c64c492.tar.gz
Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS)
-rw-r--r--NEWS4
-rw-r--r--ext/spl/spl_directory.c3
-rw-r--r--ext/spl/tests/bug64228.phpt25
3 files changed, 31 insertions, 1 deletions
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--
+<?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] => ..
+)
+