Commit: ebad5178c4ae0da124469b1432fb0e890f6147da
Author: Xinchen Hui <larue...@php.net> Sun, 14 Jul 2013 11:47:06
+0800
Parents: eab076020d0520267074bbbda0fec1dd69df4136
Branches: PHP-5.4 PHP-5.5 master
Link:
http://git.php.net/?p=php-src.git;a=commitdiff;h=ebad5178c4ae0da124469b1432fb0e890f6147da
Log:
Fixed bug #65254 (Exception not catchable when exception thrown in autoload
with a namespace).
Bugs:
https://bugs.php.net/65254
Changed paths:
M NEWS
A Zend/tests/bug65254.phpt
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
diff --git a/NEWS b/NEWS
index a172918..763e08d 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP
NEWS
?? ??? 2013, PHP 5.4.18
- Core:
+ . Fixed bug #65254 (Exception not catchable when exception thrown in autoload
+ with a namespace). (Laruence)
. Fixed bug #65108 (is_callable() triggers Fatal Error).
(David Soria Parra, Laruence)
. Fixed bug #65088 (Generated configure script is malformed on OpenBSD).
diff --git a/Zend/tests/bug65254.phpt b/Zend/tests/bug65254.phpt
new file mode 100644
index 0000000..d2ebba4
--- /dev/null
+++ b/Zend/tests/bug65254.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #65254 (Exception not catchable when exception thrown in autoload with a
namespace)
+--FILE--
+<?php
+function __autoload($class)
+{
+ eval("namespace ns_test; class test {}");
+
+ throw new \Exception('abcd');
+}
+
+try
+{
+ \ns_test\test::go();
+}
+catch (Exception $e)
+{
+ echo 'caught';
+}
+--EXPECT--
+caught
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 3d84a37..7346078 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2229,9 +2229,11 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL,
CONST|VAR, CONST|TMP|VAR|UNUS
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -2414,9 +2416,11 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY,
CONST|TMP|VAR|CV)
if (Z_TYPE_PP(obj) == IS_STRING) {
ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj),
Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_PP(obj));
}
EX(called_scope) = ce;
EX(object) = NULL;
@@ -3498,9 +3502,11 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT,
VAR|CONST|UNUSED, CONST)
ce =
CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -3887,15 +3893,17 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMP|VAR|CV,
UNUSED|CONST|VAR)
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (OP1_TYPE != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (OP1_TYPE == IS_VAR ||
OP1_TYPE == IS_CV) {
zval_ptr_dtor(&varname);
}
FREE_OP1();
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 4982cc2..6e466e4 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1274,9 +1274,11 @@ static int ZEND_FASTCALL
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE
if (Z_TYPE_PP(obj) == IS_STRING) {
ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj),
Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_PP(obj));
}
EX(called_scope) = ce;
EX(object) = NULL;
@@ -1391,7 +1393,6 @@ static int ZEND_FASTCALL
ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
EX(op_array), EX_Ts() TSRMLS_CC);
-
ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
}
@@ -1403,7 +1404,6 @@ static int ZEND_FASTCALL
ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
el = zend_brk_cont(Z_LVAL_P(opline->op2.zv), opline->op1.opline_num,
EX(op_array), EX_Ts() TSRMLS_CC);
-
ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
}
@@ -1580,9 +1580,11 @@ static int ZEND_FASTCALL
ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_H
if (Z_TYPE_PP(obj) == IS_STRING) {
ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj),
Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_PP(obj));
}
EX(called_scope) = ce;
EX(object) = NULL;
@@ -1748,9 +1750,11 @@ static int ZEND_FASTCALL
ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_H
if (Z_TYPE_PP(obj) == IS_STRING) {
ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj),
Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_PP(obj));
}
EX(called_scope) = ce;
EX(object) = NULL;
@@ -1949,9 +1953,11 @@ static int ZEND_FASTCALL
ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HA
if (Z_TYPE_PP(obj) == IS_STRING) {
ce = zend_fetch_class_by_name(Z_STRVAL_PP(obj),
Z_STRLEN_PP(obj), NULL, 0 TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_PP(obj));
}
EX(called_scope) = ce;
EX(object) = NULL;
@@ -3421,9 +3427,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -3590,9 +3598,11 @@ static int ZEND_FASTCALL
ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO
ce =
CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -3774,15 +3784,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HA
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_CONST != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_CONST == IS_VAR ||
IS_CONST == IS_CV) {
zval_ptr_dtor(&varname);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -4223,9 +4235,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER(ZE
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -4897,9 +4911,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER(ZE
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -5159,15 +5175,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HAND
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_CONST != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_CONST == IS_VAR ||
IS_CONST == IS_CV) {
zval_ptr_dtor(&varname);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -5456,9 +5474,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -5700,15 +5720,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_H
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_CONST != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_CONST == IS_VAR ||
IS_CONST == IS_CV) {
zval_ptr_dtor(&varname);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -6127,9 +6149,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEN
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -8136,15 +8160,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HAND
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_TMP_VAR != IS_CONST && varname
== &tmp) {
zval_dtor(&tmp);
} else if (IS_TMP_VAR == IS_VAR ||
IS_TMP_VAR == IS_CV) {
zval_ptr_dtor(&varname);
}
zval_dtor(free_op1.var);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -9481,15 +9507,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLE
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_TMP_VAR != IS_CONST && varname
== &tmp) {
zval_dtor(&tmp);
} else if (IS_TMP_VAR == IS_VAR ||
IS_TMP_VAR == IS_CV) {
zval_ptr_dtor(&varname);
}
zval_dtor(free_op1.var);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -9906,15 +9934,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HAN
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_TMP_VAR != IS_CONST && varname
== &tmp) {
zval_dtor(&tmp);
} else if (IS_TMP_VAR == IS_VAR ||
IS_TMP_VAR == IS_CV) {
zval_ptr_dtor(&varname);
}
zval_dtor(free_op1.var);
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -13494,9 +13524,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZE
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -13663,9 +13695,11 @@ static int ZEND_FASTCALL
ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE
ce =
CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -13847,15 +13881,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_VAR != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_VAR == IS_VAR || IS_VAR
== IS_CV) {
zval_ptr_dtor(&varname);
}
if (free_op1.var)
{zval_ptr_dtor(&free_op1.var);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -15664,9 +15700,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -17801,9 +17839,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -18063,15 +18103,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_VAR != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_VAR == IS_VAR || IS_VAR
== IS_CV) {
zval_ptr_dtor(&varname);
}
if (free_op1.var)
{zval_ptr_dtor(&free_op1.var);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -19077,9 +19119,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(Z
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -19321,15 +19365,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HAN
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_VAR != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_VAR == IS_VAR || IS_VAR
== IS_CV) {
zval_ptr_dtor(&varname);
}
if (free_op1.var)
{zval_ptr_dtor(&free_op1.var);};
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -20914,9 +20960,11 @@ static int ZEND_FASTCALL
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_
ce = CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class '%s' not
found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -22416,9 +22464,11 @@ static int ZEND_FASTCALL
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC
ce =
CACHED_PTR(opline->op1.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op1.zv),
Z_STRLEN_P(opline->op1.zv), opline->op1.literal + 1, opline->extended_value
TSRMLS_CC);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ HANDLE_EXCEPTION();
+ }
if (UNEXPECTED(ce == NULL)) {
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op1.zv));
}
CACHE_PTR(opline->op1.literal->cache_slot, ce);
}
@@ -29426,15 +29476,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDL
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_CV != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_CV == IS_VAR || IS_CV ==
IS_CV) {
zval_ptr_dtor(&varname);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -33383,15 +33435,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_CV != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_CV == IS_VAR || IS_CV ==
IS_CV) {
zval_ptr_dtor(&varname);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
@@ -34519,15 +34573,17 @@ static int ZEND_FASTCALL
ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HAND
ce =
CACHED_PTR(opline->op2.literal->cache_slot);
} else {
ce =
zend_fetch_class_by_name(Z_STRVAL_P(opline->op2.zv),
Z_STRLEN_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
- if (UNEXPECTED(ce == NULL)) {
+ if (UNEXPECTED(EG(exception) != NULL)) {
if (IS_CV != IS_CONST && varname ==
&tmp) {
zval_dtor(&tmp);
} else if (IS_CV == IS_VAR || IS_CV ==
IS_CV) {
zval_ptr_dtor(&varname);
}
- CHECK_EXCEPTION();
- ZEND_VM_NEXT_OPCODE();
+ HANDLE_EXCEPTION();
+ }
+ if (UNEXPECTED(ce == NULL)) {
+ zend_error_noreturn(E_ERROR, "Class
'%s' not found", Z_STRVAL_P(opline->op2.zv));
}
CACHE_PTR(opline->op2.literal->cache_slot, ce);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php