com php-src: Fix leak if get_iterator throws but doesn 't return NULL: Zend/zend_vm_def.h Zend/zend _vm_execute.h
| From: | Nikita Popov | Date: | Sat, 16 Jul 2016 21:16:34 +0000 |
| Subject: | com php-src: Fix leak if get_iterator throws but doesn 't return NULL: Zend/zend_vm_def.h Zend/zend _vm_execute.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-93045@lists.php.net to get a copy of this message | ||
Commit: cbba1fff3f81bb7c4e6455d2170563e42cca559d
Author: Nikita Popov <nikic@php.net> Thu, 14 Jul 2016 22:29:04 +0200
Parents: 9452257b046030c32f1b55b75eadcd711e882ad8
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=cbba1fff3f81bb7c4e6455d2170563e42cca559d
Log:
Fix leak if get_iterator throws but doesn't return NULL
Changed paths:
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 0be1b57..161a3f5 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -5754,6 +5754,9 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
FREE_OP1();
+ if (iter) {
+ OBJ_RELEASE(&iter->std);
+ }
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator",
ZSTR_VAL(ce->name));
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 5943e4b..3df5217 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -3511,6 +3511,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+ if (iter) {
+ OBJ_RELEASE(&iter->std);
+ }
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator",
ZSTR_VAL(ce->name));
}
@@ -12571,6 +12574,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
zval_ptr_dtor_nogc(free_op1);
+ if (iter) {
+ OBJ_RELEASE(&iter->std);
+ }
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator",
ZSTR_VAL(ce->name));
}
@@ -16157,6 +16163,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
zval_ptr_dtor_nogc(free_op1);
+ if (iter) {
+ OBJ_RELEASE(&iter->std);
+ }
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator",
ZSTR_VAL(ce->name));
}
@@ -35267,6 +35276,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+ if (iter) {
+ OBJ_RELEASE(&iter->std);
+ }
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator",
ZSTR_VAL(ce->name));
}