com php-src: Fixed bug #67359 (Segfault in recursiveDirectoryIterator): ext/spl/spl_directory.c ext/spl/spl_iterators.c ext /spl/tests/bug67359.phpt
| From: | Johannes Schlüter | Date: | Fri, 18 Jul 2014 23:28:58 +0000 |
| Subject: | com php-src: Fixed bug #67359 (Segfault in recursiveDirectoryIterator): ext/spl/spl_directory.c ext/spl/spl_iterators.c ext /spl/tests/bug67359.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-79624@lists.php.net to get a copy of this message | ||
Commit: b5051ff939eb9dbada8ce10fbea8cf37e50b5a36
Author: Xinchen Hui <laruence@php.net> Sun, 1 Jun 2014 19:41:01 +0800
Committer: Stanislav Malyshev <stas@php.net> Fri, 18 Jul 2014 16:28:58 -0700
Parents: e2ba5c7987141fc11706207b0ce24ea2eb6dea87
Branches: PHP-5.3
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b5051ff939eb9dbada8ce10fbea8cf37e50b5a36
Log:
Fixed bug #67359 (Segfault in recursiveDirectoryIterator)
Bugs:
https://bugs.php.net/67359
Changed paths:
M ext/spl/spl_directory.c
M ext/spl/spl_iterators.c
A ext/spl/tests/bug67359.phpt
Diff:
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index 13af781..149db9a 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -819,6 +819,7 @@ SPL_METHOD(DirectoryIterator, seek)
zend_call_method_with_0_params(&this_ptr, Z_OBJCE_P(getThis()),
&intern->u.dir.func_rewind, "rewind", &retval);
if (retval) {
zval_ptr_dtor(&retval);
+ retval = NULL;
}
}
@@ -828,6 +829,7 @@ SPL_METHOD(DirectoryIterator, seek)
if (retval) {
valid = zend_is_true(retval);
zval_ptr_dtor(&retval);
+ retval = NULL;
}
if (!valid) {
break;
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index cd0af8f..d83f450 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -858,6 +858,8 @@ static union _zend_function *spl_recursive_it_get_method(zval **object_ptr, char
*object_ptr = zobj;
function_handler = Z_OBJ_HT_P(*object_ptr)->get_method(object_ptr, method, method_len
TSRMLS_CC);
}
+ } else {
+ *object_ptr = zobj;
}
}
return function_handler;
diff --git a/ext/spl/tests/bug67359.phpt b/ext/spl/tests/bug67359.phpt
new file mode 100644
index 0000000..e2e6113
--- /dev/null
+++ b/ext/spl/tests/bug67359.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #67359 (Segfault in recursiveDirectoryIterator)
+--FILE--
+<?php
+try
+{
+ $rdi = new recursiveDirectoryIterator(dirname(__FILE__), FilesystemIterator::SKIP_DOTS |
FilesystemIterator::UNIX_PATHS);
+ $it = new recursiveIteratorIterator( $rdi );
+ $it->seek(1);
+ while( $it->valid())
+ {
+ if( $it->isFile() )
+ {
+ $it->current();
+ }
+
+ $it->next();
+ }
+
+ $it->current();
+}
+catch(Exception $e)
+{
+}
+echo "okey"
+?>
+--EXPECTF--
+okey