Skip to content

Commit 62b7697

Browse files
committed
Do not run autoloader when resolving unqualified call
1 parent 3ac2e2d commit 62b7697

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Fallback to global function should not trigger autoloading.
3+
--FILE--
4+
<?php
5+
namespace {
6+
function loader($name) {
7+
echo $name, \PHP_EOL;
8+
}
9+
10+
autoload_register_function('loader');
11+
}
12+
13+
namespace bar {
14+
var_dump('Hello');
15+
}
16+
?>
17+
--EXPECT--
18+
string(5) "Hello"

Zend/zend_vm_def.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -3849,13 +3849,13 @@ ZEND_VM_HOT_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM|CACHE_SLOT)
38493849
if (UNEXPECTED(fbc == NULL)) {
38503850
zval *function_name = (zval *)RT_CONSTANT(opline, opline->op2);
38513851
/* Fetch lowercase name stored in the next literal slot */
3852-
fbc = zend_lookup_function_ex(Z_STR_P(function_name), Z_STR_P(function_name+1), /* use_autoload */ true);
3852+
fbc = zend_lookup_function_ex(Z_STR_P(function_name), Z_STR_P(function_name+1), /* use_autoload */ false);
38533853
if (UNEXPECTED(fbc == NULL)) {
38543854
if (UNEXPECTED(EG(exception))) {
38553855
HANDLE_EXCEPTION();
38563856
}
38573857
/* Fallback onto global namespace, by fetching the unqualified lowercase name stored in the second literal slot */
3858-
fbc = zend_lookup_function_ex(Z_STR_P(function_name+2), Z_STR_P(function_name+2), /* use_autoload */ true);
3858+
fbc = zend_lookup_function_ex(Z_STR_P(function_name+2), Z_STR_P(function_name+2), /* use_autoload */ false);
38593859
if (fbc == NULL) {
38603860
if (UNEXPECTED(EG(exception))) {
38613861
HANDLE_EXCEPTION();

Zend/zend_vm_execute.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -3656,13 +3656,13 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_N
36563656
if (UNEXPECTED(fbc == NULL)) {
36573657
zval *function_name = (zval *)RT_CONSTANT(opline, opline->op2);
36583658
/* Fetch lowercase name stored in the next literal slot */
3659-
fbc = zend_lookup_function_ex(Z_STR_P(function_name), Z_STR_P(function_name+1), /* use_autoload */ true);
3659+
fbc = zend_lookup_function_ex(Z_STR_P(function_name), Z_STR_P(function_name+1), /* use_autoload */ false);
36603660
if (UNEXPECTED(fbc == NULL)) {
36613661
if (UNEXPECTED(EG(exception))) {
36623662
HANDLE_EXCEPTION();
36633663
}
36643664
/* Fallback onto global namespace, by fetching the unqualified lowercase name stored in the second literal slot */
3665-
fbc = zend_lookup_function_ex(Z_STR_P(function_name+2), Z_STR_P(function_name+2), /* use_autoload */ true);
3665+
fbc = zend_lookup_function_ex(Z_STR_P(function_name+2), Z_STR_P(function_name+2), /* use_autoload */ false);
36663666
if (fbc == NULL) {
36673667
if (UNEXPECTED(EG(exception))) {
36683668
HANDLE_EXCEPTION();

0 commit comments

Comments
 (0)