scottmac Sat May 9 19:48:15 2009 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/spl spl_iterators.c Log: MFH Fix bug #48206 - Iterating over an invalid data structure leads to a segfault http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.35&r2=1.73.2.30.2.36&diff_format=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.35 php-src/ext/spl/spl_iterators.c:1.73.2.30.2.36 --- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.35 Tue Jan 20 00:47:01 2009 +++ php-src/ext/spl/spl_iterators.c Sat May 9 19:48:15 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_iterators.c,v 1.73.2.30.2.35 2009/01/20 00:47:01 felipe Exp $ */ +/* $Id: spl_iterators.c,v 1.73.2.30.2.36 2009/05/09 19:48:15 scottmac Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -536,7 +536,9 @@ zval **data; iterator->funcs->get_current_data(iterator, &data TSRMLS_CC); - RETURN_ZVAL(*data, 1, 0); + if (data && *data) { + RETURN_ZVAL(*data, 1, 0); + } } /* }}} */ /* {{{ proto void RecursiveIteratorIterator::next() @@ -2400,7 +2402,9 @@ intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); intern->inner.iterator->funcs->get_current_data(intern->inner.iterator, &data TSRMLS_CC); - RETURN_ZVAL(*data, 1, 0); + if (data && *data) { + RETURN_ZVAL(*data, 1, 0); + } } /* }}} */ /* {{{ proto void NoRewindIterator::next() @@ -2714,6 +2718,9 @@ if (EG(exception)) { return ZEND_HASH_APPLY_STOP; } + if (data == NULL || *data == NULL) { + return ZEND_HASH_APPLY_STOP; + } if (iter->funcs->get_current_key) { key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC); if (EG(exception)) { @@ -2745,6 +2752,9 @@ if (EG(exception)) { return ZEND_HASH_APPLY_STOP; } + if (data == NULL || *data == NULL) { + return ZEND_HASH_APPLY_STOP; + } (*data)->refcount++; add_next_index_zval(return_value, *data); return ZEND_HASH_APPLY_KEEP;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php