summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xext/pdo/pdo_dbh.c11
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c19
2 files changed, 22 insertions, 8 deletions
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index 2616af500a..b61200d613 100755
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -657,6 +657,17 @@ static void pdo_dbh_free_storage(zend_object *object TSRMLS_DC)
}
dbh->methods->closer(dbh TSRMLS_CC);
+
+ if (dbh->data_source) {
+ efree((char *)dbh->data_source);
+ }
+ if (dbh->username) {
+ efree(dbh->username);
+ }
+ if (dbh->password) {
+ efree(dbh->password);
+ }
+
efree(dbh);
}
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 95ceff294d..334bf2e016 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -83,14 +83,17 @@ static int pdo_pgsql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *in
static int pgsql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
{
pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
-
- if (H->server) {
- PQfinish(H->server);
- H->server = NULL;
- }
- if (H->einfo.errmsg) {
- efree(H->einfo.errmsg);
- H->einfo.errmsg = NULL;
+ if (H) {
+ if (H->server) {
+ PQfinish(H->server);
+ H->server = NULL;
+ }
+ if (H->einfo.errmsg) {
+ efree(H->einfo.errmsg);
+ H->einfo.errmsg = NULL;
+ }
+ pefree(H, dbh->is_persistent);
+ H = NULL;
}
return 0;
}