]> granicus.if.org Git - php/commitdiff
Fixed bug #70828 (php-fpm 5.6 with opcache crashes when referencing a non-existent...
authorXinchen Hui <laruence@gmail.com>
Mon, 2 Nov 2015 02:47:02 +0000 (10:47 +0800)
committerXinchen Hui <laruence@gmail.com>
Mon, 2 Nov 2015 02:47:02 +0000 (10:47 +0800)
NEWS
Zend/tests/bug70828.phpt [new file with mode: 0644]
Zend/zend_compile.c

diff --git a/NEWS b/NEWS
index f02b240831e80b723915b8fe8e66c69ecbdf783a..1ea9e3055cb5aa8ac734ffa357abc71a961907ba 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP                                                                        NEWS
 ?? ??? 2015, PHP 5.6.16
 
 - Core:
+  . Fixed bug #70828 (php-fpm 5.6 with opcache crashes when referencing a
+    non-existent constant). (Laruence)
   . Fixed bug #70748 (Segfault in ini_lex () at Zend/zend_ini_scanner.l).
     (Laruence)
 
diff --git a/Zend/tests/bug70828.phpt b/Zend/tests/bug70828.phpt
new file mode 100644 (file)
index 0000000..dd285b5
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Bug #70828 (php-fpm 5.6 with opcache crashes when referencing a non-existent constant)
+--FILE--
+<?php
+
+namespace test {
+       use const nonexistent;
+
+       class test {
+               static function run(){
+                       var_dump(nonexistent);
+                       existent;
+               }
+       }
+}
+
+namespace {
+       define("test\\existent", "bug!", 1);
+       test\test::run();
+}
+?>
+--EXPECTF--
+Notice: Use of undefined constant nonexistent - assumed 'nonexistent' in /home/huixinchen/opensource/php-5.6/Zend/tests/bug70828.php on line 8
+string(11) "nonexistent"
index 5ff1b042c27fc6ba3cff13f9f94dbb3c1a18cbb0..fca4e2a04d7812cc8dddc7944b673e81bbb94ac1 100644 (file)
@@ -5804,7 +5804,7 @@ void zend_do_fetch_constant(znode *result, znode *constant_container, znode *con
                                opline->op2.constant = zend_add_const_name_literal(CG(active_op_array), &constant_name->u.constant, 0 TSRMLS_CC);
                        } else {
                                opline->extended_value = IS_CONSTANT_UNQUALIFIED;
-                               if (CG(current_namespace)) {
+                               if (check_namespace && CG(current_namespace)) {
                                        opline->extended_value |= IS_CONSTANT_IN_NAMESPACE;
                                        opline->op2.constant = zend_add_const_name_literal(CG(active_op_array), &constant_name->u.constant, 1 TSRMLS_CC);
                                } else {