]> granicus.if.org Git - php/commitdiff
Added tests and NEWS entry
authorDmitry Stogov <dmitry@zend.com>
Tue, 23 Aug 2016 09:14:31 +0000 (12:14 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 23 Aug 2016 09:14:31 +0000 (12:14 +0300)
Fixed bug #72598 (Reference is lost after array_slice())

NEWS
Zend/tests/bug72598.phpt [new file with mode: 0644]
Zend/tests/bug72598_2.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 31eded8861cafef419a73af4a611e5e20d695d83..ca0f198f945b4063ce3c6c5b058f0cee58b183d4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2016, PHP 7.1.0RC1
 
+- Core:
+  . Fixed bug #72598 (Reference is lost after array_slice()) (Nikita)
+
 -GD:
   . Fixed bug #66005 (imagecopy does not support 1bit transparency on truecolor
     images). (cmb)
diff --git a/Zend/tests/bug72598.phpt b/Zend/tests/bug72598.phpt
new file mode 100644 (file)
index 0000000..dfb09a0
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Bug #72598 (Reference is lost after array_slice())
+--FILE--
+<?php
+function ref(&$ref) {
+       var_dump($ref);
+}
+
+new class {
+        function __construct() {
+                $args = [&$this];
+                for ($i = 0; $i < 2; $i++) {
+                        $a = array_slice($args, 0, 1);
+                        call_user_func_array('ref', $a);
+                }
+        }
+};
+?>
+--EXPECTF--
+Warning: Parameter 1 to ref() expected to be a reference, value given in %sbug72598.php on line 11
+object(class@anonymous)#1 (0) {
+}
+
+Warning: Parameter 1 to ref() expected to be a reference, value given in %sbug72598.php on line 11
+object(class@anonymous)#1 (0) {
+}
diff --git a/Zend/tests/bug72598_2.phpt b/Zend/tests/bug72598_2.phpt
new file mode 100644 (file)
index 0000000..c394380
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+Bug #72598.2 (Reference is lost after array_slice())
+--FILE--
+<?php
+function ref(&$ref) {
+       var_dump($ref);
+       $ref = 1;
+}
+
+new class {
+        function __construct() {
+               $b = 0;
+                $args = [&$b];
+               unset($b);
+                for ($i = 0; $i < 2; $i++) {
+                        $a = array_slice($args, 0, 1);
+                        call_user_func_array('ref', $a);
+                }
+        }
+};
+?>
+--EXPECTF--
+Warning: Parameter 1 to ref() expected to be a reference, value given in %sbug72598_2.php on line 14
+int(0)
+
+Warning: Parameter 1 to ref() expected to be a reference, value given in %sbug72598_2.php on line 14
+int(0)