com php-src: Add test for memory leak with wrong return type: Zend/tests/return_types/028.phpt Zend/zend_vm_d ef.h Zend/zend_vm_execute.h

From: Date: Tue, 26 May 2015 23:37:00 +0000
Subject: com php-src: Add test for memory leak with wrong return type: Zend/tests/return_types/028.phpt Zend/zend_vm_d ef.h Zend/zend_vm_execute.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-86941@lists.php.net to get a copy of this message
Commit: b73f87b1e49a383cce40e5fe295300c89128dbe2 Author: Bob Weinand <bobwei9@hotmail.com> Wed, 27 May 2015 01:37:00 +0200 Parents: f7f7d6e385e91f70ee640018fd155dbd035a2e53 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b73f87b1e49a383cce40e5fe295300c89128dbe2 Log: Add test for memory leak with wrong return type Changed paths: A Zend/tests/return_types/028.phpt M Zend/zend_vm_def.h M Zend/zend_vm_execute.h Diff: diff --git a/Zend/tests/return_types/028.phpt b/Zend/tests/return_types/028.phpt new file mode 100644 index 0000000..d820b25 --- /dev/null +++ b/Zend/tests/return_types/028.phpt @@ -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 diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 55b72e9..c71fbc9 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -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 diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 1119dca..a38d7db 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -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

« previous php.cvs (#86941) next »