From 767f924665a29a9bc01241c5dfa25387e58c1193 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) --- ext/spl/spl_fixedarray.c | 7 +++++++ ext/spl/tests/bug54970.phpt | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 ext/spl/tests/bug54970.phpt diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index fc282b4075..34cb69cccd 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -154,6 +154,8 @@ static HashTable* spl_fixedarray_object_get_properties(zval *obj TSRMLS_DC) /* { int i = 0; if (intern->array) { + int j = zend_hash_num_elements(ht); + for (i = 0; i < intern->array->size; i++) { if (intern->array->elements[i]) { zend_hash_index_update(ht, i, (void *)&intern->array->elements[i], sizeof(zval *), NULL); @@ -166,6 +168,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(ht, i); + } + } } return ht; 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