summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTjerk Meesters <datibbaw@php.net>2014-07-30 17:54:09 +0800
committerTjerk Meesters <datibbaw@php.net>2014-07-30 18:15:14 +0800
commitda3add26cf7d9eec2023fdd3e52550ccb49aa74c (patch)
treefc7a69fc2e949c09c3d87edda6266c240edc13ee
parentab6c1d21f9cec83eac21a8930fdfc5acb5850da8 (diff)
downloadphp-git-da3add26cf7d9eec2023fdd3e52550ccb49aa74c.tar.gz
Fixed bug #67693 - incorrect push to the empty array
-rw-r--r--ext/standard/array.c2
-rw-r--r--ext/standard/tests/array/bug67693.phpt25
2 files changed, 26 insertions, 1 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index c2efca58fc..06cac0e646 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2020,7 +2020,7 @@ static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
if (should_rehash) {
zend_hash_rehash(Z_ARRVAL_P(stack));
}
- } else if (!key_len && index >= Z_ARRVAL_P(stack)->nNextFreeElement - 1) {
+ } else if (!key_len && Z_ARRVAL_P(stack)->nNextFreeElement > 0 && index >= Z_ARRVAL_P(stack)->nNextFreeElement - 1) {
Z_ARRVAL_P(stack)->nNextFreeElement = Z_ARRVAL_P(stack)->nNextFreeElement - 1;
}
diff --git a/ext/standard/tests/array/bug67693.phpt b/ext/standard/tests/array/bug67693.phpt
new file mode 100644
index 0000000000..516436c511
--- /dev/null
+++ b/ext/standard/tests/array/bug67693.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #67693 - incorrect push to empty array
+--FILE--
+<?php
+
+$array = array(-1 => 0);
+
+array_pop($array);
+
+array_push($array, 0);
+array_push($array, 0);
+
+var_dump($array);
+
+echo"\nDone";
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ int(0)
+}
+
+Done