]> granicus.if.org Git - php/commitdiff
Fixed bug #76463 (var has array key type but not value type)
authorXinchen Hui <laruence@gmail.com>
Tue, 12 Jun 2018 12:55:06 +0000 (20:55 +0800)
committerXinchen Hui <laruence@gmail.com>
Tue, 12 Jun 2018 12:55:06 +0000 (20:55 +0800)
NEWS
ext/opcache/Optimizer/zend_inference.c
ext/opcache/tests/bug76463.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index f5f84fe09e735c263ce2326896fcf86f14ed6979..d702562e088c17c5487457395920951963eaff37 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,9 @@ PHP                                                                        NEWS
 - Interbase:
   . Fixed bug #76443 (php+php_interbase.dll crash on module_shutdown). (Kalle)
 
+- Opcache:
+  . Fixed bug #76463 (var has array key type but not value type). (Laruence)
+
 - ZIP:
   . Fixed bug #76461 (OPSYS_Z_CPM defined instead of OPSYS_CPM).
     (Dennis Birkholz, Remi)
index 4414fb78d8359a46de397b1cd673b7e4f580cc04..9298f983e30b55be6764bafd097f14d454521313 100644 (file)
@@ -2406,7 +2406,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
                                if (t1 & MAY_BE_OBJECT) {
                                        tmp |= MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
                                } else {
-                                       tmp |= ((t1 & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT) | MAY_BE_ARRAY_KEY_LONG;
+                                       tmp |= ((t1 & MAY_BE_ANY) << MAY_BE_ARRAY_SHIFT) | ((t1 & MAY_BE_ANY)? MAY_BE_ARRAY_KEY_LONG : 0);
                                }
                        }
                        UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
diff --git a/ext/opcache/tests/bug76463.phpt b/ext/opcache/tests/bug76463.phpt
new file mode 100644 (file)
index 0000000..0fa9be9
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Bug #76463 (var has array key type but not value type)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+
+function test() {
+       $old_data = isset($old_data) ? (array)$old_data : [];
+}
+
+?>
+okey
+--EXPECT--
+okey