summaryrefslogtreecommitdiff
path: root/ext/spl/spl_engine.h
diff options
context:
space:
mode:
authorTjerk Meesters <datibbaw@php.net>2014-10-06 09:40:39 +0800
committerTjerk Meesters <datibbaw@php.net>2014-10-14 22:49:01 +0800
commit71ba533640a33bf6d034637ad68c145dec3180ba (patch)
tree9a995c6b0bdd6f6b326a315fc8d7aaecf7f01d61 /ext/spl/spl_engine.h
parentb73ef0ee4a8276734f6df180148dce2f445950ed (diff)
downloadphp-git-71ba533640a33bf6d034637ad68c145dec3180ba.tar.gz
Fixed bug #68128
Three issues are addressed: - RecursiveRegexIterator::accept() should accept non-empty arrays without applying any regular expression and RegexIterator::accept() should not accept an array. - RegexIterator::accept() should not accept an atom that fails to match anything, even when PREG_PATTERN_ORDER is used (which would return an array of empty arrays). - RecursiveRegexIterator::getChildren() should pass all constructor arguments to its child iterator instead of just the regular expression.
Diffstat (limited to 'ext/spl/spl_engine.h')
-rw-r--r--ext/spl/spl_engine.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/ext/spl/spl_engine.h b/ext/spl/spl_engine.h
index a67e60c105..473438bb7a 100644
--- a/ext/spl/spl_engine.h
+++ b/ext/spl/spl_engine.h
@@ -49,6 +49,41 @@ static inline int spl_instantiate_arg_ex2(zend_class_entry *pce, zval **retval,
}
/* }}} */
+/* {{{ spl_instantiate_arg_n */
+static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval **retval, int argc, zval ***argv TSRMLS_DC)
+{
+ zend_function *func = pce->constructor;
+ zend_fcall_info fci;
+ zend_fcall_info_cache fcc;
+ zval *dummy;
+ zval z_name;
+
+ spl_instantiate(pce, retval, 0 TSRMLS_CC);
+
+ ZVAL_STRING(&z_name, func->common.function_name, 0);
+
+ fci.size = sizeof(zend_fcall_info);
+ fci.function_table = &pce->function_table;
+ fci.function_name = &z_name;
+ fci.object_ptr = *retval;
+ fci.symbol_table = NULL;
+ fci.retval_ptr_ptr = &dummy;
+ fci.param_count = argc;
+ fci.params = argv;
+ fci.no_separation = 1;
+
+ fcc.initialized = 1;
+ fcc.function_handler = func;
+ fcc.calling_scope = EG(scope);
+ fcc.called_scope = pce;
+ fcc.object_ptr = *retval;
+
+ zend_call_function(&fci, &fcc TSRMLS_CC);
+
+ zval_ptr_dtor(&dummy);
+}
+/* }}} */
+
#endif /* SPL_ENGINE_H */
/*