diff options
| author | Marcus Boerger <helly@php.net> | 2003-07-16 10:41:43 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2003-07-16 10:41:43 +0000 |
| commit | aa9bde9a34fd62a2a5a7d042979666149794f9f2 (patch) | |
| tree | e2ff316d6457476044ba8faaa4e4bb0ec7a5e943 /ext/spl/spl_array.c | |
| parent | 15097151f4a7545c1d359bf86f495eb18b9842db (diff) | |
| download | php-git-aa9bde9a34fd62a2a5a7d042979666149794f9f2.tar.gz | |
Make array write stuff work again correct and fix tests
Diffstat (limited to 'ext/spl/spl_array.c')
| -rwxr-xr-x | ext/spl/spl_array.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 87a081a9e6..c21ed61461 100755 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -218,9 +218,18 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_ASSIGN_DIM) FREE_OP(Ts, op2, EG(free_op2)); if (&EX(opline)->result) { - EX_T(EX(opline)->result.u.var).var.ptr = retval; - EX_T(EX(opline)->result.u.var).var.ptr_ptr = NULL;/*&EX_T(EX(opline)->result.u.var).var.ptr;*/ - SELECTIVE_PZVAL_LOCK(retval, &EX(opline)->result); + if (retval->refcount < 2) { + zend_error(E_WARNING, "Method %s::set() did not return a value, using input value", obj_ce->name); + EX_T(EX(opline)->result.u.var).var.ptr = value; + SELECTIVE_PZVAL_LOCK(value, &EX(opline)->result); + DELETE_RET_ZVAL(retval); + } else { + EX_T(EX(opline)->result.u.var).var.ptr = retval; + retval->refcount--; + } + EX_T(EX(opline)->result.u.var).var.ptr_ptr = NULL; + } else { + DELETE_RET_ZVAL(retval); } EX(opline)++; |
