if (info) {
zend_update_property(pdo_ex, ex, "errorInfo", sizeof("errorInfo")-1, info TSRMLS_CC);
+ zval_ptr_dtor(&info);
}
zend_throw_exception_object(ex TSRMLS_CC);
if (info) {
zval_ptr_dtor(&info);
}
- } else {
+ } else if (EG(exception) == NULL) {
zval *ex;
zend_class_entry *def_ex = zend_exception_get_default(), *pdo_ex = php_pdo_get_exception();
if (info) {
zend_update_property(pdo_ex, ex, "errorInfo", sizeof("errorInfo")-1, info TSRMLS_CC);
+ zval_ptr_dtor(&info);
}
zend_throw_exception_object(ex TSRMLS_CC);
stmt->fetch.cls.ctor_args = NULL;
stmt->fetch.cls.fci.param_count = 0;
}
- if (stmt->fetch.func.values && free_ctor_agrs) {
+ if (stmt->fetch.func.values) {
FREE_ZVAL(stmt->fetch.func.values);
stmt->fetch.func.values = NULL;
}
zend_update_property(ce, return_value,
stmt->columns[i].name, stmt->columns[i].namelen,
val TSRMLS_CC);
+ zval_ptr_dtor(&val);
} else {
#ifdef MBO_0
php_unserialize_data_t var_hash;
#endif
#if PHP_MAJOR_VERSION > 5 || PHP_MINOR_VERSION >= 1
if (!ce->unserialize) {
+ zval_ptr_dtor(&val);
pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "cannot unserialize class" TSRMLS_CC);
return 0;
} else if (ce->unserialize(&return_value, ce, Z_TYPE_P(val) == IS_STRING ? Z_STRVAL_P(val) : "", Z_TYPE_P(val) == IS_STRING ? Z_STRLEN_P(val) : 0, NULL TSRMLS_CC) == FAILURE) {
+ zval_ptr_dtor(&val);
pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "cannot unserialize class" TSRMLS_CC);
zval_dtor(return_value);
ZVAL_NULL(return_value);
return 0;
+ } else {
+ zval_ptr_dtor(&val);
}
#endif
}
}
if (I->fetch_ahead) {
- ZVAL_DELREF(I->fetch_ahead);
+ zval_ptr_dtor(&I->fetch_ahead);
}
efree(I);
static void pdo_stmt_iter_get_data(zend_object_iterator *iter, zval ***data TSRMLS_DC)
{
struct php_pdo_iterator *I = (struct php_pdo_iterator*)iter->data;
- zval **ptr_ptr;
/* sanity */
if (!I->fetch_ahead) {
return;
}
- ptr_ptr = emalloc(sizeof(*ptr_ptr)); /* leaks somewhere */
- *ptr_ptr = I->fetch_ahead;
- ZVAL_ADDREF(I->fetch_ahead);
-
- *data = ptr_ptr;
+ *data = &I->fetch_ahead;
}
static int pdo_stmt_iter_get_key(zend_object_iterator *iter, char **str_key, uint *str_key_len,
struct php_pdo_iterator *I = (struct php_pdo_iterator*)iter->data;
if (I->fetch_ahead) {
- ZVAL_DELREF(I->fetch_ahead);
+ zval_ptr_dtor(&I->fetch_ahead);
I->fetch_ahead = NULL;
}