From: Russell Bryant Date: Wed, 17 Jan 2007 23:31:11 +0000 (+0000) Subject: Fix some instances where when loading func_odbc, a double-free could occur. X-Git-Tag: 1.4.1~261 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8d0defa82be2bd51356c0f400811473b5a49f574;p=thirdparty%2Fasterisk.git Fix some instances where when loading func_odbc, a double-free could occur. Also, remove an unneeded error message. If the failure condition is actually a memory allocation failure, a log message will already be generated automatically. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@51205 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c index 529a342ff1..a03ccb1847 100644 --- a/funcs/func_odbc.c +++ b/funcs/func_odbc.c @@ -363,6 +363,8 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu if ((tmp = ast_variable_retrieve(cfg, catg, "dsn"))) { ast_copy_string((*query)->dsn, tmp, sizeof((*query)->dsn)); } else { + free(*query); + *query = NULL; return -1; } @@ -384,6 +386,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu (*query)->acf = ast_calloc(1, sizeof(struct ast_custom_function)); if (! (*query)->acf) { free(*query); + *query = NULL; return -1; } @@ -396,6 +399,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu if (!((*query)->acf->name)) { free((*query)->acf); free(*query); + *query = NULL; return -1; } @@ -405,6 +409,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu free((char *)(*query)->acf->name); free((*query)->acf); free(*query); + *query = NULL; return -1; } @@ -440,6 +445,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu free((char *)(*query)->acf->name); free((*query)->acf); free(*query); + *query = NULL; return -1; } @@ -496,7 +502,6 @@ static int odbc_load_module(void) struct acf_odbc_query *query = NULL; if (init_acf_query(cfg, catg, &query)) { - ast_log(LOG_ERROR, "Out of memory\n"); free_acf_query(query); } else { AST_LIST_INSERT_HEAD(&queries, query, list);