diff options
author | Stanislav Malyshev <stas@php.net> | 2004-01-09 13:52:19 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2004-01-09 13:52:19 +0000 |
commit | e321eba06b24936cf6834d32c4aa050f9d16f16e (patch) | |
tree | 33d2529bd8935925e0030aac1aef2c375c7c7fd0 /Zend/zend_execute.c | |
parent | 9e229aa09d6ee367a09686875472815372a66231 (diff) | |
download | php-git-e321eba06b24936cf6834d32c4aa050f9d16f16e.tar.gz |
Fix Bug #26077 - memory leak when new() result is not assigned
and no constructor defined
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 62350865ad..4853d18d7a 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -3095,7 +3095,7 @@ int zend_new_handler(ZEND_OPCODE_HANDLER_ARGS) object_init_ex(EX_T(EX(opline)->result.u.var).var.ptr, EX_T(EX(opline)->op1.u.var).class_entry); EX_T(EX(opline)->result.u.var).var.ptr->refcount=1; EX_T(EX(opline)->result.u.var).var.ptr->is_ref=1; - + NEXT_OPCODE(); } @@ -3731,6 +3731,9 @@ int zend_jmp_no_ctor_handler(ZEND_OPCODE_HANDLER_ARGS) EX(fbc_constructor) = NULL; if (constructor == NULL) { + if(EX(opline)->op1.u.EA.type & EXT_TYPE_UNUSED) { + zval_ptr_dtor(EX_T(EX(opline)->op1.u.var).var.ptr_ptr); + } EX(opline) = op_array->opcodes + EX(opline)->op2.u.opline_num; return 0; /* CHECK_ME */ } else { |