cvs: php-src /ext/pdo pdo_dbh.c pdo_stmt.c

From: Date: Thu, 07 Jul 2005 11:19:57 +0000
Subject: cvs: php-src /ext/pdo pdo_dbh.c pdo_stmt.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-32739@lists.php.net to get a copy of this message
dmitry Thu Jul 7 07:19:57 2005 EDT Modified files: /php-src/ext/pdo pdo_dbh.c pdo_stmt.c Log: Fixed memory leaks http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_dbh.c?r1=1.76&r2=1.77&ty=u Index: php-src/ext/pdo/pdo_dbh.c diff -u php-src/ext/pdo/pdo_dbh.c:1.76 php-src/ext/pdo/pdo_dbh.c:1.77 --- php-src/ext/pdo/pdo_dbh.c:1.76 Sat Jun 11 08:36:12 2005 +++ php-src/ext/pdo/pdo_dbh.c Thu Jul 7 07:19:56 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_dbh.c,v 1.76 2005/06/11 12:36:12 wez Exp $ */ +/* $Id: pdo_dbh.c,v 1.77 2005/07/07 11:19:56 dmitry Exp $ */ /* The PDO Database Handle Class */ @@ -94,6 +94,7 @@ 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); @@ -162,7 +163,7 @@ 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(); @@ -174,6 +175,7 @@ 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); http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_stmt.c?r1=1.101&r2=1.102&ty=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.101 php-src/ext/pdo/pdo_stmt.c:1.102 --- php-src/ext/pdo/pdo_stmt.c:1.101 Sat Jul 2 23:49:44 2005 +++ php-src/ext/pdo/pdo_stmt.c Thu Jul 7 07:19:56 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_stmt.c,v 1.101 2005/07/03 03:49:44 wez Exp $ */ +/* $Id: pdo_stmt.c,v 1.102 2005/07/07 11:19:56 dmitry Exp $ */ /* The PDO Statement Handle Class */ @@ -690,7 +690,7 @@ 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; } @@ -897,6 +897,7 @@ 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; @@ -911,13 +912,17 @@ #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 } @@ -1902,7 +1907,7 @@ } if (I->fetch_ahead) { - ZVAL_DELREF(I->fetch_ahead); + zval_ptr_dtor(&I->fetch_ahead); } efree(I); @@ -1918,7 +1923,6 @@ 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) { @@ -1926,11 +1930,7 @@ 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, @@ -1950,7 +1950,7 @@ 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; }

« previous php.cvs (#32739) next »