dmitry Thu Mar 23 11:42:32 2006 UTC
Modified files: (Branch: PHP_5_1)
/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.71.2.12&r2=1.71.2.13&diff_format=u
Index: php-src/ext/spl/spl_array.c
diff -u php-src/ext/spl/spl_array.c:1.71.2.12
php-src/ext/spl/spl_array.c:1.71.2.13
--- php-src/ext/spl/spl_array.c:1.71.2.12 Wed Mar 22 23:12:03 2006
+++ php-src/ext/spl/spl_array.c Thu Mar 23 11:42:32 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_array.c,v 1.71.2.12 2006/03/22 23:12:03 tony2001 Exp $ */
+/* $Id: spl_array.c,v 1.71.2.13 2006/03/23 11:42:32 dmitry Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -259,7 +259,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);
@@ -281,19 +283,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;
}
@@ -344,7 +342,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;
}
@@ -392,7 +392,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