mirror of
https://github.com/php/php-src.git
synced 2026-03-24 08:12:21 +01:00
Zend: Use zend_bad_method_call() when cloning from the wrong scope (#18999)
This commit is contained in:
@@ -93,11 +93,7 @@ ZEND_FUNCTION(clone)
|
||||
if (clone->common.scope != scope) {
|
||||
if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
|
||||
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
|
||||
zend_throw_error(NULL, "Call to %s %s::__clone() from %s%s",
|
||||
zend_visibility_string(clone->common.fn_flags), ZSTR_VAL(clone->common.scope->name),
|
||||
scope ? "scope " : "global scope",
|
||||
scope ? ZSTR_VAL(scope->name) : ""
|
||||
);
|
||||
zend_bad_method_call(clone, clone->common.function_name, scope);
|
||||
RETURN_THROWS();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4123,15 +4123,6 @@ static zend_never_inline void zend_fetch_this_var(int type OPLINE_DC EXECUTE_DAT
|
||||
}
|
||||
}
|
||||
|
||||
static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_wrong_clone_call(zend_function *clone, zend_class_entry *scope)
|
||||
{
|
||||
zend_throw_error(NULL, "Call to %s %s::__clone() from %s%s",
|
||||
zend_visibility_string(clone->common.fn_flags), ZSTR_VAL(clone->common.scope->name),
|
||||
scope ? "scope " : "global scope",
|
||||
scope ? ZSTR_VAL(scope->name) : ""
|
||||
);
|
||||
}
|
||||
|
||||
#if ZEND_INTENSIVE_DEBUGGING
|
||||
|
||||
#define CHECK_SYMBOL_TABLES() \
|
||||
|
||||
@@ -6046,7 +6046,7 @@ ZEND_VM_COLD_CONST_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
|
||||
if (clone->common.scope != scope) {
|
||||
if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
|
||||
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
|
||||
zend_wrong_clone_call(clone, scope);
|
||||
zend_bad_method_call(clone, clone->common.function_name, scope);
|
||||
FREE_OP1();
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
HANDLE_EXCEPTION();
|
||||
|
||||
8
Zend/zend_vm_execute.h
generated
8
Zend/zend_vm_execute.h
generated
@@ -5220,7 +5220,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_
|
||||
if (clone->common.scope != scope) {
|
||||
if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
|
||||
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
|
||||
zend_wrong_clone_call(clone, scope);
|
||||
zend_bad_method_call(clone, clone->common.function_name, scope);
|
||||
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
HANDLE_EXCEPTION();
|
||||
@@ -15469,7 +15469,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
|
||||
if (clone->common.scope != scope) {
|
||||
if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
|
||||
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
|
||||
zend_wrong_clone_call(clone, scope);
|
||||
zend_bad_method_call(clone, clone->common.function_name, scope);
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
HANDLE_EXCEPTION();
|
||||
@@ -33566,7 +33566,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
|
||||
if (clone->common.scope != scope) {
|
||||
if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
|
||||
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
|
||||
zend_wrong_clone_call(clone, scope);
|
||||
zend_bad_method_call(clone, clone->common.function_name, scope);
|
||||
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
HANDLE_EXCEPTION();
|
||||
@@ -41087,7 +41087,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
|
||||
if (clone->common.scope != scope) {
|
||||
if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
|
||||
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
|
||||
zend_wrong_clone_call(clone, scope);
|
||||
zend_bad_method_call(clone, clone->common.function_name, scope);
|
||||
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
HANDLE_EXCEPTION();
|
||||
|
||||
@@ -17,4 +17,4 @@ try {
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
Error: Call to protected test::__clone() from global scope
|
||||
Error: Call to protected method test::__clone() from global scope
|
||||
|
||||
@@ -17,4 +17,4 @@ try {
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
Error: Call to private test::__clone() from global scope
|
||||
Error: Call to private method test::__clone() from global scope
|
||||
|
||||
Reference in New Issue
Block a user