helly Fri Jan 23 16:33:57 2004 EDT
Modified files:
/php-src/ext/spl spl_directory.c
Log:
Builtin recursion protection (by disallow to follow links by default).
http://cvs.php.net/diff.php/php-src/ext/spl/spl_directory.c?r1=1.20&r2=1.21&ty=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.20 php-src/ext/spl/spl_directory.c:1.21
--- php-src/ext/spl/spl_directory.c:1.20 Thu Jan 8 13:17:39 2004
+++ php-src/ext/spl/spl_directory.c Fri Jan 23 16:33:56 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_directory.c,v 1.20 2004/01/08 18:17:39 helly Exp $ */
+/* $Id: spl_directory.c,v 1.21 2004/01/23 21:33:56 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -455,17 +455,27 @@
}
/* }}} */
-/* {{{ proto bool RecursiveDirectoryIterator::hasChildren()
+/* {{{ proto bool RecursiveDirectoryIterator::hasChildren([bool $allow_links = false])
Returns whether current entry is a directory and not '.' or '..' */
SPL_METHOD(RecursiveDirectoryIterator, hasChildren)
{
+ zend_bool allow_links = 0;
zval *object = getThis();
spl_ce_dir_object *intern =
(spl_ce_dir_object*)zend_object_store_get_object(object TSRMLS_CC);
if (!strcmp(intern->entry.d_name, ".") || !strcmp(intern->entry.d_name, ".."))
{
RETURN_BOOL(0);
} else {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b",
&allow_links) == FAILURE) {
+ return;
+ }
spl_dir_get_path_name(intern);
+ if (!allow_links) {
+ php_stat(intern->path_name, intern->path_name_len, FS_IS_LINK,
return_value TSRMLS_CC);
+ if (zend_is_true(return_value)) {
+ RETURN_BOOL(0);
+ }
+ }
php_stat(intern->path_name, intern->path_name_len, FS_IS_DIR,
return_value TSRMLS_CC);
}
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php