summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.h
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-07-18 15:52:52 +0800
committerXinchen Hui <laruence@php.net>2014-07-18 16:25:43 +0800
commit110bf9c720d02b49a1a5d0c6e8affe65f9aa01db (patch)
tree9d377d071e33efcbbc3c60f3218a557216edfd71 /Zend/zend_vm_execute.h
parent4e378844abbfbc7fec88d063ee0bf2e9026b6b6a (diff)
parentf6f621ef69a5a9bf20e94c2714bdebae73860927 (diff)
downloadphp-git-110bf9c720d02b49a1a5d0c6e8affe65f9aa01db.tar.gz
Merge remote-tracking branch 'origin/master' into phpng
Conflicts: Zend/zend_compile.h ext/openssl/xp_ssl.c
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r--Zend/zend_vm_execute.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 214ab51beb..c6c8f8ee38 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1466,13 +1466,13 @@ static int ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- if (opline->extended_value &&
+ if ((opline->extended_value & ZEND_FAST_CALL_FOR_CATCH) &&
UNEXPECTED(EG(prev_exception) != NULL)) {
/* in case of unhandled exception jump to catch block instead of finally */
ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
ZEND_VM_CONTINUE();
}
- EX(fast_ret) = opline + 1;
+ EX(fast_ret) = opline;
EX(delayed_exception) = NULL;
ZEND_VM_SET_OPCODE(opline->op1.jmp_addr);
ZEND_VM_CONTINUE();
@@ -1481,7 +1481,10 @@ static int ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
static int ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
if (EX(fast_ret)) {
- ZEND_VM_SET_OPCODE(EX(fast_ret));
+ ZEND_VM_SET_OPCODE(EX(fast_ret) + 1);
+ if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FOR_FINALLY)) {
+ EX(fast_ret) = &EX(func)->op_array.opcodes[EX(fast_ret)->op2.opline_num];
+ }
ZEND_VM_CONTINUE();
} else {
/* special case for unhandled exceptions */