diff options
| author | Dmitry Stogov <dmitry@php.net> | 2005-04-29 07:59:04 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2005-04-29 07:59:04 +0000 |
| commit | 8b7a03c889a703c5fbb79e66817ab959b562d6a4 (patch) | |
| tree | d32ea3867dfb24316b0229175b19b70abf173bd9 /Zend/zend_API.c | |
| parent | 8db238b075e708f032435fd49e9de0de4da80f0c (diff) | |
| download | php-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.c | 16 |
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; |
