Commit: e9f996c00d5cb6448dac1457dd9dae320c16904f
Author: Dmitry Stogov <dmi...@zend.com> Mon, 25 Mar 2013 15:23:49
+0400
Parents: 6f560b0487b48d8364a2077b97e661fd5107054e
c4686b4de93a89e8265331b0d4a6a7954ccbae95
Branches: PHP-5.4
Link:
http://git.php.net/?p=php-src.git;a=commitdiff;h=e9f996c00d5cb6448dac1457dd9dae320c16904f
Log:
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
Fixed bug #63914 (zend_do_fcall_common_helper_SPEC does not handle exceptions
properly). (Jeff Welch)
Conflicts:
NEWS
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Bugs:
https://bugs.php.net/63914
Changed paths:
MM NEWS
MM Zend/zend_vm_def.h
MM Zend/zend_vm_execute.h
diff --cc NEWS
index bc132d4,9d5fc6d..c14ea1c
--- a/NEWS
+++ b/NEWS
@@@ -1,16 -1,12 +1,18 @@@
PHP
NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-?? ??? 2013, PHP 5.3.24
-
+?? ??? 2013, PHP 5.4.14
- Core
+ . Fixed bug #64432 (more empty delimiter warning in strX methods).
(Laruence)
+ . Fixed bug #64417 (ArrayAccess::&offsetGet() in a trait causes fatal
error).
+ (Dmitry)
. Fixed bug #64370 (microtime(true) less than
$_SERVER['REQUEST_TIME_FLOAT']).
(Anatol)
+ . Fixed bug #64239 (Debug backtrace changed behavior since 5.4.10 or
5.4.11).
+ (Dmitry, Laruence)
+ . Fixed bug #63976 (Parent class incorrectly using child constant in class
+ property). (Dmitry)
+ . Fixed bug #63914 (zend_do_fcall_common_helper_SPEC does not handle
+ exceptions properly). (Jeff Welch)
. Fixed bug #62343 (Show class_alias In get_declared_classes()) (Dmitry)
- PCRE:
diff --cc Zend/zend_vm_def.h
index e5cdd1d,eed9245..ffa94a1
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@@ -2652,17 -2299,9 +2652,12 @@@ ZEND_VM_HELPER(zend_do_fcall_common_hel
zend_arg_types_stack_3_pop(&EG(arg_types_stack), &EX(called_scope),
&EX(current_object), &EX(fbc));
EX(function_state).arguments =
zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
+ LOAD_OPLINE();
+
+ if (fbc->type == ZEND_INTERNAL_FUNCTION) {
+ temp_variable *ret = &EX_T(opline->result.var);
- MAKE_STD_ZVAL(ret->var.ptr);
- ZVAL_NULL(ret->var.ptr);
- ret->var.ptr_ptr = &ret->var.ptr;
- ret->var.fcall_returned_reference = (fbc->common.fn_flags &
ZEND_ACC_RETURN_REFERENCE) != 0;
-
- if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
- if (EX(function_state).function->common.arg_info) {
+ if (fbc->common.arg_info) {
zend_uint i=0;
zval **p = (zval**)EX(function_state).arguments;
ulong arg_count = opline->extended_value;
@@@ -2673,34 -2312,37 +2668,41 @@@
}
}
- if (!zend_execute_internal) {
- /* saves one function call if zend_execute_internal is
not used */
- fbc->internal_function.handler(opline->extended_value,
ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ?
&ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
- } else {
- zend_execute_internal(EXECUTE_DATA,
RETURN_VALUE_USED(opline) TSRMLS_CC);
- }
+ if (EXPECTED(EG(exception) == NULL)) {
- ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
- EX_T(opline->result.u.var).var.ptr_ptr =
&EX_T(opline->result.u.var).var.ptr;
- EX_T(opline->result.u.var).var.fcall_returned_reference
= EX(function_state).function->common.return_reference;
++ MAKE_STD_ZVAL(ret->var.ptr);
++ ZVAL_NULL(ret->var.ptr);
++ ret->var.ptr_ptr = &ret->var.ptr;
++ ret->var.fcall_returned_reference =
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
- if (!RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(&ret->var.ptr);
+ if (!zend_execute_internal) {
+ /* saves one function call if
zend_execute_internal is not used */
- ((zend_internal_function *)
EX(function_state).function)->handler(opline->extended_value,
EX_T(opline->result.u.var).var.ptr,
EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL,
EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
++
fbc->internal_function.handler(opline->extended_value, ret->var.ptr,
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL,
EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
+ } else {
+ zend_execute_internal(EXECUTE_DATA,
RETURN_VALUE_USED(opline) TSRMLS_CC);
+ }
+
+ if (!RETURN_VALUE_USED(opline)) {
-
zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
++ zval_ptr_dtor(&ret->var.ptr);
+ }
}
- } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
+ } else if (fbc->type == ZEND_USER_FUNCTION) {
EX(original_return_value) = EG(return_value_ptr_ptr);
EG(active_symbol_table) = NULL;
- EG(active_op_array) = &EX(function_state).function->op_array;
+ EG(active_op_array) = &fbc->op_array;
EG(return_value_ptr_ptr) = NULL;
- if (RETURN_VALUE_USED(opline)) {
- EG(return_value_ptr_ptr) =
&EX_T(opline->result.u.var).var.ptr;
- EX_T(opline->result.u.var).var.ptr = NULL;
- EX_T(opline->result.u.var).var.ptr_ptr =
&EX_T(opline->result.u.var).var.ptr;
- EX_T(opline->result.u.var).var.fcall_returned_reference
= EX(function_state).function->common.return_reference;
+ if (RETURN_VALUE_USED(opline)) {
+ temp_variable *ret = &EX_T(opline->result.var);
+
+ ret->var.ptr = NULL;
+ EG(return_value_ptr_ptr) = &ret->var.ptr;
+ ret->var.ptr_ptr = &ret->var.ptr;
+ ret->var.fcall_returned_reference =
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
}
- if (zend_execute == execute && !EG(exception)) {
- EX(call_opline) = opline;
- ZEND_VM_ENTER();
+ if (EXPECTED(zend_execute == execute)) {
+ if (EXPECTED(EG(exception) == NULL)) {
+ ZEND_VM_ENTER();
+ }
} else {
zend_execute(EG(active_op_array) TSRMLS_CC);
}
diff --cc Zend/zend_vm_execute.h
index 97e5a8e,6edc91a..1860a0f
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@@ -616,17 -299,9 +616,12 @@@ static int ZEND_FASTCALL zend_do_fcall_
zend_arg_types_stack_3_pop(&EG(arg_types_stack), &EX(called_scope),
&EX(current_object), &EX(fbc));
EX(function_state).arguments =
zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
+ LOAD_OPLINE();
+
+ if (fbc->type == ZEND_INTERNAL_FUNCTION) {
+ temp_variable *ret = &EX_T(opline->result.var);
- MAKE_STD_ZVAL(ret->var.ptr);
- ZVAL_NULL(ret->var.ptr);
- ret->var.ptr_ptr = &ret->var.ptr;
- ret->var.fcall_returned_reference = (fbc->common.fn_flags &
ZEND_ACC_RETURN_REFERENCE) != 0;
-
- if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
- if (EX(function_state).function->common.arg_info) {
+ if (fbc->common.arg_info) {
zend_uint i=0;
zval **p = (zval**)EX(function_state).arguments;
ulong arg_count = opline->extended_value;
@@@ -637,34 -312,37 +632,41 @@@
}
}
- if (!zend_execute_internal) {
- /* saves one function call if zend_execute_internal is
not used */
- fbc->internal_function.handler(opline->extended_value,
ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ?
&ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
- } else {
- zend_execute_internal(execute_data,
RETURN_VALUE_USED(opline) TSRMLS_CC);
- }
+ if (EXPECTED(EG(exception) == NULL)) {
- ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
- EX_T(opline->result.u.var).var.ptr_ptr =
&EX_T(opline->result.u.var).var.ptr;
- EX_T(opline->result.u.var).var.fcall_returned_reference
= EX(function_state).function->common.return_reference;
++ MAKE_STD_ZVAL(ret->var.ptr);
++ ZVAL_NULL(ret->var.ptr);
++ ret->var.ptr_ptr = &ret->var.ptr;
++ ret->var.fcall_returned_reference =
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
+
+ if (!zend_execute_internal) {
+ /* saves one function call if
zend_execute_internal is not used */
- ((zend_internal_function *)
EX(function_state).function)->handler(opline->extended_value,
EX_T(opline->result.u.var).var.ptr,
EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL,
EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
++
fbc->internal_function.handler(opline->extended_value, ret->var.ptr,
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL,
EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC);
+ } else {
+ zend_execute_internal(execute_data,
RETURN_VALUE_USED(opline) TSRMLS_CC);
+ }
- if (!RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(&ret->var.ptr);
+ if (!RETURN_VALUE_USED(opline)) {
-
zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
++ zval_ptr_dtor(&ret->var.ptr);
+ }
}
- } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
+ } else if (fbc->type == ZEND_USER_FUNCTION) {
EX(original_return_value) = EG(return_value_ptr_ptr);
EG(active_symbol_table) = NULL;
- EG(active_op_array) = &EX(function_state).function->op_array;
+ EG(active_op_array) = &fbc->op_array;
EG(return_value_ptr_ptr) = NULL;
if (RETURN_VALUE_USED(opline)) {
- EG(return_value_ptr_ptr) =
&EX_T(opline->result.u.var).var.ptr;
- EX_T(opline->result.u.var).var.ptr = NULL;
- EX_T(opline->result.u.var).var.ptr_ptr =
&EX_T(opline->result.u.var).var.ptr;
- EX_T(opline->result.u.var).var.fcall_returned_reference
= EX(function_state).function->common.return_reference;
+ temp_variable *ret = &EX_T(opline->result.var);
+
+ ret->var.ptr = NULL;
+ EG(return_value_ptr_ptr) = &ret->var.ptr;
+ ret->var.ptr_ptr = &ret->var.ptr;
+ ret->var.fcall_returned_reference =
(fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
}
- if (zend_execute == execute && !EG(exception)) {
- EX(call_opline) = opline;
- ZEND_VM_ENTER();
+ if (EXPECTED(zend_execute == execute)) {
+ if (EXPECTED(EG(exception) == NULL)) {
+ ZEND_VM_ENTER();
+ }
} else {
zend_execute(EG(active_op_array) TSRMLS_CC);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php