mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Fix GH-16574: Incorrect error "undefined method" messages
This commit is contained in:
commit
0b3684c48e
3 changed files with 28 additions and 13 deletions
|
@ -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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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();
|
FREE_OP2();
|
||||||
if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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));
|
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||||
if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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));
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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));
|
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||||
if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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));
|
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||||
if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
|
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));
|
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 (UNEXPECTED(fbc == NULL)) {
|
||||||
if (EXPECTED(!EG(exception))) {
|
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) {
|
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…
Add table
Add a link
Reference in a new issue