From: Dmitry Stogov Date: Wed, 3 Oct 2007 09:47:59 +0000 (+0000) Subject: Fixed bug #42818 ($foo = clone(array()); leaks memory) X-Git-Tag: RELEASE_2_0_0a1~1674 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=daf1121292c4bb4f54ab185fca6fbe5bf5a3aa2c;p=php Fixed bug #42818 ($foo = clone(array()); leaks memory) --- diff --git a/Zend/tests/bug42818.phpt b/Zend/tests/bug42818.phpt new file mode 100644 index 0000000000..a1d79a41e5 --- /dev/null +++ b/Zend/tests/bug42818.phpt @@ -0,0 +1,9 @@ +--TEST-- +Bug #42818 ($foo = clone(array()); leaks memory) +--FILE-- + +--EXPECTF-- +Warning: __clone method called on non-object in %sbug42818.php on line 2 + diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index d3432aee79..2aed1ab50a 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2660,7 +2660,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMP|VAR|UNUSED|CV, ANY) zend_error(E_WARNING, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; - FREE_OP1_IF_VAR(); + FREE_OP1(); ZEND_VM_NEXT_OPCODE(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index c7b80494af..0651d9939a 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -4855,7 +4855,7 @@ static int ZEND_CLONE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_error(E_WARNING, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; - + zval_dtor(free_op1.var); ZEND_VM_NEXT_OPCODE(); }