[asterisk-commits] rmudgett: branch 1.8 r332816 - /branches/1.8/res/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Aug 22 13:15:03 CDT 2011
Author: rmudgett
Date: Mon Aug 22 13:14:59 2011
New Revision: 332816
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=332816
Log:
Memory leaks in realtime_multi_xxx() when database access returns error.
* Fix realtime_multi_pgsql() configuration memory leak when the database
access returns an error.
* Fix realtime_multi_odbc() configuration category use after free when the
database access returns an error.
Modified:
branches/1.8/res/res_config_odbc.c
branches/1.8/res/res_config_pgsql.c
Modified: branches/1.8/res/res_config_odbc.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/res/res_config_odbc.c?view=diff&rev=332816&r1=332815&r2=332816
==============================================================================
--- branches/1.8/res/res_config_odbc.c (original)
+++ branches/1.8/res/res_config_odbc.c Mon Aug 22 13:14:59 2011
@@ -419,7 +419,7 @@
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Describe Column error!\n[%s]\n\n", sql);
ast_category_destroy(cat);
- continue;
+ goto next_sql_fetch;
}
indicator = 0;
@@ -430,7 +430,7 @@
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
ast_log(LOG_WARNING, "SQL Get Data error!\n[%s]\n\n", sql);
ast_category_destroy(cat);
- continue;
+ goto next_sql_fetch;
}
stringp = rowdata;
while (stringp) {
@@ -448,6 +448,7 @@
}
}
ast_category_append(cfg, cat);
+next_sql_fetch:;
}
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
Modified: branches/1.8/res/res_config_pgsql.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/res/res_config_pgsql.c?view=diff&rev=332816&r1=332815&r2=332816
==============================================================================
--- branches/1.8/res/res_config_pgsql.c (original)
+++ branches/1.8/res/res_config_pgsql.c Mon Aug 22 13:14:59 2011
@@ -474,6 +474,7 @@
PQfinish(pgsqlConn);
pgsqlConn = NULL;
}
+ ast_config_destroy(cfg);
return NULL;
}
@@ -494,6 +495,7 @@
if (pgresult) {
ast_log(LOG_ERROR, "Postgres detected invalid input: '%s'\n", newval);
va_end(ap);
+ ast_config_destroy(cfg);
return NULL;
}
@@ -509,6 +511,7 @@
if (pgresult) {
ast_log(LOG_ERROR, "Postgres detected invalid input: '%s'\n", newval);
va_end(ap);
+ ast_config_destroy(cfg);
return NULL;
}
@@ -525,6 +528,7 @@
ast_mutex_lock(&pgsql_lock);
if (!pgsql_reconnect(database)) {
ast_mutex_unlock(&pgsql_lock);
+ ast_config_destroy(cfg);
return NULL;
}
@@ -534,6 +538,7 @@
ast_debug(1, "PostgreSQL RealTime: Query: %s\n", ast_str_buffer(sql));
ast_debug(1, "PostgreSQL RealTime: Query Failed because: %s\n", PQerrorMessage(pgsqlConn));
ast_mutex_unlock(&pgsql_lock);
+ ast_config_destroy(cfg);
return NULL;
} else {
ExecStatusType result_status = PQresultStatus(result);
@@ -547,6 +552,7 @@
PQresultErrorMessage(result), PQresStatus(result_status));
PQclear(result);
ast_mutex_unlock(&pgsql_lock);
+ ast_config_destroy(cfg);
return NULL;
}
}
@@ -564,6 +570,7 @@
if (!(fieldnames = ast_calloc(1, numFields * sizeof(char *)))) {
PQclear(result);
ast_mutex_unlock(&pgsql_lock);
+ ast_config_destroy(cfg);
return NULL;
}
for (i = 0; i < numFields; i++)
More information about the asterisk-commits
mailing list