summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTjerk Meesters <datibbaw@php.net>2014-09-09 18:03:10 +0800
committerTjerk Meesters <datibbaw@php.net>2014-09-09 18:03:10 +0800
commit7e9daf60c1abe768f5337b3417d17b1809077338 (patch)
treec2426d9fb4130e8d4ba285f70a5715273758f9d8
parent8d1099ac0574f3a42036085641c2df03a1d5f731 (diff)
parentb9ac5e23fb1b347b5eab250832999e291d65807a (diff)
downloadphp-git-7e9daf60c1abe768f5337b3417d17b1809077338.tar.gz
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: Fixed #67985 - Incorrect last used array index copied to new array after unset
-rw-r--r--Zend/tests/bug67985.phpt16
-rw-r--r--Zend/zend_variables.c1
2 files changed, 17 insertions, 0 deletions
diff --git a/Zend/tests/bug67985.phpt b/Zend/tests/bug67985.phpt
new file mode 100644
index 0000000000..6f032643f4
--- /dev/null
+++ b/Zend/tests/bug67985.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #67985 - Last used array index not copied to new array at assignment
+--FILE--
+<?php
+
+$a = ['zero', 'one', 'two'];
+unset($a[2]);
+$b = $a;
+$a[] = 'three';
+$b[] = 'three';
+
+var_dump($a === $b);
+
+?>
+--EXPECT--
+bool(true)
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index 0f9e184b7e..8a41902a97 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -138,6 +138,7 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC)
ALLOC_HASHTABLE_REL(tmp_ht);
zend_hash_init(tmp_ht, zend_hash_num_elements(original_ht), NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(tmp_ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+ tmp_ht->nNextFreeElement = original_ht->nNextFreeElement;
zvalue->value.ht = tmp_ht;
}
break;