]> granicus.if.org Git - php/commitdiff
Fix memory leak with return types upon failure
authorBob Weinand <bobwei9@hotmail.com>
Tue, 26 May 2015 23:18:06 +0000 (01:18 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Tue, 26 May 2015 23:18:06 +0000 (01:18 +0200)
TMP/VAR wasn't being freed in VERIFY_RETURN

Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index efbb0819224be49e46ad93c3959633858a71444d..55b72e90d7d6d687d0a07346c4d58a5f0dd9697b 100644 (file)
@@ -3909,6 +3909,9 @@ ZEND_VM_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV, UNUSED)
                        }
                }
                zend_verify_return_type(EX(func), retval_ptr);
+               if (EG(exception)) {
+                       FREE_OP1();
+               }
 #endif
        }
        CHECK_EXCEPTION();
index cd95564219b270220214af48973456412ea5047f..1119dca1a2911699073b802b7fd28741d1020e98 100644 (file)
@@ -7815,6 +7815,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_
                        }
                }
                zend_verify_return_type(EX(func), retval_ptr);
+               if (EG(exception)) {
+
+               }
 #endif
        }
        CHECK_EXCEPTION();
@@ -13437,6 +13440,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN
                        }
                }
                zend_verify_return_type(EX(func), retval_ptr);
+               if (EG(exception)) {
+                       zval_ptr_dtor_nogc(free_op1);
+               }
 #endif
        }
        CHECK_EXCEPTION();
@@ -19195,6 +19201,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN
                        }
                }
                zend_verify_return_type(EX(func), retval_ptr);
+               if (EG(exception)) {
+                       zval_ptr_dtor_nogc(free_op1);
+               }
 #endif
        }
        CHECK_EXCEPTION();
@@ -25140,6 +25149,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED
                        }
                }
                zend_verify_return_type(EX(func), retval_ptr);
+               if (EG(exception)) {
+
+               }
 #endif
        }
        CHECK_EXCEPTION();
@@ -34786,6 +34798,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU
                        }
                }
                zend_verify_return_type(EX(func), retval_ptr);
+               if (EG(exception)) {
+
+               }
 #endif
        }
        CHECK_EXCEPTION();