From 47315dfdf6c414d291a8322cb07dd8c544074171 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 2 Jun 2011 00:40:27 +0000 Subject: [PATCH] - Fixed bug #54970 (SplFixedArray::setSize() isn't resizing) --- NEWS | 1 + ext/spl/spl_fixedarray.c | 7 +++++++ ext/spl/tests/bug54970.phpt | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 ext/spl/tests/bug54970.phpt diff --git a/NEWS b/NEWS index 8dae6c4b7d..9f1a977a5c 100644 --- a/NEWS +++ b/NEWS @@ -154,6 +154,7 @@ PHP NEWS . Fixed bug #51958 (socket_accept() fails on IPv6 server sockets). (Gustavo) - SPL extension: + . Fixed bug #54970 (SplFixedArray::setSize() isn't resizing). (Felipe) . Fixed bug #54384 (Dual iterators, GlobIterator, SplFileObject and SplTempFileObject crash when user-space classes don't call the paren constructor). (Gustavo) diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index 791ba216db..87a3a02f93 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -153,6 +153,8 @@ static HashTable* spl_fixedarray_object_get_properties(zval *obj TSRMLS_DC) /* { int i = 0; if (intern->array) { + int j = zend_hash_num_elements(intern->std.properties); + for (i = 0; i < intern->array->size; i++) { if (intern->array->elements[i]) { zend_hash_index_update(intern->std.properties, i, (void *)&intern->array->elements[i], sizeof(zval *), NULL); @@ -165,6 +167,11 @@ static HashTable* spl_fixedarray_object_get_properties(zval *obj TSRMLS_DC) /* { Z_ADDREF_P(EG(uninitialized_zval_ptr)); } } + if (j > intern->array->size) { + for (i = intern->array->size; i < j; ++i) { + zend_hash_index_del(intern->std.properties, i); + } + } } return intern->std.properties; diff --git a/ext/spl/tests/bug54970.phpt b/ext/spl/tests/bug54970.phpt new file mode 100644 index 0000000000..62b1eedb5b --- /dev/null +++ b/ext/spl/tests/bug54970.phpt @@ -0,0 +1,33 @@ +--TEST-- +Bug #54970 (SplFixedArray::setSize() isn't resizing) +--FILE-- +setSize(3); +$fa[2] = '!'; +var_dump($fa); +$fa->setSize(2); +var_dump($fa); +var_dump($fa->getSize()); + + +?> +--EXPECTF-- +object(SplFixedArray)#%d (3) { + [0]=> + string(5) "Hello" + [1]=> + string(5) "World" + [2]=> + string(1) "!" +} +object(SplFixedArray)#%d (2) { + [0]=> + string(5) "Hello" + [1]=> + string(5) "World" +} +int(2) -- 2.40.0