]> granicus.if.org Git - php/commitdiff
Fixed bug #42818 ($foo = clone(array()); leaks memory)
authorDmitry Stogov <dmitry@php.net>
Wed, 3 Oct 2007 09:47:59 +0000 (09:47 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 3 Oct 2007 09:47:59 +0000 (09:47 +0000)
Zend/tests/bug42818.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/bug42818.phpt b/Zend/tests/bug42818.phpt
new file mode 100644 (file)
index 0000000..a1d79a4
--- /dev/null
@@ -0,0 +1,9 @@
+--TEST--
+Bug #42818 ($foo = clone(array()); leaks memory)
+--FILE--
+<?php
+$foo = clone(array());
+?>
+--EXPECTF--
+Warning: __clone method called on non-object in %sbug42818.php on line 2
+
index d3432aee791837634364b11e2a388f38cdcaafd5..2aed1ab50a81b0dc34c15c74f3c51698ed7a9cff 100644 (file)
@@ -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();
        }
 
index c7b80494afeec2b66aae096e392c2a07cb88b08f..0651d9939ac2a807978d6f91189344ebd99d7a52 100644 (file)
@@ -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();
        }