mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 18:19:30 +00:00
Merged revisions 332830 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r332830 | rmudgett | 2011-08-22 13:32:09 -0500 (Mon, 22 Aug 2011) | 15 lines Merged revisions 332816 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r332816 | rmudgett | 2011-08-22 13:14:59 -0500 (Mon, 22 Aug 2011) | 8 lines 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. ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@332831 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -419,7 +419,7 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
||||
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 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
||||
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 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
||||
}
|
||||
}
|
||||
ast_category_append(cfg, cat);
|
||||
next_sql_fetch:;
|
||||
}
|
||||
|
||||
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
|
||||
|
@@ -566,6 +566,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
|
||||
PQfinish(pgsqlConn);
|
||||
pgsqlConn = NULL;
|
||||
}
|
||||
ast_config_destroy(cfg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -586,6 +587,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
|
||||
if (pgresult) {
|
||||
ast_log(LOG_ERROR, "PostgreSQL RealTime: detected invalid input: '%s'\n", newval);
|
||||
va_end(ap);
|
||||
ast_config_destroy(cfg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -601,6 +603,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
|
||||
if (pgresult) {
|
||||
ast_log(LOG_ERROR, "PostgreSQL RealTime: detected invalid input: '%s'\n", newval);
|
||||
va_end(ap);
|
||||
ast_config_destroy(cfg);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -618,6 +621,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
|
||||
|
||||
if (pgsql_exec(database, table, ast_str_buffer(sql), &result) != 0) {
|
||||
ast_mutex_unlock(&pgsql_lock);
|
||||
ast_config_destroy(cfg);
|
||||
return NULL;
|
||||
} else {
|
||||
ExecStatusType result_status = PQresultStatus(result);
|
||||
@@ -631,6 +635,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
|
||||
PQresultErrorMessage(result), PQresStatus(result_status));
|
||||
PQclear(result);
|
||||
ast_mutex_unlock(&pgsql_lock);
|
||||
ast_config_destroy(cfg);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -648,6 +653,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
|
||||
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++)
|
||||
|
Reference in New Issue
Block a user