]> granicus.if.org Git - php/commitdiff
Fixed bug #72762
authorNikita Popov <nikic@php.net>
Fri, 5 Aug 2016 14:27:55 +0000 (16:27 +0200)
committerNikita Popov <nikic@php.net>
Fri, 5 Aug 2016 14:27:55 +0000 (16:27 +0200)
NEWS
ext/opcache/Optimizer/zend_inference.c
ext/opcache/tests/bug72762.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 19ee69d861a5790c747dca846c3859c90bb9f4a0..6a1588b4f8e7df5eeffc3f133b5d2bdbaf211b22 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,10 @@ PHP                                                                        NEWS
   . Fixed bug #72711 (`mb_ereg` does not clear the `$regs` parameter on
     failure). (ju1ius)
 
+- Opcache:
+  . Fixed bug #72762 (Infinite loop while parsing a file with opcache enabled).
+    (Nikita)
+
 - Stream: 
   . Fixed bug #72743 (Out-of-bound read in php_stream_filter_create).
     (Loianhtuan)
index c8dd1004d7a3e4a58e9d07ec8d792a18fa46ce40..20f2ae37dbec56463334b4efd7554b1a0611d750 100644 (file)
@@ -3139,9 +3139,6 @@ static void zend_update_type_info(const zend_op_array *op_array,
                                        if (t1 & MAY_BE_ARRAY_KEY_STRING) {
                                                tmp |= MAY_BE_STRING;
                                        }
-                                       if (!(tmp & (MAY_BE_LONG|MAY_BE_STRING))) {
-                                               tmp |= MAY_BE_NULL;
-                                       }
                                }
                                UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
                        }
diff --git a/ext/opcache/tests/bug72762.phpt b/ext/opcache/tests/bug72762.phpt
new file mode 100644 (file)
index 0000000..8ce98bf
--- /dev/null
@@ -0,0 +1,23 @@
+--TEST--
+Bug #72762: Infinite loop while parsing a file with opcache enabled
+--FILE--
+<?php
+
+class foo
+{
+    function bar()
+    {
+        $b = array();
+
+        foreach ($a as $a) {
+            foreach ($b as $k => $v) {
+            }
+            $b[$k] = $v;
+        }
+    }
+}
+
+?>
+===DONE===
+--EXPECT--
+===DONE===