dmitry Thu Mar 23 11:42:42 2006 UTC Modified files: /php-src/ext/spl spl_array.c Log: Fixed possible memory corruption http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_array.c?r1=1.102&r2=1.103&diff_format=u Index: php-src/ext/spl/spl_array.c diff -u php-src/ext/spl/spl_array.c:1.102 php-src/ext/spl/spl_array.c:1.103 --- php-src/ext/spl/spl_array.c:1.102 Wed Mar 22 23:12:38 2006 +++ php-src/ext/spl/spl_array.c Thu Mar 23 11:42:41 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_array.c,v 1.102 2006/03/22 23:12:38 tony2001 Exp $ */ +/* $Id: spl_array.c,v 1.103 2006/03/23 11:42:41 dmitry Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -288,7 +288,9 @@ spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC); if (intern->fptr_offset_get) { zval *rv; + SEPARATE_ARG_IF_REF(offset); zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_get, "offsetGet", &rv, offset); + zval_ptr_dtor(&offset); if (rv) { zval_ptr_dtor(&intern->retval); MAKE_STD_ZVAL(intern->retval); @@ -310,19 +312,15 @@ { spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC); long index; - int free_offset; if (check_inherited && intern->fptr_offset_set) { if (!offset) { ALLOC_INIT_ZVAL(offset); - free_offset = 1; } else { - free_offset = 0; + SEPARATE_ARG_IF_REF(offset); } zend_call_method_with_2_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_set, "offsetSet", NULL, offset, value); - if (free_offset) { - zval_ptr_dtor(&offset); - } + zval_ptr_dtor(&offset); return; } @@ -375,7 +373,9 @@ long index; if (check_inherited && intern->fptr_offset_del) { + SEPARATE_ARG_IF_REF(offset); zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_del, "offsetUnset", NULL, offset); + zval_ptr_dtor(&offset); return; } @@ -424,7 +424,9 @@ zval *rv; if (check_inherited && intern->fptr_offset_has) { + SEPARATE_ARG_IF_REF(offset); zend_call_method_with_1_params(&object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset); + zval_ptr_dtor(&offset); if (rv && zend_is_true(rv)) { zval_ptr_dtor(&rv); return 1;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php