mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
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
This commit is contained in:
commit
e9f996c00d
3 changed files with 32 additions and 26 deletions
2
NEWS
2
NEWS
|
@ -11,6 +11,8 @@ PHP NEWS
|
||||||
(Dmitry, Laruence)
|
(Dmitry, Laruence)
|
||||||
. Fixed bug #63976 (Parent class incorrectly using child constant in class
|
. Fixed bug #63976 (Parent class incorrectly using child constant in class
|
||||||
property). (Dmitry)
|
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)
|
. Fixed bug #62343 (Show class_alias In get_declared_classes()) (Dmitry)
|
||||||
|
|
||||||
- PCRE:
|
- PCRE:
|
||||||
|
|
|
@ -2657,11 +2657,6 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
|
||||||
if (fbc->type == ZEND_INTERNAL_FUNCTION) {
|
if (fbc->type == ZEND_INTERNAL_FUNCTION) {
|
||||||
temp_variable *ret = &EX_T(opline->result.var);
|
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 (fbc->common.arg_info) {
|
if (fbc->common.arg_info) {
|
||||||
zend_uint i=0;
|
zend_uint i=0;
|
||||||
zval **p = (zval**)EX(function_state).arguments;
|
zval **p = (zval**)EX(function_state).arguments;
|
||||||
|
@ -2673,15 +2668,22 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!zend_execute_internal) {
|
if (EXPECTED(EG(exception) == NULL)) {
|
||||||
/* saves one function call if zend_execute_internal is not used */
|
MAKE_STD_ZVAL(ret->var.ptr);
|
||||||
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);
|
ZVAL_NULL(ret->var.ptr);
|
||||||
} else {
|
ret->var.ptr_ptr = &ret->var.ptr;
|
||||||
zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC);
|
ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
|
||||||
}
|
|
||||||
|
|
||||||
if (!RETURN_VALUE_USED(opline)) {
|
if (!zend_execute_internal) {
|
||||||
zval_ptr_dtor(&ret->var.ptr);
|
/* 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 (!RETURN_VALUE_USED(opline)) {
|
||||||
|
zval_ptr_dtor(&ret->var.ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (fbc->type == ZEND_USER_FUNCTION) {
|
} else if (fbc->type == ZEND_USER_FUNCTION) {
|
||||||
EX(original_return_value) = EG(return_value_ptr_ptr);
|
EX(original_return_value) = EG(return_value_ptr_ptr);
|
||||||
|
|
|
@ -621,11 +621,6 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
|
||||||
if (fbc->type == ZEND_INTERNAL_FUNCTION) {
|
if (fbc->type == ZEND_INTERNAL_FUNCTION) {
|
||||||
temp_variable *ret = &EX_T(opline->result.var);
|
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 (fbc->common.arg_info) {
|
if (fbc->common.arg_info) {
|
||||||
zend_uint i=0;
|
zend_uint i=0;
|
||||||
zval **p = (zval**)EX(function_state).arguments;
|
zval **p = (zval**)EX(function_state).arguments;
|
||||||
|
@ -637,15 +632,22 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!zend_execute_internal) {
|
if (EXPECTED(EG(exception) == NULL)) {
|
||||||
/* saves one function call if zend_execute_internal is not used */
|
MAKE_STD_ZVAL(ret->var.ptr);
|
||||||
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);
|
ZVAL_NULL(ret->var.ptr);
|
||||||
} else {
|
ret->var.ptr_ptr = &ret->var.ptr;
|
||||||
zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC);
|
ret->var.fcall_returned_reference = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
|
||||||
}
|
|
||||||
|
|
||||||
if (!RETURN_VALUE_USED(opline)) {
|
if (!zend_execute_internal) {
|
||||||
zval_ptr_dtor(&ret->var.ptr);
|
/* 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 (!RETURN_VALUE_USED(opline)) {
|
||||||
|
zval_ptr_dtor(&ret->var.ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (fbc->type == ZEND_USER_FUNCTION) {
|
} else if (fbc->type == ZEND_USER_FUNCTION) {
|
||||||
EX(original_return_value) = EG(return_value_ptr_ptr);
|
EX(original_return_value) = EG(return_value_ptr_ptr);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue