summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2005-04-29 07:59:04 +0000
committerDmitry Stogov <dmitry@php.net>2005-04-29 07:59:04 +0000
commit8b7a03c889a703c5fbb79e66817ab959b562d6a4 (patch)
treed32ea3867dfb24316b0229175b19b70abf173bd9 /Zend/zend_API.c
parent8db238b075e708f032435fd49e9de0de4da80f0c (diff)
downloadphp-git-8b7a03c889a703c5fbb79e66817ab959b562d6a4.tar.gz
Fixed bug #30332 (zend.ze1_compatibility_mode isnt fully compatable with array_push())
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 16a9648af1..dac58559d8 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -152,7 +152,21 @@ ZEND_API int _zend_get_parameters_array_ex(int param_count, zval ***argument_arr
}
while (param_count-->0) {
- *(argument_array++) = (zval **) p-(arg_count--);
+ zval **value = (zval**)(p-arg_count);
+
+ if (EG(ze1_compatibility_mode) && Z_TYPE_PP(value) == IS_OBJECT) {
+ zval *value_ptr;
+
+ ALLOC_ZVAL(value_ptr);
+ *value_ptr = **value;
+ INIT_PZVAL(value_ptr);
+ zend_error(E_STRICT, "Implicit cloning object of class '%s' because of 'zend.ze1_compatibility_mode'", Z_OBJCE_PP(value)->name);
+ value_ptr->value.obj = Z_OBJ_HANDLER_PP(value, clone_obj)(*value TSRMLS_CC);
+ zval_ptr_dtor(value);
+ *value = value_ptr;
+ }
+ *(argument_array++) = value;
+ arg_count--;
}
return SUCCESS;