]> granicus.if.org Git - php/commitdiff
Fixed bug #77376 ("undefined function" message no longer includes namespace)
authorXinchen Hui <laruence@gmail.com>
Wed, 2 Jan 2019 07:32:17 +0000 (15:32 +0800)
committerXinchen Hui <laruence@gmail.com>
Wed, 2 Jan 2019 07:32:17 +0000 (15:32 +0800)
NEWS
Zend/tests/bug77376.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/NEWS b/NEWS
index f106d117879785439b5f580fd0eca623768b6f6a..5ad17e012e612ea50d2b08edfd49ce47c603545f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP                                                                        NEWS
 ?? ??? ????, PHP 7.3.2
 
 - Core:
+  . Fixed bug #77376 ("undefined function" message no longer includes
+    namespace). (Laruence)
   . Fixed bug #77339 (__callStatic may get incorrect arguments). (Dmitry)
   . Fixed bug #77317 (__DIR__, __FILE__, realpath() reveal physical path for
     subst virtual drive). (Anatol)
diff --git a/Zend/tests/bug77376.phpt b/Zend/tests/bug77376.phpt
new file mode 100644 (file)
index 0000000..4f6aec9
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+Bug #77376 ("undefined function" message no longer includes namespace)
+--FILE--
+<?php
+namespace Hello;
+World();
+?>
+--EXPECTF--
+Fatal error: Uncaught Error: Call to undefined function Hello\World() %sbug77376.php:%d
+Stack trace:
+#0 {main}
+  thrown in %sbug77376.php on line %d 
index 29f7563a2d5c225cc2a7c583faea6b62bbe63a4c..a49baa5a9bc1294b8c12b938ce5280842f7c1b44 100644 (file)
@@ -3443,11 +3443,10 @@ ZEND_VM_HOT_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM|CACHE_SLOT)
 
        fbc = CACHED_PTR(opline->result.num);
        if (UNEXPECTED(fbc == NULL)) {
-               func_name = RT_CONSTANT(opline, opline->op2) + 1;
-               func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name), 1);
+               func_name = (zval *)RT_CONSTANT(opline, opline->op2);
+               func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1);
                if (func == NULL) {
-                       func_name++;
-                       func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name), 1);
+                       func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1);
                        if (UNEXPECTED(func == NULL)) {
                                ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper, function_name, func_name);
                        }
index 5355f7be64589bde63bb120c9117072fa7b9321b..49bc2c0de77e630f2a7dea7575c5ae15c391586f 100644 (file)
@@ -2153,11 +2153,10 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_N
 
        fbc = CACHED_PTR(opline->result.num);
        if (UNEXPECTED(fbc == NULL)) {
-               func_name = RT_CONSTANT(opline, opline->op2) + 1;
-               func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name), 1);
+               func_name = (zval *)RT_CONSTANT(opline, opline->op2);
+               func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1);
                if (func == NULL) {
-                       func_name++;
-                       func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name), 1);
+                       func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1);
                        if (UNEXPECTED(func == NULL)) {
                                ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(func_name ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
                        }