Browse Source

- Fix coverity issue 49: ce might be forwarded as NULL without an exception

being thrown in case the Zend API is being used wrong (in custom exts for
  instance).
migration/RELEASE_1_0_0
Marcus Boerger 21 years ago
parent
commit
36b3b8ef63
  1. 17
      Zend/zend_interfaces.c

17
Zend/zend_interfaces.c

@ -292,18 +292,23 @@ static zend_object_iterator *zend_user_it_get_iterator(zend_class_entry *ce, zva
/* {{{ zend_user_it_get_new_iterator */
ZEND_API zend_object_iterator *zend_user_it_get_new_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC)
{
zval *iterator = zend_user_it_new_iterator(ce, object TSRMLS_CC);
zval *iterator;
zend_object_iterator *new_iterator;
if (!ce) {
zend_error(E_ERROR, "Cannot create iterator without knowing the class type");
return NULL;
}
iterator = zend_user_it_new_iterator(ce, object TSRMLS_CC);
zend_class_entry *ce_it = iterator && Z_TYPE_P(iterator) == IS_OBJECT ? Z_OBJCE_P(iterator) : NULL;
if (!ce || !ce_it || !ce_it->get_iterator || (ce_it->get_iterator == zend_user_it_get_new_iterator && iterator == object)) {
if (!EG(exception))
{
if (!ce_it || !ce_it->get_iterator || (ce_it->get_iterator == zend_user_it_get_new_iterator && iterator == object)) {
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Objects returned by %v::getIterator() must be traversable or implement interface Iterator", ce->name);
}
if (iterator)
{
if (iterator) {
zval_ptr_dtor(&iterator);
}
return NULL;

Loading…
Cancel
Save