diff options
author | Andi Gutmans <andi@php.net> | 1999-09-29 17:45:44 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 1999-09-29 17:45:44 +0000 |
commit | 202d7dd216884cc1e8fc27fe90eb3213bf818960 (patch) | |
tree | e6da493eba3d273509a896b9a08b51b0ee0d59fa /Zend/zend_operators.c | |
parent | 06d04d15a8c14b90c8a28d9cc8e2000eb51bf277 (diff) | |
download | php-git-202d7dd216884cc1e8fc27fe90eb3213bf818960.tar.gz |
Fix leak in += with arrays
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r-- | Zend/zend_operators.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index ec1b755ed7..14bbb372cf 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -407,9 +407,16 @@ ZEND_API int add_function(zval *result, zval *op1, zval *op2) if (op1->type == IS_ARRAY && op2->type == IS_ARRAY) { zval *tmp; - - *result = *op1; - zval_copy_ctor(result); + + if ((result == op1) && (result == op2)) { + /* $a += $a */ + return SUCCESS; + } + if (result != op1) { + /* $a += $b */ + *result = *op1; + zval_copy_ctor(result); + } zend_hash_merge(result->value.ht, op2->value.ht, (void (*)(void *pData)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0); return SUCCESS; } |