Commit:    210d428f99bd3dff789e9257a4619e930d3c6e45
Author:    Xinchen Hui <larue...@php.net>         Tue, 18 Dec 2012 15:34:47 
+0800
Parents:   d3ec9ceb25ba570baebe89dff3e376232b97ab45
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=210d428f99bd3dff789e9257a4619e930d3c6e45

Log:
ixed bug that exception won't be catched

Related failed test Zend/tests/bug35437.phpt (after he latest
execute_data improvement, run with non CALL vm kind)

Bugs:
https://bugs.php.net/35437

Changed paths:
  M  Zend/zend_vm_def.h
  M  Zend/zend_vm_execute.h


Diff:
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index f7b10a2..bfe6f72 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1942,14 +1942,15 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
        if (UNEXPECTED((fbc->common.fn_flags & 
(ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 
0)) {
                        zend_error_noreturn(E_ERROR, "Cannot call abstract 
method %s::%s()", fbc->common.scope->name, fbc->common.function_name);
-                       CHECK_EXCEPTION();
-                       ZEND_VM_NEXT_OPCODE(); /* Never reached */
                }
                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 
0)) {
                        zend_error(E_DEPRECATED, "Function %s%s%s() is 
deprecated",
                                fbc->common.scope ? fbc->common.scope->name : 
"",
                                fbc->common.scope ? "::" : "",
                                fbc->common.function_name);
+                       if (UNEXPECTED(EG(exception) != NULL)) {
+                               HANDLE_EXCEPTION();
+                       }
                }
        }
        if (fbc->common.scope &&
@@ -1959,6 +1960,9 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
                if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
                        /* FIXME: output identifiers properly */
                        zend_error(E_STRICT, "Non-static method %s::%s() should 
not be called statically", fbc->common.scope->name, fbc->common.function_name);
+                       if (UNEXPECTED(EG(exception) != NULL)) {
+                               HANDLE_EXCEPTION();
+                       }
                } else {
                        /* FIXME: output identifiers properly */
                        /* An internal function assumes $this is present and 
won't check that. So PHP would crash by allowing the call. */
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index c077d5d..420a94a 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -482,14 +482,15 @@ static int ZEND_FASTCALL 
zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
        if (UNEXPECTED((fbc->common.fn_flags & 
(ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 
0)) {
                        zend_error_noreturn(E_ERROR, "Cannot call abstract 
method %s::%s()", fbc->common.scope->name, fbc->common.function_name);
-                       CHECK_EXCEPTION();
-                       ZEND_VM_NEXT_OPCODE(); /* Never reached */
                }
                if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 
0)) {
                        zend_error(E_DEPRECATED, "Function %s%s%s() is 
deprecated",
                                fbc->common.scope ? fbc->common.scope->name : 
"",
                                fbc->common.scope ? "::" : "",
                                fbc->common.function_name);
+                       if (UNEXPECTED(EG(exception) != NULL)) {
+                               HANDLE_EXCEPTION();
+                       }
                }
        }
        if (fbc->common.scope &&
@@ -499,6 +500,9 @@ static int ZEND_FASTCALL 
zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
                if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
                        /* FIXME: output identifiers properly */
                        zend_error(E_STRICT, "Non-static method %s::%s() should 
not be called statically", fbc->common.scope->name, fbc->common.function_name);
+                       if (UNEXPECTED(EG(exception) != NULL)) {
+                               HANDLE_EXCEPTION();
+                       }
                } else {
                        /* FIXME: output identifiers properly */
                        /* An internal function assumes $this is present and 
won't check that. So PHP would crash by allowing the call. */


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to