summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2016-04-28 11:02:47 +0200
committerAnatol Belski <ab@php.net>2016-04-28 19:24:13 +0200
commitee2c9065d8c6dfbefb32273d409b583fcbf1977d (patch)
treed3cd0bcdf73861cf6fea3cbebec4bf2bcdeb4521
parent75fa8842f4b64f60db65474cb5d3ca9f40875725 (diff)
downloadphp-git-ee2c9065d8c6dfbefb32273d409b583fcbf1977d.tar.gz
Fixed bug #72116 (7.0.6 array_fill optimization breaks implementation)
-rw-r--r--ext/standard/array.c1
-rw-r--r--ext/standard/tests/array/bug72116.phpt18
2 files changed, 19 insertions, 0 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index a0cdd91d85..d3bb9bc700 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2029,6 +2029,7 @@ PHP_FUNCTION(array_fill)
Z_ARRVAL_P(return_value)->nNumUsed = start_key + num;
Z_ARRVAL_P(return_value)->nNumOfElements = num;
Z_ARRVAL_P(return_value)->nInternalPointer = start_key;
+ Z_ARRVAL_P(return_value)->nNextFreeElement = start_key + num;
if (Z_REFCOUNTED_P(val)) {
GC_REFCOUNT(Z_COUNTED_P(val)) += num;
diff --git a/ext/standard/tests/array/bug72116.phpt b/ext/standard/tests/array/bug72116.phpt
new file mode 100644
index 0000000000..7951f69130
--- /dev/null
+++ b/ext/standard/tests/array/bug72116.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #72116 (insertion after array_fill fails)
+--FILE--
+<?php
+
+$x = array_fill(0, 1, '..');
+$x[] = 'a';
+var_dump($x);
+
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ string(2) ".."
+ [1]=>
+ string(1) "a"
+}
+