diff options
Diffstat (limited to 'ext/spl/spl_iterators.c')
-rwxr-xr-x | ext/spl/spl_iterators.c | 231 |
1 files changed, 230 insertions, 1 deletions
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 7904662697..c33ea4187d 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -562,6 +562,10 @@ SPL_METHOD(RecursiveIteratorIterator, __construct) SPL_METHOD(RecursiveIteratorIterator, rewind) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } spl_recursive_it_rewind_ex(object, getThis() TSRMLS_CC); } /* }}} */ @@ -571,6 +575,10 @@ SPL_METHOD(RecursiveIteratorIterator, rewind) SPL_METHOD(RecursiveIteratorIterator, valid) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } RETURN_BOOL(spl_recursive_it_valid_ex(object, getThis() TSRMLS_CC) == SUCCESS); } /* }}} */ @@ -581,6 +589,10 @@ SPL_METHOD(RecursiveIteratorIterator, key) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); zend_object_iterator *iterator = object->iterators[object->level].iterator; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } if (iterator->funcs->get_current_key) { char *str_key; @@ -609,6 +621,10 @@ SPL_METHOD(RecursiveIteratorIterator, current) spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); zend_object_iterator *iterator = object->iterators[object->level].iterator; zval **data; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } iterator->funcs->get_current_data(iterator, &data TSRMLS_CC); if (data && *data) { @@ -621,6 +637,10 @@ SPL_METHOD(RecursiveIteratorIterator, current) SPL_METHOD(RecursiveIteratorIterator, next) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } spl_recursive_it_move_forward_ex(object, getThis() TSRMLS_CC); } /* }}} */ @@ -631,6 +651,10 @@ SPL_METHOD(RecursiveIteratorIterator, getDepth) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } + RETURN_LONG(object->level); } /* }}} */ @@ -657,6 +681,10 @@ SPL_METHOD(RecursiveIteratorIterator, getInnerIterator) spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); long level = object->level; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + RETURN_ZVAL(object->iterators[level].zobject, 1, 0); } /* }}} */ @@ -664,6 +692,9 @@ SPL_METHOD(RecursiveIteratorIterator, getInnerIterator) Called when iteration begins (after first rewind() call) */ SPL_METHOD(RecursiveIteratorIterator, beginIteration) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } /* nothing to do */ } /* }}} */ @@ -671,6 +702,9 @@ SPL_METHOD(RecursiveIteratorIterator, beginIteration) Called when iteration ends (when valid() first returns false */ SPL_METHOD(RecursiveIteratorIterator, endIteration) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } /* nothing to do */ } /* }}} */ @@ -681,6 +715,10 @@ SPL_METHOD(RecursiveIteratorIterator, callHasChildren) spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); zend_class_entry *ce = object->iterators[object->level].ce; zval *retval, *zobject; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } zobject = object->iterators[object->level].zobject; if (!zobject) { @@ -702,6 +740,10 @@ SPL_METHOD(RecursiveIteratorIterator, callGetChildren) spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); zend_class_entry *ce = object->iterators[object->level].ce; zval *retval, *zobject; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } zobject = object->iterators[object->level].zobject; if (!zobject) { @@ -718,6 +760,9 @@ SPL_METHOD(RecursiveIteratorIterator, callGetChildren) Called when recursing one level down */ SPL_METHOD(RecursiveIteratorIterator, beginChildren) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } /* nothing to do */ } /* }}} */ @@ -725,6 +770,9 @@ SPL_METHOD(RecursiveIteratorIterator, beginChildren) Called when end recursing one level */ SPL_METHOD(RecursiveIteratorIterator, endChildren) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } /* nothing to do */ } /* }}} */ @@ -732,6 +780,9 @@ SPL_METHOD(RecursiveIteratorIterator, endChildren) Called when the next element is available */ SPL_METHOD(RecursiveIteratorIterator, nextElement) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } /* nothing to do */ } /* }}} */ @@ -758,6 +809,10 @@ SPL_METHOD(RecursiveIteratorIterator, getMaxDepth) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } + if (object->max_depth == -1) { RETURN_FALSE; } else { @@ -972,7 +1027,7 @@ SPL_METHOD(RecursiveTreeIterator, __construct) spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveTreeIterator, zend_ce_iterator, RIT_RecursiveTreeIterator); } /* }}} */ -/* {{{ proto void RecursiveTreeIterator::setPrefixPart() throws OutOfRangeException +/* {{{ proto void RecursiveTreeIterator::setPrefixPart(int part, string prefix) throws OutOfRangeException Sets prefix parts as used in getPrefix() */ SPL_METHOD(RecursiveTreeIterator, setPrefixPart) { @@ -999,6 +1054,9 @@ SPL_METHOD(RecursiveTreeIterator, getPrefix) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } spl_recursive_tree_iterator_get_prefix(object, return_value TSRMLS_CC); } /* }}} */ @@ -1008,6 +1066,10 @@ SPL_METHOD(RecursiveTreeIterator, getEntry) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } + spl_recursive_tree_iterator_get_entry(object, return_value TSRMLS_CC); } /* }}} */ @@ -1017,6 +1079,10 @@ SPL_METHOD(RecursiveTreeIterator, getPostfix) { spl_recursive_it_object *object = (spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } + spl_recursive_tree_iterator_get_postfix(object, return_value TSRMLS_CC); } /* }}} */ @@ -1028,6 +1094,10 @@ SPL_METHOD(RecursiveTreeIterator, current) zval prefix, entry, postfix; char *str, *ptr; size_t str_len; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } if (object->flags & RTIT_BYPASS_CURRENT) { zend_object_iterator *iterator = object->iterators[object->level].iterator; @@ -1073,6 +1143,10 @@ SPL_METHOD(RecursiveTreeIterator, key) zval prefix, key, postfix, key_copy; char *str, *ptr; size_t str_len; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } if (iterator->funcs->get_current_key) { char *str_key; @@ -1439,6 +1513,10 @@ SPL_METHOD(dual_it, getInnerIterator) spl_dual_it_object *intern; intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } if (intern->inner.zobject) { RETVAL_ZVAL(intern->inner.zobject, 1, 0); @@ -1539,6 +1617,11 @@ SPL_METHOD(dual_it, rewind) spl_dual_it_object *intern; intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + spl_dual_it_rewind(intern TSRMLS_CC); spl_dual_it_fetch(intern, 1 TSRMLS_CC); } /* }}} */ @@ -1552,6 +1635,10 @@ SPL_METHOD(dual_it, valid) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_BOOL(intern->current.data); @@ -1569,6 +1656,10 @@ SPL_METHOD(dual_it, key) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); if (intern->current.data) { @@ -1592,6 +1683,10 @@ SPL_METHOD(dual_it, key) SPL_METHOD(dual_it, current) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -1609,6 +1704,10 @@ SPL_METHOD(dual_it, current) SPL_METHOD(dual_it, next) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -1654,6 +1753,10 @@ static inline void spl_filter_it_next(zval *zthis, spl_dual_it_object *intern TS SPL_METHOD(FilterIterator, rewind) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); spl_filter_it_rewind(getThis(), intern TSRMLS_CC); @@ -1664,6 +1767,10 @@ SPL_METHOD(FilterIterator, rewind) SPL_METHOD(FilterIterator, next) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); spl_filter_it_next(getThis(), intern TSRMLS_CC); @@ -1682,6 +1789,10 @@ SPL_METHOD(RecursiveFilterIterator, hasChildren) { spl_dual_it_object *intern; zval *retval; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -1699,6 +1810,10 @@ SPL_METHOD(RecursiveFilterIterator, getChildren) { spl_dual_it_object *intern; zval *retval; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -1735,6 +1850,10 @@ SPL_METHOD(RegexIterator, accept) int subject_len, use_copy, count = 0, result_len; zval subject_copy, zcount, *replacement; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + if (intern->current.data == NULL) { RETURN_FALSE; } @@ -1828,6 +1947,10 @@ SPL_METHOD(RegexIterator, getMode) { spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } + RETURN_LONG(intern->u.regex.mode); } /* }}} */ @@ -1856,6 +1979,10 @@ SPL_METHOD(RegexIterator, getFlags) { spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + if (zend_parse_parameters_none() == FAILURE) { + return; + } + RETURN_LONG(intern->u.regex.flags); } /* }}} */ @@ -1878,6 +2005,10 @@ SPL_METHOD(RegexIterator, setFlags) SPL_METHOD(RegexIterator, getPregFlags) { spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } if (intern->u.regex.use_flags) { RETURN_LONG(intern->u.regex.preg_flags); @@ -1914,6 +2045,10 @@ SPL_METHOD(RecursiveRegexIterator, getChildren) { spl_dual_it_object *intern; zval *retval, *regex; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2354,6 +2489,10 @@ SPL_METHOD(CachingIterator, __construct) SPL_METHOD(CachingIterator, rewind) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2365,6 +2504,10 @@ SPL_METHOD(CachingIterator, rewind) SPL_METHOD(CachingIterator, valid) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2376,6 +2519,10 @@ SPL_METHOD(CachingIterator, valid) SPL_METHOD(CachingIterator, next) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2387,6 +2534,10 @@ SPL_METHOD(CachingIterator, next) SPL_METHOD(CachingIterator, hasNext) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2531,6 +2682,10 @@ SPL_METHOD(CachingIterator, getCache) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); if (!(intern->u.caching.flags & CIT_FULL_CACHE)) { @@ -2548,6 +2703,10 @@ SPL_METHOD(CachingIterator, getFlags) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_LONG(intern->u.caching.flags); @@ -2593,6 +2752,10 @@ SPL_METHOD(CachingIterator, count) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); if (!(intern->u.caching.flags & CIT_FULL_CACHE)) { @@ -2656,6 +2819,10 @@ SPL_METHOD(RecursiveCachingIterator, hasChildren) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_BOOL(intern->u.caching.zchildren); @@ -2666,6 +2833,10 @@ SPL_METHOD(RecursiveCachingIterator, hasChildren) SPL_METHOD(RecursiveCachingIterator, getChildren) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2721,6 +2892,9 @@ SPL_METHOD(NoRewindIterator, __construct) Prevent a call to inner iterators rewind() */ SPL_METHOD(NoRewindIterator, rewind) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } /* nothing to do */ } /* }}} */ @@ -2729,6 +2903,10 @@ SPL_METHOD(NoRewindIterator, rewind) SPL_METHOD(NoRewindIterator, valid) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_BOOL(intern->inner.iterator->funcs->valid(intern->inner.iterator TSRMLS_CC) == SUCCESS); @@ -2739,6 +2917,10 @@ SPL_METHOD(NoRewindIterator, valid) SPL_METHOD(NoRewindIterator, key) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2767,6 +2949,10 @@ SPL_METHOD(NoRewindIterator, current) { spl_dual_it_object *intern; zval **data; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); intern->inner.iterator->funcs->get_current_data(intern->inner.iterator, &data TSRMLS_CC); @@ -2780,6 +2966,10 @@ SPL_METHOD(NoRewindIterator, current) SPL_METHOD(NoRewindIterator, next) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC); @@ -2812,6 +3002,10 @@ SPL_METHOD(InfiniteIterator, __construct) SPL_METHOD(InfiniteIterator, next) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2836,12 +3030,18 @@ static const zend_function_entry spl_funcs_InfiniteIterator[] = { Does nothing */ SPL_METHOD(EmptyIterator, rewind) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } } /* }}} */ /* {{{ proto false EmptyIterator::valid() Return false */ SPL_METHOD(EmptyIterator, valid) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } RETURN_FALSE; } /* }}} */ @@ -2849,6 +3049,9 @@ SPL_METHOD(EmptyIterator, valid) Throws exception BadMethodCallException */ SPL_METHOD(EmptyIterator, key) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } zend_throw_exception(spl_ce_BadMethodCallException, "Accessing the key of an EmptyIterator", 0 TSRMLS_CC); } /* }}} */ @@ -2856,6 +3059,9 @@ SPL_METHOD(EmptyIterator, key) Throws exception BadMethodCallException */ SPL_METHOD(EmptyIterator, current) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } zend_throw_exception(spl_ce_BadMethodCallException, "Accessing the value of an EmptyIterator", 0 TSRMLS_CC); } /* }}} */ @@ -2863,6 +3069,9 @@ SPL_METHOD(EmptyIterator, current) Does nothing */ SPL_METHOD(EmptyIterator, next) { + if (zend_parse_parameters_none() == FAILURE) { + return; + } } /* }}} */ static const zend_function_entry spl_funcs_EmptyIterator[] = { @@ -2962,6 +3171,10 @@ SPL_METHOD(AppendIterator, append) SPL_METHOD(AppendIterator, rewind) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2977,6 +3190,10 @@ SPL_METHOD(AppendIterator, valid) { spl_dual_it_object *intern; + if (zend_parse_parameters_none() == FAILURE) { + return; + } + intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_BOOL(intern->current.data); @@ -2987,6 +3204,10 @@ SPL_METHOD(AppendIterator, valid) SPL_METHOD(AppendIterator, next) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -2998,6 +3219,10 @@ SPL_METHOD(AppendIterator, next) SPL_METHOD(AppendIterator, getIteratorIndex) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); @@ -3010,6 +3235,10 @@ SPL_METHOD(AppendIterator, getIteratorIndex) SPL_METHOD(AppendIterator, getArrayIterator) { spl_dual_it_object *intern; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC); |