Browse Source

- Fix problem when inner constructor isn't called from derived constructor

(foound by david)
PHP-5.1
Marcus Boerger 22 years ago
parent
commit
b1326c1c24
  1. 10
      ext/spl/spl_iterators.c

10
ext/spl/spl_iterators.c

@ -634,8 +634,16 @@ SPL_METHOD(dual_it, getInnerIterator)
}
} /* }}} */
static INLINE void spl_dual_it_require(spl_dual_it_object *intern TSRMLS_DC)
{
if (!intern->inner.iterator) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "The inner constructor wasn't initialized with an iterator instance");
}
}
static INLINE void spl_dual_it_free(spl_dual_it_object *intern TSRMLS_DC)
{
spl_dual_it_require(intern TSRMLS_CC);
if (intern->inner.iterator && intern->inner.iterator->funcs->invalidate_current) {
intern->inner.iterator->funcs->invalidate_current(intern->inner.iterator TSRMLS_CC);
}
@ -698,6 +706,8 @@ static INLINE void spl_dual_it_next(spl_dual_it_object *intern, int do_free TSRM
{
if (do_free) {
spl_dual_it_free(intern TSRMLS_CC);
} else {
spl_dual_it_require(intern TSRMLS_CC);
}
intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC);
intern->current.pos++;

Loading…
Cancel
Save