Add test for memory leak with wrong return type

This commit is contained in:
Bob Weinand 2015-05-27 01:37:00 +02:00
parent f7f7d6e385
commit b73f87b1e4
3 changed files with 32 additions and 6 deletions

View File

@ -0,0 +1,20 @@
--TEST--
Memory leak when returning TMP/VAR with wrong return type
--FILE--
<?php
function foo(): stdClass {
$a = new stdClass;
$b = [];
return [$a, $b];
}
try {
foo();
} catch (BaseException $e) {
print $e->getMessage();
}
?>
--EXPECTF--
Return value of foo() must be an instance of stdClass, array returned in %s on line %d

View File

@ -3909,7 +3909,8 @@ 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)) {
if (UNEXPECTED(EG(exception) != NULL)) {
FREE_OP1();
}
#endif

View File

@ -7815,7 +7815,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_
}
}
zend_verify_return_type(EX(func), retval_ptr);
if (EG(exception)) {
if (UNEXPECTED(EG(exception) != NULL)) {
}
#endif
@ -13440,7 +13441,8 @@ 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)) {
if (UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor_nogc(free_op1);
}
#endif
@ -19201,7 +19203,8 @@ 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)) {
if (UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor_nogc(free_op1);
}
#endif
@ -25149,7 +25152,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED
}
}
zend_verify_return_type(EX(func), retval_ptr);
if (EG(exception)) {
if (UNEXPECTED(EG(exception) != NULL)) {
}
#endif
@ -34798,7 +34802,8 @@ 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)) {
if (UNEXPECTED(EG(exception) != NULL)) {
}
#endif