mirror of
https://github.com/php/php-src.git
synced 2024-12-02 14:24:10 +08:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16574: Incorrect error "undefined method" messages
This commit is contained in:
commit
0b3684c48e
@ -3634,7 +3634,7 @@ ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV,
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((OP2_TYPE == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
FREE_OP2();
|
||||
if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
|
24
Zend/zend_vm_execute.h
generated
24
Zend/zend_vm_execute.h
generated
@ -7220,7 +7220,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -9784,7 +9784,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -12266,7 +12266,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -16659,7 +16659,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -18152,7 +18152,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -19559,7 +19559,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -34945,7 +34945,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -37114,7 +37114,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -39759,7 +39759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -44875,7 +44875,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -48769,7 +48769,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
@ -54364,7 +54364,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
|
||||
fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
|
||||
if (UNEXPECTED(fbc == NULL)) {
|
||||
if (EXPECTED(!EG(exception))) {
|
||||
zend_undefined_method(obj->ce, Z_STR_P(function_name));
|
||||
zend_undefined_method(orig_obj->ce, Z_STR_P(function_name));
|
||||
}
|
||||
|
||||
if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
||||
|
15
ext/spl/tests/gh16574.phpt
Normal file
15
ext/spl/tests/gh16574.phpt
Normal file
@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
GH-16574 (Incorrect error "undefined method" messages)
|
||||
--CREDITS--
|
||||
YuanchengJiang
|
||||
--FILE--
|
||||
<?php
|
||||
$i = new ArrayIterator([1,1,1,1,1]);
|
||||
$i = new CachingIterator($i, CachingIterator::FULL_CACHE);
|
||||
$i->doesnotexist("x");
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught Error: Call to undefined method CachingIterator::doesnotexist() in %s:%d
|
||||
Stack trace:
|
||||
#0 {main}
|
||||
thrown in %s on line %d
|
Loading…
Reference in New Issue
Block a user