summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2013-06-09 22:25:49 +0800
committerXinchen Hui <laruence@php.net>2013-06-09 22:25:49 +0800
commit3f229f43644bcf450c43103364cc8a800961c45e (patch)
tree37d1a38ac0d4ad49366af62e3091eada93ca5707 /ext
parentb839e6921da08adf1d8413cea5c2a21da069e23e (diff)
parentfdd73796866cd95ffc3af1864509c2af8d983949 (diff)
downloadphp-git-3f229f43644bcf450c43103364cc8a800961c45e.tar.gz
Merge branch 'PHP-5.4' into PHP-5.5
Diffstat (limited to 'ext')
-rw-r--r--ext/spl/spl_iterators.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index fcb4d20a63..25b8b4c126 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -1013,12 +1013,12 @@ static void spl_recursive_tree_iterator_get_entry(spl_recursive_it_object * obje
zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling TSRMLS_CC);
if (data && *data) {
RETVAL_ZVAL(*data, 1, 0);
- }
- if (Z_TYPE_P(return_value) == IS_ARRAY) {
- zval_dtor(return_value);
- ZVAL_STRINGL(return_value, "Array", sizeof("Array")-1, 1);
- } else {
- convert_to_string(return_value);
+ if (Z_TYPE_P(return_value) == IS_ARRAY) {
+ zval_dtor(return_value);
+ ZVAL_STRINGL(return_value, "Array", sizeof("Array")-1, 1);
+ } else {
+ convert_to_string(return_value);
+ }
}
zend_restore_error_handling(&error_handling TSRMLS_CC);
}
@@ -1119,8 +1119,15 @@ SPL_METHOD(RecursiveTreeIterator, current)
}
}
+ INIT_ZVAL(prefix);
+ INIT_ZVAL(entry);
spl_recursive_tree_iterator_get_prefix(object, &prefix TSRMLS_CC);
spl_recursive_tree_iterator_get_entry(object, &entry TSRMLS_CC);
+ if (Z_TYPE(entry) != IS_STRING) {
+ zval_dtor(&prefix);
+ zval_dtor(&entry);
+ RETURN_NULL();
+ }
spl_recursive_tree_iterator_get_postfix(object, &postfix TSRMLS_CC);
str_len = Z_STRLEN(prefix) + Z_STRLEN(entry) + Z_STRLEN(postfix);