]> granicus.if.org Git - php/commitdiff
Fixed bug #73583 (Segfaults when conditionally declared class and function have the...
authorXinchen Hui <laruence@gmail.com>
Wed, 23 Nov 2016 06:24:46 +0000 (14:24 +0800)
committerXinchen Hui <laruence@gmail.com>
Wed, 23 Nov 2016 06:24:46 +0000 (14:24 +0800)
bug was introduced in rev 88eae43f , and the runtime defined key is not
merged-able

NEWS
ext/opcache/Optimizer/compact_literals.c
ext/opcache/tests/bug73583.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 2679337424952399aa8b7c00131dab6317e9dc22..f17b01b022ec725938890862b3785a7229222956 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -23,6 +23,8 @@ PHP                                                                        NEWS
   . Fixed bug #64526 (Add missing mysqlnd.* parameters to php.ini-*). (cmb)
 
 - Opcache:
+  . Fixed bug #73583 (Segfaults when conditionally declared class and function
+    have the same name). (Laruence)
   . Fixed bug #69090 (check cached files permissions)
 
 - OpenSSL:
index 445b579f592452e81392782ab09344d1de0dd4a9..e59fbb4e17bf158045f3ad9908a857ab424cf319 100644 (file)
@@ -292,7 +292,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
                                case ZEND_DECLARE_CLASS:
                                case ZEND_DECLARE_INHERITED_CLASS:
                                case ZEND_DECLARE_INHERITED_CLASS_DELAYED:
-                                       LITERAL_INFO(opline->op1.constant, LITERAL_VALUE, 1, 0, 2);
+                                       LITERAL_INFO(opline->op1.constant, LITERAL_VALUE, 0, 0, 2);
                                        break;
                                case ZEND_RECV:
                                case ZEND_RECV_VARIADIC:
diff --git a/ext/opcache/tests/bug73583.phpt b/ext/opcache/tests/bug73583.phpt
new file mode 100644 (file)
index 0000000..e947b45
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Bug #73583 (Segfaults when conditionally declared class and function have the same name)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=0x4ff
+opcache.file_update_protection=0
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+if (true) {
+       class A { }
+       function A() { }
+       function A() { }
+}
+?>
+--EXPECTF--
+Fatal error: Cannot redeclare A() (previously declared in %sbug73583.php:4) in %sbug73583.php on line 5