From: Xinchen Hui Date: Sun, 1 Jun 2014 11:41:01 +0000 (+0800) Subject: Fixed bug #67359 (Segfault in recursiveDirectoryIterator) X-Git-Tag: php-5.4.30RC1~34 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38be99b739c6ad55b01fe304a083e7a1e36c05ee;p=php Fixed bug #67359 (Segfault in recursiveDirectoryIterator) --- diff --git a/NEWS b/NEWS index 354a796af2..04058b61a8 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ PHP NEWS (Adam) - SPL: + . Fixed bug #67359 (Segfault in recursiveDirectoryIterator). (Laruence) . Fixed bug #67360 (Missing element after ArrayObject::getIterator). (Adam) ?? ??? 2014, PHP 5.4.29 diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 0762db6259..8cd352f0bf 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -829,6 +829,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; } } @@ -838,6 +839,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 f3120b2013..fd2e472f05 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -861,6 +861,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, key 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 0000000000..e2e61133f3 --- /dev/null +++ b/ext/spl/tests/bug67359.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #67359 (Segfault in recursiveDirectoryIterator) +--FILE-- +seek(1); + while( $it->valid()) + { + if( $it->isFile() ) + { + $it->current(); + } + + $it->next(); + } + + $it->current(); +} +catch(Exception $e) +{ +} +echo "okey" +?> +--EXPECTF-- +okey