01 Oct 2015, PHP 7.0.0 RC 4
- Core:
+ . Fixed bug #70557 (Memleak on return type verifying failed). (Laruence)
. Fixed bug #70555 (fun_get_arg() on unsetted vars return UNKNOW). (Laruence)
. Fixed bug #70548 (Redundant information printed in case of uncaught engine
exception). (Laruence)
--- /dev/null
+--TEST--
+Bug #70557 (Memleak on return type verifying failed).
+--INI--
+opcache.enable=0
+--FILE--
+<?php
+
+function getNumber() : int {
+ return "foo";
+}
+
+try {
+ getNumber();
+} catch (TypeError $e) {
+ var_dump($e->getMessage());
+}
+?>
+--EXPECT--
+string(72) "Return value of getNumber() must be of the type integer, string returned"
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
if (UNEXPECTED(EG(exception) != NULL)) {
- FREE_OP1();
+ if (OP1_TYPE == IS_CONST) {
+ zval_ptr_dtor_nogc(retval_ptr);
+ } else {
+ FREE_OP1();
+ }
}
#endif
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
if (UNEXPECTED(EG(exception) != NULL)) {
+ if (IS_CONST == IS_CONST) {
+ zval_ptr_dtor_nogc(retval_ptr);
+ } else {
+ }
}
#endif
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
if (UNEXPECTED(EG(exception) != NULL)) {
- zval_ptr_dtor_nogc(free_op1);
+ if (IS_TMP_VAR == IS_CONST) {
+ zval_ptr_dtor_nogc(retval_ptr);
+ } else {
+ zval_ptr_dtor_nogc(free_op1);
+ }
}
#endif
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
if (UNEXPECTED(EG(exception) != NULL)) {
- zval_ptr_dtor_nogc(free_op1);
+ if (IS_VAR == IS_CONST) {
+ zval_ptr_dtor_nogc(retval_ptr);
+ } else {
+ zval_ptr_dtor_nogc(free_op1);
+ }
}
#endif
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
if (UNEXPECTED(EG(exception) != NULL)) {
+ if (IS_UNUSED == IS_CONST) {
+ zval_ptr_dtor_nogc(retval_ptr);
+ } else {
+ }
}
#endif
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
if (UNEXPECTED(EG(exception) != NULL)) {
+ if (IS_CV == IS_CONST) {
+ zval_ptr_dtor_nogc(retval_ptr);
+ } else {
+ }
}
#endif
}