From: Ilia Alshanetsky Date: Wed, 8 Jul 2009 03:08:03 +0000 (+0000) Subject: MFB: Fixed bug #48788 (RecursiveDirectoryIterator doesn't descend into X-Git-Tag: php-5.2.11RC1~197 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c79ec97b29c5504c2b9fd3e778dabf014ed89a3b;p=php MFB: Fixed bug #48788 (RecursiveDirectoryIterator doesn't descend into symlinked directories). --- diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 8aaaf58507..5ef77a43cd 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1032,7 +1032,7 @@ SPL_METHOD(RecursiveDirectoryIterator, hasChildren) return; } spl_filesystem_object_get_file_name(intern TSRMLS_CC); - if (!allow_links) { + if (!allow_links && !(intern->flags & SPL_FILE_DIR_FOLLOW_SYMLINKS)) { php_stat(intern->file_name, intern->file_name_len, FS_IS_LINK, return_value TSRMLS_CC); if (zend_is_true(return_value)) { RETURN_BOOL(0); @@ -2354,6 +2354,7 @@ PHP_MINIT_FUNCTION(spl_directory) REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, "CURRENT_AS_SELF", SPL_FILE_DIR_CURRENT_AS_SELF); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, "KEY_MODE_MASK", SPL_FILE_DIR_KEY_MODE_MASK); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, "KEY_AS_PATHNAME", SPL_FILE_DIR_KEY_AS_PATHNAME); + REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, "FOLLOW_SYMLINKS", SPL_FILE_DIR_FOLLOW_SYMLINKS); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, "KEY_AS_FILENAME", SPL_FILE_DIR_KEY_AS_FILENAME); REGISTER_SPL_CLASS_CONST_LONG(RecursiveDirectoryIterator, "NEW_CURRENT_AND_KEY", SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO); diff --git a/ext/spl/spl_directory.h b/ext/spl/spl_directory.h index b9460a30ab..a0cde2c685 100755 --- a/ext/spl/spl_directory.h +++ b/ext/spl/spl_directory.h @@ -101,6 +101,7 @@ struct _spl_filesystem_object { #define SPL_FILE_DIR_KEY_AS_PATHNAME 0x00000000 /* make RecursiveDirectoryTree::key() return getPathname() */ #define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */ +#define SPL_FILE_DIR_FOLLOW_SYMLINKS 0x00000200 /* make RecursiveDirectoryTree::hasChildren() follow symlinks */ #define SPL_FILE_DIR_KEY_MODE_MASK 0x00000F00 /* mask RecursiveDirectoryTree::key() */ #define SPL_FILE_DIR_KEY(intern,mode) ((intern->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode)