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;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php