From daf1121292c4bb4f54ab185fca6fbe5bf5a3aa2c Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 3 Oct 2007 09:47:59 +0000 Subject: [PATCH] Fixed bug #42818 ($foo = clone(array()); leaks memory) --- Zend/tests/bug42818.phpt | 9 +++++++++ Zend/zend_vm_def.h | 2 +- Zend/zend_vm_execute.h | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/bug42818.phpt 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(); } -- 2.50.1