Fixed bug #62433 (Inconsistent behavior of RecursiveDirectoryIterator to dot files).
authorXinchen Hui <laruence@php.net>
Mon, 2 Jul 2012 03:33:38 +0000 (11:33 +0800)
committerXinchen Hui <laruence@php.net>
Mon, 2 Jul 2012 03:33:38 +0000 (11:33 +0800)
NEWS
ext/spl/spl_directory.c
ext/spl/tests/bug62433.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 6dd1feb7774fec32f0701b1dfa1a9dec2303bad6..70a8eb9ec08e7bb61856ce6839d2cf1e4be43ddb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -76,6 +76,8 @@ PHP                                                                        NEWS
   . Fixed bug #62025 (__ss_family was changed on AIX 5.3). (Felipe)
     
 - SPL:
+  . Fixed bug #62433 (Inconsistent behavior of RecursiveDirectoryIterator to
+    dot files). (Laruence)
   . Fixed bug #62262 (RecursiveArrayIterator does not implement Countable).
     (Nikita Popov)
 
index dbae3e2a093ac4104cd231421fffad7c6c11d16a..0fcbd317e35776dad1003e50e837ff5c566445fd 100755 (executable)
@@ -1432,6 +1432,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;
@@ -1443,7 +1444,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/bug62433.phpt b/ext/spl/tests/bug62433.phpt
new file mode 100644 (file)
index 0000000..86b5df8
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+Bug #62433 Inconsistent behavior of RecursiveDirectoryIterator to dot files (. and ..)
+--FILE--
+<?php
+$dots = array_keys(iterator_to_array(new RecursiveDirectoryIterator(__DIR__)));
+$ndots = array_keys(iterator_to_array(new RecursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS)));
+
+var_dump(in_array(__DIR__ . '/.', $dots));
+var_dump(in_array(__DIR__ . '/..', $dots));
+
+var_dump(in_array(__DIR__ . '/.', $ndots));
+var_dump(in_array(__DIR__ . '/..', $ndots));
+?>
+--EXPECT--     
+bool(true)
+bool(true)
+bool(false)
+bool(false)