From: Etienne Kneuss Date: Wed, 12 Mar 2008 13:34:47 +0000 (+0000) Subject: Fix bug #41828 (Fix crash on wrong instantiation) X-Git-Tag: BEFORE_NEW_PARAMETER_PARSE~605 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b57e7b44daa9a2424b136a1ead3232c4bbdf1643;p=php Fix bug #41828 (Fix crash on wrong instantiation) --- diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index daf9c12427..7a7f3b3898 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -699,8 +699,13 @@ static union _zend_function *spl_recursive_it_get_method(zval **object_ptr, char union _zend_function *function_handler; spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(*object_ptr TSRMLS_CC); long level = object->level; - zval *zobj = object->iterators[level].zobject; - + zval *zobj; + + if (!object->iterators) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, "The %s instance wasn't initialized properly", Z_OBJCE_PP(object_ptr)->name); + } + zobj = object->iterators[level].zobject; + function_handler = std_object_handlers.get_method(object_ptr, method, method_len TSRMLS_CC); if (!function_handler) { if (zend_hash_find(&Z_OBJCE_P(zobj)->function_table, method, method_len+1, (void **) &function_handler) == FAILURE) { diff --git a/ext/spl/tests/bug41828.phpt b/ext/spl/tests/bug41828.phpt new file mode 100644 index 0000000000..6053e0e446 --- /dev/null +++ b/ext/spl/tests/bug41828.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #41828 (Segfault if extended constructor of RecursiveIterator doesn't call its parent) +--FILE-- +bar(); + +?> +==DONE== + +--EXPECTF-- +Fatal error: main(): The foo instance wasn't initialized properly in %s on line %d