com php-src: Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS): NEWS ext/spl/spl_directory.c ext/sp l/tests/bug64228.phpt
| From: | Xinchen Hui | Date: | Sun, 17 Feb 2013 03:04:36 +0000 |
| Subject: | com php-src: Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS): NEWS ext/spl/spl_directory.c ext/sp l/tests/bug64228.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-71243@lists.php.net to get a copy of this message | ||
Commit: 01ae5c3c2ff47ca66031ec4a750a30d97c64c492
Author: Xinchen Hui <laruence@php.net> Sun, 17 Feb 2013 11:04:36 +0800
Parents: 188c196d4da60bdde9190d2fc532650d17f7af2d
Branches: PHP-5.3
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=01ae5c3c2ff47ca66031ec4a750a30d97c64c492
Log:
Fixed bug #64228 (RecursiveDirectoryIterator always assumes SKIP_DOTS)
Bugs:
https://bugs.php.net/64228
Changed paths:
M NEWS
M ext/spl/spl_directory.c
A ext/spl/tests/bug64228.phpt
Diff:
diff --git a/NEWS b/NEWS
index e4ee218..26d56cc 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 1b6a0e9..13af781 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 0000000..3f30dd2
--- /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] => ..
+)
+